数据结构课程设计火车售票系统的实现_第1页
数据结构课程设计火车售票系统的实现_第2页
数据结构课程设计火车售票系统的实现_第3页
数据结构课程设计火车售票系统的实现_第4页
数据结构课程设计火车售票系统的实现_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

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

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

3、003 姓 名: 张译文 指导教师: 目目 录录 1 需求分析需求分析.1 1.1 问题描述.1 1.2 问题理解.1 2 系统设计系统设计.3 2.1 总体方案设计.3 2.2 数据结构设计.3 2.3 函数设计.4 2.4 关键流程.5 2.4.1 系统主流程.5 2.4.2 void add()函数流程.6 2.4.3 void search()函数流程.8 2.4.4 void order()函数流程.9 2.4.5void return_tkt()函数流程.9 3 调试分析调试分析.11 4 测试及运行结果测试及运行结果.12 1 需求分析 1.1 问题描述问题描述 火车成为越来越受

4、欢迎的交通工具,随着愈来愈多的人选择火车成为出行的 交通工具,火车站需要管理的信息量也越来越多,这种情况下,利用计算机来管 理和存储火车,客户信息就会很有效率。火车售票系统要求通过链表实现列车的 基本信息管理,即输入火车,路线所涉及的基本信息,包括终点站,车次号,车 厢号,开车周日,乘员定额,余票量,已订票的客户名单。通过查找功能实现列 车的三种基本信息查询方式。并实现订票和退票功能。选择车站售票系统作为课 程设计的课题,就车站的售票流程等进一步了解车站售票系统的原理。 1.2 问题理解问题理解 本题主要通过链表和函数实现火车售票系统的各种功能,首先要利用定义 各种函数来分别实现每一个功能模块

5、,包括信息插入函数来增加列车的基本信息, 然后设计打印函数输出路线的基本信息,再定义查找函数实现列车基本信息查找 功能,按照要求设置三种查找方式,设计订票函数读取乘客信息,通过指针实现 订票乘客的信息查找功能,定义退票函数,实现退票功能。最后通过主函数将各 个功能函数连接起来。 火车站售票系统 列车基本信息管理 列车基本信息查询 订票管理 退票管理 退出系统 上图为简易结构图,首先设计一个简单明了的菜单,让用户可以一目了然的找到 自己想要实现的功能,然后在各个模块中实现具体功能,程序主要分为四个模块, 第一个模块为列车基本信息输入,此模块用来实现列车信息输入功能,用户可根 据提示来完成列车信息

6、的录入。第二个模块为列车信息查询模块,在此模块,用 户可通过三种方式完成对列车信息的查询,即通过车次查询,通过终点站进行查 询,通过路线进行查询,用户可通过简洁明了的提示进行操作。第三个模块为订 票模块,在此模块用户可输入个人基本信息在有余票的情况下进行订票。第四个 模块为退票管理,即对所以得票进行退票。 2 系统设计 2.1 总体方案设计总体方案设计 定义结构体,分别为火车线路的结构体,包括线路要用到的基本信息,已订 票乘客和未订票乘客结构体,以及替补客户结构体。设计列车信息输入函数,输 入线路的基本信息建立链表,设计打印线路基本信息函数,为线路查询做准备。 打印线路函数完成后,接着设计查询

7、函数,可通过车次号、抵达站和线路分别进 行查询,查询过程通过 strcmp()函数实现。设计打印乘客信息函数,并写出输入 客户信息函数,设计订票函数时对前面的函数进行调用,定义一个排队等候的客 户名单域,若出现票数不足时让乘客排队进行等候。最后定义退票函数。通过主 函数让各个功能直观的展现在用户面前。 2.2 数据结构设计数据结构设计 1. 列车基本信息的结构体 结构体:struct line char ter_name10;/终点站名 char cc_num10;/车次号 char cx_num10;/车厢号 char day7;/出发日期 int tkt_amt;/成员定额 int tkt

8、_sur;/余票量 linklist *order;/乘员名单域,指向乘员名单链表的头指针 linkqueue wait;/等候替补的客户名单域,分别指向排队等候名单队头队尾的 指针 lineinfo; 2. 乘客信息 typedef struct ord_ros char name10;/客户姓名 int ord_amt;/订票量 int grade;/车厢等级 struct ord_ros *next; linklist; 3.已定票乘客信息 typedef struct wat_ros char name10;/乘客姓名 int req_amt;/订票量 struct wat_ros *

9、next; qnode,*qptr; 4.等候替补客户 typedef struct pqueue qptr front;/等候替补客户名单域的头指针 qptr rear;/等候替补客户名单域的尾指针 linkqueue; 2.3 函数设计函数设计 1本系统所设计的函数见表 2.1。 表 2.1 函数列表 函数名称函数原型功能描述 mainvoid main();系统主程序 addvoid add()基本信息输入 displayvoid display()打印每条线路的基本信息 listvoid list()打印全部线路信息 searchvoid search()火车票信息查询 ptrlink

10、void prtlink()订票乘客信息 insertlinkvoid insertlink()增加订票乘客 ordervoid order()订票 return-tktvoid return-tkt()退票 menu-selectint menu-select()系统菜单 2本系统函数的调用关系见图 2.1。 main addsearch h order display return-tkt insertlinklist ptrlink 图 2.1 函数调用关系 2.4 关键流程关键流程 2.4.1 系统主流程系统主流程 (1)主函数的简单描述: 通过主函数,将函数的各个功能联合起来,通过对

11、菜单函数的调用,对所需要的 功能进行选择,让用户一目了然的面对系统,随着用户不同的选择,主函数会分 别调用不同的功能函数,进而实现用户的需求。 (2)主函数的流程图 开始 输入选择 是否为 0 n y add 结束 是否为 1 y list n 是否为 2 prtlink y n 是否为 3 是否为 4 是否为 5 y n search n y order y return_tkt n n 图 2.2 主函数的流程图 2.4.2 void add()函数流程函数流程 (1)void add()函数的简单描述: 列车基本信息输入函数,存储列车的基本信息,startiii.ter_name 存储终

12、点站, 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()函数流程函数流程 (1)void search()函数的简单描述: 查找函数

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

14、 strcmpstrcmp strcmp 结束 y n y y nn 图 2.4 void search()函数的流程图 2.4.4 void order()函数流程函数流程 (1)void order()函数的简单描述: 本函数实现的是订票功能,首先需要输入订票的数量,若订票数量在额定范围内, 则输入乘客信息并调用 insertlink 函数保存乘客信息,并显示订票成功,若票数不 够,调用 appendqueue 函数,让顾客进行等候。 (2)void order()函数的流程图 appendqueue 输入信息 appendqueue( ) insertlink() 订票成功 等候 开始

15、输入票数 是否多于余票 结束 n y 图 2.5 void order()函数的流程图 2.4.5void return_tkt()函数流程函数流程 (1)void return_tkt()函数的简单描述 此函数为退票函数,首先,输入乘客的姓名,对乘客是否订票进行查询,若无, 则显示没有定票,若有,则利用链表删除乘客信息,进行退票,并显示退票成功, 剩余票数加一,若有排队等待的乘客则该乘客进行订票。 (2)void return_tkt()函数的流程图 void return_tkt() 删除节点 退票成功 余票加一 没有订票 为正在排队的顾 客订票 乘客姓名 有无此乘客 有无等候乘客 结束

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

17、:重新检查程序,更改错误变量 4 测试及运行结果 (1)列车基本信息输入的测试结果如图 4.1 所示。 图 4.1 列车基本信息输入测试结果 (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】.北京:机

18、械工业出版社 附 录 源程序清单: #include #include #include #define maxsize 3 typedef struct wat_ros char name10; 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; struc

19、t line char ter_name10; char cc_num10; char cx_num10; char day7; int tkt_amt; int tkt_sur; linklist *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,sta

20、rtiii.cx_num,startiii. day, iii+; void display(struct line *info) printf (%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); inf

21、o+; i+; printf(nn); void search() struct line *info,*find(); char name10; int i=0; info=start; printf(1.按车次查询t2.按终点站查询t3.按路线查询n); int aa; scanf(%d, if (aa=2) printf(请输入终点站名:); scanf(%s,name); while(iter_name) break; info+; i+; if(i=maxsize) printf(对不起,该路线未找到!n); else printf(终点站名t 车次号t 车厢号t 开车周日t 乘员定

22、额t 余票量n); display(info); if (aa=1) printf(请输入车次:); scanf(%s,name); while(icc_num) 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(对不起,

23、该路线未找到!n); else printf(终点站名t 车次号t 车厢号t 开车周日t 乘员定额t 余票量n); display(info); struct line *find() struct 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 *in

24、fo; info=find(); p=info-order; if(p!=null) printf(客户姓名 订票数额 座位等级n); while(p) printf(%stt%dt%dn,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

25、(!new1) printf(nout of memory!n);return null; strcpy(new1-name,name); new1-ord_amt=amount; new1-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(

26、qnode); strcpy(new1-name,name); new1-req_amt=amount; new1-next=null; if(q.front=null) q.front=new1; 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, if(amountinfo-tkt_amt

27、) printf(n 对不起,您输入的票的数量已经超过乘员定额!); return; if(amounttkt_sur) int i; printf(请输入您的姓名(订票客户):); scanf(%s,name); printf(请输入%s 票的座位等级:,name); scanf(%d, 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 已

28、经没有更多的票,您需要排队等候吗?(y/n); r=getchar(); printf(%c,r); if(r=y|r=y) printf(n 请输入您的姓名(排队订票客户):); 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 cu

29、sname10; if(!(info=find() return; head=info-order; p1=head; printf(请输入你的姓名(退票客户):); scanf(%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

30、-grade; printf(%s 成功退票!n,p1-name); free(p1); info-order=head; f=(info-wait).front; r=(info-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-re

31、q_amt; info-order=insertlink(info-order,t-req_amt,t-name,grade); free(t); break; back=t;t=t-next; if(info-tkt_sur)=(t-req_amt) 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() 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); pr

温馨提示

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

评论

0/150

提交评论