火车票订票系统Word格式文档下载.docx
《火车票订票系统Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《火车票订票系统Word格式文档下载.docx(37页珍藏版)》请在冰豆网上搜索。
火车票退票:
可退票,退票后修改相关数据;
客户资料有姓名,证件号,订票数量及车次情况,订单要有编号。
要求:
根据以上功能说明,设计火车票订票系统订票环节涉及的信息,订票信息的存储结构,设计程序完成功能。
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<
stdio.h>
stdlib.h>
conio.h>
//使用getch()
string.h>
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->
charchoice;
printf("
\n----------------------------------------------\n"
);
----------------------------------------------\n"
------\n"
---欢迎进入火车票管理系统---\n"
----------------------------------------------\n\n"
\n--------------请输入选项-------------\n"
\1.火车信息录入\n"
\2.火车信息查询\n"
\3.购票\n"
\4.退票\n"
\5.显示火车信息\n"
\6.退出管理系统\n"
\请按键选择\n"
while(true)
{
请按键选择操作:
\n"
fflush(stdin);
//清除缓冲区
choice=getch();
switch(choice)
case'
1'
:
**********************************\n"
*火车信息的录入*\n"
insert(head);
//调用录入函数
break;
2'
***********************************\n"
*查询火车信息*\n"
find(head);
//调用查询函数
3'
*购买火车票*\n"
printf("
***请查询火车信息***\n"
find(head);
buy(h);
//调用买票函数
4'
*退票*\n"
nam(h);
//调用查询客户函数
tui(h);
//调用退票函数
5'
************************************\n"
*显示火车信息*\n"
show(head);
6'
exit(0);
default:
输入错误\n"
}
}
3.2录入火车信息模块所涉及的函数分析
voidinsert(train*head)//录入火车信息
train*p=head;
//申请头结点
train*newrecord=(train*)malloc(sizeof(train));
//申请存空间
输入火车信息\n"
编号:
"
scanf("
%s"
newrecord->
num);
出发时间:
ltime);
到达时间:
atime);
出发站:
leave);
到达站:
arrive);
途径大站:
through);
票价:
price);
剩余票数:
shengpiao);
while(p->
next!
=NULL)
if(strcmp(p->
num,newrecord->
num)==0)
此编号的列车已存在!
return;
p=p->
next;
p->
next=newrecord;
newrecord->
添加成功\n"
3.3火车票订票模块所涉及的函数分析
voidbuy(man*h)//订票函数
inti,j,k,a,b,c;
a=1;
b=1;
c=1001;
是否订票(1/0):
%d"
&
i);
if(i==1)
请输入订票数量\n"
scanf("
j);
for(k=0;
k<
j;
k++)
man*p=h;
man*newrecord=(man*)malloc(sizeof(man));
输入客户信息\n"
姓名:
%s\n"
name);
手机号:
phone);
身份证号:
number);
==================\n"
购票成功\n"
车厢号:
%d\n"
a);
座位号:
b);
订单号:
c);
b=b+1;
c=c+1;
}
3.4退订火车票模块所涉及的函数分析
voidtui(man*h)//退票函数
{intn,m;
m=1000;
是否退票(1/0):
n);
if(n==1)
{printf("
退票成功\n"
订单号为:
m);
m=m+1;
voidnam(man*h)//查询客户信息函数
man*p=h->
charname[10];
请输入要查询的名字:
\n"
p=h->
name);
while(p!
name,name)==0)
客户信息:
p->
3.5查询成员模块所涉及的函数分析
voidfind(train*head)//查询
train*p=head->
inty;
1.按编号查询\n"
2.按出发站查询\n"
3.按到达站查询\n"
请选择:
"
p=head->
y);
if(y==1)
请输入要查找的编号:
num);
num,num)==0)
p->
途经城市:
剩票:
elseif(y==2)
{printf("
请输入要查找的出发站:
leave);
leave,leave)==0)
不存在此出发站的车次\n"
elseif(y==3)
{
请输入要查找的到达站:
arrive);
arrive,arrive)==0)
不存在此终点站的车次\n"
voidshow(train*head)//显示列车所有信息
;
3.6显示成员模块所涉及的函数分析
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语言又有了新的提高,质的升华。
所有源代码:
charlea