没有运行错误,但是不是我要的,c语言的一个课程设计

我偷老干妈养你 2019-06-22 08:04:09
//6-车票管理系统 #include<stdio.h> #include<stdlib.h> #include<string.h> #define N 4 void manage(); //管理员界面 void user(); //用户界面 void record(); //录入信息 void menu(); //菜单 void findsdate(); //查询状态 void findroute(); //查询路线 void book(); //预定车票 void refund(); //退票 struct time { int hour; int minute; }; struct infor //定义汽车信息 { int shift; //汽车的班次 struct time start; //发车时间,输入形式为 08:00 char spoint[20]; //起始站 char dest[20]; //终点站 float hour; //行车时间 int num; //额定数量 int snum; //已售数量 } infor[N-1] ; int main() { int i; while(1) { printf("\n\n----------------------------------车票管理系统--------------------------------\n"); printf("请选择登入身份\n"); printf("管理员-----1\n"); printf("用户-------2\n"); printf("退出-------3\n"); scanf("%d",&i); if(i!=1&&i!=2&&i!=3) printf("输入错误,请重新输入"); switch(i) { case 1:manage();break; case 2:user();break; } if(i==3) printf("谢谢使用!\n"); break; } } void manage() { while(1) { int i; printf("请选择要进行的操作:\n"); printf("录入信息-----1\n"); printf("信息查询-----2\n"); printf("退出系统-----3\n"); scanf("%d",&i); if(i!=1&&i!=2&&i!=3) printf("输入错误,请重新输入"); switch(i) { case 1:record();break; case 2:findsdate();break; } if(i==3) printf("谢谢使用!\n"); break; } } void user() { printf("*****************************************\n"); printf("* 选择您要进行的操作: *\n"); printf("* 查询所有班次当前状态----1 *\n"); printf("* 查询汽车路线--------2 *\n"); printf("* 购买车票----------3 *\n"); printf("* 退订车票----------4 *\n"); printf("* 退出系统----------5 *\n"); printf("*****************************************\n"); menu(); } void record() //录入信息 { printf("录入班车信息\n输入信息\n"); printf("班次 发车时间 起点 终点 行车时间 额定载量 已定载量\n"); int i; for(i=0;i<N;i++) { scanf("%d%d:%d%s%s%f%d%d",&infor[i].shift,&infor[i].start.hour,&infor[i].start.minute, infor[i].spoint,infor[i].dest,&infor[i].hour, &infor[i].num,&infor[i].snum); // 键盘输入信息 } FILE *fp; if((fp=fopen("qichexinxi.dat","wb"))==NULL) { printf("文件不存在\n"); exit(0); } for(i=0;i<N;i++) if(fwrite(&infor[i],sizeof(struct infor),1,fp)!=1) printf("文件出错\n"); fclose(fp) ; } void menu() //菜单选项 { while(1) { int m; char c; scanf("%d",&m) ; if(m<1||m>5) printf("输入错误,请重新输入"); switch(m) switch(m) { case 1: findsdate(); break; case 2: findroute(); break; case 3: book(); break; case 4: refund();break; } if(m==5) printf("谢谢使用!\n"); break; } } void findsdate()//查询状态 { int i; struct time now; printf("请输入时间:\n"); scanf("%d:%d",&now.hour,&now.minute);//输入系统时间 if(now.hour>23||now.hour<0||now.minute>59||now.minute<0) { printf("输入错误,请输入正确时间\n"); getchar(); getchar(); } else for(i=0;i<N;i++) { if (now.hour<infor[i].start.hour||now.minute<infor[i].start.minute&&now.hour==infor[i].start.hour) printf("汽车%d未发出\n",i+1); else printf("汽车%d发出\n",i+1); } getchar(); getchar(); } void findroute() { int i; int j; int flag=0; char c1; printf("请选择查询方式:\n") ; printf("按班次查询------1\n"); printf("按终点站查询----2\n"); scanf("%d",&i); if(i!=1&&i!=2) printf("输入错误,请重新输入\n"); getchar(); getchar(); switch(i) { case 1: printf("请输入班次:\n"); scanf("%d",&j); if(j>N) { printf("输入错误,请重新输入\n"); getchar(); getchar(); } else printf("班次%d:\t%d%d:%d%s%s%f%d%d",infor[j-1].shift,infor[j-1].start.hour,infor[j-1].start.minute, infor[j-1].spoint,infor[j-1].dest,infor[j-1].hour, infor[j-1].num,&infor[j-1].snum); break; case 2: printf("请输入地址:\n"); scanf("%s",&c1); for(i=0;i<N;i++) { if(strcmp(c1,infor[i].dest)==0) printf("班次%d:/t%d%d:%d %s %s %f%d%d",i,infor[i].shift,infor[i].start.hour,infor[i].start.minute, infor[i].spoint,infor[i].dest,infor[i].hour, infor[i].num,&infor[i].snum); flag=1; } if(flag==0) printf("未查询到,请重试,谢谢使用!\n"); getchar(); getchar(); break; } } void book() { int i; struct time now; printf("请输入要订购的车票的班次:"); scanf("%d", &i); //printf("i=%d\n", i); if (i < 1 || i > N + 1) { printf("对不起,今天没有这趟车,请明天再来,谢谢使用!\n"); getchar(); menu(); } printf("输入当前时间:\n");//输入系统时间 scanf("%d:%d",&now.hour,&now.minute); if (now.hour<infor[i-1].start.hour||now.minute<infor[i-1].start.minute&&now.hour==infor[i-1].start.hour) { if (infor[i - 1].snum < infor[i - 1].num) { (infor[i - 1].snum)++; printf("你的订票成功,请按时上车,谢谢使用!\n"); } else printf("对不起,今天的这趟车的票已卖完,请明天再来,谢谢合作!\n"); } getchar(); menu(); } void refund() { int i; struct time now; printf("请输入要退购的车票的班次:"); scanf("%d", &i); if (i < 1 || i >N + 1) { printf("对不起,今天没有这趟车,无法完成退票.谢谢使用!\n"); getchar(); menu(); } scanf("%d:%d",&now.hour,&now.minute);//输入系统时间 printf("当前时间%d:%d",now.hour,now.minute); if (now.hour>=infor[i-1].start.hour&&now.minute>=infor[i-1].start.minute) if (infor[i - 1].snum >= 1) { infor[i - 1].snum = infor[i - 1].snum-1; printf("退订车票成功,谢谢使用!\n"); } else { printf("对不起,今天的这趟车的票尚未卖出,无法完成退票!\n"); getchar(); getchar(); } else { printf("对不起,今天的这趟车已发出,无法完成退票!\n"); getchar(); getchar(); } }
...全文
43 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
nothing_but 2019-06-23
  • 打赏
  • 举报
回复
你可以设置断点,单步调试啊,给定一个输入,看看在程序中的运行有哪个地方不符合预期,是不小心写错了还是逻辑处理的问题,总之直接看是没法看的啊
  • 打赏
  • 举报
回复
引用 1 楼 nothing_but的回复:
你可以设置断点,单步调试啊,给定一个输入,看看在程序中的运行有哪个地方不符合预期,是不小心写错了还是逻辑处理的问题,总之直接看是没法看的啊
我应该是从一个功能到另一个功能之间出了问题
Adeleit 2019-06-23
  • 打赏
  • 举报
回复
引用 楼主 qq_44956723的回复:
//6-车票管理系统 #include<stdio.h> #include<stdlib.h> #include<string.h> #define N 4 void manage(); //管理员界面 void user(); //用户界面 void record(); //录入信息 void menu(); //菜单 void findsdate(); //查询状态 void findroute(); //查询路线 void book(); //预定车票 void refund(); //退票 struct time { int hour; int minute; }; struct infor //定义汽车信息 { int shift; //汽车的班次 struct time start; //发车时间,输入形式为 08:00 char spoint[20]; //起始站 char dest[20]; //终点站 float hour; //行车时间 int num; //额定数量 int snum; //已售数量 } infor[N-1] ; int main() { int i; while(1) { printf("\n\n----------------------------------车票管理系统--------------------------------\n"); printf("请选择登入身份\n"); printf("管理员-----1\n"); printf("用户-------2\n"); printf("退出-------3\n"); scanf("%d",&i); if(i!=1&&i!=2&&i!=3) printf("输入错误,请重新输入"); switch(i) { case 1:manage();break; case 2:user();break; } if(i==3) printf("谢谢使用!\n"); break; } } void manage() { while(1) { int i; printf("请选择要进行的操作:\n"); printf("录入信息-----1\n"); printf("信息查询-----2\n"); printf("退出系统-----3\n"); scanf("%d",&i); if(i!=1&&i!=2&&i!=3) printf("输入错误,请重新输入"); switch(i) { case 1:record();break; case 2:findsdate();break; } if(i==3) printf("谢谢使用!\n"); break; } } void user() { printf("*****************************************\n"); printf("* 选择您要进行的操作: *\n"); printf("* 查询所有班次当前状态----1 *\n"); printf("* 查询汽车路线--------2 *\n"); printf("* 购买车票----------3 *\n"); printf("* 退订车票----------4 *\n"); printf("* 退出系统----------5 *\n"); printf("*****************************************\n"); menu(); } void record() //录入信息 { printf("录入班车信息\n输入信息\n"); printf("班次 发车时间 起点 终点 行车时间 额定载量 已定载量\n"); int i; for(i=0;i<N;i++) { scanf("%d%d:%d%s%s%f%d%d",&infor[i].shift,&infor[i].start.hour,&infor[i].start.minute, infor[i].spoint,infor[i].dest,&infor[i].hour, &infor[i].num,&infor[i].snum); // 键盘输入信息 } FILE *fp; if((fp=fopen("qichexinxi.dat","wb"))==NULL) { printf("文件不存在\n"); exit(0); } for(i=0;i<N;i++) if(fwrite(&infor[i],sizeof(struct infor),1,fp)!=1) printf("文件出错\n"); fclose(fp) ; } void menu() //菜单选项 { while(1) { int m; char c; scanf("%d",&m) ; if(m<1||m>5) printf("输入错误,请重新输入"); switch(m) switch(m) { case 1: findsdate(); break; case 2: findroute(); break; case 3: book(); break; case 4: refund();break; } if(m==5) printf("谢谢使用!\n"); break; } } void findsdate()//查询状态 { int i; struct time now; printf("请输入时间:\n"); scanf("%d:%d",&now.hour,&now.minute);//输入系统时间 if(now.hour>23||now.hour<0||now.minute>59||now.minute<0) { printf("输入错误,请输入正确时间\n"); getchar(); getchar(); } else for(i=0;i<N;i++) { if (now.hour<infor[i].start.hour||now.minute<infor[i].start.minute&&now.hour==infor[i].start.hour) printf("汽车%d未发出\n",i+1); else printf("汽车%d发出\n",i+1); } getchar(); getchar(); } void findroute() { int i; int j; int flag=0; char c1; printf("请选择查询方式:\n") ; printf("按班次查询------1\n"); printf("按终点站查询----2\n"); scanf("%d",&i); if(i!=1&&i!=2) printf("输入错误,请重新输入\n"); getchar(); getchar(); switch(i) { case 1: printf("请输入班次:\n"); scanf("%d",&j); if(j>N) { printf("输入错误,请重新输入\n"); getchar(); getchar(); } else printf("班次%d:\t%d%d:%d%s%s%f%d%d",infor[j-1].shift,infor[j-1].start.hour,infor[j-1].start.minute, infor[j-1].spoint,infor[j-1].dest,infor[j-1].hour, infor[j-1].num,&infor[j-1].snum); break; case 2: printf("请输入地址:\n"); scanf("%s",&c1); for(i=0;i<N;i++) { if(strcmp(c1,infor[i].dest)==0) printf("班次%d:/t%d%d:%d %s %s %f%d%d",i,infor[i].shift,infor[i].start.hour,infor[i].start.minute, infor[i].spoint,infor[i].dest,infor[i].hour, infor[i].num,&infor[i].snum); flag=1; } if(flag==0) printf("未查询到,请重试,谢谢使用!\n"); getchar(); getchar(); break; } } void book() { int i; struct time now; printf("请输入要订购的车票的班次:"); scanf("%d", &i); //printf("i=%d\n", i); if (i < 1 || i > N + 1) { printf("对不起,今天没有这趟车,请明天再来,谢谢使用!\n"); getchar(); menu(); } printf("输入当前时间:\n");//输入系统时间 scanf("%d:%d",&now.hour,&now.minute); if (now.hour<infor[i-1].start.hour||now.minute<infor[i-1].start.minute&&now.hour==infor[i-1].start.hour) { if (infor[i - 1].snum < infor[i - 1].num) { (infor[i - 1].snum)++; printf("你的订票成功,请按时上车,谢谢使用!\n"); } else printf("对不起,今天的这趟车的票已卖完,请明天再来,谢谢合作!\n"); } getchar(); menu(); } void refund() { int i; struct time now; printf("请输入要退购的车票的班次:"); scanf("%d", &i); if (i < 1 || i >N + 1) { printf("对不起,今天没有这趟车,无法完成退票.谢谢使用!\n"); getchar(); menu(); } scanf("%d:%d",&now.hour,&now.minute);//输入系统时间 printf("当前时间%d:%d",now.hour,now.minute); if (now.hour>=infor[i-1].start.hour&&now.minute>=infor[i-1].start.minute) if (infor[i - 1].snum >= 1) { infor[i - 1].snum = infor[i - 1].snum-1; printf("退订车票成功,谢谢使用!\n"); } else { printf("对不起,今天的这趟车的票尚未卖出,无法完成退票!\n"); getchar(); getchar(); } else { printf("对不起,今天的这趟车已发出,无法完成退票!\n"); getchar(); getchar(); } }
if(i!=1&&i!=2&&!=3) printf("输入错误,请重新输入!"); 这里是要重新输入,应该重新进入循环而不是退出if后继续执行下面的switch,所以在if里加continue; if(i!=1&&i!=2&&!=3) {printf("输入错误,请重新输入!");continue;} 后面的也是类似的问题

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧