二、设计内容设计一个火车票务管理系统,用C语言实现。
对该系统的要求如下: 需求描述:1. 系统功能(1)火车时刻信息录入。
包括车次、日期、起点、终点、开车时间、到达时间、票价。
数据存入数据文件hchsk.dat 或hchsk.txt 中。
(2)火车时刻信息查询。
按照车次查询按终点查询按起点查询按终点和日期查询(3) 统计按终点统计每日的车次数按起点统计每日的车次数2. 系统主界面应有以下功能选项录入火车时刻信息查询火车时刻信息统计火车车次退出三、详细设计说明#include<stdio.h>#include<string.h>#include<stdlib.h>int MENU(); //菜单模块void INPUT(); //输入模块void SEARCH(); //查询模块void SELECT(); //统计模块void WRITE(); //文件记录模块void PRINT(); //打印模块void READ(); //文件读取模块void WRONG(); //纠错模块#define N 1000 //最大列车组数#define Print " %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].pr ice //输出记录格式#define Wrong "\n ! ! ! ! ! ! ! ! ! ! ! 输入错误,请重新输入! ! ! ! ! ! ! ! ! ! ! \n"#define GeShi " 车次日期起点终点开车时间到达时间票价\n"struct Train{char code[10]; //车次char data[10]; //日期//left place 起点char lp[10];char ap[10]; //arrive place 终点char lt[10]; //left time 开车时间char at[10]; //arrive time 到达时间char price[10]; // 票价}T[N];/* 全局变量*/int i=0; // 输入计数器int n=0; // 合计计数器char l[20]; // 纠错空间/////////////////////////////////////////////////////////////////////////////////////// 主函数int main(){int x;do{x=MENU();switch(x){case 1:INPUT(); break;case 2:SEARCH(); break;case 3:SELECT(); break;case 4:printf("\nprintf("\nprintf("\n\nprintf("\n");break;default:WRONG(); break; } }while(x!=4);return 0;}------------------------- "); 正在退出,请按任意键退出");");\n/////////////////////////////////////////////////////////////////////////////////////// 菜单模块int MENU(){int choice;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);return choice;}/////////////////////////////////////////////////////////////////////////////////////// 输入模块void INPUT(){char ch;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(i<N);系统记载的列车信息如下 \n");printf(" PRINT();}/////////////////////////////////////////////////////////////////////////////////////// 文件记录模块 void WRITE(){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;i<n;i++)if(fwrite(&T[i],sizeof(struct Train),1,fp)==0)printf(" 写入数据失败 !\n\n");fprintf(fp1,"%d",n); fclose(fp); fclose(fp1);WRITE(); system("cls"); printf("\n"); printf("\n");printf(" \n\n");/////////////////////////////////////////////////////////////////////////////////////// void READ(){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<n;i++){fread(&T[i],sizeof(struct Train),1,fp);}fclose(fp);}/////////////////////////////////////////////////////////////////////////////////////// void PRINT(){char ch[10];READ();printf("\n=\n"); printf(GeShi); for(i=0;i<n;i++) 文件读取模块打印模块printf("=====\n");printf("\n 按任意键返回上级菜单: "); gets(ch);} /////////////////////////////////////////////////////////////////////////////////////// 查询模块void SEARCH(){char name1[10];// 车次char name2[10];// 终点char name3[10];// 起点char name41[10];// 终点char name42[10];// 日期char choice;int j;int k;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){case 1:PRINT(); break;case 2:printf("\n --- 请输入车次--- :"); gets(name1);break;case 3:printf("\n --- 请输入终点--- :"); gets(name2);break;case 4:printf("\n --- 请输入起点--- :"); gets(name3);break;case 5:printf("\n --- 请输入终点--- :");gets(name41);printf("\n --- 请输入日期--- :");gets(name42);break;printf(Print); k++;}case 6:break; default:WRONG (); break;}READ(); k=0; if(j==2){for(i=0;i<n;i++){if(strcmp(T[i].code,name1)==0){printf("\n功!\n");printf("\n\n");printf(GeShi); break;}}for(i=0;i<n;i++){if(strcmp(T[i].code,name1)==0){按 车次 查找列车信息成printf("printf(Print); k++;}=====\n");printf("\n--> 共查询到%d 趟列车信息 ,请按任意键返回<-- ",k);gets(l);}if(j =3){for(i=0;i<n;i++){if(strcmp(T[i].ap,name2)==0){printf("\n按 终点 查找列车信息成功!\n");printf("\n\n");printf(GeShi); break;}}for(i=0;i<n;i++){if(strcmp(T[i].ap,name2)==0){printf("printf(Print); k++;}=====\n");printf("\n--> 共查询到%d 趟列车信息 ,请按任意键返回<-- ",k);gets(l);}if(j =4){for(i=0;i<n;i++){if(strcmp(T[i].lp,name3)==0){printf("\n按 起点 查找列车信息成功!\n");printf("\n\n");printf(GeShi); break;}}for(i=0;i<n;i++){if(strcmp(T[i].lp,name3)==0){printf("printf(Print); k++;}=====\n");printf("\n--> 共查询到 %d 趟列车信息 ,请按任意键返回<-- ",k);gets(l);}if(j==5){for(i=0;i<n;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<n;i++){if(strcmp(T[i].ap,name41)==0&&strcmp(T[i].data,name42)==0){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');}/////////////////////////////////////////////////////////////////////////////////////// 统计模块void SELECT(){char name1[10];// 终点char name2[10];// 起点int t,k;char choice;dosystem("cls");{{{==================== 欢 迎 进 入 统 计 火 车 车 次 界 面 \n");gets(l); switch(t) case 1:printf(" 请输入终点: "); gets(name1); break; case 2:printf(" 请输入起点: "); gets(name2); break; default:WRONG(); break;}READ(); if(t==1){k=0;for(i=0;i<n;i++)if(strcmp(T[i].lp,name1)==0)printf(" 1.按终点统计每日的车次数 \n"); printf(" 2.按起点统计每日的车次数 \n");printf("\n请选择: ");printf("\n |- -|- -|- -|- 请选择统计方式 -|- -|- -|- -|- \n\n");scanf("%d",&t);printf("\n\nprintf("\n 按终点统计列车信息成功!\n");break;}}for(i=0;i<n;i++){if(strcmp(T[i].lp,name1)==0)k++;}printf("\n --> 共查询到%d 趟列车信息,请按任意键返回<-- ",k);gets(l);}if(t==2){k=0;for(i=0;i<n;i++){if(strcmp(T[i].lp,name2)==0){printf("\n 按起点统计列车信息成功!\n");break;}}for(i=0;i<n;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');}/////////////////////////////////////////////////////////////////////////////////////// 纠错模块void WRONG(){system("cls");printf("\n\n ---> ! ! ! 输入错误,请按任意键返回! ! ! <--- ");gets(l);}。