数据结构课程设计火车售票系统的实现

上传人:痛*** 文档编号:75072510 上传时间:2022-04-15 格式:DOC 页数:30 大小:325.50KB
收藏 版权申诉 举报 下载
数据结构课程设计火车售票系统的实现_第1页
第1页 / 共30页
数据结构课程设计火车售票系统的实现_第2页
第2页 / 共30页
数据结构课程设计火车售票系统的实现_第3页
第3页 / 共30页
资源描述:

《数据结构课程设计火车售票系统的实现》由会员分享,可在线阅读,更多相关《数据结构课程设计火车售票系统的实现(30页珍藏版)》请在装配图网上搜索。

1、数据结构课程设计报告撰写要求(一)纸张与页面要求 1采用国际标准A4型打印纸或复印纸,纵向打印。 2封页和页面按照下面模板书写(正文为:小四宋体1.5倍行距)。3图表及图表标题按照模板中的表示书写。 (二) 课设报告书的内容应包括以下各个部分:(按照以下顺序装订)1.封页(见课设模版)2.任务书(学生教师均要签字,信息填写完整)3.目录4.正文一般应包括以下内容: (1)题目介绍和功能要求(或描述)课程设计任务的详细描述(注意不能直接抄任务书),将内容做更详细的具体的分析与描述;(2) 系统功能模块结构图 绘制系统功能结构框图及主要模块的功能说明; (3) 使用的数据结构的描述: 数据结构设计

2、及用法说明;(4) 涉及到的函数的描述 ; (5) 主要算法描述( 程序流程图)(6) 给出程序测试/运行的结果设计多组数据加以描述(包括输入数据和输出结果) (7) 课程设计的总结及体会(8) 参考文献 格式要求:1作者,等. 书名.出版地:出版社,出版年 5.附录:程序清单 (应带有必要的注释)沈阳航空航天大学课 程 设 计 报 告课程设计名称:数据结构课程设计课程设计题目: 火车售票系统的实现院(系):计算机学院专 业:网络工程班 级:24010201 学 号: 2012040102003姓 名: 张译文指导教师: 沈阳航空航天大学课程设计报告 目 录1 需求分析11.1 问题描述11.

3、2 问题理解12 系统设计32.1 总体方案设计32.2 数据结构设计32.3 函数设计42.4 关键流程52.4.1 系统主流程52.4.2 void add()函数流程62.4.3 void search()函数流程82.4.4 void order()函数流程92.4.5void return_tkt()函数流程93 调试分析114 测试及运行结果12 27 1 需求分析1.1 问题描述火车成为越来越受欢迎的交通工具,随着愈来愈多的人选择火车成为出行的交通工具,火车站需要管理的信息量也越来越多,这种情况下,利用计算机来管理和存储火车,客户信息就会很有效率。火车售票系统要求通过链表实现列车

4、的基本信息管理,即输入火车,路线所涉及的基本信息,包括终点站,车次号,车厢号,开车周日,乘员定额,余票量,已订票的客户名单。通过查找功能实现列车的三种基本信息查询方式。并实现订票和退票功能。选择车站售票系统作为课程设计的课题,就车站的售票流程等进一步了解车站售票系统的原理。1.2 问题理解 本题主要通过链表和函数实现火车售票系统的各种功能,首先要利用定义各种函数来分别实现每一个功能模块,包括信息插入函数来增加列车的基本信息,然后设计打印函数输出路线的基本信息,再定义查找函数实现列车基本信息查找功能,按照要求设置三种查找方式,设计订票函数读取乘客信息,通过指针实现订票乘客的信息查找功能,定义退票

5、函数,实现退票功能。最后通过主函数将各个功能函数连接起来。火车站售票系统列车基本信息管理列车基本信息查询订票管理退票管理退出系统上图为简易结构图,首先设计一个简单明了的菜单,让用户可以一目了然的找到自己想要实现的功能,然后在各个模块中实现具体功能,程序主要分为四个模块,第一个模块为列车基本信息输入,此模块用来实现列车信息输入功能,用户可根据提示来完成列车信息的录入。第二个模块为列车信息查询模块,在此模块,用户可通过三种方式完成对列车信息的查询,即通过车次查询,通过终点站进行查询,通过路线进行查询,用户可通过简洁明了的提示进行操作。第三个模块为订票模块,在此模块用户可输入个人基本信息在有余票的情

6、况下进行订票。第四个模块为退票管理,即对所以得票进行退票。沈阳航空航天大学课程设计报告 2 系统设计2.1 总体方案设计 定义结构体,分别为火车线路的结构体,包括线路要用到的基本信息,已订票乘客和未订票乘客结构体,以及替补客户结构体。设计列车信息输入函数,输入线路的基本信息建立链表,设计打印线路基本信息函数,为线路查询做准备。打印线路函数完成后,接着设计查询函数,可通过车次号、抵达站和线路分别进行查询,查询过程通过strcmp()函数实现。设计打印乘客信息函数,并写出输入客户信息函数,设计订票函数时对前面的函数进行调用,定义一个排队等候的客户名单域,若出现票数不足时让乘客排队进行等候。最后定义

7、退票函数。通过主函数让各个功能直观的展现在用户面前。2.2 数据结构设计1. 列车基本信息的结构体结构体:struct line char ter_name10;/终点站名 char cc_num10;/车次号 char cx_num10;/车厢号 char day7;/出发日期 int tkt_amt;/成员定额 int tkt_sur;/余票量 linklist *order;/乘员名单域,指向乘员名单链表的头指针 linkqueue wait;/等候替补的客户名单域,分别指向排队等候名单队头队尾的指针lineinfo; 2. 乘客信息typedef struct ord_ros char

8、 name10;/客户姓名 int ord_amt;/订票量 int grade;/车厢等级 struct ord_ros *next;linklist;3.已定票乘客信息typedef struct wat_ros char name10;/乘客姓名 int req_amt;/订票量 struct wat_ros *next;qnode,*qptr;4.等候替补客户typedef struct pqueue qptr front;/等候替补客户名单域的头指针 qptr rear;/等候替补客户名单域的尾指针linkqueue;2.3 函数设计1本系统所设计的函数见表2.1。表2.1 函数列表

9、函数名称函数原型功能描述mainvoid main();系统主程序addvoid add()基本信息输入displayVoid display()打印每条线路的基本信息listVoid list()打印全部线路信息searchVoid search()火车票信息查询ptrlinkVoid prtlink()订票乘客信息InsertlinkVoid insertlink()增加订票乘客orderVoid order()订票return-tktVoid return-tkt()退票menu-selectInt menu-select()系统菜单2本系统函数的调用关系见图2.1。mainaddsea

10、rchhorderdisplayreturn-tktInsertlinklistptrlink图2.1 函数调用关系2.4 关键流程2.4.1 系统主流程(1)主函数的简单描述:通过主函数,将函数的各个功能联合起来,通过对菜单函数的调用,对所需要的功能进行选择,让用户一目了然的面对系统,随着用户不同的选择,主函数会分别调用不同的功能函数,进而实现用户的需求。(2)主函数的流程图 开始输入选择是否为0NYadd结束是否为1YListN是否为2prtlinkYN是否为3是否为4是否为5YNSearchNYorderYReturn_tktNN图2.2 主函数的流程图2.4.2 void add()函

11、数流程(1)void add()函数的简单描述:列车基本信息输入函数,存储列车的基本信息,startiii.ter_name存储终点站,startiii.cc_num存储车次号,startiii.cx_num存储车厢号,startiii.day存储发车时间,, startiii.tkt_amt存储乘员定额,startiii.tkt_sur存储余票量。利用变量iii进行存储。(2)void add()函数的流程图开始终点站始发站存入链表存入链表车次号存入链表车厢号存入链表发车时间存入链表总票数存入链表余票数存入链表图2.3 void add()函数的流程图2.4.3 void search()函

12、数流程(1)void search()函数的简单描述:查找函数,可按三种方式查询列车基本信息,定义变量aa,将用户的输入值赋予aa,对aa进行判断,若输入的值为1,则按照车次号进行查询,用户输入车次,使用strcmp()与链表中的信息进行比较,调用display()输出查到的列车信息。若输入的值为2,则按照终点站进行查询,用户输入终点站,输出查询到的信息,若输入的值为3,则按照线路进行查询,输出信息。(2)void search()函数的流程图aa=1按车次号进行查询aa=2aa=3display无此车按终点站进行查询display无此车按路线进行查询display无此车开始输入aa判定aas

13、trcmpstrcmpstrcmp结束 YN Y YNN图2.4 void search()函数的流程图2.4.4 void order()函数流程(1)void order()函数的简单描述:本函数实现的是订票功能,首先需要输入订票的数量,若订票数量在额定范围内,则输入乘客信息并调用insertlink函数保存乘客信息,并显示订票成功,若票数不够,调用appendqueue函数,让顾客进行等候。(2)void order()函数的流程图appendqueue输入信息Appendqueue()Insertlink()订票成功等候开始输入票数是否多于余票结束NY图2.5 void order()

14、函数的流程图2.4.5void return_tkt()函数流程(1)void return_tkt()函数的简单描述此函数为退票函数,首先,输入乘客的姓名,对乘客是否订票进行查询,若无,则显示没有定票,若有,则利用链表删除乘客信息,进行退票,并显示退票成功,剩余票数加一,若有排队等待的乘客则该乘客进行订票。(2)void return_tkt()函数的流程图void return_tkt()删除节点退票成功余票加一没有订票为正在排队的顾客订票乘客姓名有无此乘客有无等候乘客结束 Y Y N N图2.5 void return_tkt()函数的流程图3 调试分析 (1) 问题1l 问题描述:各个

15、功能都没有错误,但输入的信息不能正常显示,出现乱码l 问题分析:程序存在逻辑错误l 解决方法:重新整理程序的逻辑结构(2) 问题2l 问题描述: 不能逐条输出列车的基本信息,只能整体显示l 问题分析: 缺少逐条输出的函数l 解决方法: 定义一个可逐条输出的函数并在各个功能函数中对该函数进行调用。(3) 问题3l 问题描述:运行时显示函数不能正常定义l 问题分析:定义函数时出现错误l 解决方法:对函数进行修改(4) 问题4l 问题描述:变量出现错误l 问题分析:粗心大意l 解决方法:重新检查程序,更改错误变量4 测试及运行结果(1)列车基本信息输入的测试结果如图4.1所示。图4.1 列车基本信息

16、输入测试结果(2)列车信息查询的具体的测试结果如图4.2所示。图4.2 列车信息查询测试结果(3)订票的具体的测试结果如图4.3所示。图4.3订票测试结果(4)退票的具体的测试结果如图4.4所示。图4.4 退票测试结果参考文献【1】严蔚敏,吴伟民.数据结构(C语言版)【M】.北京:清华大学出版社,2006【2】吕国英.算法设计与分析【M】.北京:清华大学出版社,2006【3】徐宝文 李志.C程序设计语言【M】.北京:机械工业出版社附 录源程序清单:#include #include #include #define MAXSIZE 3 typedef struct wat_ros char n

17、ame10; int req_amt; struct wat_ros *next;qnode,*qptr;typedef struct pqueue qptr front; qptr rear;linkqueue;typedef struct ord_ros char name10; int ord_amt; int grade; struct ord_ros *next;linklist;struct line char ter_name10; char cc_num10; char cx_num10; char day7; int tkt_amt; int tkt_sur; linklis

18、t *order; linkqueue wait;lineinfo;struct line startMAXSIZE;int iii=0;void add() struct line infoMAXSIZE; printf(终点站名、车次号、车厢号、开车周日、乘员定额、余票量n); scanf(%s%s%s%s%d%d,startiii.ter_name,startiii.cc_num,startiii.cx_num,startiii.day,&startiii.tkt_amt,&startiii.tkt_sur); iii+;void display(struct line *info)pr

19、intf (%8st%3st%st%4stt%3dt%10dn,info-ter_name,info-cc_num,info-cx_num,info-day,info-tkt_amt,info-tkt_sur);void list() struct line *info; int i=0; info=start; printf(终点站名t车次号t车厢号t开车周日t乘员定额t余票量n); while(iiii) display(info); info+; i+; printf(nn);void search() struct line *info,*find(); char name10; in

20、t i=0; info=start; printf(1.按车次查询t2.按终点站查询t3.按路线查询n); int aa; scanf(%d,&aa); if (aa=2) printf(请输入终点站名:);scanf(%s,name); while(iter_name) break; info+; i+; if(i=MAXSIZE) printf(对不起,该路线未找到!n); else printf(终点站名t车次号t车厢号t开车周日t乘员定额t余票量n);display(info); if (aa=1) printf(请输入车次:);scanf(%s,name); while(icc_nu

21、m) break; info+; i+; if(i=MAXSIZE) printf(对不起,该路线未找到!n); else printf(终点站名t车次号t车厢号t开车周日t乘员定额t余票量n);display(info);if (aa=3) printf(请输入路线:);scanf(%s,name); while(iter_name) break; info+; i+; if(i=MAXSIZE) printf(对不起,该路线未找到!n); else printf(终点站名t车次号t车厢号t开车周日t乘员定额t余票量n);display(info);struct line *find() s

22、truct line *info; char number10; int i=0; info=start; printf(请输入车次号:); scanf(%s,number); while(icc_num) return info; info+; i+; printf(对不起,该路线末找到!n); return NULL;void prtlink() linklist *p; struct line *info; info=find(); p=info-order; if(p!=NULL) printf(客户姓名 订票数额 座位等级n); while(p) printf(%stt%dt%dn,

23、p-name,p-ord_amt,p-grade); p=p-next; else printf(该路线线没有客户信息!n);linklist *insertlink(linklist *head,int amount,char name,int grade) linklist *p1,*new1; p1=head; new1=(linklist *)malloc(sizeof(linklist); if(!new1) printf(nOut of memory!n);return NULL; strcpy(new1-name,name); new1-ord_amt=amount; new1-

24、grade=grade; new1-next=NULL; if(head=NULL) head=new1;new1-next=NULL; else head=new1; new1-next=p1; return head;linkqueue appendqueue(linkqueue q,char name,int amount) qptr new1; new1=(qptr)malloc(sizeof(qnode); strcpy(new1-name,name); new1-req_amt=amount; new1-next=NULL; if(q.front=NULL) q.front=new

25、1; else q.rear-next=new1; q.rear=new1; return q;void order() struct line *info; int amount,grade; char name10; info=start; if(!(info=find() return; printf(请输入你订票所需要的数量:); scanf(%d,&amount); if(amountinfo-tkt_amt) printf(n对不起,您输入的票的数量已经超过乘员定额!); return; if(amounttkt_sur) int i; printf(请输入您的姓名(订票客户):)

26、; scanf(%s,name); printf(请输入%s票的座位等级:,name); scanf(%d,&grade); info-order=insertlink(info-order,amount,name,grade); for(i=0;itkt_amt-info-tkt_sur+i+1); info-tkt_sur-=amount; printf(n祝您乘坐愉快!n); else char r; printf(n已经没有更多的票,您需要排队等候吗?(Y/N); r=getchar(); printf(%c,r); if(r=Y|r=y) printf(n请输入您的姓名(排队订票客户

27、):); scanf(%s,name); info-wait=appendqueue(info-wait,name,amount); printf(n注册成功!n); else printf(n欢迎您下次再次订购!n); void return_tkt() struct line *info; qnode *t,*back,*f,*r; int grade; linklist *p1,*p2,*head; char cusname10; if(!(info=find() return; head=info-order; p1=head; printf(请输入你的姓名(退票客户):); scan

28、f(%s,cusname); while(p1!=NULL) if(!strcmp(cusname,p1-name) break; p2=p1;p1=p1-next; if(p1=NULL) printf(对不起,你没有订过票!n);return; else if(p1=head) head=p1-next; else p2-next=p1-next; info-tkt_sur+=p1-ord_amt; grade=p1-grade; printf(%s成功退票!n,p1-name); free(p1); info-order=head; f=(info-wait).front; r=(inf

29、o-wait).rear; t=f; while(t) if(info-tkt_sur=info-wait.front-req_amt) int i; info-wait.front=t-next; printf(%s订票成功!n,t-name); for(i=0;ireq_amt;i+) printf(%s的座位号是:%dn,t-name,(info-tkt_sur)-i); info-tkt_sur-=t-req_amt; info-order=insertlink(info-order,t-req_amt,t-name,grade); free(t); break; back=t;t=t

30、-next; if(info-tkt_sur)=(t-req_amt)&t!=NULL) int i; back-next=t-next; printf(%s订票成功!n,t-name); for(i=0;ireq_amt;i+) printf(s seat number is:%dn,t-name,(info-tkt_sur)-i); info-tkt_sur-=t-req_amt; info-order=insertlink(info-order,t-req_amt,t-name,grade); free(t);break; if(f=r) break; int menu_select()

31、 int c; char s20; printf(ntt铁路客运订票系统n); printf(*n); printf(0.增加车次信息:n); printf(1.浏览路线信息:n); printf(2.浏览已订票客户信息:n); printf(3.查询n); printf(4.办理订票业务:n); printf(5.办理退票业务:n); printf(6.退出系统n); printf(*n); do printf(请选择:); scanf(%s,s); c=atoi(s); while(c7); return c; int main() while(1) switch(menu_select(

32、)case 0: add();break; case 1:list();break; case 2:prtlink();break; case 3:search();break; case 4:order();break; case 5:return_tkt();break; case 6:printf(n欢迎使用本系统,再见!n);exit(0); 课程设计总结:火车成为越来越受欢迎的交通工具,随着愈来愈多的人选择火车成为出行的交通工具,火车站需要管理的信息量也越来越多,这种情况下,利用计算机来管理和存储火车,客户信息就会很有效率。火车售票系统要求通过链表实现列车的基本信息管理,即输入火车,

33、路线所涉及的基本信息,包括终点站,车次号,车厢号,开车周日,乘员定额,余票量,已订票的客户名单。通过查找功能实现列车的三种基本信息查询方式。并实现订票和退票功能。本题主要通过链表和函数实现火车售票系统的各种功能,首先要利用定义各种函数来分别实现每一个功能模块,包括信息插入函数来增加列车的基本信息,然后设计打印函数输出路线的基本信息,再定义查找函数实现列车基本信息查找功能,按照要求设置三种查找方式,设计订票函数读取乘客信息,通过指针实现订票乘客的信息查找功能,定义退票函数,实现退票功能。最后通过主函数,设计功能界面,并将各个功能连接起来。实现火车售票系统。该题运用了链表中的循环链表,这样对列车基

34、本信息存储和查询以及乘客信息的存储和查询节省了时间,提高了工作效率。并在查询等功能模块运用指针返回查询到的有关信息,省时省力。四个结构体分别对列车基本信息,已订票乘客信息,未订票乘客信息和排队等候的乘客信息进行了定义,方便了信息的输入和查询。通过这次课设,我对数据结构这门课有了更为深刻的认识,数据结构以C语言为基础,又高于C语言。数据结构也是通过定义不同的函数来实现各种功能,这次课设,让我对链表有了更深层次的掌握,链表虽然看起来简单,但运用起来却奥妙无穷。课设也锻炼了我们的自学能力和文献查阅能力,加强了对项目流程基本步骤的了解,丰富了编程经验,提高了程序调试能力。指导教师评语:指导教师(签字): 年 月 日课程设计成绩

展开阅读全文
温馨提示:
1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
2: 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
3.本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!