




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、软件课程设计一c语言设计火车票订票系统之源代码(模拟数据库功能)(需求分析+可行性分析)设计题冃:火车订票系统小组成员:指导教师:完成吋间:一.需求设计:1每条线路所涉及的信息有:起点、终点、站名、车次、票价、时间、座位号。2. 作为示惫系统,全部数据可以只放在内存中。3. 系统能实现的功能和操作如下: .查询路线:根据旅客提出的终点站名输入下列信息:车次、车站名。 .承办订票业务:根据客户提出的要求查询该车次票额的情况,若尚有余票,则为客户办理订 票手续,输出座位号;若己满员或余票额少于订票额,则需重新查询客户要求,若需要可登记排 队候补。 .承办退票业务:根据客户提供的情况(车次、时间、座
2、位号)为客户办理退票手续,然后查 询该车次是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办 理订票手续,否则依次询问其他排队候补的客户。 登记旅客情况:包括旅客姓名,性别,年龄,家庭住址,联系方式等。 统计功能:将每次车的订票,退票结果统计出来。 管理功能:列车管理员可以通过调用函数来查看车票极其用户情况. .查询功能:用户可以查询自己需要的车辆信息.二总体设计1. 程序流程图:按2键按3键按4键进入in函数进入book函数进入inquire函数进入cancel函数按5键进入you函数2总体设计说明: .数据结构设计:程序二数据结构+算法,一个好的程序必定有一个好的
3、数据结构.本设计主要考虑车票信息和用户信 息的数据结构.车票信息采用半十字链表.横向链表屮的每一个结点包含以卞内容:车次,起始站,发车时间,指向下 一个结点的指针,指向中途站的指针.纵向链表中每一个结点包含以下内容:从始发站开始的依次 到站,票价,到达时间,是否已被购买标识,才用mark标识,当mark为1时车票己售出,当mark为0 时车票还未售出.以及指向下一个结点的指针.纵向链表采用循环链表,尾指针指向首指针.未购票用户信息使用队列来保存因为考虑到用户会预订票,所以把用户以来订票的时间早晩排 在队中.先来先买后来后买.队列中的每个元素包含以下内容:用户姓名,身份证号码想要购票的 车次,起
4、始站,要到的站,时间.已经购票用户信息使用一个单链表来保存,链表中的没个结点包含以下内容:用户姓名,身份证号 码,己购车票的车次,出发时间,到达时间.午票信息链农示意图:车次起始站发车时间downn next下一站名到站时间票价marknex t座位号未购票用户信息队列:用户姓名购票的车次起始站要到的站达到时间用户姓名购票的车次起始站要到的站达到时间注:座位号包含在车次号屮己购票用户信息链表示意图:用户姓名身份证号码已购车票的车次号出发时间到达时间注:座位号包含在车次号屮 算法的设计: 主函数:利用case语句实现用户界面,用户输入需要的服务的数字代码,程序就会转到相应的函 数,实现相应的功能
5、。在主函数廿始处做卞first标识,以便在其他函数屮使用goto语句返回 主函数的用户界面。5()函数:in()函数负责输入各种信息,链表中车票信息的初始值.book()函数:book()函数负责订票功能.主要是遍历整个链表,查找到需要订票的结点后修改其mark 值.tnquire()函数:inquire()函数主要负责查询功能.主要是遍历整个链表查找到需要的结点,然后输出.cancel()函数:cancel ()函数主要负责退票功能.主要是遍历整个链表查找到需要的结点,然后修改 mark的值.you()函数:you()函数主要负责输入用户信息,主要是创建一个单链表,将用户信息放入.并提供管
6、理人员的查询功能.find()函数:find()函数主要负责查询用户信息,遍丿力整个单链表后,输出需要的信息.total()函数:total()函数主要负责统计整个订票系统的情况.三.详细设计:1.主函数: 程序代码:main() int *t;int c;first: printf(''welcome to our ticket system!n");printf(mput the data.nh);/*按 1 键输入数据/printfc'2.book the ticket.nm);/按 2 键订车票/printf(u3.inquire the t
7、icket.nm); /按 3 键查询车票*7printf(u4.cancel the ticket.n°);/按 4 键退车票/printf(u5.input your own data.nm); /按 5 键输入个人信息*7scanf(n%dac);switch(c)case t: 1二in(); break;case '2': book(); break;case 3: inquire(); break;case 4: cancel(); break;case 5: you() ; break;default : printfc'you enter an
8、 error numbern°); 功能说明:通过printf语句,输出提示用户选择的信息.用户看到后,按下自己需要功能的代号.然后程序进入 实现该功能函数完成用户所需要的功能.2. 5()函数:程序流程图:建立横向链表头结点输入mzn的值for循环,m是否为0建立结点 向结点输入数据for循环,n是否为0否建立纵向结点向结点输入数据是返回头指针goto到用户界面程序代码:struct ticket *in()/一个返回指针形的函数*7struct ticket *head;/头结点*/struct ticket *plz*p2;struct station *sl *s2;int
9、m,n;int i;pl=p2=(struct ticket *)malloc(len); /建立横向链表的头结点/ scanf(" %dn,&tn);厂输入一共所需的车票信息总数/scanfc%dan);/输入从始发站到终点站共有几站/head二 null;for(i=0;i<=m;i+)p2->next=pl;p2 二 pl;pl二(struct ticket )*malloc(len);si二s2二(struct ticket )*malloc(len); /穴建立纵向链表的头结点/headl=sl=s2;pl->down=sl=s2;/指向纵向链表的
10、头结点/scanfc,%d,%dh;,%d,/&pl->nurn/&pl->nurn2/&pl->time); /先输入横向链表的数据*/ for(i=o;i<=n/i+)s2->next二s2;s2=sl;si二(struct ticket )*malloc(len);/建立纵向链表/scanf(”st%dt%dt%dt%d",sl>name,&sl>time,&sl>money,&sl>seat,&sl>mark);厂输入纵向链表的数据/sl->next=he
11、adl;厂纵向链表为循环链表/p2->next=null;return(head);/返回头指针/goto first;/返回头指针*7 功能说明:通过用户输入的数俏建立所需的结点数量.再输入每个结点的具体数据.使横向链表的尾指针指向空纵向链表的的尾指针指向头指针.最后返回头指针,再回到用户界面.3. book ()函数: 程序流程图:输入需要的车次号输入需要到达的车站名while循环是否需要的车次是横向结点值给o是 使mark的值为1纵向结点值给s纵向链表移针横向链表移针当横向链表下一个指针为空时输出s点的数据输出0点的数据mark是否为1错误否是 程序代码:void book()st
12、ruct ticket *p;struct station *q;int t;int *o *s;printf(uplease enter the number/*); scanfc%daf);厂输入需要的车次/printf(''please enter the station:");scanf(%d",&h);厂输入需要到达的车站名/p=t;/初始化p的值*/while(p=!null)if(p->number=t) q二 p>down;o=p厂把符合条件的横向链表结点的数据给0*/while(q->next=!headl)if(
13、q> name 二二 h)(if (q->mark=l)printf('your ticket is unused0);elseq->mark=l; /修改 mark 标记/s二q;/把符合条件的纵向链表的数据给s*/q=q->next;/纵向链表移针/p=p->next;/横向链表移针*7printf('your ticket has already booked!0);printf("%d"/"%d"/"%d"/o->numzo->num2/ o->time); /输
14、出横向链表的数据/prin 十 fc%s",“dt%d",“dt%d",s>name,&s>tim®&s>money,&s>secrr,&s>mark); /输 出纵向链表的数据/goto first; 功能说明:木函数主要是先遍历横向链表找到符合条件的结点后,转向该点的纵向链表,遍历纵向链表找到 符合条件的结点,读出需要的数据.并且修改mark标记,使其成为已定车票.如果mark已经为1则 输出错误信息.3.inquire ()函数: 程序流程图:输入需要的车次号输入需要到达的车站名是否是需
15、要的车次 是while循环是否己到头指针否是否是需要的车站名是输出所需的信息是是错误移动指针否否 程序代码:void inquire()(struct ticket *p;struct station *q;int t;int *o *s;printf(uplease enter the number:"); scanfc%d&f);厂输入需要的车次/printf(''please enter the station:/,);scanfc%d&h);厂输入需要到达的车站名*/p=t;/初始化p的值/while(p=!null)if(p->numb
16、er=t) q二 p>down;o=p;/把符合条件的横向链表结点的数据给0*/while(q->next=!headl)if(q 二二 h)s二q;/把符合条件的纵向链表的数据给s*/q=q->next;/纵向链表移针/p=p->next;/*横向链表移针/printf("%d"/"%d"/"%d"/o->numzo->num2/ o->time); /输出横向链表的数据/prin 十 fc%s",“dt%d",“dt%d",s>name,&s&g
17、t;tim®&s>money,&s>secrr,&s>mark); /输 出纵向链表的数据/goto first; 功能说明:本函数主要提供查询功能.用户输入需要查询的车次和需要到车站名,程序首先遍历横向链表查 找到需要的数据后转向纵向链表,接着遍历纵向链表查找到需要的车站名.最后输出所有关于本 车次的所有信息.a.cancel ()函数: 程序流程图:输入需要的车次号输入需要到达的车站名横向结点值给。while循环是否是需要的车站名是使mark的值为0纵向结点值给s纵向链表移针横向链表移针当横向链表下一个指针为空时输出s点的数据输出。点的数
18、据 程序代码;void cancel()str net ticket *p;struct station *q;int t;int *o *s;printf(uplease enter the number/*); scanfc%daf);厂输入需要的车次/printf(''please enter the station:");scanf(%d",&h);厂输入需要到达的车站名/p=t;/初始化p的值*/while(p=!null)(if(p->number=t) q二 p>down;while(q->next=!headl)if
19、(q二 h)q->mark=0;/修改 mark 标记/s二q;厂把符合条件的纵向链表的数据给s*/q=q->next;/纵向链表移针*7p=p->next;/横向链表移针/printf(uyour ticket has already cancel!11);printf("%d"/"%d"j'%d"/o->num,o->num2/ o->time); /输出横向链表的数据*7printf(w%sm/tt%d,tt%dm/'%dm/m%dm/s->name/&s->time
20、/as->money/(is->seat/as->mark); /输出纵向链表的数据/goto first; 功能说明:木函数主要提供退票功能.用户输入需要退票的车次和需要到车站名程序首先遍历横向 链表査找到需要的数据后转向纵向链表,接着遍历纵向链表,查找到需要的车站名.修改其mark标 识是其为0最后输出所有关于本车次的所有信息.5. you()函数: 程序代码:void you()struct you *head;struct you *p;p二(struct you *)malloc(len);scanfcd&pnarne.&pnurn.&pnu
21、rntgoto first;用户查询代码:(注:木函数用于管理人员查询用户)void find()(struct you *head;struct you *p;int u;scanfcdj&u);while(p=!null)if(p->num=u)s 二 p;p=p->next;printfc'%s/,/%dh/,%d,/,%d,/,%d/,/p->name/p->num/p->numl/p->time/p->timel); 功能说明:本函数用于用户输入个人信息.以便管理人员管理.而管理函数只面对管理人员使用,因 此未在用户界面上显示
22、出来.6统计模块:void total()(int *p *q;ini n;p=twhile(p=!null)(while(qext=!headl)if (mark二 1)n=n+l;q二q> next;p=p->next;printfc'the number of the booked ticket are :"); printf(m%dmzn);6.所用变量声明:横向链表结点的结构体:struct ticketint num;int numl;int time;struct ticket *next;struct station *down;int t; 纵向
23、链表结点的结构体:struct stationini name;int time;int money;int mark;struct station *next; 用户信息链表结点的结构体:struct youint name;int num;int numl;int time;int timel;struct you *next;四. 程序说明书:本系统用于火车诂的车票管理主要方便用户订票,也可方便管理人员管理车票.当用户看到 用户界面时,可以根据提示选择自己想要的服务,选择后按下回车键,程序便会转到相应的函数进 行.完成后,程序会显示您己经成功的订票或退票.完成后程序会自动回到起始位置.管
24、理人员也可以很方便的调用本系统包含的查询和统计函数,管理车票情况.具体说明:1. 提示程序操作者输入预设的数据.2. 提示用户进行订票操作.3. 提示用户进行查询自己需要的车票的操作.4. 提示用户进行退票操作.5. 提示用户输入自己的相关信息.五. 程序调试:本程序分为多模块,为的是方便小组合作.所以各个功能都由函数调用來实现.组员在各自的 编制和调试屮基本都实现所需的功能.但在联调的过程屮,由于我们使用了犬量的传递指针形的函 数,所以在数值的传递上问题很多.分步执行的时候指针的位置很乱!所以计我们遗憾的是联调并 没有成功.我们也会吸取教训,在函数编制时注意数值的传递.六. 运行结果:输入:
25、23k717,beijing,11:00yuci,12:00,10,0,56 yangyuaru:。,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 ticketint num;int
26、numl;int time;struct ticket *next;struct station *down;int t;struct station/公共变量声明/int name;int time;int money;int mark;struct station *next;struct youint name;int num;int numl;int time;int timel;struct you *next;struct ticket *head;/头结点*7struct ticket *pl *p2;struct station *sl *$2;int mzn;int i;pl
27、二p2二(struct ticket *)malloc(len); /建立横向链表的头结点/scanfc%d“,&m);厂输入一共所需的车票信息总数/scanfc'%d<&n);厂输入从始发站到终点站共有几站*/head二 null;for(i=o;i<=m;i+)(p2->next=pl;p&pl;pl=(struct ticket )*malloc(len);sl=s2=(struct ticket )*malloc(len); /建立纵向链表的头结点*/headl=sl=$2;pl->down=sl=s2;/指向纵向链表的头结点*7
28、scanf("%d"/"%d"/"%d"/&pl->num/&pl->num2/ &pl->time); /输入横向链表的数据/ for i=o;i<=nj+ ()s2> next 二 s2;s2 二 si;si二(struct ticket )*malloc(len); /建立纵向链表/scanf(“s",%dt%d",%dt%crsl>name,&sl>time,&sl>money,&sl>seat,&
29、sl>mark);厂输入纵向链表的数据/sl->next=headl; /纵向链表为循环链表*7p2->next 二 null;return(head);/返回头指针 *7goto first;/返回头指针*7void book()struct ticket *p;struct station *q;int t;int *o *s;printf(uplease enter the number:1*);scanf(擁d",&f);/输入需要的车次*/printf(uplease enter the station:n);scanfc%d&h);严输入
30、需要到达的车站名/p=t; /初始化p的值/while(p=!null)if(p >number 二二十) q=p->down;o=p;厂把符合条件的横向链表结点的数据给0*/while(q->next=!headl)if(q->name=h)if (q>mark二 1)printf('your ticket is unused");elseq->mark=l;/修改 mark 标记/s二q;厂把符合条件的纵向链表的数据给s*/q 二 q->n ext;厂纵向链表移针/p=p->next;/横向链表移针/printf('
31、your ticket has already booked!");printfc,%dm/,%dh/,%dh/o->numzo->num乙 omime);厂输出横向链表的数据/printfc%sm/%d,f/%dm/tt%dm/%d,s->name/as->time/4s->money/as->seat/&s->mark); /输出纵向链表的数据/goto first;void inquire()(struct ticket *p;struct station *q;int t;int *o *s;printf(uplease en
32、ter the number:");scanfc%d&f);厂输入需要的车次/printff'please enter the station:m);scanfc'%d&h);厂输入需要到达的车站名p=t; /初始化p的值/while(p=!null)if(p->nu mber=t)q=p->down;o=p;/把符合条件的横向链表结点的数据给0*/while(q->nex 1二!headl)if(q二二 h)s二q;厂把符合条件的纵向链表的数据给s*/q=q->next;/*纵向链表移针*7p=p->next;厂横向链表
33、移针*/printfc%dt%d“,“d“,o>num,o>num2,o>time); /输出横向链表的数据/printf(w%sm/tt%dr7'%dw/tt%dm/%dm/s->name/<&s->time/as->money/as->seat/<is->mark); /输出纵向链表的数据/goto first;void cancel()(struct ticket *p;struct station *q;int t;int *o *s;printf(uplease enter the number:"
34、); scanfc%d&f);厂输入需要的车次/printff'please enter the station:m);scanfc'%d&h);厂输入需要到达的车站名p=t;/初始化p的值/while(p=!null)if(p->nu mber=t)q=p->down;o=p;/把符合条件的横向链表结点的数据给0*/while( q >nex 1二 lheadl)if(q->name=h)q->mark=0;/修改 mark 标记*7s二q;/把符合条件的纵向链表的数据给s*/q=q->next;/纵向链表移针/p=p-&g
35、t;next;/横向链表移针*7printf('your ticket has already cancel!");printf("%d"/"%d"/"%d"/o->numzo->num2/ o->time); /输出横向链表的数据/prin 十 fc%s",“dt%d",“dt%d",s>name,&s>tim®&s>money,&s>secrr,&s>mark); /输 出纵向链表的数据/got
36、o first; void you()struct you *head;struct you *p;p=(struct you *)malloc(len);scanf("%dn/ap->name,&p->num/&p->numl/goto first;void find() struct you *head;struct you *p;int u;scanf(tt%d%u);while(p=!null)(if(p->num=u)s 二 p;p=p->nex t;printfc%sm/m%drt/o%clm,m%dm/,%do/p->name/p->num/p->numl/p->+ime/p->timel);void total()int *p *q;int n;p=twhile(p=!null)while( q> nex t
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 失误汇报协议
- 护理质量标准及管理制度
- 幼儿园小学秋游安全教育
- 辛集中学高三语文一轮复习组合练
- 阿坝职业学院《影像电子学基础》2023-2024学年第一学期期末试卷
- 陇东学院《岩土工程测试与监控》2023-2024学年第二学期期末试卷
- 陕西中医药大学《外国文学I》2023-2024学年第一学期期末试卷
- 陕西国防工业职业技术学院《劳动实践》2023-2024学年第二学期期末试卷
- 陕西学前师范学院《新型材料毒理学评价》2023-2024学年第二学期期末试卷
- 陕西工商职业学院《数字媒体设计与制作》2023-2024学年第一学期期末试卷
- 2025届苏锡常镇四市高三二模试题英语试题试卷含解析
- 2024年GCP考试题库(黄金题型)
- DB11∕T344-2024陶瓷砖胶粘剂施工技术规程
- 2025年公共管理复试试题及答案
- 2025年过氧化工艺证考试题及答案
- 2024年凤凰出版传媒集团秋季招聘笔试参考题库附带答案详解
- 2025年中考语文名著阅读考点演练《经典常谈》:选择性阅读(八年级下) 答案版
- (AE ADVANCED ENERGY) Sparc-le V 100KHz电源使用说明书和手册
- 2025年中央一号文件参考试题库100题(含答案)
- (完整版)医疗器械基础知识培训考试试题及答案
- 04S519小型排水构筑物(含隔油池)图集
评论
0/150
提交评论