数据结构课程设计 火车订票系统
火车售票系统c课程设计

火车售票系统c 课程设计一、课程目标知识目标:1. 学生能理解火车售票系统的基本原理和功能需求,掌握系统设计的基本流程。
2. 学生能运用所学编程语言(如C语言)实现售票系统的功能模块,如用户界面、票务查询、购票、支付等。
3. 学生了解数据库原理,能运用数据库技术进行票务数据存储和管理。
技能目标:1. 学生掌握系统分析与设计的方法,能运用结构化分析方法进行问题求解。
2. 学生掌握C语言编程技巧,能编写规范、高效的代码实现系统功能。
3. 学生具备团队协作能力,能在小组合作中发挥个人特长,共同完成项目任务。
情感态度价值观目标:1. 学生通过课程学习,培养对计算机科学的兴趣和热情,提高信息素养。
2. 学生在项目实践中,学会分析问题、解决问题,增强自信心和自主学习能力。
3. 学生树立正确的价值观,认识到科技对社会发展的作用,关注社会热点问题。
课程性质:本课程为信息技术课程,旨在通过火车售票系统项目设计,培养学生编程能力、团队协作能力和问题解决能力。
学生特点:学生具备一定的C语言基础,对编程有一定兴趣,喜欢动手实践,但个别学生可能缺乏团队协作经验。
教学要求:注重理论与实践相结合,以项目为导向,引导学生主动探究,培养其编程技能和实际操作能力。
同时,关注学生情感态度的培养,使其在学习过程中形成积极的价值观。
通过分解课程目标为具体的学习成果,便于教学设计和评估,确保课程目标的达成。
二、教学内容1. 火车售票系统概述:介绍火车售票系统的基本原理、功能模块及系统架构,关联课本第三章内容。
- 系统需求分析- 功能模块划分- 系统架构设计2. C语言编程基础:回顾C语言基础知识,为后续编程实践打下基础,关联课本第二章内容。
- 数据类型与运算符- 控制结构(分支、循环)- 函数与数组3. 数据库原理与应用:介绍数据库基本概念,学会运用数据库进行票务数据管理,关联课本第五章内容。
- 数据库基本概念- 数据表设计与创建- SQL语句操作4. 系统功能实现:根据需求分析,利用C语言和数据库技术实现火车售票系统功能,关联课本第六章内容。
课程设计一火车售票系统

数据结构与算法课程实验报告课程设计一:火车售票系统设计及实现姓名:cll班级:学号:一、实验内容:火车售票系统在现实中的应用已经非常普遍,目前通常使用可视化的方法实现,例如采用C/S模式下的程序设计或者采用B/S模式下的程序设计,通常都具有较为友好的界面和较为完善的功能。
火车售票系统的实现过程中,主要涉及到数据格式的设计,也就是数据结构的设计。
通常在采用数据库的情况下,可以运用数据库的设计来实现。
在没有采用数据库情况下需要,单独设计相应数据结构和算法。
二、实验目的:按给定需求,通过查找相关资料,完成火车售票系统设计及实现,在设计过程中充分运用数据结构与算法课程中所学知识,从而熟练地掌握和应用线性表、单链表等重要数据结构和常用算法。
提前熟悉软件需求分析,软件测试等环节,运用相应程序设计语言实现该系统,从而进一步提高程序设计能力。
三、问题描述(1)此系统可以实现售票、退票、车票剩余情况查询等功能。
(2)每张车票包含车次、座位信息。
在售票、退票、查询剩余票等环节中,都必须显示出车票的信息,即车次、座位情况。
(3)退票时,必须是车站售出的车票才能退,否则视为无效票,不能退票。
(4)演示程序以用户和计算机的对话方式进行,即在计算机终端上显示“提示信息”之后,由用户在键盘上输入程序中规定的运算命令;相应的输入数据(滤去输入中的非法字符)和运算结果显示在后。
(5)由订票系统的主要功能使程序的命令包括:1)查询;2)订票;3)退票4)退出订票系统四、问题的实现4.1所用的数据结构(包括所用数据结构的抽象数据类型定义和说明)typedef struct LNode{//数据域char name[10];//订票姓名int dnum;//订票数量char dj[50];//证件编号int zhekou; //1代表折扣对象float pay;//付费struct LNode *next;//指针域int zuohao[200];}LNode,*LinkList;//构造单链表(已订票)typedef struct Tickets{char *endname;//终点站名char *hnum;//车次名int fnum;//票价float discut;//折扣int day;//日期int wholenum;//总票额int lastnum;//余票量int tuipiao[100]; //退票处理,记录退票的座位号int tpcs;//记录目前退票次数int mcps;//记录卖出去的票数(包括退票)LinkList la;//已订票链表}Tickets;//构造结构类型(火车票)typedef struct{struct Tickets *elem;//存储空间的基址int length;int listsize;//当前分配的存储容量(以sizeof(Tickets)为单位)}SqList;//构造顺序表4.2主要实现思路1、火车站的火车票采用顺序表表示。
火车订票系统课程设计

火车订票系统课程设计一、课程目标知识目标:1. 让学生掌握火车订票系统的基本原理和功能模块;2. 帮助学生了解数据库在火车订票系统中的应用;3. 引导学生理解火车票的查询、预订、支付等业务流程。
技能目标:1. 培养学生运用所学知识设计简单的火车订票系统功能模块;2. 提高学生分析问题、解决问题的能力;3. 培养学生团队协作和沟通表达的能力。
情感态度价值观目标:1. 激发学生对计算机科学与技术学科的兴趣和热情;2. 培养学生关注社会热点问题,关注信息技术在生活中的应用;3. 引导学生树立正确的价值观,认识到科技改变生活的重要性。
课程性质:本课程为信息技术与学科整合的实践性课程,结合实际生活中的火车订票系统,让学生在实践中掌握计算机科学与技术的基本知识和技能。
学生特点:六年级学生对计算机有一定的基础,具备一定的操作能力和逻辑思维能力,对新鲜事物充满好奇心。
教学要求:注重理论知识与实践操作相结合,以学生为主体,教师为主导,鼓励学生积极参与讨论和实践活动,提高学生的动手能力和创新能力。
通过本课程的学习,使学生能够将所学知识应用于实际问题的解决中。
二、教学内容1. 火车订票系统概述:介绍火车订票系统的基本概念、发展历程和在我国的应用现状。
相关教材章节:第三章 计算机网络应用2. 火车订票系统功能模块:分析火车订票系统的功能模块,包括用户注册、登录、查询、预订、支付、改签、退票等。
相关教材章节:第四章 数据库应用3. 数据库在火车订票系统中的应用:讲解数据库的基本概念,以及如何在火车订票系统中设计数据库表、实现数据存储和查询。
相关教材章节:第五章 数据库设计4. 火车票查询与预订:详细介绍火车票查询与预订的业务流程,包括车次查询、余票查询、预订车票等。
相关教材章节:第六章 互联网编程5. 火车订票系统设计与实现:引导学生运用所学知识,设计并实现一个简单的火车订票系统。
相关教材章节:第七章 网络编程实践教学进度安排:第一课时:火车订票系统概述第二课时:火车订票系统功能模块第三课时:数据库在火车订票系统中的应用第四课时:火车票查询与预订第五课时:火车订票系统设计与实现教学内容确保科学性和系统性,注重理论与实践相结合,使学生在掌握基本知识的基础上,能够运用所学技能解决实际问题。
数据库课程设计实验报告-火车票售票管理系统

数据库课程设计报告 -------火车售票管理信息系统软件学院软件工程2013级x班姓名: xx学号:2013xxxxxxxx目录一、系统开发平台 (1)四、需求分析 (2)4.1 用户需求说明 (2)4.1.1 数据需求 (2)4.1.2 事务需求 (3)4.2 系统需求说明 (4)五、数据库逻辑设计 (4)5.1 ER图 (4)5.2 数据字典 (5)5.3 关系表 (7)六、数据库物理设计 (7)6.1 索引 (7)6.2 视图本节可选 (8)6.3 安全机制 (8)七、应用程序设计 (8)7.1 功能模块 (8)7.2 界面设计 (15)7.3 事务设计 (15)八、测试和运行 (16)九、总结 (16)一、系统开发平台题目:对火车站的售票进行管理。
主要功能:车次管理(车次、起止地点、到达时间、开车时间)、每一车次的车票管理(车厢号、座位号)、售票、退票、查询、异常处理。
开发工具:eclipse数据库:mysql操作系统:windows8.1二、数据库规划2.1 任务陈述:做一个火车票售票管理系统:对火车站的售票进行管理。
主要功能:车次管理(车次、起止地点、到达时间、开车时间)、每一车次的车票管理(车厢号、座位号)、售票、退票、查询、异常处理。
2.2 任务目标完成一个火车票售票管理系统,要实现管理员对车票的增添以及删改功能,同时需要实现用户对车票的查询购买,以及出现调整之后的退票服务。
三、系统定义3.1 系统边界管理员:可以对车票以及车次进行删改操作。
用户:可以买票,但是不可以对火车票进行添加操作3.2 用户视图3.2.1 管理员视图(1)列车管理:包括列车的录入、查询、修改和删除。
(2)用户管理:包括系统使用用户的添加、查询、修改、删除等。
在线支付用户身份信息用户注册车次设置管理员车次信息录入用户信息管理票务系统车站实际情况(3)系统数据处理:数据查询,根据关键字过滤,查看当前车次信息,车票信息,用户信息以及处理历史。
数据结构课程设计订票系统

数据结构课程设计订票系统一、课程目标知识目标:1. 理解并掌握数据结构中的线性表、栈、队列等基本概念及应用场景;2. 学会使用链表、顺序表等实现订票系统中旅客信息的存储与管理;3. 掌握查找、排序等算法在订票系统中的应用,提高数据检索效率。
技能目标:1. 能够运用所学数据结构知识,设计并实现一个简单的订票系统;2. 培养学生分析问题、解决问题的能力,提高编程实践技能;3. 学会使用调试工具,对订票系统进行测试与优化。
情感态度价值观目标:1. 培养学生团队合作精神,提高沟通与协作能力;2. 增强学生对数据结构在实际应用中的认识,激发学习兴趣;3. 培养学生严谨、认真的学习态度,养成良好编程习惯。
分析课程性质、学生特点和教学要求:本课程为数据结构课程设计,旨在让学生将所学理论知识与实际应用相结合,提高解决实际问题的能力。
学生处于高年级阶段,已具备一定的编程基础和逻辑思维能力。
教学要求注重实践操作,引导学生运用所学知识解决实际问题。
二、教学内容1. 线性表、栈、队列基本概念及操作:结合教材第二章内容,使学生掌握线性表、栈、队列的定义、特点及基本操作。
- 线性表的实现(链表与顺序表)- 栈的概念、实现及应用- 队列的概念、实现及应用2. 数据存储与管理:结合教材第四章内容,让学生学会使用数据结构对订票系统中旅客信息进行存储与管理。
- 旅客信息的数据结构设计- 数据存储(文件、数据库等)3. 查找与排序算法:结合教材第五章内容,培养学生运用查找与排序算法优化订票系统的能力。
- 常见查找算法(顺序查找、二分查找等)- 常见排序算法(冒泡排序、快速排序等)4. 订票系统设计与实现:结合教材实际案例,指导学生设计并实现一个简单的订票系统。
- 系统需求分析- 功能模块划分- 编程实现与测试5. 课程进度安排:- 第1周:线性表、栈、队列基本概念及操作- 第2周:数据存储与管理- 第3周:查找与排序算法- 第4周:订票系统设计与实现及优化教学内容注重理论与实践相结合,以教材为基础,确保学生能够系统地掌握数据结构知识,并将其应用于实际项目中。
火车订票系统课程设计

火车订票系统课程设计小组成员:(080100)王健(08010088)汪选继()王海全目录第一章概述........................................................................................................... 3.1.1课题简介 ...................................................................................................................... 3.1.2设计目的 ...................................................................................................................... 3.1.3设计内容 ...................................................................................................................... 3.1.4系统实验要求............................................................................................................... 4.第二章需求分析................................................................................................... 5.2.1需求分析的任务......................................................................................................... 5.2.2需求分析的过程.......................................................................................................... 5.2.3数据字典与流程图 .................................................................................................... 5.2.4系统框架 ...................................................................................................................... Z.第三章概念结构设计 .......................................................................................... 9.3.1概念结构设计的方法与步骤 (9)3.1.1概念结构设计的方法 (9)3.1.3概念结构设计的步骤 (9)3.2数据抽象与局部视图设计 (10)3.3视图的集成................................................................................................................ 1.1第四章数据库逻辑设计 . (13)4.1E-R图向关系模型的转换 (13)4.2数据模型的优化....................................................................................................... 1.34.3数据库的结构........................................................................................................... 1.4第五章软件功能设计.. (15)5.1软件模块划分........................................................................................................... 1.55.2软件功能结构图....................................................................................................... 1.5第六章源程序代码........................................................................................... .16第一章概述1.1课程设计题目开发一个学生火车票定票系统主要实现以下功能:1、学生基本信息的管理,尤其是学生目的地。
订票系统数据结构课程设计

订票系统数据结构课程设计一、课程目标知识目标:1. 让学生理解订票系统中的基本数据结构,掌握线性表、树和图等数据结构在订票系统中的应用。
2. 使学生掌握如何使用数据结构优化订票系统的查询和存储效率,了解不同数据结构在系统性能上的影响。
3. 引导学生学会分析订票系统中的数据关系,并能运用所学知识设计合理的数据结构。
技能目标:1. 培养学生运用所学数据结构知识解决实际问题的能力,能够根据需求设计并实现订票系统中的数据结构。
2. 提高学生的编程实践能力,使其能够熟练运用编程语言实现订票系统相关功能。
3. 培养学生团队协作和沟通能力,能在项目中进行有效分工与协作。
情感态度价值观目标:1. 激发学生对数据结构学习的兴趣,培养其探究精神,提高学习积极性。
2. 培养学生的责任心,使其认识到数据结构在实际应用中的重要性,增强对技术应用的敬畏之心。
3. 引导学生树立正确的价值观,认识到科技进步对生活的影响,培养其热爱科学、服务社会的精神。
课程性质:本课程为高二年级信息技术课程,旨在让学生结合实际应用,深入理解数据结构知识,提高编程实践能力。
学生特点:学生已具备一定的数据结构基础,对编程有一定了解,具备基本的编程能力,但实际应用经验较少。
教学要求:结合订票系统实际应用场景,引导学生运用所学数据结构知识,培养其解决实际问题的能力。
教学过程中注重理论与实践相结合,强化编程实践,提高学生的综合运用能力。
通过项目合作,培养学生的团队协作和沟通能力。
二、教学内容1. 订票系统概述:介绍订票系统的基本功能、业务流程及在生活中的应用。
教材章节:第二章 数据结构在实际应用中的优势2. 数据结构基础知识回顾:线性表、树和图的基本概念、存储结构及操作方法。
教材章节:第三章 线性表;第四章 树;第五章 图3. 订票系统中的数据结构应用:a. 线性表在航班信息存储和查询中的应用b. 树在航空公司组织结构及航班层级关系表示中的应用c. 图在航班网络及航线规划中的应用教材章节:第六章 数据结构在实际应用中的案例分析4. 数据结构优化订票系统性能:分析不同数据结构在查询、存储等方面的性能差异,探讨优化策略。
数据结构课程设计 火车订票系统

软件课程设计--C语言设计火车票订票系统之源代码(模拟数据库功能)(需求分析+可行性分析)设计题目:火车订票系统小组成员:指导教师:完成时间:一.需求设计:1.每条线路所涉及的信息有:起点、终点、站名、车次、、票价、时间、座位号。
2.作为示意系统,全部数据可以只放在内存中。
3.系统能实现的功能和操作如下:①.查询路线:根据旅客提出的终点站名输入下列信息:车次、车站名。
②.承办订票业务:根据客户提出的要求查询该车次票额的情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新查询客户要求,若需要可登记排队候补。
③.承办退票业务:根据客户提供的情况(车次、时间、座位号)为客户办理退票手续,然后查询该车次是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。
④登记旅客情况:包括旅客姓名,性别,年龄,家庭住址,联系方式等。
⑤统计功能:将每次车的订票,退票结果统计出来。
⑥管理功能:列车管理员可以通过调用函数来查看车票极其用户情况.⑦.查询功能:用户可以查询自己需要的车辆信息.二.总体设计1.程序流程图:按2键按3键按4键进入in函数进入book函数进入inquire函数进入cancel函数按5键进入you函数2.总体设计说明:①.数据结构设计:程序=数据结构+算法,一个好的程序必定有一个好的数据结构.本设计主要考虑车票信息和用户信息的数据结构.车票信息采用半十字链表.横向链表中的每一个结点包含以下内容:车次,起始站,发车时间,指向下一个结点的指针,指向中途站的指针.纵向链表中每一个结点包含以下内容:从始发站开始的依次到站,票价,到达时间,是否已被购买标识,才用mark标识,当mark为1时车票已售出,当mark为0时车票还未售出.以及指向下一个结点的指针.纵向链表采用循环链表,尾指针指向首指针.未购票用户信息使用队列来保存,因为考虑到用户会预订票,所以把用户以来订票的时间早晚排在队中.先来先买,后来后买.队列中的每个元素包含以下内容:用户姓名,身份证号码,想要购票的车次,起始站,要到的站,时间.已经购票用户信息使用一个单链表来保存,链表中的没个结点包含以下内容:用户姓名,身份证号码,已购车票的车次,出发时间,到达时间.车票信息链表示意图:车次起始站发车时间downnnext到站时间票价marknext座位号未购票用户信息队列:用户姓名购票的车次起始站要到的站达到时间用户姓名购票的车次起始站要到的站达到时间注:座位号包含在车次号中已购票用户信息链表示意图: 用户姓名身份证号码已购车票的车次号出发时间到达时间注:座位号包含在车次号中②算法的设计:主函数:利用case语句实现用户界面,用户输入需要的服务的数字代码,程序就会转到相应的函数,实现相应的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件课程设计--C语言设计火车票订票系统之源代码(模拟数据库功能)(需求分析+可行性分析)设计题目:火车订票系统小组成员:指导教师:完成时间:一.需求设计:1.每条线路所涉及的信息有:起点、终点、站名、车次、、票价、时间、座位号。
2.作为示意系统,全部数据可以只放在内存中。
3.系统能实现的功能和操作如下:①.查询路线:根据旅客提出的终点站名输入下列信息:车次、车站名。
②.承办订票业务:根据客户提出的要求查询该车次票额的情况,若尚有余票,则为客户办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新查询客户要求,若需要可登记排队候补。
③.承办退票业务:根据客户提供的情况(车次、时间、座位号)为客户办理退票手续,然后查询该车次是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其他排队候补的客户。
④登记旅客情况:包括旅客姓名,性别,年龄,家庭住址,联系方式等。
⑤统计功能:将每次车的订票,退票结果统计出来。
⑥管理功能:列车管理员可以通过调用函数来查看车票极其用户情况.⑦.查询功能:用户可以查询自己需要的车辆信息.二.总体设计1.程序流程图:按2键按3键按4键进入in函数进入book函数进入inquire函数进入cancel函数按5键进入you函数2.总体设计说明:①.数据结构设计:程序=数据结构+算法,一个好的程序必定有一个好的数据结构.本设计主要考虑车票信息和用户信息的数据结构.车票信息采用半十字链表.横向链表中的每一个结点包含以下内容:车次,起始站,发车时间,指向下一个结点的指针,指向中途站的指针.纵向链表中每一个结点包含以下内容:从始发站开始的依次到站,票价,到达时间,是否已被购买标识,才用mark标识,当mark为1时车票已售出,当mark为0时车票还未售出.以及指向下一个结点的指针.纵向链表采用循环链表,尾指针指向首指针.未购票用户信息使用队列来保存,因为考虑到用户会预订票,所以把用户以来订票的时间早晚排在队中.先来先买,后来后买.队列中的每个元素包含以下内容:用户姓名,身份证号码,想要购票的车次,起始站,要到的站,时间.已经购票用户信息使用一个单链表来保存,链表中的没个结点包含以下内容:用户姓名,身份证号码,已购车票的车次,出发时间,到达时间.车票信息链表示意图:车次起始站发车时间downnnext到站时间票价marknext座位号未购票用户信息队列:用户姓名购票的车次起始站要到的站达到时间用户姓名购票的车次起始站要到的站达到时间注:座位号包含在车次号中已购票用户信息链表示意图: 用户姓名身份证号码已购车票的车次号出发时间到达时间注:座位号包含在车次号中②算法的设计:主函数:利用case语句实现用户界面,用户输入需要的服务的数字代码,程序就会转到相应的函数,实现相应的功能。
在主函数开始处做下First标识,以便在其他函数中使用goto语句返回主函数的用户界面。
In()函数:In()函数负责输入各种信息,链表中车票信息的初始值.Book()函数:Book()函数负责订票功能.主要是遍历整个链表,查找到需要订票的结点后修改其mark 值.Inquire()函数:Inquire()函数主要负责查询功能.主要是遍历整个链表查找到需要的结点,然后输出.Cancel()函数:Cancel()函数主要负责退票功能.主要是遍历整个链表查找到需要的结点,然后修改mark的值.You()函数:You()函数主要负责输入用户信息,主要是创建一个单链表,将用户信息放入.并提供管理人员的查询功能.Find()函数:Find()函数主要负责查询用户信息,遍历整个单链表后,输出需要的信息.Total()函数:Total()函数主要负责统计整个订票系统的情况.三.详细设计:1. 主函数:①程序代码:Main(){ int *t;int c;First: printf(“welcome to our ticket system!\n”);printf(“1.intput the data.\n”);/*按1键输入数据*/printf(“2.book the ticket.\n”);/*按2键订车票*/printf(“3.inquire the ticket.\n”);/*按3键查询车票*/printf(“4.cancel the ticket.\n”);/*按4键退车票*/printf(“5.input your own data.\n”);/*按5键输入个人信息*/scanf(“%d”,&c);switch(c){case ‘1’: t=in(); break;case ‘2’: book(); break;case ‘3’: inquire(); break;case ‘4’: cancel(); break;case ‘5’: you(); break;default : printf(“you enter an error number\n”);}}②功能说明:通过printf语句,输出提示用户选择的信息.用户看到后,按下自己需要功能的代号.然后程序进入实现该功能函数完成用户所需要的功能.2. In()函数:①程序流程图:建立横向链表头结点输入m,n的值For循环,m是否为0否建立结点向结点输入数据For循环,n是否为0否建立纵向结点向结点输入数据是返回头指针Goto到用户界面②程序代码:struct ticket *in() /*一个返回指针形的函数*/ {struct ticket *head; /*头结点*/struct ticket *p1,*p2;struct station *s1,*s2;int m,n;int i;p1=p2=(struct ticket *)malloc(len); /*建立横向链表的头结点*/ scanf("%d",&m); /*输入一共所需的车票信息总数*/ scanf(“%d”,&n);/*输入从始发站到终点站共有几站*/ head=null;for(i=0;i<=m;i++){p2->next=p1;p2=p1;p1=(struct ticket )*malloc(len);s1=s2=(struct ticket )*malloc(len); /*建立纵向链表的头结点*/head1=s1=s2;p1->down=s1=s2; /*指向纵向链表的头结点*/scanf("%d","%d","%d",&p1->num,&p1->num2, &p1->time); /*输入横向链表的数据*/for(i=0;i<=n,i++){s2->next=s2;s2=s1;s1=(struct ticket )*malloc(len); /*建立纵向链表*/scanf(“%s”,“%d”,“%d”,“%d”,“%d”,s1->name,&s1->time,&s1->money,&s1->seat,&s1->mark); } /*输入纵向链表的数据*/s1->next=head1; /*纵向链表为循环链表*/}p2->next=null;return(head); /*返回头指针*/goto first; /*返回头指针*/}③功能说明:通过用户输入的数值,建立所需的结点数量.再输入每个结点的具体数据.使横向链表的尾指针指向空,纵向链表的的尾指针指向头指针.最后返回头指针,再回到用户界面.3.Book()函数:①程序流程图:输入需要的车次号输入需要到达的车站名While循环是否需要的车次是横向结点值给oWhile循环是否是需要的车站名是使mark的值为1纵向结点值给s纵向链表移针横向链表移针当横向链表下一个指针为空时输出s点的数据输出o点的数据Mark是否为1错误否是②程序代码:void book(){struct ticket *p;struct station *q;int t;int *o,*s;printf(“please enter the number:”);scanf(“%d”,&f);/*输入需要的车次*/printf(“please enter the station:”);scanf(“%d”,&h);/*输入需要到达的车站名*/p=t; /*初始化p的值*/while(p=!null){if(p->number==t){ q=p->down;o=p; /*把符合条件的横向链表结点的数据给o*/while(q->next=!head1){if(q->name==h){if (q->mark=1)printf(“your ticket is unused”);elseq->mark=1; /*修改mark标记*/s=q; /*把符合条件的纵向链表的数据给s*/}q=q->next; /*纵向链表移针*/}}p=p->next; /*横向链表移针*/}printf(“your ticket has already booked!”);printf("%d","%d","%d",o->num,o->num2, o->time); /*输出横向链表的数据*/printf(“%s”,“%d”,“%d”,“%d”,“%d”,s->name,&s->time,&s->money,&s->seat,&s->mark); /*输出纵向链表的数据*/goto first;}③功能说明:本函数主要是先遍历横向链表找到符合条件的结点后,转向该点的纵向链表,遍历纵向链表找到符合条件的结点,读出需要的数据.并且修改mark标记,使其成为已定车票.如果mark已经为1则输出错误信息.3.inquire()函数:①程序流程图:输入需要的车次号输入需要到达的车站名While循环是否已到空否是否是需要的车次是While循环是否已到头指针否是否是需要的车站名是输出所需的信息是是错误移动指针否否②程序代码:void inquire(){struct ticket *p;struct station *q;int t;int *o,*s;printf(“please enter the number:”);scanf(“%d”,&f);/*输入需要的车次*/ printf(“please enter the station:”);scanf(“%d”,&h);/*输入需要到达的车站名*/ p=t; /*初始化p的值*/while(p=!null)if(p->number==t){ q=p->down;o=p; /*把符合条件的横向链表结点的数据给o*/while(q->next=!head1){if(q->name==h){s=q; /*把符合条件的纵向链表的数据给s*/}q=q->next; /*纵向链表移针*/}}p=p->next; /*横向链表移针*/}printf("%d","%d","%d",o->num,o->num2, o->time); /*输出横向链表的数据*/printf(“%s”,“%d”,“%d”,“%d”,“%d”,s->name,&s->time,&s->money,&s->seat,&s->mark); /*输出纵向链表的数据*/goto first;}③功能说明:本函数主要提供查询功能.用户输入需要查询的车次和需要到车站名,程序首先遍历横向链表查找到需要的数据后转向纵向链表,接着遍历纵向链表,查找到需要的车站名.最后输出所有关于本车次的所有信息.4.Cancel()函数:①程序流程图:输入需要的车次号输入需要到达的车站名While循环是否需要的车次是横向结点值给oWhile循环是否是需要的车站名是使mark的值为0纵向结点值给s纵向链表移针横向链表移针当横向链表下一个指针为空时输出s点的数据输出o点的数据②程序代码;void cancel(){struct ticket *p;struct station *q;int t;int *o,*s;printf(“please enter the number:”);scanf(“%d”,&f);/*输入需要的车次*/ printf(“please enter the station:”);scanf(“%d”,&h);/*输入需要到达的车站名*/ p=t; /*初始化p的值*/while(p=!null){if(p->number=t){ q=p->down;o=p; /*把符合条件的横向链表结点的数据给o*/while(q->next=!head1){if(q->name=h){q->mark=0; /*修改mark标记*/s=q; /*把符合条件的纵向链表的数据给s*/}q=q->next; /*纵向链表移针*/}}p=p->next; /*横向链表移针*/}printf(“your ticket has already cancel!”);printf("%d","%d","%d",o->num,o->num2, o->time); /*输出横向链表的数据*/printf(“%s”,“%d”,“%d”,“%d”,“%d”,s->name,&s->time,&s->money,&s->seat,&s->mark); /*输出纵向链表的数据*/goto first;}③功能说明:本函数主要提供退票功能.用户输入需要退票的车次和需要到车站名,程序首先遍历横向链表查找到需要的数据后转向纵向链表,接着遍历纵向链表,查找到需要的车站名.修改其mark标识是其为0.最后输出所有关于本车次的所有信息.5. You()函数:①程序代码:void you(){struct you *head;struct you *p;p=(struct you *)malloc(len);scanf("%d",&p->name,&p->num,&p->num1,&p->time,&p->time1);}goto First;}②用户查询代码: (注:本函数用于管理人员查询用户)void find(){struct you *head;struct you *p;int u;scanf(“%d”,&u);while(p=!null){if(p->num=u){s=p;}p=p->next;}printf(“%s”,”%d”,”%d”,”%d”,”%d”,p->name,p->num,p->num1,p->time,p->time1);}③功能说明:本函数用于用户输入个人信息,以便管理人员管理.而管理函数只面对管理人员使用,因此未在用户界面上显示出来.6.统计模块:void total(){int *p,*q;int n;p=t;while(p=!null){while(q->next=!head1){if (mark=1){n=n+1;}q=q->next;}p=p->next;}printf(“the number of the booked ticket are :”); printf(“%d”,n);}6.所用变量声明:①横向链表结点的结构体:struct ticket{int num;int num1;int time;struct ticket *next;struct station *down;};int t;②纵向链表结点的结构体:struct station{int name;int time;int money;int mark;struct station *next;}③用户信息链表结点的结构体:struct you{int name;int num;int num1;int time;int time1;struct you *next;}四.程序说明书:本系统用于火车站的车票管理.主要方便用户订票,也可方便管理人员管理车票.当用户看到用户界面时,可以根据提示选择自己想要的服务,选择后按下回车键,程序便会转到相应的函数进行.完成后,程序会显示您已经成功的订票或退票.完成后程序会自动回到起始位置.管理人员也可以很方便的调用本系统包含的查询和统计函数,管理车票情况.具体说明:1.提示程序操作者输入预设的数据.2.提示用户进行订票操作.3.提示用户进行查询自己需要的车票的操作.4.提示用户进行退票操作.5.提示用户输入自己的相关信息.五.程序调试:本程序分为多模块,为的是方便小组合作.所以各个功能都由函数调用来实现.组员在各自的编制和调试中基本都实现所需的功能.但在联调的过程中,由于我们使用了大量的传递指针形的函数,所以在数值的传递上问题很多.分步执行的时候指针的位置很乱!所以让我们遗憾的是联调并没有成功.我们也会吸取教训,在函数编制时注意数值的传递.六.运行结果:输入: 23K717,Beijing,11:00Yuci,12:00,10,0,56Yangyuan,1:00,20,0,56Shijiazhuang,2:00,30,56输入:k717shijiazhuang输出:you have already booked the ticket!K717,shijiazhuang,11:00,3:00,30,56七.程序源代码:#include <stdio.h>#include <string.h>#define null 0#define len sizeof(struct ticket)struct ticket{int num;int num1;int time;struct ticket *next;struct station *down;};int t;struct station /*公共变量声明*/ {int name;int time;int money;int mark;struct station *next;struct you{int name;int num;int num1;int time;int time1;struct you *next;}struct ticket *in() /*一个返回指针形的函数*/{struct ticket *head; /*头结点*/struct ticket *p1,*p2;struct station *s1,*s2;int m,n;int i;p1=p2=(struct ticket *)malloc(len); /*建立横向链表的头结点*/scanf("%d",&m); /*输入一共所需的车票信息总数*/scanf(“%d”,&n);/*输入从始发站到终点站共有几站*/head=null;for(i=0;i<=m;i++){p2->next=p1;p2=p1;p1=(struct ticket )*malloc(len);s1=s2=(struct ticket )*malloc(len); /*建立纵向链表的头结点*/head1=s1=s2;p1->down=s1=s2; /*指向纵向链表的头结点*/scanf("%d","%d","%d",&p1->num,&p1->num2, &p1->time); /*输入横向链表的数据*/for(i=0;i<=n,i++){s2->next=s2;s2=s1;s1=(struct ticket )*malloc(len); /*建立纵向链表*/scanf(“%s”,“%d”,“%d”,“%d”,“%d”,s1->name,&s1->time,&s1->money,&s1->seat,&s1->mark); } /*输入纵向链表的数据*/s1->next=head1; /*纵向链表为循环链表*/}p2->next=null;return(head); /*返回头指针*/goto first; /*返回头指针*/}void book(){struct ticket *p;struct station *q;int t;int *o,*s;printf(“please enter the number:”);scanf(“%d”,&f);/*输入需要的车次*/printf(“please enter the station:”);scanf(“%d”,&h);/*输入需要到达的车站名*/p=t; /*初始化p的值*/while(p=!null){if(p->number==t){ q=p->down;o=p; /*把符合条件的横向链表结点的数据给o*/ while(q->next=!head1){if(q->name==h){if (q->mark=1)printf(“your ticket is unused”);elseq->mark=1; /*修改mark标记*/s=q; /*把符合条件的纵向链表的数据给s*/}q=q->next; /*纵向链表移针*/}}p=p->next; /*横向链表移针*/}printf(“your ticket has already booked!”);printf("%d","%d","%d",o->num,o->num2, o->time); /*输出横向链表的数据*/printf(“%s”,“%d”,“%d”,“%d”,“%d”,s->name,&s->time,&s->money,&s->seat,&s->mark); /*输出纵向链表的数据*/goto first;}void inquire(){struct ticket *p;struct station *q;int t;int *o,*s;printf(“please enter the number:”);scanf(“%d”,&f);/*输入需要的车次*/printf(“please enter the station:”);scanf(“%d”,&h);/*输入需要到达的车站名*/p=t; /*初始化p的值*/while(p=!null){if(p->number==t){ q=p->down;o=p; /*把符合条件的横向链表结点的数据给o*/while(q->next=!head1){{s=q; /*把符合条件的纵向链表的数据给s*/}q=q->next; /*纵向链表移针*/}}p=p->next; /*横向链表移针*/}printf("%d","%d","%d",o->num,o->num2, o->time); /*输出横向链表的数据*/printf(“%s”,“%d”,“%d”,“%d”,“%d”,s->name,&s->time,&s->money,&s->seat,&s->mark); /*输出纵向链表的数据*/goto first;}void cancel(){struct ticket *p;struct station *q;int t;int *o,*s;printf(“please enter the number:”);scanf(“%d”,&f);/*输入需要的车次*/printf(“please enter the station:”);scanf(“%d”,&h);/*输入需要到达的车站名*/p=t; /*初始化p的值*/while(p=!null){{ q=p->down;o=p; /*把符合条件的横向链表结点的数据给o*/while(q->next=!head1){if(q->name=h){q->mark=0; /*修改mark标记*/s=q; /*把符合条件的纵向链表的数据给s*/}q=q->next; /*纵向链表移针*/}}p=p->next; /*横向链表移针*/}printf(“your ticket has already cancel!”);printf("%d","%d","%d",o->num,o->num2, o->time); /*输出横向链表的数据*/printf(“%s”,“%d”,“%d”,“%d”,“%d”,s->name,&s->time,&s->money,&s->seat,&s->mark); /*输出纵向链表的数据*/goto first;}void you(){struct you *head;struct you *p;p=(struct you *)malloc(len);scanf("%d",&p->name,&p->num,&p->num1,&p->time,&p->time1);}goto First;}void find(){struct you *head;struct you *p;int u;scanf(“%d”,&u);while(p=!null){if(p->num=u){s=p;}p=p->next;}printf(“%s”,”%d”,”%d”,”%d”,”%d”,p->name,p->num,p->num1,p->time,p->time1); }void total(){int *p,*q;int n;p=t;while(p=!null){while(q->next=!head1){if (mark=1){n=n+1;}q=q->next;}p=p->next;}printf(“the number of the booked ticket are :”);printf(“%d”,n);}Main(){ int *t;int c;First: printf(“welcome to our ticket system!\n”);printf(“1.intput the data.\n”);/*按1键输入数据*/printf(“2.book the ticket.\n”);/*按2键订车票*/printf(“3.inquire the ti cket.\n”);/*按3键查询车票*/printf(“4.cancel the ticket.\n”);/*按4键退车票*/printf(“5.input your own data.\n”);/*按5键输入个人信息*/scanf(“%d”,&c);switch(c){case ‘1’: t=in(); break;case ‘2’: book(); break;case ‘3’: inquire(); break;case ‘4’: cancel(); break;case ‘5’: you(); break;default : printf(“you enter an error number\n”);}}八.结束语:课程设计使我们通过解决一个实际问题,巩固和加深所学课程,提高了我们分析和编写程序的能力,为我们以后的学习提供了很好的帮助,更为毕业设计和毕业以后从事计算机方面的工作奠定了基础。