C语言课程设计火车票管理系统方案.docx
《C语言课程设计火车票管理系统方案.docx》由会员分享,可在线阅读,更多相关《C语言课程设计火车票管理系统方案.docx(19页珍藏版)》请在冰豆网上搜索。
C语言课程设计火车票管理系统方案
二、设计容
设计一个火车票务管理系统,用C语言实现。
对该系统的要求如下:
需求描述:
1.系统功能
(1)火车时刻信息录入。
包括车次、日期、起点、终点、开车时间、到达时间、票价。
数据存入数据文件hchsk.dat或hchsk.txt中。
(2)火车时刻信息查询。
按照车次查询
按终点查询
按起点查询
按终点和日期查询
(3)统计
按终点统计每日的车次数
按起点统计每日的车次数
2.系统主界面应有以下功能选项
录入火车时刻信息
查询火车时刻信息
统计火车车次
退出
三、详细设计说明
#include
#include
#include
intMENU();//菜单模块
voidINPUT();//输入模块
voidSEARCH();//查询模块
voidSELECT();//统计模块
voidWRITE();//文件记录模块
voidPRINT();//打印模块
voidREAD();//文件读取模块
voidWRONG();//纠错模块
#defineN1000//最大列车组数
#definePrint"%s%13s%10s%10s%12s%15s%11s\n",T[i].code,T[i].data,T[i].lp,T[i].ap,T[i].lt,T[i].at,T[i].price//输出记录格式
#defineWrong"\n!
!
!
!
!
!
!
!
!
!
!
输入错误,请重新输入!
!
!
!
!
!
!
!
!
!
!
\n"
#defineGeShi"车次日期起点终点开车时间到达时间票价\n"
structTrain
{
charcode[10];//车次
chardata[10];//日期
charlp[10];//leftplace起点
charap[10];//arriveplace终点
charlt[10];//lefttime开车时间
charat[10];//arrivetime到达时间
charprice[10];//票价
}T[N];
/*全局变量*/
inti=0;//输入计数器
intn=0;//合计计数器
charl[20];//纠错空间
///////////////////////////////////////////////////////////////////////////////////////主函数
intmain()
{
intx;
do
{
x=MENU();
switch(x)
{
case1:
INPUT();break;
case2:
SEARCH();break;
case3:
SELECT();break;
case4:
printf("\n---------------------------------------");
printf("\n正在退出,请按任意键退出");
printf("\n\n");
printf("\n---------------------------------------\n");
break;
default:
WRONG();break;
}
}while(x!
=4);
return0;
}
///////////////////////////////////////////////////////////////////////////////////////菜单模块
intMENU()
{
intchoice;
system("cls");
printf("\n----------------------------------------------\n");
printf("----------------------------------------------\n");
printf("------\n");
printf("---欢迎进入火车票务管理系统---\n");
printf("------\n");
printf("----------------------------------------------\n");
printf("----------------------------------------------\n\n");
printf("\n--------------请输入选项-------------\n");
printf("1.录入火车时刻信息\n");
printf("2.查询火车时刻信息\n");
printf("3.统计火车车次\n");
printf("4.退出\n");
printf("-----------------------------------------\n");
printf("请选择:
");
scanf("%d",&choice);
gets(l);
returnchoice;
}
///////////////////////////////////////////////////////////////////////////////////////输入模块
voidINPUT()
{
charch;
do
{
system("cls");
printf("\n\n====================欢迎进入录入火车时刻信息界面====================\n");
do
{
printf("\n新建列车信息?
(y/n)");
scanf("%c",&ch);
gets(l);
if(ch!
='y'&&ch!
='n')
WRONG();
}while(ch!
='y'&&ch!
='n');
if(ch=='n')
break;
printf("---------------------");
printf("\n录入第%d趟列车信息\n",n+1);
printf("车次");
gets(T[i].code);
printf("日期");
gets(T[i].data);
printf("起点");
gets(T[i].lp);
printf("终点");
gets(T[i].ap);
printf("开车时间");
gets(T[i].lt);
printf("到达时间");
gets(T[i].at);
printf("票价");
gets(T[i].price);
n++;
i++;
}while(iWRITE();
system("cls");
printf("\n");
printf("--------------------------------\n");
printf("系统记载的列车信息如下\n");
printf("--------------------------------\n\n");
PRINT();
}
///////////////////////////////////////////////////////////////////////////////////////文件记录模块
voidWRITE()
{
FILE*fp,*fp1;
if((fp=fopen("hchsk.txt","w"))==NULL)
{
printf("无法创建文件!
\n\n");
getchar();
return;
}
if((fp1=fopen("N.txt","w"))==NULL)//用于记录共几趟车
{
printf("无法创建文件!
\n");
getchar();
return;
}
for(i=0;iif(fwrite(&T[i],sizeof(structTrain),1,fp)==0)
printf("写入数据失败!
\n\n");
fprintf(fp1,"%d",n);
fclose(fp);
fclose(fp1);
}
///////////////////////////////////////////////////////////////////////////////////////文件读取模块
voidREAD()
{
FILE*fp,*fp1;
if((fp=fopen("hchsk.txt","r"))==NULL)
{
printf("无法打开文件\n");
getchar();
return;
}
if((fp1=fopen("N.txt","r"))==NULL)
{
printf("无法打开文件!
\n\n");
getchar();
return;
}
fscanf(fp1,"%d",&n);
fclose(fp1);
for(i=0;i{
fread(&T[i],sizeof(structTrain),1,fp);
}
fclose(fp);
}
///////////////////////////////////////////////////////////////////////////////////////打印模块
voidPRINT()
{
charch[10];
READ();
printf("\n===========================================================================\n");
printf(GeShi);
for(i=0;iprintf(Print);
printf("===========================================================================\n");
printf("\n按任意键返回上级菜单:
");
gets(ch);
}
///////////////////////////////////////////////////////////////////////////////////////查询模块
voidSEARCH()
{
charname1[10];//车次
charname2[10];//终点
charname3[10];//起点
charname41[10];//终点
charname42[10];//日期
charchoice;
intj;
intk;
do
{
system("cls");
printf("\n\n====================欢迎进入查询火车时刻信息界面====================\n");
printf("\n++++++++++++++++++请选择查找方式++++++++++++++++++\n\n");
printf("----1.显示所有列车信息2.按车次查询3.按终点查询----\n");
printf("-----4.按起点查询5.按终点和日期查询6.返回上级菜单----\n");
printf("\n请选择:
");
scanf("%d",&j);
gets(l);
switch(j)
{
case1:
PRINT();
break;
case2:
printf("\n---请输入车次---:
");
gets(name1);
break;
case3:
printf("\n---请输入终点---:
");
gets(name2);
break;
case4:
printf("\n---请输入起点---:
");
gets(name3);
break;
case5:
printf("\n---请输入终点---:
");
gets(name41);
printf("\n---请输入日期---:
");
gets(name42);
break;
case6:
break;
default:
WRONG();
break;
}
READ();
k=0;
if(j==2)
{
for(i=0;i{
if(strcmp(T[i].code,name1)==0)
{
printf("\n按车次查找列车信息成功!
\n");
printf("\n===========================================================================\n");
printf(GeShi);
break;
}
}
for(i=0;i{
if(strcmp(T[i].code,name1)==0)
{
printf(Print);
k++;
}
}
printf("===========================================================================\n");
printf("\n-->共查询到%d趟列车信息,请按任意键返回<--",k);
gets(l);
}
if(j==3)
{
for(i=0;i{
if(strcmp(T[i].ap,name2)==0)
{
printf("\n按终点查找列车信息成功!
\n");
printf("\n===========================================================================\n");
printf(GeShi);
break;
}
}
for(i=0;i{
if(strcmp(T[i].ap,name2)==0)
{
printf(Print);
k++;
}
}
printf("===========================================================================\n");
printf("\n-->共查询到%d趟列车信息,请按任意键返回<--",k);
gets(l);
}
if(j==4)
{
for(i=0;i{
if(strcmp(T[i].lp,name3)==0)
{
printf("\n按起点查找列车信息成功!
\n");
printf("\n===========================================================================\n");
printf(GeShi);
break;
}
}
for(i=0;i{
if(strcmp(T[i].lp,name3)==0)
{
printf(Print);
k++;
}
}
printf("===========================================================================\n");
printf("\n-->共查询到%d趟列车信息,请按任意键返回<--",k);
gets(l);
}
if(j==5)
{
for(i=0;i{
if(strcmp(T[i].ap,name41)==0&&strcmp(T[i].data,name42)==0)
{
printf("\n按终点和日期查找列车信息成功!
\n");
printf("\n===========================================================================\n");
printf(GeShi);
break;
}
}
for(i=0;i{
if(strcmp(T[i].ap,name41)==0&&strcmp(T[i].data,name42)==0)
{
printf(Print);
k++;
}
}
printf("===========================================================================\n");
printf("\n-->共查询到%d趟列车信息,请按任意键返回<--",k);
gets(l);
}
do
{
system("cls");
printf("\n\n-->继续查找
(1),返回主菜单
(2)<--");
choice=getchar();
gets(l);
if(choice!
='1'&&choice!
='2')
WRONG();
}while(choice!
='1'&&choice!
='2');
}while(choice!
='2');
}
///////////////////////////////////////////////////////////////////////////////////////统计模块
voidSELECT()
{
charname1[10];//终点
charname2[10];//起点
intt,k;
charchoice;
do
{
system("cls");
printf("\n\n====================欢迎进入统计火车车次界面====================\n");
printf("\n-|--|--|--|-请选择统计方式-|--|--|--|-\n\n");
printf("1.按终点统计每日的车次数\n");
printf("2.按起点统计每日的车次数\n");
printf("\n请选择:
");
scanf("%d",&t);
gets(l);
switch(t)
{
case1:
printf("请输入终点:
");
gets(name1);
break;
case2:
printf("请输入起点:
");
gets(name2);
break;
default:
WRONG();
break;
}
READ();
if(t==1)
{
k=0;
for(i=0;i{
if(strcmp(T[i].lp,name1)==0)
{
printf("\n按终点统计列车信息成功!
\n");
break;
}
}
for(i=0;i{
if(strcmp(T[i].lp,name1)==0)
k++;
}
printf("\n-->共查询到%d趟列车信息,请按任意键返回<--",k);
gets(l);
}
if(t==2)
{
k=0;
for(i=0;i{
if(strcmp(T[i].lp,name2)==0)
{
printf("\n按起点统计列车信息成功!
\n");
break;
}
}
for(i=0;i{
if(strcmp(T[i].lp,name2)==0)
k++;
}
printf("\n-->共查询到%d趟列车信息,请按任意键返回<--",k);
gets(l);
}
do
{
system("cls");
printf("\n\n-->继续统计
(1),返回主菜单
(2)<--");
choice=getchar();
gets(l);
if(choice!
='1'&&choice!
='2')
WRONG();
}while(choice!
='1'&&choice!
='2');
}while(choice!
='2');
}
///////////////////////////////////////////////////////////////////////////////////////纠错模块
voidWRONG()
{
system("cls");
printf("\n\n--->!
!
!
输入错误,请按任意键返回!
!
!
<---");
gets(l);
}