火车票务管理系统一、课题内容和要求设计目标:设计一个火车票务管理系统,用C语言实现。
对该系统的要求如下:需求描述:1. 系统功能(1) 火车时刻信息录入。
包括车次、日期、起点、终点、开车时间、到达时间、票价数据存入数据文件hchsk.dat 或hchsk.txt中。
(2) 火车时刻信息查询。
按照车次查询按终点查询按起点查询按终点和日期查询(3) 统计按终点统计每日的车次数按起点统计每日的车次数2. 系统主界面应有以下功能选项录入火车时刻信息查询火车时刻信息统计火车车次退出注:建议用VC环境开发用户界面。
结果形式:提交程序设计报告和可演示的系统软件二、需求分析系统主界面应有以下功能选项1 •录入火车时刻信息2 •查询火车时刻信息3 .统计火车车次4.退出(1) 火车时刻信息录入。
包括车次、日期、起点、终点、开车时间、到达时间、票价数据存入数据文件hchsk.dat 或hchsk.txt中。
(2) 火车时刻信息查询。
按照车次查询按终点查询按起点查询按终点和日期查询(3) 统计按终点统计每日的车次数按起点统计每日的车次数概要设计void SearchTrai nNu m();〃按照车次查询void SearchToPlace();〃按终点查询void SearchFromPlace();〃按起点查询void SearchToPlaceA ndDate();〃按终点和日期查询void Cou ntToPlace();〃按终点统计每日的车次数void Cou ntFromPlace();〃按起点统计每日的车次数三、详细设计程序的源代码与注释#i nclude<stdio.h>#i ncludevstri ng.h>#i nclude<stdlib.h>void SearchTrai nNum();void SearchToPlace();void SearchFromPlace();void SearchToPlaceA ndDate();void Cou ntToPlace();void Coun tFromPlace();void Star();struct TRAIN{char trai nNu m[10];char date[30];char fromPlace[20];char toPlace[20];char in Time[30];char outTime[30];double price;};struct TRAIN trai n[ 30];int mai n(){int request;char ch='Y';int i=0;double myprice;FILE *fp;repeat:Star();printf("火车管理系统界面\n");printf("1.录入火车时刻信息.\n");printf("2.查询火车时刻信息.\n");printf("3.统计火车车次.\n");printf("4.退出.\n");Star();prin tf("\n");printf("请输入:");scan f("%d",&request);switch(request) // 利用case 分支结构{case 1:{ fp=fopen(".\\train.rec","wb"); // 利用文件与流if(!fp){prin tf("File can not be ope ned\n");exit(1);}doprin tf("E nter车次日期起点终点开车时间到达时间票价\n>>>");scan f("%s%s%s%s%s%s%lf',trai n[ i].trai nNu m,trai n[ i].date,trai n[i].fromPlace ,train[i].toPlace,train[i].inTime,train[i].outTime,&myprice);trai n[i].price=myprice;fwrite(&trai n[i],sizeof(struct TRAIN),1,fp);i++;prin tf("co nti nue(Y/N)(N to en d)?");getchar();sca nf("%c",&ch);}while(ch!='N');fclose(fp);printf("返回主界面吗?(Y返回)");getchar();scan f("%c",&ch);if(ch=='Y'){prin tf("\n\n");goto repeat;}}break;case 2:{ prin tf("\n\n");printf(">>>>>火车时刻信息查询vvvvv'n");printf("1.按车次查询.\n");printf("2.按终点查询.\n");printf("3.按起点查询.\n");printf("4.按终点和日期查询.\n");printf("5.退出.\n");printf("请输入:");scan f("%d",&request);switch(request){case 1: SearchTrai nNum(); break;case 2: SearchToPlace(); break;case 3: SearchFromPlace(); break;case 4: SearchToPlaceA ndDate(); break;case 5: exit(0); break;printf("返回主界面吗?(Y返回)");getchar();scan f("%c",&ch);if(ch=='Y'){prin tf("\n\n");goto repeat;}} break;case 3:{prin tf("\n\n");printf(">>>>>火车车次统计系统<vvvv\n");printf("1.按终点统计每日的车次数.\n");printf("2.按起点统计每日的车次数.\n");printf("3.退出.\n");printf("请输入:");scan f("%d",&request);switch(request)case 4:{case 1: Coun tToPlace(); break;case 2: Coun tFromPlace(); break;case 3: exit(0); break;printf("返回主界面吗?(Y返回)"); getchar();scan f("%c",&ch);if(ch=='Y'){prin tf("\n\n");goto repeat;}break;Star();printf("欢迎下次使用,拜拜~~\n");Star();页眉exit(O); break;default:prin tf("I ncorrect num en tered.");prin tf("E nter a new nu m.\n"); break;}return 0;}void SearchTrai nNum(){FILE *fp1;char num[20];char ch;int i=0;fp1= fope n(".\\trai n.rec","r+");if(!fp1){prin tf("File can not be ope ned\n");exit(1);}do{rewind(fp1); //文件指针的操作,到文件头部函数printf("输入你要查找的车次号.\n>>>");sca nf("%s", nu m);while(!feof(fp1)){fread(&trai n[i],sizeof(struct TRAIN),1,fp1);if(strcmp( nu m,trai n[i].trai nNum )==0)prin tf("%-4s%-12s%-8s%-10s%-10s%-8s%.2lf",trai n[ i].trai nNu m,trai n[i].date,trai n[i].fromPlace,trai n[i].toPlace,trai n[i].i nTime,trai n[i].outTime,trai n[i].price);prin tf("\n");}i++;}prin tf("co nti nue(Y/N)(N to en d)?"); getchar();sca nf("%c",&ch);}while(ch!='N');prin tf("\n");fclose(fp1);}void SearchToPlace(){FILE *fp2;char num[20];char ch;int i=0;fp2=fope n(".\\trai n.rec","r+");if(!fp2){prin tf("File can not be ope ned\n");exit(1);}do{rewi nd(fp2);printf("输入你要查询的终点.\n>>>");sea nf("%s", nu m);while(!feof(fp2)){fread(&trai n[i],sizeof(struct TRAIN),1,fp2);if(strcmp( nu m,trai n[i].toPlace)==0){prin tf("%-4s%-12s%-8s%-10s%-10s%-8s%.2lf",trai n[ i].trai nNu m,trai n[i].date,trai n[i].fromPlace,trai n[i].toPlace,trai n[i].i nTime,trai n[i].outTime,trai n[i].price);prin tf("\n");}i++;}prin tf("co nti nue(Y/N)(N to en d)?");getchar(); sea nf("%c",&ch);}while(ch!='N');prin tf("\n");fclose(fp2);}void SearchFromPlace(){FILE *fp3;char num[20];char ch;int i=0;fp3=fope n(".\\trai n.rec","r+");if(!fp3){prin tf("File can not be ope ned\n"); exit(1);}do{ rewin d(fp3);曰iHp 「inm■鸯 >w «14s s ®lnr•云v v v )scanf(=%s=num)八whi-e (一feof(fp3))宀f 「ead(£「ain=Lsizeof(snTRA-N)Afp3)八if(sfrcmp (n umk a 5■日.f 「0 m P -a c e H H0)宀|3「5'斗(=%—45%二25%005%二05%二05%005%.2_『^3亘二.寸35'之1101匕3亘二0.3(0匕3亘二.斗mp-acekainm.fop-acpfrainm.inTi mekain 三•oufHmeJrain 三•price)八prinmvl)+■+p 「inff(=conHnue(Y 、N)(N foend)d八g e o ha pscanf(=%c=QOch)八)whi_e(chH ・N)prinmvr)fc-ose(fp3)八void SearchToPlaceA ndDate(){FILE *fp4;char num[20];char num1[20];char ch;int i=0;fp4=fope n(".\\trai n.rec","r+");if(!fp4){prin tf("File can not be ope ned\n");exit(1);}do{rewi nd(fp4);printf("输入你要查询的终点与日期.\n>>>");sca nf("%s", nu m);scan f("%s", nu m1);while(!feof(fp4)){fread(&trai n[i],sizeof(struct TRAIN),1,fp4);if((strcmp( nu m,trai n[i].toPlace)==0)&&( strcmp( nu m1,trai n[i].date)==0))prin tf("%-4s%-12s%-8s%-10s%-10s%-8s%.2lf",trai n[ i].trai nNu m,trai n[i].date,trai n[i].fromPlace,trai n[i].toPlace,trai n[i].i nTime,trai n[i].outTime,trai n[i].price);prin tf("\n");}i++;}prin tf("co nti nue(Y/N)(N to en d)?");getchar();sca nf("%c",&ch);}while(ch!='N');prin tf("\n");fclose(fp4);}void Cou ntToPlace()FILE *fp5;char num[20];char ch;int i=0;int j=0;fp5=fope n(".\\trai n.rec","r+");if(!fp5){prin tf("File can not be ope ned\n");exit(1);}do{rewi nd(fp5);printf("输入你(要统计的车次数的)终点.\n>>>"); sca nf("%s", nu m);j=0;while(!feof(fp5)){fread(&trai n[i],sizeof(struct TRAIN),1,fp5);页眉曰iHif(sf 「cmp(numkainm.fop-aceHHO)宀j +++■+M B M lnr &s-%d=numD prinmvr)prinff(=conHnue(Y 、N)(N foend)2=)八g e o h a pscanf(=%c=QOch)八)whi_e(chH ・N)fc-ose(fp5)八voidCounfFrom 卫aceo 宀F_LE A P 9charnumKSol八charch八in二H o八int j=0;fp6=fope n(".\\trai n.rec","r+");if(!fp6){prin tf("File can not be ope ned\n");exit(1);}do{rewi nd(fp6);printf(”输入你(要统计的车次数的)起点.\n>>>"); sca nf("%s", nu m);j=0;while(!feof(fp6)){fread(&trai n[i],sizeof(struct TRAIN),1,fp6);if(strcmp( nu m,trai n[i].fromPlace)==0){j++;页眉(urmuud 宀F L iz u E(+±o cxl v o .ll )」04~u一()」9Sp o >宀_(9d 4¥s o o 4s o os v &==u e o so」e l p a)6(J(pu①9 N)(N3)①nuQU8=)七£」d(u r )主」dUE n u -=p f s &<®m >=)七 £」d 宀四、测试数据及其结果分析 (如图)1.火车时刻信息录入2.火车时刻信息查询(1)按照车次查询(2)按终点查询(3)按起点查询(4)按终点和日期查询3.统计(1)按终点统计每日的车次数»>»KIISHMH/mJ.it^jg ■ i h; n巳有n 尊盯11[・^ 不mTTk —jr, 哽11] ll_ * I |]U 【鼻■ *51 >■ »石* i 甫F^JTJTTii(2)按起点统计每日的车次数哝箴童统计的车次数的》起点・»>Nf*NJING普日fe^NftNJlNG 的车次数汩 coritinmaCVxH^ CN to end^?V 输入你I 要统计的车次数的H 起点. WIRKT TT MP当日起点BEIJING 的车次数次 Gdntinue<?/HXN to end>?V 输入你£要统计的车次数脚〉起点- ^»SHIANGHflI雪日fe^SHANGHAL 的车次数汀coritiniie<V/N>CN to end5?_4•退出编译过程中由于 MicrosoftVisualStudioC++6.0 直接给结构体double 赋值会出现问题。