#include"stdio.h"#include"stdlib.h"#include"string.h"/*定义头文件,处理文件及字符数组时要用到相应功能*/#define N 10void fmenu(){system("cls");printf("************************欢迎使用苏州列车时刻表信息管理系统v1.20*****************\n");printf("\t\t\t\t %c1. 查询列车\n",3);printf("\n");printf("\t\t\t\t %c2. 修改列车\n",3);printf("\n");printf("\t\t\t\t %c3. 增加列车\n",3);printf("\n");printf("\t\t\t\t %c4. 取消列车\n",3);printf("\n");printf("\t\t\t\t %c5. 保存信息\n",3);printf("\n");printf("\t\t\t\t %c0. 退出\n",3);printf("********************************************************************* ***********\n");printf("请选择要执行的操作:\n");/*菜单程序,用于各种功能的选择*/}struct train/*定义结构体*/{char name[8];char checi[6];int year;int month;int day;int hour;int minute;}lieche[N];/*定义一个结构体数组*/void paixu(struct train *p);/*函数声明*/void chaxun(struct train *p)/*子程序,其功能是查询列车*/{paixu(lieche);/*先排序一下,方便查看*/char a[8];/*定义一个字符数组,输入要查询的列车*/int k=0,i,c;printf("请输入要查询的列车:\n");scanf("%s",a);for(i=0;i<N;i++){if(strcmp(p[i].name,a)==0){printf("苏州—%s\t%s(车次)\t%d年%d月%d日\t%d:%02d\n",p[i].name,p[i].checi,p[i].year,p[i].month,p[i].day,p[i].hour,p[i].minute);/*将所查列车的信息全部打出*/k++;}}if(k==0)printf("抱歉,没有这趟列车\n");/*没有查到时,打出通知*/printf("按1 继续,按0 退出\n");/*选择继续或者退出*/scanf("%d",&c);if(c!=0)chaxun(lieche);}void xiugai(struct train *p)/*子程序,用于修改列车时间*/{char a[8],b[6];int i,x,c,k=0,h,mi,y,m,d,q;printf("请输入要修改的列车:\n");scanf("%s",a);for(i=0;i<N;i++){if(strcmp(p[i].name,a)==0){printf("苏州—%s\t%s()车次\t%d年%d月%d日\t%d:%02d\n",p[i].name,p[i].checi,p[i].year,p[i].month,p[i].day,p[i].hour,p[i].minute);printf("要修改这趟列车吗?\n1.是0.否\n");scanf("%d",&q);if(q==1){printf("请输入修改后的车次:\n");scanf("%s",b);printf("请输入修改后的年月日:\n");scanf("%d%d%d",&y,&m,&d);scanf("%d%d",&h,&mi);printf("确定修改吗?\n1.是2.否\n");/*选择是否确定修改列车时间,防止错误操作*/scanf("%d",&x);if(x==1){strcpy(p[i].checi,b);p[i].year=y;p[i].month=m;p[i].day=d;p[i].hour=h;p[i].minute=mi;printf("已经修改此列车");}}k++;}}if(k==0)printf("抱歉,没有这趟列车\n");/*没有查到时,打出通知*/ printf("按1 继续,按0 退出\n");scanf("%d",&c);if(c!=0)xiugai(lieche);}void zengjia(struct train *p)/*子程序,用于列车增加*/{struct train a;char b[]={"0000000"};/*空白位置,在此处插入所填列车*/int x,c,i;printf("请输入要增加的列车目的地:\n");scanf("%s",);printf("请输入修改后的车次:\n");scanf("%s",a.checi);printf("请输入所增加列车的年月日:\n");scanf("%d%d%d",&a.year,&a.month,&a.day);printf("请输入所增加列车的小时和分钟:\n");scanf("%d%d",&a.hour,&a.minute);printf("确定要增加这一趟列车吗?\n1.是0.否\n");scanf("%d",&x);if(x==1)for(i=0;i<N-1;i++){if(strcmp(p[i].name,b)==0){strcpy(p[i].name,);strcpy(p[i].checi,a.checi);p[i].year=a.year;p[i].month=a.month;p[i].day=a.day;p[i].hour=a.hour;p[i].minute=a.minute;strcpy(p[i+1].name,b);/*找到位置,插入列车,并把0000000给后面一个结构体*/printf("已经增加这趟列车");break;}}paixu(lieche);printf("按1 继续,按0 退出\n");scanf("%d",&c);if(c!=0)zengjia(lieche);}void paixu(struct train *p)/*子程序,用于同名列车时刻排序*/{int i,x;char a[6];for(i=0;i<N;i++){if(strcmp(p[i].name,p[i+1].name)==0)/*先找到相同名字的列车*/{if(p[i].year>p[i+1].year)//根据年份排序{strcpy(a,p[i].checi);strcpy(p[i].checi,p[i+1].checi);strcpy(p[i+1].checi,p[i].checi);x=p[i].year;p[i].year=p[i+1].year;p[i+1].year=x;x=p[i].month;p[i].month=p[i+1].month;p[i+1].month=x;x=p[i].day;p[i].day=p[i+1].day;p[i+1].day=x;x=p[i].hour;p[i].hour=p[i+1].hour;p[i+1].hour=x;x=p[i].minute;p[i].minute=p[i+1].minute;p[i+1].minute=x;}else if(p[i].year==p[i+1].year){if(p[i].month>p[i+1].month)//相同年数,根据月份排序。
{strcpy(a,p[i].checi);strcpy(p[i].checi,p[i+1].checi);strcpy(p[i+1].checi,p[i].checi);x=p[i].month;p[i].month=p[i+1].month;p[i+1].month=x;x=p[i].day;p[i].day=p[i+1].day;p[i+1].day=x;x=p[i].hour;p[i].hour=p[i+1].hour;p[i+1].hour=x;x=p[i].minute;p[i].minute=p[i+1].minute;p[i+1].minute=x;}else if(p[i].month==p[i+1].month){if(p[i].day>p[i+1].day)//相同月份,根据天排序{strcpy(a,p[i].checi);strcpy(p[i].checi,p[i+1].checi);strcpy(p[i+1].checi,p[i].checi);x=p[i].day;p[i].day=p[i+1].day;p[i+1].day=x;x=p[i].hour;p[i].hour=p[i+1].hour;p[i+1].hour=x;x=p[i].minute;p[i].minute=p[i+1].minute;p[i+1].minute=x;}else if(p[i].day==p[i+1].day){if(p[i].hour>p[i+1].hour)//相同天数,根据小时排序{strcpy(a,p[i].checi);strcpy(p[i].checi,p[i+1].checi);strcpy(p[i+1].checi,p[i].checi);x=p[i].hour;p[i].hour=p[i+1].hour;p[i+1].hour=x;x=p[i].minute;p[i].minute=p[i+1].minute;p[i+1].minute=x;}else if(p[i].hour==p[i+1].hour)//相同小时,根据分钟排序{strcpy(a,p[i].checi);strcpy(p[i].checi,p[i+1].checi);strcpy(p[i+1].checi,p[i].checi);x=p[i].minute;p[i].minute=p[i+1].minute;p[i+1].minute=x;}}}}}}}void quxiao(struct train *p)/*子程序,用于取消列车*/{char a[8];char b[]={"0000000"};int i,x,c,k=0,s;printf("请输入要取消的列车\n");scanf("%s",a);for(i=0;i<N;i++){if(strcmp(p[i].name,a)==0){printf("苏州—%s\t%s(车次)\t%d年%d月%d日\t%d:%02d\n",p[i].name,p[i].checi,p[i].year,p[i].month,p[i].day,p[i].hour,p[i].minute);printf("确定要删除这一次列车吗?\n1.是0.否\n");/*询问是否取消*/scanf("%d",&x);if(x==1){for(s=i;s<N-1;s++){strcpy(p[s].name,p[s+1].name);strcpy(p[s].checi,p[s+1].checi);p[s].year=p[s+1].year;p[s].month=p[s+1].month;p[s].day=p[s+1].day;p[s].hour=p[s+1].hour;p[s].minute=p[s+1].minute;/*将列车取消,把后一个结构体往前移一位*/}printf("此列车已取消");}k++;}}if(k==0)printf("抱歉,没有这趟列车\n");/*先查一下有没有要取消的列车*/ printf("按1 继续,按0 退出\n");scanf("%d",&c);if(c!=0)quxiao(lieche);}void baocun(struct train *p)/*子程序,用于数据保存*/{int c,i=0,x;char b[]={"0000000"};printf("确定要保存修改吗?\n1.是2.否\n");scanf("%d",&x);if(x!=0){char a[20];printf("请输入要保存的路径及文件名(扩展名为.txt):\n");/*自己指定位置*/scanf("%s",a);FILE *pps;if((pps=fopen(a,"w+"))==NULL)/*打开一个新的文本文件*/{printf("不能打开此文件\n");exit(0);}while(strcmp(lieche[i].name,b)!=0){fprintf(pps,"%s %s %d %d %d %d:%02d\n",p[i].name,p[i].checi,p[i].year,p[i].month,p[i].day ,p[i].hour,p[i].minute);/*将结构体数组的数据写进里面*/i++;}fprintf(pps,"%s",b);printf("文件已保存\n");}printf("按1 继续,按0 退出\n");scanf("%d",&c);if(c!=0)baocun(lieche);}void main()/*主程序,负责整个程序架构及函数调用等*/{system("color 3b");/*更改前景和背景颜色*/char b[]={"0000000"};FILE *fp;/**/int x,i;if((fp=fopen("d:\\实践\\wenjian.txt","r+"))==NULL)/*打开文件,输入数据*/{printf("不能打开数据库文件\n");exit(0);}for(i=0;i<N;i++)fscanf(fp,"%s%s%d%d%d%d:%02d",lieche[i].name,lieche[i].checi,&lieche[i].year,&lieche[i ].month,&lieche[i].day,&lieche[i].hour,&lieche[i].minute);fmenu();scanf("%d",&x);while (x!=0)/*选择所要操作的功能*/{switch(x){case 1:chaxun(lieche);break;//选择查询功能case 2:xiugai(lieche);break;//选择修改功能case 3:zengjia(lieche);break;//选择增加功能case 4:quxiao(lieche);break;//选择取消功能case 5:baocun(lieche);break;//选择保存功能}fmenu();/*循环调用菜单*/scanf("%d",&x);}}。