车票管理系统.docx
《车票管理系统.docx》由会员分享,可在线阅读,更多相关《车票管理系统.docx(20页珍藏版)》请在冰豆网上搜索。
![车票管理系统.docx](https://file1.bdocx.com/fileroot1/2022-12/10/01b8743a-c3f9-4dec-9747-bd3281cb9825/01b8743a-c3f9-4dec-9747-bd3281cb98251.gif)
车票管理系统
一、课程设计的内容
车票管理系统
一车站每天有n个发车班次,每个班次都有一班次号(1、2、3…n),固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。
如
班次发车时间起点站终点站行车时间额定载量已定票人数
18:
00郫县广汉24530
26:
30郫县成都0.54040
37:
00郫县成都0.54020
410:
00郫县成都0.5402
…
(一)功能要求:
用c/c++设计一系统,能提供下列服务:
(1)录入班次信息(信息用文件保存),可不定时地增加班次数据
(2)浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。
(3)查询路线:
可按班次号查询,可按终点站查询
(4)售票和退票功能
A:
当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数
B:
退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数
二、课程设计的要求与数据
1、进一步掌握和利用C语言进行程设计的能力;
2、进一步理解和运用结构化程序设计的思想和方法;
3、初步掌握开发一个小型实用系统的基本方法;
4、学会调试一个较长程序的基本方法;
5、学会利用流程图或N-S图表示算法;
6、掌握书写程序设计开发文档的能力。
三、课程设计应完成的工作
1、编写完成相应题目的程序;
2、编写课程设计报告,课程设计报告的内容应包括以下6个部分:
1)需求分析:
包括设计题目、设计要求以及系统功能需求分析;
2)总体设计:
包括系统总体设计框架和系统功能模块图;
3)详细设计:
包括主要功能模块的算法设计思路以及对应的工作流程图;
4)调试分析过程描述:
包括测试数据、测试输出结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等,适当的包含结果截图);
5)总结:
课程设计完成了哪些功能,有没有什么扩展功能?
还有哪些地方需要改进?
课程设计过程中的学习体会与收获、对本次课程设计的认识以及自己的建议等内容;
6)附录:
主要源程序代码,含必要的注释。
3、答辩:
在实验室建立程序运行的环境,并在指导教师的监督下,独立解
决问题、运行程序和回答教师提出的问题。
第一章目的与要求5
第二章总体设计6
第三章详细设计9
3.1功能模块设计9
3.2数据结构设计11
第四章调试分析12
第五章总结14
第六章附录15
参考文献25
第一章目的与要求
编写目的:
便于车站管理部门对汽车班次信息的统计和管理,提高车站部门的工作效率,能够更好的为市民服务,同时也便于旅客了解相关的信息,方便出行。
要求:
1.能够录入汽车班次信息,如班次号,发车时间,起点站,终点站,行车时间,额载量,已订票人数等。
2.能够浏览班次信息,显示信息总和(如果已发出站的要要显示“已经开出”)。
3.查询路线:
可按班次号查询,可按终点站查询。
4.售票功能:
当查询出已定票人数小于额定载量且当前系统时间小于发车时间才能售票,自动更新已售票人数。
5.退票功能:
输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数。
第二章总体设计
1)系统总体设计框架
2)主要功能流程图:
录入班次信息功能流程图:
浏览班次功能流程图:
售票系统工作流程图:
第三章详细设计
3.1功能模块设计
while(选择的是“Y”)
{打印当前时间
打印“班次发车时间起点站终点站行车时间额定载量已定票人数”
for()
{
输出班次信息
』
提示输入车的班次
}
if(当查询出已定票人数小于额定载量且当前系统时间小于发车时间时)
{提示售票成功!
订票人数加1;
}
IF(额定载量小于订票人数)
{
提示票已售完!
;
}
elseif(输入的班次号小于零)
{该车不存在!
}
elseif(当前系统时间晚于发车时间)
{
提示车已发出!
}
提示继续售票按Y,按任意键返回主菜单!
输入一个字符;
}
}
while(输入的是Y的时候)
{
提示输入要退票的车次;
输入一个字符;
}
if(输入的班次号存在和系统时间比发车时间晚)
{订票人数-1;
提示退票成功!
}
elseif(输入的班次号小于零)
提示该班次不存在!
;
)
elseif(要退票的那辆车的发车时间早过现在系统时间)
{
提示车已发出不能退票!
;
提示继续退票请按(Y),返回主菜单按任意键;
输入一个字符;
}
}
{
打印“车票管理系统”;
打印“系统时间”;
打印“录入班次信息”;
打印“查询班次信息”;
打印“售票”;
打印“退票”;
打印“保存车次信;";
打印“退出系统”;
打印“请选择(0--6)”;
打印“车票管理系统;
得到一个字符;
返回值;
}
3.2数据结构设计(可选)
程序中涉及的数据过多,本人决定采用两个结构体处理数据。
其中时间为一个数据结构体(即结构1),它又是汽车结构体(即结构2)的一个成员元素,这样处理数据容易些。
第四章调试分析
本人在写代码的过程中觉得难控制的是那个班次数。
因为本系统提供了个录入信息功能,可以不定时的增加班次,即这个班次数是不确定的。
而这个班次数又影响到查询函数,退票函数,售票函数等,另外还影响到一些功能小函数,如比较时间函数等。
经过上网查找资料,我发现有一个巧妙的方法可以解决这个问题,即设定一个静态局部变量(即代码中的H),这样每当班次号改变之后这个H的值就和它的班次号一样大,这样就可以解决之前提到的问题了。
另外,这个系统要有一个保存文件功能,由于本人对文件保存处理不清楚,设计过程中一直搞不明白。
最后在网上查到了相关信息才可以弄出。
以下是该程序运行的部分结果:
主界面:
信息录入图和浏览时刻表:
查询售票图:
退票图:
保存信息图:
第五章总结
经历近几天的学习和锻炼,这个车票管理系统算是做出来了(不过我承认我是参考网上代码所得,我基本能看懂)。
它基本有前面提到过的功能,即录入班次信息,浏览班次信息,售票和退票,保存文件。
有一个扩展功能,即可以退出系统(代码中的sys_exit()函数)。
不过目前我发现它一个不足之出,就是不能对输入时间的格式起限制作用。
如我可以输入26:
30:
00,它系统不会提示说输入错误提示再输入一个正确的时间。
还有,就是整个代码条理不够清晰,只是用到一个主函数和调用其他函数,可读性差!
我认为最好是能分模块化处理,分文件处理,这样条理性强,可读性高,再者修改也容易。
不过由于本人水平有限,不能这样处理。
经历这近几天的锻炼,我也比较满意自己的表现。
在这过程中我查阅了很多书,学到了很多课堂上没有的东西。
很多知识我之前不知道的现在大部分都知道了,不过理解不够深透,,导致在这近几天里碰了不少壁!
近几天我觉得编程既是一项费时费力但也是有趣的事。
说它费时费力是因为它繁琐,而有趣是因为我很享受一段段的小程序编成功之后的喜悦,苦尽干来啊。
我觉得编程是一件快乐的差事,我想我今后会加把时间学习它,把它学好。
第六章附录
程序代码:
#include"stdio.h"
#include"time.h"
#include"windows.h"
#include"string.h"
#include"dos.h"
#include"stdlib.h"
#include"ctype.h"
#defineMax50//最大贮赌量
#definenull0
staticintH=0;
structTimes
{//定义时钟
inthour;
intmin;
intsec;
};
structBuses{//定义汽车
intnumber;
structTimestime;
charstart[30];
charend[30];
floattime_cost;
intcarry_number;
intbooK_number;
};
structBusesbus[Max];
time_tnow=time(0);
tm*tnow=localtime(&now);
voidload();//载入车次信息
voidlu(void);//声明录入函数
voidchaxun(structBusesbus[]);//声明查询路线函数
voidsave(structBusesbus[]);//声明保存函数
intcaidan();//声明菜单录数
voidliulan(structBusesbus[]);//声明浏览函数
voidtuipiao(structBusesbus[]);//退票
voidshoupiao(structBusesbus[]);//声明售票函数
voidxitongtuichu();//声明退出函数
//工具函数
structBusescopy(structBusesb1,structBusesb2);//赋值
voidsort_time(structBusesbus[]);//声明按时间发车的先后顺序排序
intcompare_time(structTimest1,structTimest2);//时间比较函数
intcompare_systime(structBusesbus,tm*T);//比较发车时间与当前系统时间的函数
voidprint(structBusesbus);//声明输入出函数
intnumber_search(structBusesbus[],intnum);//声明按班次查询函数
intend_search(structBusesbus,charends[]);//声明按终点查询函数
voidmain(){//主函数
while
(1){
system("cls");
switch(caidan()){
case1:
lu();break;
case2:
liulan(bus);break;
case3:
chaxun(bus);break;
case4:
shoupiao(bus);break;
case5:
tuipiao(bus);break;
case6:
save(bus);break;
case0:
xitongtuichu();break;
}
}
}
intcompare_systime(structBusesbus,tm*T){//与系统时间的比较函数
>=T->tm_hour){
return1;
return1;
return1;
elsereturn0;
}
return0;
}
return0;
}
structBusescopy(structBusesb1,structBusesb2){
b1.booK_number=b2.booK_number;
b1.carry_number=b2.carry_number;
strcpy(b1.end,b2.end);
b1.number=b2.number;
strcpy(b1.start,b2.start);
b1.time_cost=b2.time_cost;
returnb1;
}
voidliulan(structBusesbus[]){//浏览车次
getchar();
system("cls");
inti;
printf("\n\t\t\t\t车辆时刻表\n");
printf("\t\t\t**************************\n");
printf("\t班次发车时间起点站终点站行车时间额定载量已定票人数");
printf("\n\t--------------------------------------------------------------\n");
sort_time(bus);
for(i=0;iprint(bus[i]);
}
printf("\t--------------------------------------------------------------\n");
printf("\t\t\t\t%d条记录!
\n",H);
printf("\t按任意键返回主菜单...");
getchar();
}
intcompare_time(structTimest1,structTimest2){//比较时间大小
if(t1.hour>t2.hour){
return1;
if(t1.min>=t2.min){
return1;
if(t1.sec>=t2.sec)
return1;
elsereturn0;
}
return0;
}
return0;
}
voidsort_time(structBusesbus[]){//按发车时间排序
inti,j,k;
structBusesb={0};
for(i=0;ik=i;
for(j=i+1;jif(compare_time(bus[i].time,bus[j].time)){
k=j;
if(k!
=i){
b=copy(b,bus[i]);
bus[i]=copy(bus[i],bus[k]);
bus[k]=copy(bus[k],b);
}
}
}
}
}
intnumber_search(structBusesbus[],intn){//按班次查询
inti;
for(i=0;iif(bus[i].number==n)
returni;
}
return-1;
}
intend_search(structBusesbus,charends[]){//按终点站查询
if(strcmp(bus.end,ends)==0)
return1;
else
return-1;
}
voidprint(structBusesbus){
if(!
compare_systime(bus,tnow))
else
}
intcaidan(){
inta;
system("cls");//以下是菜单图案
printf("\n\n");
printf("\t\t车票管理系统\n");
printf("\t\t*****************(%d年%d月%d日)\n",
1900+tnow->tm_year,tnow->tm_mon+1,tnow->tm_mday);
printf("\t\t|----------------------------------------------|\n");
printf("\t\t|菜单|\n");
printf("\t\t|----------------------------------------------|\n");
printf("\t\t|
(1)录入班次信息|\n");
printf("\t\t|----------------------------------------------|\n");
printf("\t\t|
(2)显示班次信息|\n");
printf("\t\t|----------------------------------------------|\n");
printf("\t\t|(3)查询班次信息|\n");
printf("\t\t|----------------------------------------------|\n");
printf("\t\t|(4)售票|\n");
printf("\t\t|----------------------------------------------|\n");
printf("\t\t|(5)退票|\n");
printf("\t\t|----------------------------------------------|\n");
printf("\t\t|(6)保存车次信息|\n");
printf("\t\t|----------------------------------------------|\n");
printf("\t\t|(0)退出系统|\n");
printf("\t\t|----------------------------------------------|\n");
printf("\n\t\t请选择(0-6):
");
scanf("%d",&a);
return(a);
}
voidsave(structBusesbus[]){//保存函数体
getchar();
FILE*fp;
inti;
if((fp=fopen("Bus_system","wb"))==null){
printf("不能打开文件\n");
return;
}
for(i=0;iif(fwrite(&bus[i],sizeof(structBuses),1,fp)!
=1)
printf("文件保存出错!
\n");
fclose(fp);
printf("文件保存成功!
");
getchar();
}
voidlu(){//录入函数
inti=H,f=1;
charflag='Y';
while(toupper(flag)=='Y'){
system("cls");
printf("\n\t\t车次信息录入\n请输入车的班次:
");
scanf("%d",&bus[i].number);
getchar();
while(number_search(bus,bus[i].number)>=0){
printf("你输入的班次已存在请重新输入!
:
");
scanf("%d",&bus[i].number);
getchar();
}
printf("请输入时间如:
(20:
30:
00):
");
scanf("%d:
%d:
%d",&bus[i].time.hour,&bus[i].time.min,&bus[i].time.sec);
getchar();
printf("请输入车的起点站:
");
scanf("%s",bus[i].start);
getchar();
printf("请输入车的终点站:
");
scanf("%s",bus[i].end);
getchar();
printf("请输入行车时间:
");
scanf("%f",&bus[i].time_cost);
getchar();
printf("请输入车的额定载量:
");
scanf("%d",&bus[i].carry_number);
getchar();
bus[i].booK_number=0;
H++;
i++;
printf("信息录入成功!
\n");
printf("继续录入请按(Y),返回主菜单按任意键...");
flag=getchar();
}
}
voidchaxun(structBusesbus[]){//查询路线
inta,i=0;
intm=0;
charflag='Y';
while(toupper(flag)=='Y'){
charend[30];
system("cls");
printf("\n按班次查询请按1\n终点站查询请按2\n请选择(1-2):
");
scanf("%d",&a);
while(a!
=1&&a!
=2){
printf("注意只能选择1或2!
\n请重新输入:
");
scanf("%d",&a);
getchar();
}
switch(a)
{
case1:
{
printf("请输入车次号:
");
scanf("%d",&m);
getchar();
i=number_search(bus,m);
if(i>=0){
printf("\n\t\t\t\t车辆时刻表\n");
printf("\t\t\t**************************\n");
printf("\t班次发车时间起点站终点站行车时间额定载量已定票人数");
printf("\n\t--------------------------------------------------------------\n");
print(bus[i]);
printf("\t--------------------------------------------------------------\n");
}
else
printf("\n\t\t\t没有你要查找的记录!
\n");
}break;
case2:
{
printf("请输入车的终点站:
");
scanf("%s",end);
getchar();
while(iif((m=end_search(bus[i],end))==1){
printf("\n\t\t\t\t车辆时刻表\n");
printf("\t\t\t**************************\n");
printf("\t班次发车时间起点站终点站行车时间额定载量已定票人数");
printf("\n\t--------------------------------------------------------------\n");
print(bus[i]);
i++;}
break;
}
for(i;iif(end_search(bus[i],end)==1)
print(bus[i]);
}
if(m==1)printf("\t--------------------------------------------------------------\n");
}
for(i=0;iif(end_search(bus[i],end)!
=1)
printf("\n\t\t\t没有到该站的车!
\n");break;
}
}
printf("\t\t继续查找请按(Y),返回主菜单按任意键...");
flag=getchar();
}
}
voidshoupiao(structBusesbus[]){//售票函数
inti,n;
charflag='Y';
while(toupper(flag)=='Y'){
system("cls");
printf("\n\t\t\t\t车辆时刻表\n");
printf("\t\t\t**************************当前时间(%d:
%d:
%d)\n",
tnow->tm_hour,tnow->tm_min,tnow->tm_sec);
printf("\t班次发车时间起点站终点站行车时间额定载量已定票人数");
printf("\n\t--------------------------------------------------------------\n");
for(intj=0;jprint(bus[j]);
}
printf("\t--------------------------------------------------------------