车票管理系统.docx
《车票管理系统.docx》由会员分享,可在线阅读,更多相关《车票管理系统.docx(9页珍藏版)》请在冰豆网上搜索。
车票管理系统
车票管理系统(C语言实现)
2007-11-2520:
13
/*******************************************************************************************************************
车票管理系统一车站每天有n个发车班次,每个班次都有一班次号(1、2、3…n),固定的发车时间,固定的路线(起始站、终点站),
大致的行车时间,固定的额定载客量。
如
班次 发车时间 起点站 终点站 行车时间 额定载量 已定票人数
1 8:
00 郫县 广汉 2 45 30
2 6:
30 郫县 成都 0.5 40 40
3 7:
00 郫县 成都 0.5 40 20
4 10:
00 郫县 成都 0.5 40 2
…
(一)功能要求:
用c/c++设计一系统,能提供下列服务:
(1)录入班次信息(信息用文件保存),可不定时地增加班次数据
(2)浏览班次信息,可显示出所有班次当前状态(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。
(3)查询路线:
可按班次号查询,可按终点站查询
(4)售票和退票功能
A:
当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数
B:
退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数
(二)其它要求:
(1)只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读
(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)
(3)学生可自动增加新功能模块
*******************************************************************************************************************/
#include
#include
#include
#include
#include
#include
constintMAX=20;
constintN=50;
constintMAXFILENAME=100;
enum{FALSE,TRUE};
structtime
{
inthour;
intminutes;
};
structticket
{
intSerialNumber;
structtimeSetOut;
charDeparturePoint[MAX];
charTerminalPoint[MAX];
floatLastTime;
intFixNumber;
intFixedNumber;
}car[N];
intRecordNumber;
intFLAG=FALSE;
/**********************************************/
intShowMessage(void); //载入原始数据
voidmainmenu(void); //主菜单
voidInsertMessage(void);//录入班次信息
voidSearchMenu(void); //查询路线子菜单
voidSearchByNumber(void);//按班次号查询
voidSearchByAddress(void);//按终点站查询
voidTicketManagement(void);//车票售出与退回
voidTicketOrder(void); //售票
voidTicketDelete(void); //退票
voidexit(void); //退出该系统
voidSaveRecord(ticketx); //储存信息到文件中
/********************************************/
intmain(void)
{
do{
mainmenu();
}while(FLAG==FALSE);
return0;
}
voidmainmenu(void)
{
system("color1f");
system("modecon:
cols=140lines=130");
charfunctionNumber;
printf(" 车票管理系统\n\n");
printf(" 制作:
B08011203\n");
printf(" 日期:
2009/05/31/19:
57\n");
printf("============================================================================\n");
printf(" 1.录入班次信息\t\n");
printf(" 2.浏览班次信息\t\n");
printf(" 3.查询行车路线\t\n");
printf(" 4.售票与退票系统\t\n");
printf(" 5.退出该系统\t\n");
printf("============================================================================\n");
printf("请选择你所需要的功能:
");
scanf("%c",&functionNumber);
switch(functionNumber)
{
case'1':
{
InsertMessage();
printf("\n按任意键回主菜单......\n");
getchar();
getchar();
}
break;
case'2':
{
RecordNumber=ShowMessage();
printf("\n按任意键回主菜单......\n");
getchar();
getchar();
}
break;
case'3':
{
SearchMenu();
printf("\n按任意键回主菜单......\n");
getchar();
getchar();
}
break;
case'4':
{
TicketManagement();
getchar();
getchar();
}
break;
case'5':
FLAG=TRUE;exit();break;
default:
{
printf("输入错误,请确保你的输入为1--5.\n");
printf("按任意键回主菜单......\n");
getchar();
getchar();
}
}//switchends
FLAG=FALSE;
}
voidInsertMessage(void)
{
FILE*fp;
charfilename[MAXFILENAME];
inti;
printf("请输入文件名或者文件路径名:
");
scanf("%s",filename);
if((fp=fopen(filename,"r"))==NULL)
{
printf("文件%s不可读,请确认文件%s存在或者文件路径正确.\n\n",filename,filename);
mainmenu();
}
for(i=RecordNumber;!
feof(fp)&&!
ferror(fp);i++)
{
fscanf(fp,"%d%d%d",&car[i].SerialNumber,&car[i].SetOut.hour,&car[i].SetOut.minutes);
fscanf(fp,"%s%s%f%d%d",&car[i].DeparturePoint,&car[i].TerminalPoint,&car[i].LastTime,&car[i].FixNumber,&car[i].FixedNumber);
SaveRecord(*(car+i));
}
RecordNumber=i;
/*******************************输出更新后的订票记录************************************************************/
printf("班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n");
for(i=0;i{
printf("%d\t%d:
%d\t\t",car[i].SerialNumber,car[i].SetOut.hour,car[i].SetOut.minutes);
printf("%s\t%s\t\t%.1f\t%d\t\t%d\n",car[i].DeparturePoint,car[i].TerminalPoint,car[i].LastTime,car[i].FixNumber,car[i].FixedNumber);
}
fclose(fp);
}
intShowMessage(void)
{
inti;
FILE*fp;
if((fp=fopen("add.txt","r"))==NULL)
{
printf("读取数据失败,请检查文件add.txt是否存在.\n");
exit(-1);
}
for(i=RecordNumber;!
feof(fp)&&!
ferror(fp);i++)
{
fscanf(fp,"%d%d%d",&car[i].SerialNumber,&car[i].SetOut.hour,&car[i].SetOut.minutes);
fscanf(fp,"%s%s%f%d%d",&car[i].DeparturePoint,&car[i].TerminalPoint,&car[i].LastTime,&car[i].FixNumber,&car[i].FixedNumber);
}
intcount=i;
printf("班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n");
for(i=0;i{
printf("%d\t%d:
%d\t\t",car[i].SerialNumber,car[i].SetOut.hour,car[i].SetOut.minutes);
printf("%s\t%s\t\t%.1f\t%d\t\t%d\t",car[i].DeparturePoint,car[i].TerminalPoint,car[i].LastTime,car[i].FixNumber,car[i].FixedNumber);
/*调用系统时间实现的功能:
如果车已发出,则打出提示"此车已发出",但是此处有错误*/
time_ttval;
structtm*now;
tval=time(NULL);
now=localtime(&tval);
if((now->tm_hour==car[i].SetOut.hour&&now->tm_min>car[i].SetOut.minutes)||(now->tm_hour>car[i].SetOut.hour))
printf("此车已发出");
printf("\n");
}
returncount;
}
voidSearchMenu(void)
{
system("color1f");
system("modecon:
cols=140lines=130");
charfunctionNumber;
printf(" 查询子菜单\n");
printf("============================================================================\n");
printf(" 1.按班次号查询\t\n");
printf(" 2.按终点站查询\t\n");
printf(" 3.返回主菜单\t\n");
printf("============================================================================\n");
printf("请选择你所需要的功能:
");
scanf("%*c%c",&functionNumber);
switch(functionNumber)
{
case'1':
SearchByNumber();break;
case'2':
SearchByAddress();break;
case'3':
getchar();
mainmenu();
break;
default:
printf("输入错误,请确保你的输入为1--3.\n");
printf("按任意键回查询子菜单......\n");
getchar();
getchar();
SearchMenu();
}
}
voidSearchByNumber(void)
{
intSearchNumber;
printf("请输入要查询的班次号:
");
scanf("%d",&SearchNumber);
printf("班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n");
printf("%d\t%d:
%d\t\t",car[SearchNumber-1].SerialNumber,car[SearchNumber-1].SetOut.hour,car[SearchNumber-1].SetOut.minutes);
printf("%s\t%s\t\t%.1f\t%d\t\t%d\n",car[SearchNumber-1].DeparturePoint,car[SearchNumber-1].TerminalPoint,car[SearchNumber-1].LastTime,car[SearchNumber-1].FixNumber,car[SearchNumber-1].FixedNumber);
}
voidSearchByAddress(void)
{
inti;
charAddress[MAX];
printf("请输入终点站的名称:
");
scanf("%s",&Address);
printf("班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n");
for(i=0;i{
//对比终点站记录,找到并输出
if((strcmp(Address,car[i].TerminalPoint))==0)
{
printf("%d\t%d:
%d\t\t",car[i].SerialNumber,car[i].SetOut.hour,car[i].SetOut.minutes);
printf("%s\t%s\t\t%.1f\t%d\t\t%d\n",car[i].DeparturePoint,car[i].TerminalPoint,car[i].LastTime,car[i].FixNumber,car[i].FixedNumber);
}
}
}
voidTicketManagement(void)
{
charfunctionNumber;
system("color1f");
system("modecon:
cols=140lines=130");
printf(" 订票与退票菜单\n");
printf("============================================================================\n");
printf(" 1.订票\t\n");
printf(" 2.退票\t\n");
printf(" 3.返回主菜单.\n");
printf("============================================================================\n");
printf("选择你需要的功能:
");
scanf("%*c%c",&functionNumber);
switch(functionNumber)
{
case'1':
{
TicketOrder();
//getchar();
//getchar();
}
break;
case'2':
TicketDelete();break;
case'3':
{
getchar();
mainmenu();
}
break;
default:
{
printf("输入错误,请确保你的输入为1--3.\n");
printf("按任意键回主菜单......\n");
getchar();
getchar();
mainmenu();
}
}
}
voidTicketOrder(void)
{
inti;
printf("请输入要订购的车票的班次:
");
scanf("%d",&i);
if(i<0||i>RecordNumber)
{
printf("对不起,今天没有这趟车,请明天再来,谢谢使用!
\n");
printf("按任意键回主菜单......\n");
getchar();//getchar();
TicketManagement();
}
time_ttval;
structtm*now;
tval=time(NULL);
now=localtime(&tval);
if((now->tm_hour==car[i].SetOut.hour&&now->tm_mintm_hour {
if(car[i].FixedNumber {
(car[i].FixedNumber)++;
printf("你的订票成功,请按时上车,谢谢使用!
\n");
}
elseprintf("对不起,今天的这趟车的票已卖完,请明天再来,谢谢合作!
\n");
}
elseprintf("对不起,今天的这趟车已发出,请明天再来,谢谢合作!
\n");
printf("班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n");
printf("%d\t%d:
%d\t\t",car[i-1].SerialNumber,car[i-1].SetOut.hour,car[i-1].SetOut.minutes);
printf("%s\t%s\t\t%.1f\t%d\t\t%d\n",car[i-1].DeparturePoint,car[i-1].TerminalPoint,car[i-1].LastTime,car[i-1].FixNumber,car[i-1].FixedNumber);
//printf("按任意键回主菜单......\n");
//getchar();getchar();
}
voidTicketDelete(void)
{
inti;
printf("请输入要退购的车票的班次:
");
scanf("%d",&i);
if(i<0||i>RecordNumber)
{
printf("对不起,今天没有这趟车,无法完成退票.谢谢使用!
\n");
getchar();
//getchar();
TicketManagement();
getchar();
}
time_ttval;
structtm*now;
tval=time(NULL);
now=localtime(&tval);
if((now->tm_hour==car[i].SetOut.hour&&now->tm_mintm_hour {
if(car[i].FixedNumber>=1)
{
car[i].FixedNumber-=1;
printf("退订车票成功,谢谢使用!
\n");
}
elseprintf("对不起,今天的这趟车的票尚未卖出,无法完成退票!
\n");
}
elseprintf("对不起,今天的这趟车已发出,无法完成退票!
\n");
printf("班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n");
printf("%d\t%d:
%d\t\t",car[i-1].SerialNumber,car[i-1].SetOut.hour,car[i-1].SetOut.minutes);
printf("%s\t%s\t\t%.1f\t%d\t\t%d\n",car[i-1].DeparturePoint,car[i-1].TerminalPoint,car[i-1].LastTime,car[i-1].FixNumber,car[i-1].FixedNumber);
getchar();
}
voidexit(void)
{
p