1、火车票务管理系统一、课题内容和要求 设计目标:设计一个火车票务管理系统,用C语言实现。对该系统的要求如下: 需求描述: 1. 系统功能火车时刻信息录入。包括车次、日期、起点、终点、开车时间、到达时间、票价。 数据存入数据文件hchsk. dat或hchsk. txt中。 (1) 火车时刻信息查询。 按照车次查询 按终点查询 按起点查询 按终点和日期查询 (2) 统计 按终点统计每日的车次数 按起点统计每日的车次数 2. 系统主界面应有以下功能选项录入火车时刻信息 查询火车时刻信息统计火车车次 退出 注:建议用VC环境开发用户界面。 结果形式: 提交程序设计报告
2、和可演示的系统软件二、需求分析 系统主界面应有以下功能选项录入火车时刻信息 1. 查询火车时刻信息统计火•车车次 rewind(fp2); printfC输入你要查询的终点.\n>>>〃); scanf(〃%s〃, num); while(!feof(fp2))fread(&train[i], sizeof(struct TRAIN), 1, fp2); if (strcmp(nun), train[i]. toPlace)~0)( printf (,z%~4s%-12s%~8s%-10s%-10s%-8s%. 21f〃,trainfi]. trainNum, train[i]
3、 date, train[i]. fromPlace, train[i]. toPlace, train[i]. inTime, train[i]. outTime, train[i]. price); printf(〃\n〃);} i++; )printf C,continue(Y/N) (N to end)?”); getchar ();scanf&ch); } while (ch!=,; printf("\n〃); fclose(fp2); } void SearchFromPlace() ( FILE *fp3; char num[20]: char ch;
4、 fp3二fopcn(〃. \\train. rcc〃, 〃r+〃);if(!fp3) (printf (^File can not be opened\n,/); exit (1);} do! rewind(fp3);printf ("输入你要查询的起点.\n»>z,); scanf(〃%s〃,num);while(!feof(fp3)) {fread(Strain[i], sizeof(struct TRAIN),1,fp3); if (strcmp(num, train[i]. fromPlace)==0)( printf(*%-4s%-12s%-8s%-10s%-10
5、s%-8s%. 21f〃,train[i]. trainNum, train[i]. date, tra fromPlace, train[i]. toPlace,train[i]. inTime, trainEi]. outTime, train[i]. price); printf (〃\n〃);) i++;} printf (z,continue(Y/N) (N to end)?”);getchar (); scanf(〃%c〃,&ch);} while (ch!=' N'); printf(〃\n〃);fclose(fp3); void SearchToPlaceAndDa
6、te()FILE FILE *fp4; char num[20]; char numl[20]; char ch; int i=0; fp4=fopen(/,. \\train. rec”, 〃r+〃); printf (,zFile can not be opencd\n〃); exit (1); do rewind(fp4); printfC输入你要查询的终点与日期.\n>>>〃); while(!feof(fp4)) fread(&train[i], sizeof(struct TRAIN), 1, fp4);if((strcmp(num, tr
7、ain[i]. toP1ace)==0)&&(strcrop(numl, trainEi]. date) ==0)) printf (,z%-4s%-12s%-8s%-10s%-10s%-8s%. 21f,z, trainfi]. trainNum, train[i]. date, trainti]. fromPlace, train[i].toPlace, train[i]. inTime, train[i]. outTime, train[i]. price); printf(〃\n〃);} i++; }printf("continue(Y/N) (N to end)?”); g
8、etchar ();scanf(〃%c〃,&ch); }while(ch!='N'); printf(〃\n"); fclose(fp4); } void CountToPlaceO { FILE *fp5; char num[20]; char ch; int i=0; int j=0; fp5=fopen(〃. \\train. rec〃, 〃r+〃);if(!fp5) {printf(^File can not be opened\n〃); exit (1);do rewind(fp5); printfC输入你(要统计的车次数的)终点.\n>>>〃); s
9、canf (〃%s〃, num);j=0; while(!feof(fp5)) { fread(Strain[i], sizeof(struct TRAIN), 1,fp5); if (strcmp(num, train[i]. toPlace)==0)( j++;} i++; } printf C当日终点Ws的车次数:%d〃,num, j); printf(〃\n〃);printf(''continue(Y/N) (N to end)?”); getchar (); scanf(〃%c〃, &ch); } while (ch!=, N'); fclose(fp5);
10、 } void CountFromPlace() ( FILE *fp6; char num[20]; char ch; int j=0; fp6=fopen(〃. \\train. rec〃,〃r+〃);if(!fp6) {printf(^File can not be opened\n〃); exit (1); )do ( rewind(fp6); printfC输入你(要统计的车次数的)起点.\n>>>〃); scanf (〃%s〃,num);j=0; while(!feof(fp6)) (fread(&train[i], sizeof(struct TRA
11、IN), 1,fp6); if (strcmp(num, train[i]. fromPlace)~0)( j++;} i++; ) printf (,z当日起点%s的车次数:%d", num, j); printf (〃\n〃);printf("continue(Y/N) (N to end)?”); getchar (); scanf(〃%c〃,&ch); } while (ch !=' N');fclose(fp6); }void Star () (int i; for(i=0;i〈20;i++){ printf(〃*〃);) printf(〃\n〃);)
12、四、测试数据及其结果分析(如图)1.火车时刻信息录入
* 息息
f面膏•
f统曹车
5车车车
f理火火火. j勇询计出
5车蓍统退
* 少 1 2 3 4
鬲输入 gnter车次日期 起点 »> T001 2010-3-1 NANJING continue<¥/NXN to end>?V
车次日期 起点 »> T002 2010-3-1 NANJING continue<¥/N>
13、1 BEIJING cont inue
14、ING cont inue
15、信息查询
1.
2.
援终钱而甘丽查询.
5 .退出・
查找的车次号.
»>T001
T0012010-3-1 NANJING SHANGHAI
7:30
8:20300.00
cont inue<¥/NXN to end〉?Y 输入你要查找的车次号. »>T002
T0022010-3-1 NANJING SHANGHAI cont inue
16、042010-3-1 BEIJING NANJING cont inue
17、00
10022010-3-1
NANJING SHANGHAI
10:30
11:20
400.00
F0032010-3-1
NANJING SHANGHAI
15:30
16:20
500.00
cont inue
18、HANGHAITIANJING
continue
19、e
20、SHANGHAI
T0022010-3-1NANJINGSHANGHAI
T0032010-3-1NANJINGSHANGHAI
7:30
10:30
15:30
8:20
11:20
16:20
300.00
400.00
500.00
cont inue
21、
500.00
T0052010-3-1SHANGHAITIANJING
continueCV/NXN to end>?
19:00
20:20
650.00
统计
(1)按终点统计每日的车次数>>>>>火车车次统讦系统««<
1 .技绞点统计每日曲车次数.
2炭起点统计每日的车次数.
3 •退出・请输入
输芙你〈要统计的车次数的〉终点.
»>SHANGHAI当日终点SHANGHAI的车次数:3 cont inue/NXN to end〉?Y 输入你〈要统计的车次数的〉终点.
»>NANJING当日终点NANJING的车次数
continue/N> 22、o end>?V输入你〈要统计的车次数的〉终点.
»>TIANJING当日终点TIANJING的车次数H continue<¥/NXN to end>?
(2)按起点统计每日的车次数输乂你〈要统计的车次数的〉起点.
XXXklAM IT HP当日起点NANJING的车次数:3 continue 23、 to end〉?一退出。
4.退出⑴火车时刻信息录入。包括车次、日期、起点、终点、开车时间、到达时间、票价。 数据存入数据文件hchsk. dat或hchsk. txt中。
(2)火车时刻信息查询。
按照车次查询
按终点查询
按起点查询
按终点和日期查询
⑶统计
按终点统计每日的车次数
按起点统计每日的车次数二、概要设计
void SearchTrainNumO ;//按照车次查询
void SearchToPlace (): 〃按终点查询
void SearchFromPlace (); 〃按起点查询
void SearchToPlaceAndDate (); 〃 24、按终点和日期查询
void CountToPlace ();//按终点统计每日的车次数
void CountFromPlace (); 〃按起点统计每日的车次数三、详细设计
程序的源代码与注释
#include 25、W^A=4作者:B09020415S云鹏
MMMMMMMMMMMMMMMMMMMM 匚Press any key to continue
五、调试过程中的问题编译过程中由于MicrosoftVisualStudioC++6. 0编译器的原因。
直接给结构体double赋值会出现问题。
在金老师的指导和帮助下: 程序改为如下:
struct TRAIN
chartrainNum[10];
chardate[30];
charfromPlace[20];
chartoPlace[20];
charinTime[30];
charoutTime[30];
double 26、 price;};
int main ()
char ch='Y';int i=0;
double myprice;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;
void
SearchToPlaceAndDate 0;
void 27、
CountToPlaceO ;
void
CountFromPlace();
void
Star ();
struct TRAIN
char
trainNum[101;
char
date[30];
char
fromPlace[20];
char
toPlace[20];
char
inTime[30];
char
outTime[30];
double price;
};
struct TRAIN train[30];
int main()int request: char ch='Y';
int i=0;double myprice;
F 28、ILE *fp;
repeat:
Star ();
printfC火车管理系统界面\n〃);
printf (,zl.录入火车时刻信息.\n〃);
printf (z/2.查询火车时刻信息.\n〃);
printf C3.统计火车车次.\n〃);
printf C4.退出.\n〃);Star ();
printf(〃\n〃);
printfC 请输入:〃);
scanf&request);
switch (request)//利用 case 分支结构
{
case 1:
{fp=fopcn(〃. \\train. rcc〃,〃wb〃); //利用文件与流if(!fp 29、)
(printf ("File can not be opened\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。], inTime, train[i]. outTime, &myprice);
train[i]. price=myprice;fwrite(&train[i], sizeof 30、struct TRAIN), 1,fp);
i++;
printf(^continue(Y/N)(N to end)?”);getchar ();
scanf(〃%c〃,&ch);} while (ch!=‘ N');
fclose(fp);printfC返回主界面吗?(Y返回)〃);
getchar ();scanf("%c", &ch);
if(ch== Y'){
printf(〃\n\n〃);goto repeat;
))break;
case 2:
{ printf(〃\n\n〃);printfC»»>火车时刻信息查询«<«\n,/);
printfCl.按车次 31、查询.\n〃);printfC2,按终点查询.\n〃);
printf (〃3.按起点查询.\n〃);printfC4,按终点和日期查询.\n〃);
printf (z,5.退出.\n〃);printfC请输入:〃);
scanf(〃%d〃,&request);
case 2:
SearchToPlaceO ;break;
case 3:
SearchFromPlace();break;
case 4: SearchToPlaceAndDate(); break;case
case
exit(0);
break;
printfC返回主界面吗? 32、Y返回)〃);getchar0;
scanf("%c", &ch);if(ch==' Y')
(printf(〃\n\n〃);
goto repeat;
} break;case 3:
printf(〃\n\rT);printf (〃>>>>>火车车次统计系统<««\0,/); printfCl.按终点统计每日的车次数.\n〃);
printf (〃2.按起点统计每日的车次数.\n〃);printf (/z3,退出.\n〃);
printf C请输入:");scanf(〃%d〃,&request);
switch(request)case 1: CountToPlaceO : 33、 break;
case 2:CountFromPlaceO : break;case 3:exit(0);break;
)
printfC返回主界面吗?(Y返回广); getchar ();scanf(〃%c〃,&ch);
if(ch='Y')I
printf(〃\n\n〃);goto repeat;
}} break;
case 4:
(Star ();
printfC欢迎下次使用,拜拜s\n〃);Star ();
}exit (0); break;
default:
printf(^Incorrect num entered.”);printf("Enter a 34、new num. \n〃);
break;
return 0;
void SearchTrainNumO
(
FILE *fpl;
char num[20];
char ch;
int i=0;
fpl=fopenC\ \\train. rec〃, 〃r+");if(!fpl)
{printf(〃File can not be opened\n〃); exit (1);
)do
{
rewind(fpl); 〃文件指针的操作,到文件头部函数 printfC输入你要查找的车次号.\n>>>〃); scanfnum);
while(!feof(fpl))
{fread 35、train[i], sizeof(struct TRAIN), 1,fpl); if (strcmp(num, train[i]. trainNum) ==0)
printf (/?%-4s%-12s%-8s%-10s%-10s%-8s%. trainfi]. trainNum, train[i]. date, trainti]. fromPlace, train[i].toPlace,train[i]. inTime, train[i]. outTime, train[i]. price);
printf(〃\n〃);}
i++;
}printf("continue(Y/N) (N to end)?”);
getchar ();scanf(〃%c〃,&ch);
} while (ch!='N');
printf (〃\rT);
fclose(fpl);
}
void SearchToPlace() (
FILE *fp2;
char num[20];
char ch:
int i=0;
fp2=fopen(〃. \\train. rcc〃, 〃r+〃);if(!fp2)
{printf ("File can not be opened\n,/);
exit (1);do






