火车票订票系统.docx
- 文档编号:3875894
- 上传时间:2022-11-26
- 格式:DOCX
- 页数:37
- 大小:736.53KB
火车票订票系统.docx
《火车票订票系统.docx》由会员分享,可在线阅读,更多相关《火车票订票系统.docx(37页珍藏版)》请在冰豆网上搜索。
火车票订票系统
软件技术基础课程设计说明书
题目:
火车订票系统的设计
学生姓名:
学号:
院(系):
电气与信息工程学院
专业:
电子信息科学与技术
指导教师:
杨帆
2015年06月26日
课程设计报告
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
#include
structtrain
{
charnum[10];//火车编号
charltime[10];//出发时间
charatime[10];//到达时间
charleave[10];//出发站
chararrive[10];//到达站
charthrough[10];//途径大站
charprice[10];//票价
charshengpiao[10];//剩余票数
structtrain*next;
};//火车信息单链表
structman
{
charname[10];//姓名
charphone[11];//手机号
charnumber[18];//身份证号
structman*next;
};//客户信息单链表
voidmain()//主函数,菜单程序
{
train*head=(train*)malloc(sizeof(train));
man*h=(man*)malloc(sizeof(man));
head->next=NULL;
h->next=NULL;
charchoice;
printf("\n----------------------------------------------\n");
printf("----------------------------------------------\n");
printf("------\n");
printf("---欢迎进入火车票管理系统---\n");
printf("------\n");
printf("----------------------------------------------\n");
printf("----------------------------------------------\n\n");
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录入火车信息模块所涉及的函数分析
源代码:
voidinsert(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火车票订票模块所涉及的函数分析
源代码:
voidbuy(man*h)//订票函数
{
inti,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;k { man*p=h;//申请头结点 man*newrecord=(man*)malloc(sizeof(man));//申请存空间 printf("输入客户信息\n"); printf("姓名: "); scanf("%s\n",newrecord->name); printf("手机号: "); scanf("%s\n",newrecord->phone); printf("身份证号: "); scanf("%s\n",newrecord->number); printf("==================\n"); printf("购票成功\n"); printf("车厢号: %d\n",&a); printf("座位号: %d\n",&b); printf("订单号: %d\n",&c); printf("==================\n"); while(p->next! =NULL) { p=p->next; b=b+1; c=c+1; } p->next=newrecord; newrecord->next=NULL; } } } 流程图: 3.4退订火车票模块所涉及的函数分析 源代码: voidtui(man*h)//退票函数 {intn,m; m=1000; printf("是否退票(1/0): "); scanf("%d",&n); if(n==1) {printf("退票成功\n"); printf("订单号为: %d",&m); m=m+1; } } voidnam(man*h)//查询客户信息函数 { man*p=h->next; charname[10]; printf("请输入要查询的名字: \n"); p=h->next; scanf("%s",name); while(p! =NULL) { if(strcmp(p->name,name)==0) { printf("客户信息: \n"); printf("姓名: %s\n",p->name); printf("手机号: %s\n",p->phone); printf("身份证号: %s\n",p->number); return; } p=p->next; } } 流程图: 3.5查询成员模块所涉及的函数分析 源代码: voidfind(train*head)//查询 { train*p=head->next; charnum[10]; charleave[10]; chararrive[10]; inty; 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("编号: %s\n",p->num); printf("出发时间: %s\n",p->ltime); printf("到达时间: %s\n",p->atime); printf("出发站: %s\n",p->leave); printf("到达站: %s\n",p->arrive); printf("票价: %s\n",p->price); printf("途经城市: %s\n",p->through); printf("剩票: %s\n",p->shengpiao); return; } p=p->next; } } elseif(y==2) {printf("请输入要查找的出发站: "); scanf("%s",leave); while(p! =NULL) { if(strcmp(p->leave,leave)==0) { printf("编号: %s\n",p->num); printf("出发时间: %s\n",p->ltime); printf("到达时间: %s\n",p->atime); printf("出发站: %s\n",p->leave); printf("到达站: %s\n",p->arrive); printf("票价: %s\n",p->price); printf("途经城市: %s\n",p->through); printf("剩票: %s\n",p->shengpiao); return; } p=p->next; } printf("不存在此出发站的车次\n"); } elseif(y==3) { printf("请输入要查找的到达站: "); scanf("%s",arrive); while(p! =NULL) { if(strcmp(p->arrive,arrive)==0) { printf("编号: %s\n",p->num); printf("出发时间: %s\n",p->ltime); printf("到达时间: %s\n",p->atime); printf("出发站: %s\n",p->leave); printf("到达站: %s\n",p->arrive); printf("票价: %s\n",p->price); printf("途经城市: %s\n",p->through); printf("剩票: %s\n",p->shengpiao); return; } p=p->next; } printf("不存在此终点站的车次\n"); } } voidshow(train*head)//显示列车所有信息 { train*p=head->next; while(p! =NULL) { printf("编号: %s\n",p->num); printf("出发时间: %s\n",p->ltime); printf("到达时间: %s\n",p->atime); printf("出发站: %s\n",p->leave); printf("到达站: %s\n",p->arrive); printf("票价: %s\n",p->price); printf("途经城市: %s\n",p->through); printf("剩票: %s\n",p->shengpiao);; p=p->next; } } 流程图: 3.6显示成员模块所涉及的函数分析 源代码: voidshow(train*head)//显示列车所有信息 { train*p=head->next; while(p! =NULL) { printf("编号: %s\n",p->num); printf("出发时间: %s\n",p->ltime); printf("到达时间: %s\n",p->atime); printf("出发站: %s\n",p->leave); printf("到达站: %s\n",p->arrive); printf("票价: %s\n",p->price); printf("途经城市: %s\n",p->through); printf("剩票: %s\n",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 #include structtrain { charnum[10];//火车编号 charltime[10];//出发时间 charatime[10];//到达时间 charlea
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 火车票 订票 系统
![提示](https://static.bdocx.com/images/bang_tan.gif)