周晨正文.docx
- 文档编号:28365110
- 上传时间:2023-07-10
- 格式:DOCX
- 页数:58
- 大小:431.59KB
周晨正文.docx
《周晨正文.docx》由会员分享,可在线阅读,更多相关《周晨正文.docx(58页珍藏版)》请在冰豆网上搜索。
周晨正文
目录
概述2
1需求分析3
1.1问题描述3
1.2实验背景3
1.3性能要求3
2概要设计4
2.1系统总体设计4
2.1.1主要功能实现4
2.1.2主模块4
2.2各子模块设计5
2.2.1预置车次信息模块5
2.2.2查询车次信息模块5
2.2.3订票功能模块6
2.2.4订单查询模块7
2.2.5退票功能模块8
2.2.6结束程序模块9
3.详细设计9
3.1各个函数具体内容9
3.1.1输入信息模块9
3.1.2列车车次查询11
3.1.3订购火车票12
3.1.4订单信息查询14
3.1.5退票16
3.1.6结束程序19
3.2源代码19
4.软件测试31
4.1主程序设计思路、运行结果截图31
4.2功能测试32
4.2.1第1个模块(预置车次信息模块)功能测试32
4.2.2第2个模块(车次查询模块)功能测试33
4.2.3第3个模块(订票模块)功能测试35
4.2.4第4个模块(查询订单信息)功能测试36
4.2.5第5个模块(退票模块)功能测试38
4.2.4第6个模块功能(结束程序模块)测试39
5.总结39
5.1设计中出现的问题以及解决的办法汇总(调试过程记录)39
5.2课程设计心得体会40
概述
随着国民经济快速发展,人民出行、交通越来越频繁,对服务的快捷、便利性要求也越来越高。
从而对客运行业的建设和信息管理提出了更高的要求。
为了适应和推动客运行业的发展,各类客运管理部门开始广泛使用日趋成熟的计算机技术、数据库技术和数据结构体来实现票务信息的管理,与之前的单纯使用人工记录方式相比有很多无法比拟的优点:
查找方便,可靠性高,储存信息量大,信息安全性好,成本低廉,效率更高等。
这些优点大大加快了客运信息的管理。
1需求分析
1.1问题描述
当火车作为人类生活中一个重要的出行方式的背景下,排队买票已经不能满足现代人对电子商务方式购票的需求,所以急需一款在线购票软件来满足需求来满足网上选取火车票。
本篇论文就是为解决此问题而生的。
1.2实验背景
软件技术基础课程是非计算机本科专业学习计算机软件基础知识的综合性基础课程。
学习本课程,要求学生对软件技术的各个组成部分的基础知识、发展趋势有全面、系统的了解;掌握基本数据结构,达到能熟练运用解决实际问题的程度;掌握操作系统基本原理和类型,了解系统各种管理功能。
通过自学了解软件工程的基本概念,软件设计开发的过程和相关技术。
而本篇课程设计主要是设计一个火车订票系统。
1.3性能要求
(1)火车车次信息录入:
可以录入车次情况(包含车次编号、出发时间、出发站、到达站、到达时间、途经主要大站(需要考虑如何保存这些信息)等信息)
(2)车次信息查询:
可以查询某个车次的情况(如,输入车次号,查询出站、到站时间,票价,票价折扣,确定车次是否满员);
可以输入出发站点、到达站点城市,查询火车车次情况:
(3)火车票订票:
可以订票,如果该车次已经无票,可以提供相关可选择车次(同样到达点、途经出发站的其他火车)——订票时需要提供时间、车次、车厢号、座位号、票价、订票人姓名、订票人联系方式、证件号码、订票数量、订单号等,只能比这个多,不能少于这些信息;
(4)火车票退票:
可退票,退票后修改相关数据;客户资料有姓名,证件号,订票数量及车次情况,订单要有编号。
2概要设计
2.1系统总体设计
2.1.1主要功能实现
本系统为客户提供了六大主要功能:
1.预置车次信息
2.查询车次信息
3.订票功能
4.查询订单功能
5.退票功能
6.退出程序
2.1.2主模块
本系统可以让管理人员自己录入各个车次的车次信息,而且在后续管理中还可以持续添加列车车次,并且可以识别是否已存在该车次,从而判定是否写入新的车次信息。
乘客可以通过查询列车车次号或者到达地,经系统提示的剩余票数来选择不同的乘车车次。
订票时会产生新的订单信息将乘客的各类信息添加到订单中,退票时通过乘客信息选择要退的乘次订单从而完成操作。
2.2各子模块设计
2.2.1预置车次信息模块
在系统管理员添加列车车次信息时,需完善下列各种必要信息:
1.列车车次
2.出站时间
3.到站时间
4.出发站
5.终点站
6.途经站点
7.火车票价
2.2.2查询车次信息模块
查询预置车次信息时需选择查询方式:
1)查询列车车次号
输出该车次的所有车次信息,若不存在该车次则程序回退
2)查询到达站
输出到达站为该站的车次信息
2.2.3订票功能模块
通过系统选择订票功能,通过选择不同的订票方式进行订票,输入乘客信息后将已有的车次信息、乘客信息、以及程序生成的座位号、订单号一起写入订单信息中,完成订票功能。
2.2.4订单查询模块
查询订单时会要求选择查询权限:
1)管理员权限
要求输入管理员密码,密码正确可以查询所有的已定订单
2)普通乘客权限
输入乘客信息,若存在该乘客的订票信息,则输出该乘客所有的火车票订单
订单信息:
订单信息的生成我们添加了独特的订单号措施,使得票务管理的效率大大提升,同时我们充分考虑了订单信息的完整性、独一性。
2.2.5退票功能模块
在已有订单的基础上,可以进行退票功能。
退票时需输入乘客信息,根据所查询到的订单信息选择要删除的订单,从而完成订单的退订,同时原有订单信息中会显示原订单已失效。
2.2.6结束程序模块
程序使用完成后,输入结束程序指令,显示结束页面后程序关闭,谢谢大家的使用。
3.详细设计
3.1各个函数具体内容
3.1.1输入信息模块
输入车次信息模块所使用的函数
函数类型:
void
函数名称:
putticket
参数列表:
in*h
函数返回值:
无
源代码:
voidputticket(in*h)//预置车次信息
{
in*p,*l,*s;//定义了三个指针变量
charnum[8];//定义了数组
p=h;
l=h->next;//l指针遍历火车信息
while(p->next)
{
p=p->next;
}
while
(1)
{
printf("◎请输入要添加的火车车次(按0退出)\n");
scanf("%s",&num);
fflush(stdin);
if(strcmp(num,"0")==0)
break;
while(l!
=NULL)
{
if(strcmp(l->data.tnum,num)==0)//比较的输入车次与之前存在车次
{
printf("该车次已经存在\n");
return;
}
l=l->next;//l++
}
s=(in*)malloc(sizeof(in));
strcpy(s->data.tnum,num);//复制函数,加入新的车次
printf("☆请输入出发时间:
\n");
scanf("%s",&s->data.time1);
fflush(stdin);
printf("☆请输入出发城市:
\n");
scanf("%s",&s->data.station1);
fflush(stdin);
printf("☆请输入到达时间:
\n");
scanf("%s",&s->data.time2);
fflush(stdin);
printf("☆请输入到达城市:
\n");
scanf("%s",&s->data.station2);
fflush(stdin);
printf("☆请输入途径大站:
\n");
scanf("%s",&s->data.tujingstation);
fflush(stdin);
printf("☆请输入票价:
\n");
scanf("%s",&s->data.money);
printf("-------------------------------------------------------------------\n");
fflush(stdin);
s->seatnum.a=1;
s->seatnum.b=1;
s->reseat=-1;
s->next=NULL;
p->next=s;
p=s;
printf("%s",l->data.tnum);
}
}
3.1.2列车车次查询
查询列车车次信息所使用的函数
函数类型:
结构体指针
函数名称:
chaxuntrain
参数列表:
in*h
返回值:
*P
源代码:
in*chaxuntrain(in*h)
{//信息查询
in*p;
charstr1[10];
intsel;
if(h->next==NULL)
{
printf("没有任何火车信息\n");
goton;
}
printf("*************************************************\n");
printf("**请选择查询方式1.车次查询2.城市查询**\n");
printf("*************************************************\n");
printf("请输入方式:
");
scanf("%d\n",&sel);
fflush(stdin);
if(sel==1)
{
printf("请输入车次:
");
scanf("%s\n",str1);
fflush(stdin);
p=h->next;
while(p)
{
if(strcmp(p->data.tnum,str1)==0)
break;
elsep=p->next;
}
if(p)
{
putoutticket(p);
goton;
}
else
{
printf("\n☆没有找到您所希望的结果☆\n");
goton;
}
}
elseif(sel==2)
{
printf("请输入到达城市:
");
scanf("%s\n",str1);
fflush(stdin);
p=h->next;
while(p)
{
if(strcmp(p->data.station2,str1)==0)//查到与城市信息相符的
break;
elsep=p->next;
}
if(p)
{
putoutticket(p);
}
else
{
printf("\n☆没有找到您所希望的结果☆\n");
}
}
n:
;
returnp;
}
3.1.3订购火车票
订票模块所使用的函数
函数类型:
void
函数名称:
book
参数列表:
in*h
返回值:
无
源代码:
voidbook(in*h)
{
in*p;
intwp;
p=chaxuntrain(h);
charname[10];//姓名
chartel[15];//电话
charid[20];//身份证
charbooknum[3];//订票数目
if(!
p)
{
return;
}
else
printf("◎是否要订这个车次?
<0/1>\n");
scanf("%d",&wp);
if(wp)
{
printf("☆请输入姓名:
");
scanf("%s",name);
printf("☆请输入电话:
");
scanf("%s",tel);
printf("☆请输入身份证号:
");
scanf("%s",id);
printf("☆请输入要订的票数:
");
m:
scanf("%s",booknum);
if((int)(atof(booknum))>1)
{
printf("请重新输入票数,每人限购一张:
");
gotom;
}
p->reseat=p->reseat-1;
if(p->seatnum.a<40)
{
sprintf(dingdan[o].seatnum,"%d/%d",p->seatnum.a,p->seatnum.b);
p->seatnum.a=p->seatnum.a+1;
}
else
if(p->seatnum.b<8)
{
sprintf(dingdan[o].seatnum,"%d/%d",p->seatnum.a,p->seatnum.b);
p->seatnum.b=p->seatnum.b+1;
p->seatnum.a=1;
}
printf("-------------------☆☆订票成功☆☆------------------\n");
strcpy(dingdan[o].tnum,p->data.tnum);
strcpy(dingdan[o].time1,p->data.time1);
strcpy(dingdan[o].station1,p->data.station1);
strcpy(dingdan[o].station2,p->data.station2);
strcpy(dingdan[o].tujingstation,p->data.tujingstation);
strcpy(dingdan[o].time2,p->data.time2);
strcpy(dingdan[o].money,p->data.money);
strcpy(dingdan[o].name,name);
strcpy(dingdan[o].tel,tel);
strcpy(dingdan[o].id,id);
strcpy(dingdan[o].booknum,booknum);
printf("☆订单号为:
%d\n",dingdan[o].danhao);
printf("☆座位号为:
%s(座位号/车厢号)\n",dingdan[o].seatnum);
printf("本列车共有八节车厢,每节车厢四十个座位\n");
o++;
getch();
}
}
3.1.4订单信息查询
订单信息查询所使用的三个函数
函数类型:
void
函数名称:
admin、passenger、book
返回值:
无
源代码:
voidadmin()
{
intpassword=1;
externinto;
intn;
printf("请输入管理员密码:
");
scanf("%d",&n);
if(password==n)
{
for(inti=0;i { printf("*********************************************************\n"); printf("*****这是订单号为%d的订单信息*****\n",dingdan[i].danhao); printf("*********************************************************\n"); printf("*****火车车次: %s\n",dingdan[i].tnum); printf("****发车时间: %s\n",dingdan[i].time1); printf("***出发站: %s\n",dingdan[i].station1); printf("**终点站: %s\n",dingdan[i].station2); printf("*途径站: %s\n",dingdan[i].tujingstation); printf("*到站时间: %s\n",dingdan[i].time2); printf("*票价: %s\n",dingdan[i].money); printf("**姓名: %s\n",dingdan[i].name); printf("***电话: %s\n",dingdan[i].tel); printf("****身份证: %s\n",dingdan[i].id); printf("*****订票数目: %s\n",dingdan[i].booknum); printf("******座位号: %s<座位号/车厢号>\n",dingdan[i].seatnum); printf("*********************************************************\n"); printf("----------------------------------------------------------------------------\n"); } } } voidpassenger() { charpassname[20]; printf("请输入乘客姓名: "); scanf("%s",passname); for(inti=0;i { if(strcmp(passname,dingdan[i].name)==0) { printf("*********************************************************\n"); printf("*****这是订单号为%d的订单信息*****\n",dingdan[i].danhao); printf("*********************************************************\n"); printf("*****火车车次: %s\n",dingdan[i].tnum); printf("****发车时间: %s\n",dingdan[i].time1); printf("***出发站: %s\n",dingdan[i].station1); printf("**终点站: %s\n",dingdan[i].station2); printf("*途径站: %s\n",dingdan[i].tujingstation); printf("*到站时间: %s\n",dingdan[i].time2); printf("*票价: %s\n",dingdan[i].money); printf("**姓名: %s\n",dingdan[i].name); printf("***电话: %s\n",dingdan[i].tel); printf("****身份证: %s\n",dingdan[i].id); printf("*****订票数目: %s\n",dingdan[i].booknum); printf("******座位号: %s<座位号/车厢号>\n",dingdan[i].seatnum); printf("*********************************************************\n"); printf("----------------------------------------------------------------------------\n"); } } } voidprint() { printf("*************************************************\n"); printf("***1: 管理员登陆(需管理员密码)***\n"); printf("***2: 乘客登陆***\n"); printf("*************************************************\n"); printf("请选择登录方式: "); intm; scanf("%d",&m); switch(m) {case1: admin();break; case2: passenger();break; default: break; } } 3.1.5退票 退票模块所使用的函数 函数类型: void 函数名称: cancel 参数列表: in*h 返回值: 无 源代码: voidcancel(in*h) { intcount=0; externinto; charq[5]="失效"; in*l; l=h->next; charr[10]; intp; ints=0; charpassname[20]; printf("☆请输入乘客姓名: "); scanf("%s/n",passname); for(inti=0;i { if(strcmp(passname,dingdan[i].name)==0) { printf("*********************************************************\n"); printf("*****这是订单号为%d的订单信息*****\n",dingdan[i].danhao); printf("*********************************************************\n"); printf("*****火车车次: %s\n",dingdan[i].tnum); printf("****发车时间: %s\n",dingdan[i].time1); printf("***出发站: %s\n",dingdan[i].station1); printf("**终点站: %s\n",dingdan[i].station2); printf("*途径站: %s\n",dingdan[i].tujingstation); printf("*到站时间: %s\n",dingdan[i].time2); printf("*票价: %s\n",dingdan[i].money); printf("**姓名: %s\n",dingdan[i].name); printf("***电话: %s\n",dingdan[i].tel); printf("****身份证: %s\n",dingdan[i].id); printf("*****订票数目: %s\n",dingdan
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 正文