《车票管理系统》程序设计实验报告物理与电子工程学院专业:电子信息科学与技术班级:电子132学号:1319200055姓名:黎杰华一、题目题目:车票管理系统二、系统功能模块结构图三、各模块功能1.录入班次信息2.显示班次信息3.查询班次:①按班次查询;②按终点查询;4.售票(1)售票成功(当车票有剩余,且车未发出时)(2)班次不存在(3)票已售完(当座位数小于等于已定票人数)(4)车已发出5.退票退票成功(输入的班次号存在且当前时间比发车时间早)退票失败(班次不存在或当前时间比发车时间晚)6.保存班次信息7.系统退出四、数据结构设计及用法说明使用数组五、画出各函数流程图六、实验结果主菜单车次信息录入显示班次信息查询班次信息售票退票文件保存七、体会这次实验让我们收获良多,这让我们得到了很多经验,又认识了很多的不足,在c语言这方面我们还需要很多的历练!我想通过这次的练习,我们都有所进展,我们现在需要的就是实践。
完成了任务我们还是很有成就感的,也增添了我们对c语言的热情!经过这几周,我们也比较满意自己的表现。
在此过程中我们翻阅很多的书籍,学到了很多课堂上没有的东西。
有好多知识是之前不知道的,现在了解了差不多了。
但是对于时间函数和文件保存,我还是不太清楚。
在文件读取上有不足。
这几周编程的过程实在是繁琐,但是在编出程序之后,是相当有成就感的,在今后我们知道,凡事都要有自己的见解,我们可以借鉴别人,但别人是不可复制的,我们要明白只有理解才是自己的,只有通过自己实践我们才能深刻的认识到这一点!八、参考文献[1] 谭浩强.C程序设计(第四版) 清华大学出版社[2] 严蔚敏数据结构人民邮电出版社九、附录#include<stdio.h>#include<time.h>#include<string.h>#include<dos.h>#include<stdlib.h>#include<ctype.h>#define Max 100//最大贮赌量#define null 0static int H=0;struct Times{//定义时钟int hour;int min;int sec;};struct Buses{//定义汽车int number;struct Times time;char start[30];char end[30];float time_cost;int carry_number;int prices;int booK_number;};struct Buses bus[Max];time_t now = time(0);tm *tnow =localtime(&now);void load();//载入车次信息void lu(void);//声明录入函数void chaxun(struct Buses bus[]);//声明查询路线函数void save(struct Buses bus[]);//声明保存函数int caidan();//声明菜单录数void liulan(struct Buses bus[]);//声明浏览函数void tuipiao(struct Buses bus[]);//退票void shoupiao(struct Buses bus[]);//声明售票函数void xitongtuichu();//声明退出函数//工具函数struct Buses copy(struct Buses b1,struct Buses b2);//赋值int compare_time(struct Times t1,struct Times t2);//时间比较函数int compare_systime(struct Buses bus,tm *T);//比较发车时间与当前系统时间的函数void print(struct Buses bus);//声明输入出函数int number_search(struct Buses bus[],int num);//声明按班次查询函数int end_search(struct Buses bus,char ends[]);//声明按终点查询函数int compare_systime(struct Buses bus,tm *T){//与系统时间的比较函数if(bus.time.hour>=T->tm_hour){return 1;if(bus.time.min>=T->tm_min){return 1;if(bus.time.sec>T->tm_sec)return 1;else return 0;}return 0;}return 0;}struct Buses copy(struct Buses b1,struct Buses b2){b1.booK_number=b2.booK_number;b1.carry_number=b2.carry_number;strcpy(b1.end,b2.end);b1.number=b2.number;strcpy(b1.start,b2.start);b1.time.hour=b2.time.hour;b1.time.min=b2.time.min;b1.time.sec=b2.time.sec;b1.time_cost=b2.time_cost;return b1;}//浏览车次函数//void liulan(struct Buses bus[]){getchar();int i;printf("\n\t\t\t\t车辆时刻表\n");printf("\t\t\t===========================\n");printf("\t班次发车时间起点站终点站行车时间额定载量票价已定票人数");printf("\n\t--------------------------------------------------------------\n");for(i=0;i<H;i++){print(bus[i]);}printf("\t--------------------------------------------------------------\n");printf("\t\t\t\t%d条记录!\n",H);printf("\t按任意键返回主菜单...");getchar();}//比较时间大小函数//int compare_time(struct Times t1,struct Times t2){if(t1.hour>t2.hour){return 1;if(t1.min>=t2.min){return 1;if(t1.sec>=t2.sec)return 1;else return 0;}return 0;}return 0;}//按班次查询//int number_search(struct Buses bus[],int n){int i;for(i=0;i<H;i++){if(bus[i].number==n)return i;}return -1;}//按终点站查询//int end_search(struct Buses bus,char ends[]){if(strcmp(bus.end,ends)==0)return 1;elsereturn -1;}//输出函数//void print(struct Buses bus){if(!compare_systime(bus,tnow))printf("\t%-6d%-2d:%-2d:%-2d%6s%8s%8.1f%4d%10d%10d(已发出)\n",bus.number,bus.time.hour,bus.time.min,bus.time.sec,bus.start,bus.end,bus.time_cost,bus.carry_number,bus.price s,bus.booK_number);elseprintf("\t%-6d%-2d:%-2d:%-2d%6s%8s%8.1f%4d%10d%10d\n",bus.number,bus.tim e.hour,bus.time.min,bus.time.sec,bus.start,bus.end,bus.time_cost,bus.carry_number,bus.price s,bus.booK_number);}int caidan(){int a;//以下是输出的菜单图案//printf("\n\n");printf("\t\t 车票管理系统\n");printf("\t\t ***************** (%d年%d月%d日)\n",1900+tnow->tm_year,tnow->tm_mon+1,tnow->tm_mday);printf("\t\t||==================================||\n");printf("\t\t|| 菜单||\n");printf("\t\t|| (1) 录入班次信息||\n");printf("\t\t|| (2) 显示班次信息||\n");printf("\t\t|| (3) 查询班次信息||\n");printf("\t\t|| (4) 售票||\n");printf("\t\t|| (5) 退票||\n");printf("\t\t|| (6) 保存车次信息||\n");printf("\t\t|| (0) 退出系统||\n");printf("\n\t\t请选择(0-6):");scanf("%d",&a);return(a);}//保存函数//void save(struct Buses bus[]){getchar();FILE *fp;int i;if((fp=fopen("Bus_system","wb"))==null){printf("不能打开文件\n");return;}for(i=0;i<H;i++)if(fwrite(&bus[i],sizeof(struct Buses),1,fp)!=1)printf("文件保存出错!\n");fclose(fp);printf("文件保存成功!");getchar();}//录入函数//void lu(){int i=H,f=1;char flag='Y';while(toupper(flag)=='Y'){printf("\n\t\t车次信息录入\n请输入车的班次:");scanf("%d",&bus[i].number);getchar();while(number_search(bus,bus[i].number)>=0){printf("你输入的班次已存在请重新输入!:");scanf("%d",&bus[i].number);getchar();}printf("请输入时间如:(20:30:00) :");scanf("%d:%d:%d",&bus[i].time.hour,&bus[i].time.min,&bus[i].time.sec); getchar();printf("请输入车的起点站:");scanf("%s",bus[i].start);getchar();printf("请输入车的终点站:");scanf("%s",bus[i].end);getchar();printf("请输入行车时间:");scanf("%f",&bus[i].time_cost);getchar();printf("请输入车的额定载量:");scanf("%d",&bus[i].carry_number);printf("请输入票价:");scanf("%d",&bus[i].prices);getchar();bus[i].booK_number=0;H++;i++;printf("信息录入成功!\n");printf("继续录入请按(Y),返回主菜单按任意键...");flag=getchar();}}//查询路线函数//void chaxun(struct Buses bus[]){int a,i=0;int m=0;char flag='Y';while(toupper(flag)=='Y'){char end[30];printf("\n按班次查询请按1\n终点站查询请按2\n请选择(1-2):");scanf("%d",&a);while(a!=1&&a!=2){printf("注意只能选择1或2!\n请重新输入:");scanf("%d",&a);getchar();}switch(a){case 1:{printf("请输入车次号:");scanf("%d",&m);getchar();i=number_search(bus,m);if(i>=0){printf("\n\t\t\t\t车辆时刻表\n");printf("\t\t\t**************************\n");printf("\t班次发车时间起点站终点站行车时间额定载量票价已定票人数");printf("\n\t--------------------------------------------------------------\n");print(bus[i]);printf("\t--------------------------------------------------------------\n");}elseprintf("\n\t\t\t没有你要查找的记录!\n");}break;case 2:{printf("请输入车的终点站:");scanf("%s",end);getchar();while(i<H){if((m=end_search(bus[i],end))==1){printf("\n\t\t\t\t车辆时刻表\n");printf("\t\t\t**************************\n");printf("\t班次发车时间起点站终点站行车时间额定载量票价已定票人数");printf("\n\t--------------------------------------------------------------\n");print(bus[i]);i++;}break;}for(i;i<H;i++){if(end_search(bus[i],end)==1)print(bus[i]);}if(m==1)printf("\t--------------------------------------------------------------\n");}for(i=0;i<H;i++){if(end_search(bus[i],end)!=1)printf("\n\t\t\t没有到该站的车!\n");break;}}printf("\t\t继续查找请按(Y),返回主菜单按任意键...");flag=getchar();}}//售票函数//void shoupiao(struct Buses bus[]){int i,n;char flag='Y';while(toupper(flag)=='Y'){printf("\n\t\t\t\t车辆时刻表\n");printf("\t\t\t************************** 当前时间(%d:%d:%d)\n",tnow->tm_hour,tnow->tm_min,tnow->tm_sec);printf("\t班次发车时间起点站终点站行车时间额定载量票价已定票人数");printf("\n\t--------------------------------------------------------------\n");for(int j=0;j<H;j++){print(bus[j]);}printf("\t--------------------------------------------------------------\n");printf("\t请输入车的班次:");scanf("%d",&i);n=number_search(bus,i);getchar();if(n>=0&&bus[n].carry_number>bus[n].booK_number&&compare_systime(bus[n],t now)){printf("\n\t\t\t售票成功!\n");bus[n].booK_number++;printf("\t班次发车时间起点站终点站行车时间额定载量票价已定票人数");printf("\n\t--------------------------------------------------------------\n");print(bus[n]);printf("\n\t--------------------------------------------------------------\n");}if(bus[n].carry_number<=bus[n].booK_number)printf("\n\t\t\t该次车的票已售完!\n");else if(n<0)printf("\n\t\t\t该次车不存在!\n");else if(!compare_systime(bus[n],tnow))printf("\n\t\t\t该次已发出!\n");printf("\t\t继续售票请按(Y),返回主菜单按任意键...");flag=getchar();}}//退票函数//void tuipiao(struct Buses bus[]){int n,i;char flag='Y';while(toupper(flag)=='Y'){printf("\n\n请输入车次:");scanf("%d",&n);getchar();i=number_search(bus,n);if(i>=0&&compare_systime(bus[i],tnow)){bus[i].booK_number--;printf("\n\t\t\t退票成功!\n");}else if(i<0)printf("\n\t\t\t该车次不存在!\n");else if(!compare_systime(bus[n],tnow))printf("\n\t\t\t车已发出不能退票!\n");printf("\t继续退票请按(Y),返回主菜单按任意键...");flag=getchar();}}//载入车次信息函数//void load(){ FILE *fp;int i=0;while((fp=fopen("Bus_system","rb"))==NULL) //以rb形式打开文件return;for(i;!feof(fp);i++,H++){if(fread(&bus[H],sizeof(struct Buses),1,fp)!=1){}if(feof(fp)){fclose(fp);return;}}fclose(fp);}//退出函数//void xitongtuichu(){getchar();char flag=null;printf("\n\n\t\t你确定要退出并保存信息吗?(Y/N)");flag=getchar();if(toupper(flag)=='Y'){save(bus);exit(0);}else if(toupper(flag)=='N')exit(0);elsereturn;}//主函数//void main(){while(1){switch(caidan()){case 1: lu(); break;case 2: liulan(bus); break;case 3: chaxun(bus); break;case 4: shoupiao(bus); break;case 5: tuipiao(bus); break;case 6: save(bus); break;case 0: xitongtuichu(); break;}}}。