课程设计报告车票管理系统.docx
《课程设计报告车票管理系统.docx》由会员分享,可在线阅读,更多相关《课程设计报告车票管理系统.docx(30页珍藏版)》请在冰点文库上搜索。
课程设计报告车票管理系统
课程设计报告
(C语言程序设计)
题目车票信息管理系统
的设计与实现
二级学院数学与统计
专业信息与计算科学
班级112010102
学生姓名郭双红
学号11201010209
指导教师陈媛
时间20130619
1需求分析
1.1课程设计题目
要求设计并实现一个车票销售管理系统,系统实现以下功能。
(1)系统以菜单方式工作:
要求界面清晰,友好,美观,易用。
(2)车次信息导入功能:
要求可从磁盘文件导入车次信息。
(3)查询功能:
可按班车号、起点站或终点站查找班车信息,并将查询结果输出。
(4)售票功能:
只有当某班车已定票人数小于额定载量,且当前系统时间小于发车时间才能售票。
售票显示收费信息;售票后更新已定票人数,并实现信息存盘。
(5)退票功能:
输入退票的班次,当本班车未发出时才能退票。
退票后自动更新已定票人数,并实现信息存盘。
(6)信息浏览功能:
能输出所有班车的信息;要求输出格式清晰、美观。
(7)信息修改:
要求能修改某一指定班次的信息,并在修改后将信息存盘。
1.2系统功能需求
(1)系统以菜单方式工作:
要求界面清晰,友好,美观,易用。
(2)车次信息导入功能:
要求可从磁盘文件导入车次信息。
(3)查询功能:
可按班车号、起点站或终点站查找班车信息,并将查询结果输出。
(4)售票功能:
只有当某班车已定票人数小于额定载量,且当前系统时间小于发车时间才能售票。
售票显示收费信息;售票后更新已定票人数,并实现信息存盘。
(5)退票功能:
输入退票的班次,当本班车未发出时才能退票。
退票后自动更新已定票人数,并实现信息存盘。
(6)信息浏览功能:
能输出所有班车的信息;要求输出格式清晰、美观。
(7)信息修改:
要求能修改某一指定班次的信息,并在修改后将信息存盘。
2系统设计
2.1功能模块图
本系统的功能模块图如图2-1所示。
车票管理系统
修改版此信息
退票
售票
进入班次浏览
进入班次查询
查询菜单
进入终点站查询
进入班次查询
进入起点站查询
图2-1系统功能模块图
2.2数据定义
本系统的数据可采用结构数组来处理。
可必要的设置全局变量。
因此本系统的主要数据定义如下:
structTrain_Ticket
{
charcn[15];//车量班次
charlp[15];//leftplace起点
charap[15];//arriveplace终点
charlt[15];//lefttime发车时间
charrt[15];//runningtime行车时间
floatprice;//票价
intrl;//Ratedload额定载量
intbn;//bookingnumber已定票人数
}T[N];
intn=0,i=0;//全局变量
2.3关键技术分析
⑴在程序开始运行时,应调用自定义的INPUT()函数,将所有需要的数据导入到结构数组中,然后保存。
⑵调用load()函数,从磁盘导入车票信息。
由于第一次应用INPUT()函数磁盘中已有数据,因此不必要再进行重新导入,所以在INPUT()函数中先询问是否重新导入,然后再进入主菜单,或者在调用一次后,以后运行时不再调用。
⑶.买票和退票都涉及到时间的问题,这源于要比较发车时间与当前的时间,判断这班车到底有没有发车,和能不能订票与退票,这时用了一个时间函数,输出了当前的时间,但那边有年月日,不好进行提取和比较,于是采用输出了时间,然后看着那个时间手动的提取。
⑷系统中应编写存盘函数save(),在进行买票或者退票功能后都需要调用save()函数进行数据的更新。
⑸采用循环结构生成主菜单,在数据输入时应该有清晰的提示信息,以方便用户的操作,对输出数据进行格式控制,以使界面更加美观,清晰。
3系统实现
3.1功能模块设计
根据系统分析的结论,将本系统需完成的功能模块划分如下:
#include
#include
#include
#include
#include
#defineN4
voidmain_menu();//主菜单模块
voidload();//导入信息
voidINPUT();//输入模块
voidscan();//浏览模块
voidtuipiao();//退票
voidbuy();//买票
voidchange();//修改函数
voidsave();//保存函数
voidprna(intpos);//打印记录
voidsearchmenu();//查询菜单函数
ints_cn();//按班次查询
ints_lp();//按起点站查询
ints_ap();//按终点站查询
structTrain_Ticket
{
charcn[15];//车量班次
charlp[15];//leftplace起点
charap[15];//arriveplace终点
charlt[15];//lefttime发车时间
charrt[15];//runningtime行车时间
intprice;//票价
intrl;//Ratedload额定载量
intbn;//bookingnumber已定票人数
}T[N];
intn=0,i=0;//全局变量
3.2源代码
//********************************************************
//主菜单
//********************************************************
voidmain_menu()
{
system("cls");
system("colorE");
printf("**********************************************************************\n");
printf("*************************欢迎来到车票查询系统*************************");
printf("\n");
printf("|★★★1:
进入班次浏览★★★|\n");
printf("|★★★2:
进入查询班次★★★|\n");
printf("|★★★3:
售票★★★|\n");
printf("|★★★4:
退票★★★|\n");
printf("|★★★5:
班次信息修改★★★|\n");
printf("|★★★0:
退出★★★|\n");
printf("***********************************************************************\n");
printf("\n请选择(0-5):
☆☆☆");
}
voidload()//从磁盘文件导入班次信息
{
inti;
FILE*fp;
if((fp=fopen("c:
车票管理系统.dat","rb"))==NULL)
{
printf("文件打开错误\n");
exit(0);
}
for(i=0;ifread(&T[i],sizeof(structTrain_Ticket),1,fp);
fclose(fp);
system("cls");
}
voidsave()//将班次信息保存到磁盘文件
{
FILE*fp;
if((fp=fopen("c:
车票管理系统.dat","wb"))==NULL)
{
printf("无法创建文件!
\n\n");
exit(0);
}
for(i=0;ifwrite(&T[i],sizeof(structTrain_Ticket),1,fp);
fclose(fp);
}
inttime()//当前系统时间
{
structtm*f;
time_tnow;
now=time(NULL);
time(&now);
f=gmtime(&now);
printf(ctime(&now));
return0;
}
voidscan()
{
system("cls");/*清屏*/
printf("\n===========================================================================\n");
printf("车次额定载量起点终点开车时间行车时间票价已定票人数\n");
for(i=0;iprintf("%s%13d%10s%10s%12s%8s%f%6d\n",T[i].cn,T[i].rl,T[i].lp,T[i].ap,T[i].lt,T[i].rt,T[i].price,T[i].bn);
printf("===========================================================================\n");
printf("请按任意键返回主菜单\n");
getch();
}
voidINPUT()//键入所有信息
{
charch;
do
{
system("cls");
printf("\n\n====================欢迎进入录入汽车时刻信息界面====================\n");
do
{
printf("\n新建汽车信息?
(y/n)");
scanf("%c",&ch);
if(ch!
='y'&&ch!
='n')
printf("输入错误,请重新输入!
!
!
");
}while(ch!
='y'&&ch!
='n');
if(ch=='n')
break;
printf("---------------------");
printf("\n录入第%d趟列车信息\n",n+1);
printf("车次");
fflush(stdin);
gets(T[i].cn);
printf("额定载量");
fflush(stdin);
scanf("%d",&T[i].rl);
printf("起点");
fflush(stdin);
gets(T[i].lp);
printf("终点");
fflush(stdin);
gets(T[i].ap);
printf("开车时间");
fflush(stdin);
gets(T[i].lt);
printf("行车时间");
fflush(stdin);
gets(T[i].rt);
printf("票价");
fflush(stdin);
scanf("%f",&T[i].price);
printf("已定票人数");
fflush(stdin);
scanf("%d",&T[i].bn);
n++;
i++;
}while(isave();
system("cls");
}
voidprna(intpos)//打印一条记录
{
printf("\n===========================================================================\n");
printf("车次额定载量起点终点开车时间行车时间票价已定票人数\n");
printf("%s%13d%10s%10s%12s%8s%f%6d\n",T[pos].cn,T[pos].rl,T[pos].lp,T[pos].ap,T[pos].lt,T[pos].rt,T[pos].price,T[pos].bn);
printf("===========================================================================\n");
}
voidsearchmenu()//查询主菜单
{
system("cls");
printf("\n\n====================欢迎进入查询汽车时刻信息界面====================\n");
printf("\n++++++++++++++++++请选择查找方式++++++++++++++++++\n\n");
printf("|★★★1:
按班次查询★★★|\n");
printf("|★★★2:
按起点站查询★★★|\n");
printf("|★★★3:
进终点站查询★★★|\n");
printf("|★★★4:
返回主菜单★★★|\n");
printf("***********************************************************************\n");
printf("\n请选择(1-4):
☆☆☆");
}
ints_cn()//按班次查询
{
charname1[15];
intj;
system("cls");
printf("请输入要查询的班次号:
\n");
fflush(stdin);
gets(name1);
for(j=0;j{
if(strcmp(T[j].cn,name1)==0)
printf("%s%13d%10s%10s%12s%8s%f%6d\n",T[j].cn,T[j].rl,T[j].lp,T[j].ap,T[j].lt,T[j].rt,T[j].price,T[j].bn);continue;
return0;
}
return1;
}
ints_lp()//按起点站查询
{
charname2[15];
intj;
system("cls");
printf("请输入要查询的起点站名:
\n");
fflush(stdin);
gets(name2);
for(j=0;j{
if(strcmp(T[j].lp,name2)==0)
printf("%s%13d%10s%10s%12s%8s%f%6d\n",T[j].cn,T[j].rl,T[j].lp,T[j].ap,T[j].lt,T[j].rt,T[j].price,T[j].bn);continue;
return0;
}
return1;
}
ints_ap()//按终点站查询
{
charname3[15];
intj;
system("cls");
printf("请输入要查询的终点站名:
\n");
fflush(stdin);
gets(name3);
for(j=0;j{
if(strcmp(T[j].ap,name3)==0)
printf("%s%13d%10s%10s%12s%8s%f%6d\n",T[j].cn,T[j].rl,T[j].lp,T[j].ap,T[j].lt,T[j].rt,T[j].price,T[j].bn);continue;
return0;
}
return1;
}
voidsearch()//查询函数
{
intselect;
intn;
while
(1)
{
searchmenu();
scanf("%d",&select);
switch(select)
{
case1:
n=s_cn();
if(n)
printf("没找到相关记录\n");printf("按任意键返回\n");getch();
break;
case2:
n=s_lp();
if(n)
printf("没有找到相关记录\n");printf("按任意键返回\n");getch();
break;
case3:
n=s_ap();
if(n)
printf("没有找到相关记录\n");printf("按任意键返回\n");getch();
break;
}
if(select==4)
{
break;main_menu();
}
}
}
voidbuy()//买票
{
system("cls");
intm,log;
chart[10];
printf("请输入您需要购买票的班次(1-4):
\n");
scanf("%d",&m);
load();
printf("\n===========================================================================\n");
printf("车次额定载量起点终点开车时间行车时间票价已定票人数\n");
printf("%s%13d%10s%10s%12s%8s%f%6d\n",T[m-1].cn,T[m-1].rl,T[m-1].lp,T[m-1].ap,T[m-1].lt,T[m-1].rt,T[m-1].price,T[m-1].bn);
printf("===========================================================================\n");
if(T[m-1].bn>=T[m-1].rl)
{
printf("该班次票已满!
请选择其他班次\n");
printf("按任意键返回\n");
}
if(T[m-1].bn{
printf("当前时间为:
\n");
time();
printf("\n");
printf("请再手动输入上述时间,只需要输入时辰与分钟(例如08:
00):
\n");
scanf("%s",t);
printf("\n");
if(strcmp(t,T[m-1].lt)>0)
printf("该班次已发车,请选择其他班次\n");
elseif(T[m-1].bn==T[m-1].rl)
printf("该班次未发车但是该班次票已售完\n");
if(T[m-1].bn!
=T[m-1].rl&&strcmp(t,T[m-1].lt)<0&&T[m-1].bn{
printf("该班次还可订%d票\n",(T[m-1].rl-T[m-1].bn));
printf("请输入您要订票数量");
scanf("%d",&log);
printf("\n");
while(log>(T[m-1].rl-T[m-1].bn))
{
printf("订票错误,数量不能超过余票数!
!
!
\n");
printf("请重新输入:
");
scanf("%d",&log);
}
if(log<=(T[m-1].rl-T[m-1].bn)){printf("一共需要%d元\n",log*T[m-1].price);printf("订票成功,祝您旅途愉快!
\n");}
}
T[m-1].bn+=log;
printf("按任意键返回主菜单\n");getchar();
}
save();
}
voidtuipiao()//退票
{
system("cls");
intx,log;
chart[10];
printf("请输入您要退票的班次:
\n");
scanf("%d",&x);
i=x;intm=i;
load();
printf("\n===========================================================================\n");
printf("车次额定载量起点终点开车时间行车时间票价已定票人数\n");
printf("%s%13d%10s%10s%12s%8s%f%6d\n",T[m-1].cn,T[m-1].rl,T[m-1].lp,T[m-1].ap,T[m-1].lt,T[m-1].rt,T[m-1].price,T[m-1].bn);
printf("===========================================================================\n");
printf("当前时间为:
\n");
time();
printf("\n");
printf("请再手动输入上述时间,只需要输入时辰与分钟(例如08:
00):
\n");
scanf("%s",t);
if(strcmp(T[i-1].lt,t)>0)
{
printf("可以退票\n");
printf("请问你真的要退票吗?
\n");
printf("确认退票请按1,否则返回主菜单\n");
scanf("%d",&log);
if(log==1)
{
printf("退票成功!
\n");
T[i-1].bn--;
save();printf("按任意键返回主菜单\n");getch();
}
else
{
printf("您选择不退票\n");printf("按任意键返回主菜单\n");getch();
}
}
if(strcmp(T[i-1].lt,t)<0)
{
printf("此班次已发车不能退票!
!
!
\n");
printf("按任意键返回主菜单\n");
getch();
}
}
voidchange()
{
system("cls");
intk,select;
charbanci[100];
charm