资源描述
火车票务管理系统一、课题内容和要求
设计目标:设计一个火车票务管理系统,用C语言实现。对该系统的要求如下:
需求描述:
1. 系统功能火车时刻信息录入。包括车次、日期、起点、终点、开车时间、到达时间、票价。 数据存入数据文件hchsk. dat或hchsk. txt中。
(1) 火车时刻信息查询。
按照车次查询
按终点查询
按起点查询
按终点和日期查询
(2) 统计
按终点统计每日的车次数
按起点统计每日的车次数
2. 系统主界面应有以下功能选项录入火车时刻信息
查询火车时刻信息统计火车车次
退出
注:建议用VC环境开发用户界面。
结果形式:
提交程序设计报告和可演示的系统软件二、需求分析
系统主界面应有以下功能选项录入火车时刻信息
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]. 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;
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%-10s%-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 SearchToPlaceAndDate()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, train[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)?”);
getchar ();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>>>〃); scanf (〃%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);
}
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 TRAIN), 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〃);)
四、测试数据及其结果分析(如图)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><N to end>?¥
车次白期庖,点
»> T003 2010-3-1 NANJING cont inue<V/NXN to end>?V gnt”车次日期 起点 »> T004 2010-3-1 BEIJING cont inue<V/NXN to end>?¥ Rnter车次日期 起点 »> T005 2010-3-1 SHANGHAI
鬲输入 gnter车次日期 起点 »> T001 2010-3-1 NANJING continue<¥/NXN to end>?V
车次日期 起点 »> T002 2010-3-1 NANJING continue<¥/N><N to end>?¥
车次白期庖,点
»> T003 2010-3-1 NANJING cont inue<V/NXN to end>?V gnt”车次日期 起点 »> T004 2010-3-1 BEIJING cont inue<V/NXN to end>?¥ Rnter车次日期 起点 »> T005 2010-3-1 SHANGHAI
终点开车时间到达时间票价
SHANGHAI 7:308:20300
终点开车时间到达时间票价
SHANGHAI 10:3011:20 400
终点开车时间到达时间票价
SHANGHAI 15:3016:20 500
终点
NANJING
开车时间到达时间票价
9:5011:00 500
终点开车时间到达时间票价
TIANJING 19:0020:20 650
2. 火车时刻信息查询。
(1) 按照车次查询
〉>>>>火车时刻信息查询
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<V/NXN to end>?V 输入你要查找的车次号.
»>T003
T0032010-3-1 NANJING SHANGHAI continue<V/NXN to end>?V 输入你要查找的车次号.
»>T004
T0042010-3-1 BEIJING NANJING cont inue<V/NXN to end>?V 输入你要查找的车次号•
»>T005
T0052010-3-1 SHANGHAITIANJING
10:30
15:30
9:50
19:00
11:20400.00
16:20500.00
11:00500.00
20:20650.00
按终点查询
>>>>>火车时刻信息查询 L.铤次查询.
侦安练点查询.
).波超点查询.
I成终点和日期查询.
i.退出.
10012010-3-1
NANJING SHANGHAI
7:30
8:20
300.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<V/NXN
to end>?V
腕入你要查询的终点.
»>NANJING
10042010-3-1
BEIJING NANJING
9:50
11:00
500.00
continue<V/NXN to end〉?Y 输入你要查询的终点・
»>TIANJING
10052010-3-1 SHANGHAITIANJING
continue<Y/NXN to end>?N
崭乂你要查询的终点・
»>SHANGHAI
19:00
20:20
650.00
返回主果面吗?<丫返回〉
(2) 按起点查询
请翰入:3
输X你要查询的起点.
»>NANJING
T0012010-3-1NANJINGSHANGHAI
T0022010-3-1NANJINGSHANGHAI
T0032010-3-1NANJINGSHANGHAI
7:30 10:30 15:30
8:20
11:20
16:20
300.00
400.00
500.00
continue<V/NXN to end>?¥ 输入你要查询的起点• »>BEIJING
T0042010-3-1BEIJING NANJING
continue<?/NXN to end〉?Y 输入你要查询的起点.
»>SHANGHAI
9:50
11:00
500.00
T0052010-3-1SHANGHAITIANJING
cont inue<¥/NXN to end〉?.
19:00
20:20
650.00
(3) 按终点和日期查询
请 • 4
输乂你妻查询的终点与日期.
»>SHANGHAI 2010-3-1
T0012010-3-1NANJINGSHANGHAI
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<V/NXN to end>?¥ 输入你要查询的终点与日期. »>NANJING 2010-3-1
T0042010-3-1BEIJING NANJING
cont inue<V/NXN to end〉?Y 输入你要查询的终点与日期.
»>TIANJING 2010-3-1
9:50
11:00
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><N to end>?V输入你〈要统计的车次数的〉终点.
»>TIANJING当日终点TIANJING的车次数H continue<¥/NXN to end>?
(2)按起点统计每日的车次数输乂你〈要统计的车次数的〉起点.
XXXklAM IT HP当日起点NANJING的车次数:3 continue<V/NXN to end〉?Y 输入你〈要统计的车次数的〉起点.
»>BEIJING含日盘,板BEIJING的车次数
cont inue<V/NXN to end〉?Y 输入你〈要统计的车次数的〉起点.
»>SHANGHAI含日起出SHANGHAI的车次数
conti.nue<Y/N〉<N to end〉?一退出。
4.退出⑴火车时刻信息录入。包括车次、日期、起点、终点、开车时间、到达时间、票价。 数据存入数据文件hchsk. dat或hchsk. txt中。
(2)火车时刻信息查询。
按照车次查询
按终点查询
按起点查询
按终点和日期查询
⑶统计
按终点统计每日的车次数
按起点统计每日的车次数二、概要设计
void SearchTrainNumO ;//按照车次查询
void SearchToPlace (): 〃按终点查询
void SearchFromPlace (); 〃按起点查询
void SearchToPlaceAndDate (); 〃按终点和日期查询
void CountToPlace ();//按终点统计每日的车次数
void CountFromPlace (); 〃按起点统计每日的车次数三、详细设计
程序的源代码与注释
#include<stdio. h>
#include<string. h>
#include<stdlib. h>
void SearchTrainNumO ;
void SearchToPlace();
void SearchFromPlace0;
自心自心 面简简• 次 统曹专 u 理火火火• 勇询计出 车善统退
• • • • w.kl—21314—
|jW^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 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
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;
FILE *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)
(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(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.按车次查询.\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返回主界面吗?(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 : 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 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(&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
展开阅读全文