当前位置:文档之家› 课程设计报告-车票管理系统

课程设计报告-车票管理系统

1课程设计报告(C语言程序设计)题目二级学院车票信息管理系统的设计与实现数学与统计专班业级信息与计算科学112010102学生姓名郭双红学号11201010209指导教师陈媛时间2013061921 需求分析1.1 课程设计题目要求设计并实现一个车票销售管理系统,系统实现以下功能。

(1)系统以菜单方式工作:要求界面清晰,友好,美观,易用。

(2)车次信息导入功能:要求可从磁盘文件导入车次信息。

(3)查询功能:可按班车号、起点站或终点站查找班车信息,并将查询结果输出。

(4)售票功能:只有当某班车已定票人数小于额定载量,且当前系统时间小于发车时间才能售票。

售票显示收费信息;售票后更新已定票人数,并实现信息存盘。

(5)退票功能:输入退票的班次,当本班车未发出时才能退票。

退票后自动更新已定票人数,并实现信息存盘。

(6)信息浏览功能:能输出所有班车的信息;要求输出格式清晰、美观。

(7)信息修改:要求能修改某一指定班次的信息,并在修改后将信息存盘。

1.2 系统功能需求(1)系统以菜单方式工作:要求界面清晰,友好,美观,易用。

(2)车次信息导入功能:要求可从磁盘文件导入车次信息。

(3)查询功能:可按班车号、起点站或终点站查找班车信息,并将查询结果输出。

(4)售票功能:只有当某班车已定票人数小于额定载量,且当前系统时间小于发车时间才能售票。

售票显示收费信息;售票后更新已定票人数,并实现信息存盘。

(5)退票功能:输入退票的班次,当本班车未发出时才能退票。

退票后自动更新已定票人数,并实现信息存盘。

(6)信息浏览功能:能输出所有班车的信息;要求输出格式清晰、美观。

(7)信息修改:要求能修改某一指定班次的信息,并在修改后将信息存盘。

2 系统设计2.1 功能模块图本系统的功能模块图如图2-1所示。

3图 2-1 系统功能模块图2.2 数据定义本系统的数据可采用结构数组来处理。

可必要的设置全局变量。

因此本系统的主要数 据定义如下:struct Train_Ticket {char cn[15]; //车量班次 char lp[15]; //left place 起点 char ap[15]; //arrive place 终点 char lt[15]; //left time 发车时间 char rt[15]; //running time 行车时间 float price; // 票价int rl;//Rated load 额定载量车 票 管 理 系 统进入班次浏览进入班次查询售 票退 票修改版此信息查 询 菜 单进入起点站查询进入终点站查询进入班次查询int bn; //booking number已定票人数}T[N];int n=0,i=0;//全局变量2.3 关键技术分析⑴在程序开始运行时,应调用自定义的INPUT()函数,将所有需要的数据导入到结构数组中,然后保存。

⑵调用load()函数,从磁盘导入车票信息。

由于第一次应用INPUT()函数磁盘中已有数据,因此不必要再进行重新导入,所以在INPUT()函数中先询问是否重新导入,然后再进入主菜单,或者在调用一次后,以后运行时不再调用。

⑶.买票和退票都涉及到时间的问题,这源于要比较发车时间与当前的时间,判断这班车到底有没有发车,和能不能订票与退票,这时用了一个时间函数,输出了当前的时间,但那边有年月日,不好进行提取和比较,于是采用输出了时间,然后看着那个时间手动的提取。

⑷系统中应编写存盘函数save(),在进行买票或者退票功能后都需要调用save()函数进行数据的更新。

⑸采用循环结构生成主菜单,在数据输入时应该有清晰的提示信息,以方便用户的操作,对输出数据进行格式控制,以使界面更加美观,清晰。

3 系统实现3.1 功能模块设计根据系统分析的结论,将本系统需完成的功能模块划分如下:#include<stdio.h>#include<stdlib.h>#include<string.h>#include<conio.h>#include<time.h>#define N4void main_menu(); //主菜单模块void load();//导入信息void INPUT();//输入模块void scan();//浏览模块void tuipiao();//退票void buy(); //买票void change(); //修改函数void save();//保存函数void prna(int pos); //打印记录void searchmenu(); //查询菜单函数int s_cn(); //按班次查询int s_lp();//按起点站查询int s_ap(); //按终点站查询struct Train_Ticket{char cn[15]; //车量班次char lp[15];//left place 起点char ap[15]; //arrive place终点char lt[15];//left time发车时间char rt[15];//running time行车时间int price;// 票价int rl; //Rated load 额定载量int bn; //booking number已定票人数}T[N];int n=0,i=0;//全局变量3.2 源代码//********************************************************//主菜单//********************************************************void main_menu(){system("cls");system("color E");printf("************************************************************* *********\n");printf("*************************欢迎来到车票查询系统*************************");printf("\n");printf("| ★★★1: 进入班次浏览★★★|\n");printf("| ★★★2: 进入查询班次★★★|\n");printf("| ★★★3: |\n");printf("| ★★★4: |\n");printf("| ★★★5: |\n");printf("| ★★★0: |\n");售票★★★退票★★★班次信息修改★★★退出★★★printf("********************************************************* **************\n");printf("\n请选择(0-5):☆☆☆");}void load() //从磁盘文件导入班次信息{int i;FILE *fp;if((fp=fopen("c:车票管理系统.dat","rb"))==NULL){printf("文件打开错误\n");exit(0);}for(i=0;i<N;i++)fread(&T[i],sizeof(struct Train_Ticket),1,fp);fclose(fp);system("cls");}void save() //将班次信息保存到磁盘文件{FILE *fp;if((fp=fopen("c:车票管理系统.dat","wb"))==NULL){printf("无法创建文件!\n\n");exit(0);}for(i=0;i<N;i++)fwrite(&T[i],sizeof(struct Train_Ticket),1,fp);fclose(fp);}int time()//当前系统时间{struct tm*f;time_t now;now=time(NULL);time(&now);f=gmtime(&now);printf(ctime(&now));return 0;}void scan(){system("cls"); /*清屏*/printf("\n===================================================================== ======\n");printf("车次额定载量起点终点开车时间行车时间票价已定票人数\n");for(i=0;i<N;i++)printf( " %s%13d%10s%10s%12s%8s%f%6d\n",T[i].cn,T[i].rl,T[i].lp,T[i].ap,T[i].lt,T[i].rt,T[i].price,T[i].bn);printf("===================================================================== ======\n");printf("请按任意键返回主菜单\n");getch();}void INPUT() //键入所有信息{char ch;do{system("cls");printf("\n\n ====================欢迎进入录入汽车时刻信息界面====================\n");do{printf("\n新建汽车信息?(y/n)");scanf("%c",&ch);if(ch!='y'&&ch!='n')printf("输入错误,请重新输入!!!");}while(ch!='y'&&ch!='n');if(ch=='n')break;printf(" ---------------------");printf("\n printf("录入第%d趟列车信息\n",n+1);车次");fflush(stdin);gets(T[i].cn);printf("额定载量"); fflush(stdin);scanf("%d",&T[i].rl);printf("起点");fflush(stdin);gets(T[i].lp);printf("终点");fflush(stdin);gets(T[i].ap);printf("开车时间");fflush(stdin);gets(T[i].lt);printf("行车时间");fflush(stdin);gets(T[i].rt);printf("票价");fflush(stdin);scanf("%f",&T[i].price);printf("已定票人数");fflush(stdin);scanf("%d",&T[i].bn);n++;i++;}while(i<N);save();system("cls");}打印一条记录void prna(int pos)//{printf("\n===================================================================== ======\n");printf("车次额定载量起点终点开车时间行车时间票价已定票人数\n");printf( "%s%13d%10s%10s%12s%8s%f%6d\n",T[pos].cn,T[pos].rl,T[pos].lp,T[pos].ap,T [pos].lt,T[pos].rt,T[pos].price,T[pos].bn);printf("===================================================================== ======\n");}查询主菜单void searchmenu()//{system("cls");printf("\n\n ====================欢迎进入查询汽车时刻信息界面====================\n");printf("\n ++++++++++++++++++请选择查找方式++++++++++++++++++\n\n");printf("| ★★★1: 按班次查询★★★ |\n");printf("| ★★★2: 按起点站查询★★★|\n");printf("| ★★★3: 进终点站查询★★★|\n");printf("| ★★★4: 返回主菜单★★★|\n");printf("***********************************************************************\n");printf("\n请选择(1-4):☆☆☆");}int s_cn() //按班次查询{char name1[15];int j;system("cls");printf("请输入要查询的班次号:\n ");11fflush(stdin);gets(name1);for(j=0;j<N;j++){if(strcmp(T[j].cn,name1)==0)printf(" %s%13d%10s%10s%12s%8s%f%6d\n",T[j].cn,T[j].rl,T[j].lp,T[j].ap,T[j].lt,T [j].rt,T[j].price,T[j].bn);continue;return 0;}return 1;}int s_lp() //按起点站查询{char name2[15];int j;system("cls");printf("请输入要查询的起点站名: \n");fflush(stdin);gets(name2);for(j=0;j<N;j++){if(strcmp(T[j].lp,name2)==0)printf(" %s%13d%10s%10s%12s%8s%f%6d\n",T[j].cn,T[j].rl,T[j].lp,T[j].ap,T[j].lt,T [j].rt,T[j].price,T[j].bn);continue;return 0;}return 1;}int s_ap() //按终点站查询{12char name3[15];int j;system("cls");printf("请输入要查询的终点站名: \n");fflush(stdin);gets(name3);for(j=0;j<N;j++){if(strcmp(T[j].ap,name3)==0)printf(" %s%13d%10s%10s%12s%8s%f%6d\n",T[j].cn,T[j].rl,T[j].lp,T[j].ap,T[j].lt,T [j].rt,T[j].price,T[j].bn);continue;return 0;}return 1;}void search() //查询函数{int select;int n;while(1){searchmenu();scanf("%d",&select);switch(select){case 1: n=s_cn();if(n)printf("没找到相关记录\n");printf("按任意键返回\n"); getch();break;case 2: n=s_lp();if(n)printf("没有找到相关记录\n");printf("按任意键返回\n"); getch();break;case 3: n=s_ap();if(n)printf("没有找到相关记录\n");printf("按任意键返回\n"); getch();break;}if(select==4){break;main_menu();}}}void buy() //买票{system("cls");int m,log;char t[10];printf("请输入您需要购买票的班次(1-4):\n");scanf("%d",&m);load();printf("\n===================================================================== ======\n");printf("车次额定载量起点终点开车时间行车时间票价已定票人数\n");printf( " %s%13d%10s%10s%12s%8s%f%6d\n",T[m-1].cn,T[m-1].rl,T[m-1].lp,T[m-1].ap,T[m-1].lt,T[m-1].rt,T[m-1].price,T[m-1].bn);printf("===================================================================== ======\n");if(T[m-1].bn>=T[m-1].rl){printf("该班次票已满!请选择其他班次\n");printf("按任意键返回\n");}if(T[m-1].bn<T[m-1].rl){printf("当前时间为:\n");time();printf("\n");printf("请再手动输入上述时间,只需要输入时辰与分钟(例如08:00): \n");scanf("%s",t);printf("\n");if(strcmp(t,T[m-1].lt)>0)printf("该班次已发车,请选择其他班次\n");else if(T[m-1].bn==T[m-1].rl)printf("该班次未发车但是该班次票已售完\n");if (T[m-1].bn!=T[m-1].rl&&strcmp(t,T[m-1].lt)<0&&T[m-1].bn<T[m-1].rl){printf("该班次还可订%d票\n",(T[m-1].rl-T[m-1]. bn));printf("请输入您要订票数量");scanf("%d",&log);printf("\n");while(log>(T[m-1].rl-T[m-1].bn)){printf("订票错误,数量不能超过余票数! !!\n");printf("请重新输入:");scanf("%d",&log);}if(log<=(T[m-1].rl-T[m-1].bn)) {printf("一共需要%d 元\n",log*T[m-1].price);printf("订票成功,祝您旅途愉快!\n");}}T[m-1].bn+=log;printf("按任意键返回主菜单\n");getchar();}save();}void tuipiao()//退票{system("cls");int x,log;char t[10];printf("请输入您要退票的班次: \n");scanf("%d",&x);i=x;int m=i;load();printf("\n===================================================================== ======\n");printf("车次额定载量起点终点开车时间行车时间票价已定票人数\n");printf( " %s%13d%10s%10s%12s%8s%f%6d\n",T[m-1].cn,T[m-1].rl,T[m-1].lp,T[m-1].ap,T[m-1].lt,T[m-1].rt,T[m-1].price,T[m-1].bn);printf("===================================================================== ======\n");printf("当前时间为:\n");time();printf("\n");printf("请再手动输入上述时间,只需要输入时辰与分钟(例如08:00): \n");scanf("%s",t);if(strcmp(T[i-1].lt,t)>0){printf("可以退票\n");printf("请问你真的要退票吗?\n");printf("确认退票请按1,否则返回主菜单\n");scanf("%d",&log);if(log==1){printf("退票成功!\n");T[i-1].bn--;save();printf("按任意键返回主菜单\n");getch();}else{printf("您选择不退票\n");printf("按任意键返回主菜单\n"); getch();}}if(strcmp(T[i-1].lt,t)<0){printf("此班次已发车不能退票!!!\n");printf("按任意键返回主菜单\n");getch();}}void change(){system("cls");int k,select;char banci[100];char mima[10];//假设密码为aaaprintf("这个是工作人员所进,请输入密码:\n");scanf("%s",mima);while(strcmp(mima,"aaa")!=0){printf("密码错误!\n");printf("请重新输入:\n");scanf("%s",mima);}printf("进入成功!\n");printf("输入所要修改班次号:\n");scanf("%s",banci);for(k=0;k<N;k++){if(strcmp(T[k].cn,banci)==0)break;}printf("\n===================================================================== ======\n");printf("车次额定载量起点终点开车时间行车时间票价已定票人数\n");printf( " %s%13d%10s%10s%12s%8s%f%6d\n",T[k].cn,T[k].rl,T[k].lp,T[k].ap,T[k].lt,T [k].rt,T[k].price,T[k].bn);printf("===================================================================== ======\n");printf("修改时间请按1\n");printf("修改终点站请按2\n");printf("修改票价请按3\n");scanf("%d",&select);switch(select){case 1:for(k=0;k<N;k++)if(strcmp(T[k].cn,banci)==0)break;printf("请输入修改后的时间(例如08:00)\n");scanf("%s",T[k].lt);printf("修改成功!\n");printf("\n===================================================================== ======\n");printf("车次额定载量起点终点开车时间行车时间票价已定票人数\n");printf( " %s%13d%10s%10s%12s%8s%f%6d\n",T[k].cn,T[k].rl,T[k].lp,T[k].ap,T[k].lt,T [k].rt,T[k].price,T[k].bn);printf("===================================================================== ======\n");printf("按任意键返回\n");save();getch();break;case 2:for(k=0;k<N;k++)if(strcmp(T[k].cn,banci)==0)break;printf("请输入修改后的终点站\n");scanf("%s",T[k].ap);printf("修改成功!\n");printf("\n===================================================================== ======\n");printf("车次额定载量起点终点开车时间行车时间票价printf(已定票人数\n");"%s%13d%10s%10s%12s%8s%f%6d\n",T[k].cn,T[k].rl,T[k].lp,T[k].ap,T[k].lt,T [k].rt,T[k].price,T[k].bn);printf("===================================================================== ======\n");printf("按任意键返回\n");save();getch();break;case 3:for(k=0;k<N;k++)if(strcmp(T[k].cn,banci)==0)break;printf("请输入修改后的票价\n");scanf("%d",&T[k].price);printf("修改成功!\n");printf("\n===================================================================== ======\n");printf("车次额定载量起点终点开车时间行车时间票价已定票人数\n");printf( " %s%13d%10s%10s%12s%8s%f%6d\n",T[k].cn,T[k].rl,T[k].lp,T[k].ap,T[k].lt,T[k].rt,T[k].price,T[k].bn);printf("===================================================================== ======\n");printf("按任意键返回\n");save();getch();default:printf("选择错误!");printf("按任意键返回主菜单\n");getch();break;}}void main(){int select;load();while(1){main_menu();scanf("%d",&select);switch(select){case 1:scan();getchar();break;case 2:search();getchar();break;case 3:buy();getch();break;case 4:tuipiao();getchar();break;case 5:change();getchar();break;}if(select==0){ printf("按任意键退出\n");printf("\n");break;}}}4 系统测试4.1 主界面系统主界面如图4-1所示:系统运行主窗口4.2 车次信息浏览模块在主菜单的提示下选择1,可显示所有车次信息。

相关主题