火车票订票系统.doc_第1页
火车票订票系统.doc_第2页
火车票订票系统.doc_第3页
火车票订票系统.doc_第4页
火车票订票系统.doc_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

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

文档简介

目 录1 课程设计介绍.31.1 课程设计内容31.2 课程设计要求32 概要介绍32.1系统总体设计32.2各子模块设计42.2.1主函数模块:42.2.2火车信息录入模块:42.2.3火车订票模块:52.2.4火车票退票模块:52.2.5火车车次查询模块:62.2.6显示火车信息模块:73 详细设计73.1主函数模块所涉及的函数分析73.2录入火车信息模块所涉及的函数分析113.3火车票订票模块所涉及的函数分析123.4退订火车票模块所涉及的函数分析143.5查询成员模块所涉及的函数分析153.6显示成员模块所涉及的函数分析194 软件测试204.1主程序运行界面204.2功能测试214.2.1火车信息录入功能模块运行结果截图214.2.2火车票订票功能模块运行结果截图214.2.3退票功能模块运行结果截图224.2.4查询功能模块运行结果截图234.2.5显示功能模块运行结果截图255 总结255.1设计中出现的问题以及解决的办法汇总(调试过程记录)255.2课程设计心得体会27所有源代码:28参考文献3712 软件技术基础课程设计说明书题目: 火车订票系统的设计 学生姓名: 学 号: 院 (系): 电气与信息工程学院 专 业: 电子信息科学与技术指导教师: 杨帆 2015 年 06月26日1课程设计报告1 课程设计介绍 1.1 课程设计内容 软件技术基础课程是非计算机本科专业学习计算机软件基础知识的综合性基础课程。学习本课程,要求学生对软件技术的各个组成部分的基础知识、发展趋势有全面、系统的了解;掌握基本数据结构,达到能熟练运用解决实际问题的程度;掌握操作系统基本原理和类型,了解系统各种管理功能。通过自学了解软件工程的基本概念,软件设计开发的过程和相关技术。 实践环节具体任务:设计、开发一种火车订票系统。通过此系统可以实现如下功能:火车车次信息录入、车次信息查询、火车票订票、火车票退票等。1.2 课程设计要求 系统应该至少提供以下模块: 火车车次信息录入: 可以录入车次情况(包含车次编号、出发时间、出发站、到达站、到达时间、途经主要大站(需要考虑如何保存这些信息)等信息) 车次信息查询: 可以查询某个车次的情况(如,输入车次号,查询出站、到站时间,票价,票价折扣,确定车次是否满员);可以输入出发站点、到达站点城市,查询火车车次情况; 火车票订票: 可以订票,如果该车次已经无票,可以提供相关可选择车次(同样到达点、途经出发站的其他火车)订票时需要提供时间、车次、车厢号、座位号、票价、订票人姓名、订票人联系方式、证件号码、订票数量、订单号等,只能比这个多,不能少于这些信息; 火车票退票: 可退票,退票后修改相关数据;客户资料有姓名,证件号,订票数量及车次情况,订单要有编号。 要求: 根据以上功能说明,设计火车票订票系统订票环节涉及的信息,订票信息的存储结构,设计程序完成功能。2 概要介绍 2.1系统总体设计 首先考虑好选用链表结构存储通讯录。经过对程序设计题目的分析可知,整个程序的设计实现大致分为六个模块,每一个模块对应一个函数。这些函数分别为:火车信息录入函数,火车车次查询函数,火车票订票函数,火车票退票函数,显示火车信息函数,主函数(包括菜单控制程序函数)。 2.2各子模块设计2.2.1主函数模块: 实现程序最初运行时的菜单界面,以及对其他模块的调用。同时建立火车信息单链表。其中采用switch函数实现对菜单目录的每个模块的运行。 结构框图:2.2.2火车信息录入模块: 主要实现程序最初运行时火车信息的录入。用头插入法建立带有头结点的单链表。结构框图:运行录入函数依次输入编号、出发时间、到达时间,出发站、终点站、途径大站、票价、剩余票数。并将其分别保存在所建立的链表中返回主菜单2.2.3火车订票模块: 实现的功能是查询到火车信息后,客户购买火车票,输入客户的姓名、手机号、身份证号等基本信息并依次保存到客户链表位置。 结构框图:运行订票函数调用查询函数,查询所需求的列车信息购买火车票,输入客户的姓名、手机号、身份证号自动生成车厢号、座位号及订单号返回主菜单界面2.2.4火车票退票模块: 实现的是查询已订票的客户,然后退票并输出订单号。结构框图:运行退票函数查询已订票的客户信息并输出退订查询的客户火车票,输出订单号返回到主菜单2.2.5火车车次查询模块: 实现的是查询目前链表里火车的信息。该模块又细分为3个小模块,分别是按编号查询、按出发站查询、按终点站查询,用if选择语句实现对这三个小模块的运行选择。查询功能用strcmp比较函数实现,Strcmp函数比较原理:例如:strcmp(str1,str2); 比较的结果由函数值带回。如果字符串1=字符串2,则函数值为0.如果字符串1字符串2,则函数值为一个正整数.如果字符串1字符串2,则函数值为一个负整数.流程图:2.2.6显示火车信息模块: 实现功能为显示链表中所有的火车信息。原理是遍历链表,并输出所有信息。结构框图:运行显示函数遍历链表,输出所有火车信息返回主菜单界面3 详细设计 3.1主函数模块所涉及的函数分析源代码:#include#include#include/使用getch()#includestruct train char num10; /火车编号 char ltime10; /出发时间 char atime10;/到达时间 char leave10;/出发站 char arrive10; /到达站 char through10;/途径大站 char price10;/票价 char shengpiao10;/剩余票数 struct train *next;/火车信息单链表struct manchar name10; /姓名 char phone11; /手机号 char number18;/身份证号struct man *next;/客户信息单链表void main()/主函数,菜单程序 train *head=(train*)malloc(sizeof(train); man *h=(man*)malloc(sizeof(man); head-next=NULL; h-next=NULL; char choice; printf(n-n);printf(-n);printf(- -n);printf(- 欢迎进入火车票管理系统 -n);printf(- -n);printf(-n);printf(-nn);printf( n - 请输入选项 -n);printf( 1.火车信息录入n);printf( 2.火车信息查询n);printf( 3.购票n); printf( 4.退票n); printf( 5.显示火车信息n); printf( 6.退出管理系统n); printf( 请按键选择n); while(true) printf(请按键选择操作:n); fflush(stdin); /清除缓冲区 choice=getch(); switch(choice) case 1: printf(*n); printf(* 火 车 信 息 的 录 入 *n); printf(*n); insert(head);/调用录入函数 break; case 2: printf(*n); printf(* 查 询 火 车 信 息 *n); printf(*n); find(head);/调用查询函数 break; case 3: printf(*n); printf(* 购 买 火 车 票 *n); printf(*n);printf(*请查询火车信息*n);find(head);/调用查询函数 buy(h);/调用买票函数 break; case 4: printf(*n); printf(* 退 票 *n); printf(*n); nam(h);/调用查询客户函数 tui(h);/调用退票函数 break; case 5: printf(*n); printf(* 显 示 火 车 信 息 *n); printf(*n); show(head); break; case 6: exit(0); default: printf(输入错误n); 流程图:3.2录入火车信息模块所涉及的函数分析源代码:void insert(train* head)/录入火车信息 train *p=head;/申请头结点 train *newrecord=(train*)malloc(sizeof(train);/申请存空间 printf(输入火车信息n); printf(编号:); scanf(%s,newrecord-num); printf(出发时间:); scanf(%s,newrecord-ltime); printf(到达时间:); scanf(%s,newrecord-atime); printf(出发站:); scanf(%s,newrecord-leave); printf(到达站:); scanf(%s,newrecord-arrive); printf(途径大站:); scanf(%s,newrecord-through); printf(票价:); scanf(%s,newrecord-price); printf(剩余票数:); scanf(%s,newrecord-shengpiao); while(p-next!=NULL) if(strcmp(p-num,newrecord-num)=0) printf(此编号的列车已存在!n); return; p=p-next; p-next=newrecord; newrecord-next=NULL; printf(添加成功n);流程图:3.3火车票订票模块所涉及的函数分析源代码:void buy(man* h)/订票函数int i,j,k,a,b,c;a=1;b=1;c=1001;printf(是否订票(1/0):);scanf(%d,&i);if(i=1)printf(请输入订票数量n);scanf(%d,&j);for(k=0;kname); printf(手机号:); scanf(%sn,newrecord-phone); printf(身份证号:); scanf(%sn,newrecord-number); printf(=n); printf(购票成功n); printf(车厢号:%dn,&a); printf(座位号:%dn,&b); printf(订单号:%dn,&c); printf(=n); while(p-next!=NULL) p=p-next; b=b+1; c=c+1; p-next=newrecord; newrecord-next=NULL; 流程图:3.4退订火车票模块所涉及的函数分析源代码:void tui(man* h)/退票函数 int n,m; m=1000; printf(是否退票(1/0):); scanf(%d,&n); if(n=1) printf(退票成功n); printf(订单号为:%d,&m); m=m+1; void nam(man* h)/查询客户信息函数 man *p=h-next; char name10; printf(请输入要查询的名字: n); p=h-next; scanf(%s,name); while(p!=NULL) if(strcmp(p-name,name)=0) printf(客户信息:n); printf(姓名:%sn,p-name); printf(手机号:%sn,p-phone); printf(身份证号:%sn,p-number); return; p=p-next;流程图:3.5查询成员模块所涉及的函数分析源代码:void find(train *head)/查询train *p=head-next; char num10; char leave10;char arrive10; int y; printf(=n); printf( 1. 按编号查询 n); printf( 2. 按出发站查询 n); printf( 3. 按到达站查询 n); printf(=n); printf( 请 选 择: ); p=head-next; scanf(%d,&y); if (y=1) printf(请输入要查找的编号:); scanf(%s,num); while(p!=NULL) if(strcmp(p-num,num)=0) printf(编号:%sn,p-num); printf(出发时间:%sn,p-ltime); printf(到达时间:%sn, p-atime); printf(出发站:%sn,p-leave); printf(到达站:%sn,p-arrive); printf(票价:%sn,p-price); printf(途经城市:%sn,p-through); printf(剩票:%sn,p-shengpiao); return; p=p-next;else if(y=2) printf( 请输入要查找的出发站:); scanf(%s,leave); while(p!=NULL) if(strcmp(p-leave,leave)=0) printf(编号:%sn,p-num); printf(出发时间:%sn,p-ltime); printf(到达时间:%sn, p-atime); printf(出发站:%sn,p-leave); printf(到达站:%sn,p-arrive); printf(票价:%sn,p-price); printf(途经城市:%sn,p-through); printf(剩票:%sn,p-shengpiao); return; p=p-next; printf(不存在此出发站的车次n);else if(y=3) printf( 请输入要查找的到达站:); scanf(%s,arrive); while(p!=NULL) if(strcmp(p-arrive,arrive)=0) printf(编号:%sn,p-num); printf(出发时间:%sn,p-ltime); printf(到达时间:%sn, p-atime); printf(出发站:%sn,p-leave); printf(到达站:%sn,p-arrive); printf(票价:%sn,p-price); printf(途经城市:%sn,p-through); printf(剩票:%sn,p-shengpiao); return; p=p-next; printf(不存在此终点站的车次n);void show(train *head)/显示列车所有信息 train *p=head-next; while(p!=NULL) printf(编号:%sn,p-num); printf(出发时间:%sn,p-ltime); printf(到达时间:%sn, p-atime); printf(出发站:%sn,p-leave); printf(到达站:%sn,p-arrive); printf(票价:%sn,p-price); printf(途经城市:%sn,p-through); printf(剩票:%sn,p-shengpiao); p=p-next; 流程图: 3.6显示成员模块所涉及的函数分析源代码:void show(train *head)/显示列车所有信息 train *p=head-next; while(p!=NULL) printf(编号:%sn,p-num); printf(出发时间:%sn,p-ltime); printf(到达时间:%sn, p-atime); printf(出发站:%sn,p-leave); printf(到达站:%sn,p-arrive); printf(票价:%sn,p-price); printf(途经城市:%sn,p-through); printf(剩票:%sn,p-shengpiao); p=p-next; 流程图:4 软件测试4.1主程序运行界面4.2功能测试4.2.1火车信息录入功能模块运行结果截图 在录入模块中输入火车基本信息,并进行后续的功能测试。在录入后采用模块功能5输出链表中目前所有的火车信息,以此可以检验是否录入成功。录入截图:显示截图:4.2.2火车票订票功能模块运行结果截图 继续火车信息录入功能后进行订票功能模块运行。首先调用查询模块查询所需求的列车信息,然后订票输入订票人基本信息。查询截图:订票客户信息截图:4.2.3退票功能模块运行结果截图 继订票模块功能测试后,进行退票功能测试。首先查询已经订票客户的信息,然后退票。退票截图:4.2.4查询功能模块运行结果截图 查询功能模块分为三部分,以下分别为三个功能的截图。1.按编号查询:2.按出发站查询:3:按终点站查询:如果没有该列车的截图: 4.2.5显示功能模块运行结果截图5 总结5.1设计中出现的问题以及解决的办法汇总(调试过程记录)没有解决的问题: 设计中有一些问题没有在软件中得以实现,比如老师要求的在火车票订票模块中,如果该车次已经无票,可以提供相关可选择车次,该系统中没有实现这一功能;没有折扣等列车基本信息。在订票模块中,输入客户信息时,信息错位,如下图: 在输入客户信息时有错,输入名字后本应该输入手机号,但是系统没有弹出手机号而是需要继续输入,这样就导致后边退票时查询的客户信息发生错位,问题原因所在应该是指针的问题。 完成订票后,没有将单链表中火车剩余票数修改,没有将俩个单链表联系起来所以没有实现这一功能。 实现车厢号和座位号时,原计划是车厢号从1开始,每节车厢30个座位,座位满30后车厢号加一,然后座位号从一号重新开始,但是代码一直没有编译通过。已经解决的问题: 在录入信息输入后,一开始输出的页面是说有信息在一行,后面运行后发现会发生错位现象,后来在每输完一个信息后就换行,输出也同样如此,这样就可以更加直观的浏览到信息,不会错位。而且一开始的输出方法录入信息时必须制定信息长度,比如编号是四位,手机号是十一位,时间地点等都有输入字数限制,后来发现这一弊端后进行改进,在换成了换行输入输出后,都不用规定长度。但是这样有个缺陷就是数据输错后不容易发现,而且不符合常理,比如手机号只有11位,身份证号应该是18位。5.2课程设计心得体会 本来一开始做的时通讯录系统,后来又在假期重新做的火车票订票系统。如今系统还不是很完善,就如上文所说,有部分小细节还不能实现,而且还有点问题没有解决。经过这次课程设计的训练,我的编程能力有了较明显的提高,尤其是对顺序表和链表的认识和使用有了显著的提高。然而,虽然只是编写这么一个小小的程序,却是我意识到自己的不足以及需要提高的地方。程序语句的不熟练使我在编程初期工作效率相当的低下。不断地翻书让我很痛苦,而且浪费了很多时间。 最后,通过这两周的编程,我感觉到了程序的来之不易。平时惯用的免费软件没觉得有什么,但通过本次的编程后我感觉到了编程者的艰辛。这次编程我学到了很多,也懂得了很多。我的C语言又有了新的提高,质的升华。所有源代码:#include#include#include/使用getch()#includestruct train char num10; /火车编号 char ltime10; /出发时间 char atime10;/到达时间 char leave10;/出发站 char arrive10; /到达站 char through10;/途径大站 char price10;/票价 char shengpiao10;/剩余票数 struct train *next;/火车信息单链表struct manchar name10; /姓名 char phone11; /手机号 char number18;/身份证号struct man *next;/客户信息单链表 void buy(man* h)/订票函数int i,j,k,a,b,c;a=1;b=1;c=1001;printf(是否订票(1/0):);scanf(%d,&i);if(i=1)printf(请输入订票数量n);scanf(%d,&j);for(k=0;kname); printf(手机号:); scanf(%sn,newrecord-phone); printf(身份证号:); scanf(%sn,newrecord-number); printf(=n); printf(购票成功n); printf(车厢号:%dn,&a); printf(座位号:%dn,&b); printf(订单号:%dn,&c); printf(=n); while(p-next!=NULL) p=p-next; b=b+1; c=c+1; p-next=newrecord; newrecord-next=NULL; void tui(man* h)/退票函数 int n,m; m=1000; printf(是否退票(1/0):); scanf(%d,&n); if(n=1) printf(退票成功n); printf(订单号为:%d,&m); m=m+1; void nam(man* h)/查询客户信息函数 man *p=h-next; char name10; printf(请输入要查询的名字: n); p=h-next; scanf(%s,name); while(p!=NULL) if(strcmp(p-name,name)=0) printf(客户信息:n); printf(姓名:%sn,p-name); printf(手机号:%sn,p-phone); printf(身份证号:%sn,p-number); return; p=p-next;void insert(train* head)/录入火车信息函数 train *p=head;/申请头结点 train *newrecord=(train*)malloc(sizeof(train);/申请存空间 printf(输入火车信息n); printf(编号:); scanf(%s,newrecord-num); printf(出发时间:); scanf(%s,newrecord-ltime); printf(到达时间:); scanf(%s,newrecord-atime); printf(出发站:); scanf(%s,newrecord-leave); printf(到达站:); scanf(%s,newrecord-arrive); printf(途径大站:); scanf(%s,newrecord-through); printf(票价:); scanf(%s,newrecord-price); printf(剩余票数:); scanf(%s,newrecord-shengpiao); while(p-next!=NULL) if(strcmp(p-num,newrecord-num)=0) printf(此编号的列车已存在!n); return; p=p-next; p-next=newrecord; newrecord-next=NULL; printf(添加成功n);void find(train *head)/查询函数train *p=head-next; char num10; char leave10;char arrive10; int y; printf(=n); printf( 1. 按编号查询 n); printf( 2. 按出发站查询 n); printf( 3. 按到达站查询 n); printf(=n); printf( 请 选 择: ); p=head-next; scanf(%d,&y); if (y=1) printf(请输入要查找的编号:); scanf(%s,num); while(p!=NULL) if(strcmp(p-num,num)=0) printf(编号:%sn,p-num); printf(出发时间:%sn,p-ltime); printf(到达时间:%sn, p-atime); printf(出发站:%sn,p-leave); printf(到达站:%sn,p-arrive); printf(票价:%sn,p-price); printf(途经城市:%sn,p-through); printf(剩票:%sn,p-shengpiao); return; p=p-next;else if(y=2) printf( 请输入要查找的出发站:); scanf(%s,leave); while(p!=NULL) if(strcmp(p-leave,leave)=0) printf(编号:%sn,p-num); printf(出发时间:%sn,p-ltime); printf(到达时间:%sn, p-atime); printf(出发站:%sn,p-leave); printf(到达站:%sn,p-arrive); printf(票价:%sn,p-price); printf(途经城市:%sn,p-through); printf(剩票:%sn,p-shengpiao); return; p=p-next; printf(不存在此出发站的车次n);else if(y=3) printf( 请输入要查找的到达站:); scanf(%s,arrive); while(p!=NULL) if(strcmp(p-arrive,arrive)=0) printf(编号:%sn,p-num); printf(出发时间:%sn,p-ltime); printf(到达时间:%sn, p-atime); printf(出发站:%sn,p-leave); printf(到达站:%sn,p-arrive); printf(票价:%sn,p-price); printf(途经城市:%sn,p-through); printf(剩票:%sn,p-shengpiao); return; p=p-next; printf(不存在此终点站的车次n);void show(train *head)/显示列车所有信息 train *p=head-next; while(p!=NULL) printf(编号:%sn,p-num)

温馨提示

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

评论

0/150

提交评论