火车票务管理系统C语言.docx
- 文档编号:5679567
- 上传时间:2022-12-31
- 格式:DOCX
- 页数:19
- 大小:113.11KB
火车票务管理系统C语言.docx
《火车票务管理系统C语言.docx》由会员分享,可在线阅读,更多相关《火车票务管理系统C语言.docx(19页珍藏版)》请在冰豆网上搜索。
火车票务管理系统C语言
火车票务管理系统
一、课题容和要求
设计目标:
设计一个火车票务管理系统,用C语言实现。
对该系统的要求如下:
需求描述:
1.系统功能
(1)火车时刻信息录入。
包括车次、日期、起点、终点、开车时间、到达时间、票价。
数据存入数据文件hchsk.dat或hchsk.txt中。
(2)火车时刻信息查询。
按照车次查询
按终点查询
按起点查询
按终点和日期查询
(3)统计
按终点统计每日的车次数
按起点统计每日的车次数
2.系统主界面应有以下功能选项
录入火车时刻信息
查询火车时刻信息
统计火车车次
退出
注:
建议用VC环境开发用户界面。
结果形式:
提交程序设计报告和可演示的系统软件
二、需求分析
系统主界面应有以下功能选项
1.录入火车时刻信息
2.查询火车时刻信息
3.统计火车车次
4.退出
(1)火车时刻信息录入。
包括车次、日期、起点、终点、开车时间、到达时间、票价。
数据存入数据文件hchsk.dat或hchsk.txt中。
(2)火车时刻信息查询。
按照车次查询
按终点查询
按起点查询
按终点和日期查询
(3)统计
按终点统计每日的车次数
按起点统计每日的车次数
二、概要设计
voidSearchTrainNum();//按照车次查询
voidSearchToPlace();//按终点查询
voidSearchFromPlace();//按起点查询
voidSearchToPlaceAndDate();//按终点和日期查询
voidCountToPlace();//按终点统计每日的车次数
voidCountFromPlace();//按起点统计每日的车次数
三、详细设计
程序的源代码与注释
#include
#include
#include
voidSearchTrainNum();
voidSearchToPlace();
voidSearchFromPlace();
voidSearchToPlaceAndDate();
voidCountToPlace();
voidCountFromPlace();
voidStar();
structTRAIN
{
chartrainNum[10];
chardate[30];
charfromPlace[20];
chartoPlace[20];
charinTime[30];
charoutTime[30];
doubleprice;
};
structTRAINtrain[30];
intmain()
{
intrequest;
charch='Y';
inti=0;
doublemyprice;
FILE*fp;
repeat:
Star();
printf("火车管理系统界面\n");
printf("1.录入火车时刻信息.\n");
printf("2.查询火车时刻信息.\n");
printf("3.统计火车车次.\n");
printf("4.退出.\n");
Star();
printf("\n");
printf("请输入:
");
scanf("%d",&request);
switch(request)//利用case分支结构
{
case1:
{fp=fopen(".\\train.rec","wb");//利用文件与流
if(!
fp)
{
printf("Filecannotbeopened\n");
exit
(1);
}
do
{
printf("Enter车次日期起点终点开车时间到达时间票价\n>>>");
scanf("%s%s%s%s%s%s%lf",train[i].trainNum,train[i].date,train[i].fromPlace,train[i].toPlace,train[i].inTime,train[i].outTime,&myprice);
train[i].price=myprice;
fwrite(&train[i],sizeof(structTRAIN),1,fp);
i++;
printf("continue(Y/N)(Ntoend)?
");
getchar();
scanf("%c",&ch);
}while(ch!
='N');
fclose(fp);
printf("返回主界面吗?
(Y返回)");
getchar();
scanf("%c",&ch);
if(ch=='Y')
{
printf("\n\n");
gotorepeat;
}
}break;
case2:
{printf("\n\n");
printf(">>>>>火车时刻信息查询<<<<<\n");
printf("1.按车次查询.\n");
printf("2.按终点查询.\n");
printf("3.按起点查询.\n");
printf("4.按终点和日期查询.\n");
printf("5.退出.\n");
printf("请输入:
");
scanf("%d",&request);
switch(request)
{
case1:
SearchTrainNum();break;
case2:
SearchToPlace();break;
case3:
SearchFromPlace();break;
case4:
SearchToPlaceAndDate();break;
case5:
exit(0);break;
}
printf("返回主界面吗?
(Y返回)");
getchar();
scanf("%c",&ch);
if(ch=='Y')
{
printf("\n\n");
gotorepeat;
}
}break;
case3:
{
printf("\n\n");
printf(">>>>>火车车次统计系统<<<<<\n");
printf("1.按终点统计每日的车次数.\n");
printf("2.按起点统计每日的车次数.\n");
printf("3.退出.\n");
printf("请输入:
");
scanf("%d",&request);
switch(request)
{
case1:
CountToPlace();break;
case2:
CountFromPlace();break;
case3:
exit(0);break;
}
printf("返回主界面吗?
(Y返回)");
getchar();
scanf("%c",&ch);
if(ch=='Y')
{
printf("\n\n");
gotorepeat;
}
}break;
case4:
{
Star();
printf("欢迎下次使用,拜拜~~\n");
Star();
}
exit(0);break;
default:
printf("Incorrectnumentered.");
printf("Enteranewnum.\n");
break;
}
return0;
}
voidSearchTrainNum()
{
FILE*fp1;
charnum[20];
charch;
inti=0;
fp1=fopen(".\\train.rec","r+");
if(!
fp1)
{
printf("Filecannotbeopened\n");
exit
(1);
}
do
{
rewind(fp1);//文件指针的操作,到文件头部函数
printf("输入你要查找的车次号.\n>>>");
scanf("%s",num);
while(!
feof(fp1))
{
fread(&train[i],sizeof(structTRAIN),1,fp1);
if(strcmp(num,train[i].trainNum)==0)
{
printf("%-4s%-12s%-8s%-10s%-10s%-8s%.2lf",train[i].trainNum,train[i].date,train[i].fromPlace,train[i].toPlace,
train[i].inTime,train[i].outTime,train[i].price);
printf("\n");
}
i++;
}
printf("continue(Y/N)(Ntoend)?
");
getchar();
scanf("%c",&ch);
}while(ch!
='N');
printf("\n");
fclose(fp1);
}
voidSearchToPlace()
{
FILE*fp2;
charnum[20];
charch;
inti=0;
fp2=fopen(".\\train.rec","r+");
if(!
fp2)
{
printf("Filecannotbeopened\n");
exit
(1);
}
do
{
rewind(fp2);
printf("输入你要查询的终点.\n>>>");
scanf("%s",num);
while(!
feof(fp2))
{
fread(&train[i],sizeof(structTRAIN),1,fp2);
if(strcmp(num,train[i].toPlace)==0)
{
printf("%-4s%-12s%-8s%-10s%-10s%-8s%.2lf",train[i].trainNum,train[i].date,train[i].fromPlace,train[i].toPlace,
train[i].inTime,train[i].outTime,train[i].price);
printf("\n");
}
i++;
}
printf("continue(Y/N)(Ntoend)?
");
getchar();
scanf("%c",&ch);
}while(ch!
='N');
printf("\n");
fclose(fp2);
}
voidSearchFromPlace()
{
FILE*fp3;
charnum[20];
charch;
inti=0;
fp3=fopen(".\\train.rec","r+");
if(!
fp3)
{
printf("Filecannotbeopened\n");
exit
(1);
}
do
{
rewind(fp3);
printf("输入你要查询的起点.\n>>>");
scanf("%s",num);
while(!
feof(fp3))
{
fread(&train[i],sizeof(structTRAIN),1,fp3);
if(strcmp(num,train[i].fromPlace)==0)
{
printf("%-4s%-12s%-8s%-10s%-10s%-8s%.2lf",train[i].trainNum,train[i].date,train[i].fromPlace,train[i].toPlace,
train[i].inTime,train[i].outTime,train[i].price);
printf("\n");
}
i++;
}
printf("continue(Y/N)(Ntoend)?
");
getchar();
scanf("%c",&ch);
}while(ch!
='N');
printf("\n");
fclose(fp3);
}
voidSearchToPlaceAndDate()
{
FILE*fp4;
charnum[20];
charnum1[20];
charch;
inti=0;
fp4=fopen(".\\train.rec","r+");
if(!
fp4)
{
printf("Filecannotbeopened\n");
exit
(1);
}
do
{
rewind(fp4);
printf("输入你要查询的终点与日期.\n>>>");
scanf("%s",num);
scanf("%s",num1);
while(!
feof(fp4))
{
fread(&train[i],sizeof(structTRAIN),1,fp4);
if((strcmp(num,train[i].toPlace)==0)&&(strcmp(num1,train[i].date)==0))
{
printf("%-4s%-12s%-8s%-10s%-10s%-8s%.2lf",train[i].trainNum,train[i].date,train[i].fromPlace,train[i].toPlace,
train[i].inTime,train[i].outTime,train[i].price);
printf("\n");
}
i++;
}
printf("continue(Y/N)(Ntoend)?
");
getchar();
scanf("%c",&ch);
}while(ch!
='N');
printf("\n");
fclose(fp4);
}
voidCountToPlace()
{
FILE*fp5;
charnum[20];
charch;
inti=0;
intj=0;
fp5=fopen(".\\train.rec","r+");
if(!
fp5)
{
printf("Filecannotbeopened\n");
exit
(1);
}
do
{
rewind(fp5);
printf("输入你(要统计的车次数的)终点.\n>>>");
scanf("%s",num);
j=0;
while(!
feof(fp5))
{
fread(&train[i],sizeof(structTRAIN),1,fp5);
if(strcmp(num,train[i].toPlace)==0)
{
j++;
}
i++;
}
printf("当日终点%s的车次数:
%d",num,j);
printf("\n");
printf("continue(Y/N)(Ntoend)?
");
getchar();
scanf("%c",&ch);
}while(ch!
='N');
fclose(fp5);
}
voidCountFromPlace()
{
FILE*fp6;
charnum[20];
charch;
inti=0;
intj=0;
fp6=fopen(".\\train.rec","r+");
if(!
fp6)
{
printf("Filecannotbeopened\n");
exit
(1);
}
do
{
rewind(fp6);
printf("输入你(要统计的车次数的)起点.\n>>>");
scanf("%s",num);
j=0;
while(!
feof(fp6))
{
fread(&train[i],sizeof(structTRAIN),1,fp6);
if(strcmp(num,train[i].fromPlace)==0)
{
j++;
}
i++;
}
printf("当日起点%s的车次数:
%d",num,j);
printf("\n");
printf("continue(Y/N)(Ntoend)?
");
getchar();
scanf("%c",&ch);
}while(ch!
='N');
fclose(fp6);
}
voidStar()
{
inti;
for(i=0;i<20;i++)
{
printf("*");
}
printf("\n");
}
四、测试数据及其结果分析(如图)
1.火车时刻信息录入
2.火车时刻信息查询。
(1)按照车次查询
(2)按终点查询
(3)按起点查询
(4)按终点和日期查询
3.统计
(1)按终点统计每日的车次数
(2)按起点统计每日的车次数
4.退出。
五、调试过程中的问题
编译过程中由于MicrosoftVisualStudioC++6.0编译器的原因。
直接给结构体double赋值会出现问题。
在金老师的指导和帮助下:
程序改为如下:
structTRAIN
{
chartrainNum[10];
chardate[30];
charfromPlace[20];
chartoPlace[20];
charinTime[30];
charoutTime[30];
doubleprice;
};
intmain()
{
intrequest;
charch='Y';
inti=0;
doublemyprice;
FILE*fp;
………
scanf("%s%s%s%s%s%s%lf",train[i].trainNum,train[i].date,train[i].fromPlace,train[i].toPlace,train[i].inTime,train[i].outTime,&myprice);
train[i].price=myprice;
………
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 火车票 管理 系统 语言