车票管理系统课程设计报告
- 格式:doc
- 大小:267.00 KB
- 文档页数:18
车票管理系统一. 车票管理系统功能描述(1)录入班次信息(信息用文件保存),可不定时地增加班次数据(2)浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。
(3)查询路线(起点、终点):可按班次号查询 ,可按终点站查询 (4)售票和退票功能当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数二. 结构图三.模块设计:1.头文件,定义所需结构体,全局变量#include"stdio.h"#include"string.h"#include"malloc.h"#include"windows.h"struct time //定义记录时间的结构体{int hour; //包含小时int minute; //分钟};struct ticket //定义记录车票信息的结构体{int number; //定义车次struct time ft ; //记录发车时间char origin_station[20]; //起始站名称数组char last_station[20]; //终点站名称数组float last_time; //持续时间int max_number; //车次最大运载量int sold_ticket; //已售车票}train[100];int i;int syshour; //记录系统时间小时int sysminute; //记录系统时间分钟char filename[50]; //文件名数组int record; //记录条数记录2.开始菜单printf("*****欢迎使用车票管理系统*****\n");显示开始菜单,欢迎使用系统;3.主菜单显示(mainmenu):void mainmenu(){system("cls");printf("当前时间:");system_time();printf("**********************主菜单*********************\n");printf("* 1.录入班次信息*\n");printf("* 2.浏览班次信息*\n");printf("* 3.查询班次信息*\n");printf("* 4.售票*\n");printf("* 5.退票*\n");printf("* 0.退出系统*\n");printf("*************************************************\n");}其中加入显示系统时间函数(system_time())int system_time(){SYSTEMTIME sys;GetLocalTime( &sys ); //调用系统时间printf( "%4d /%02d/%02d %02d:%02d:%02d 星期%1d\n",sys.wYear,sys.wMonth,sys.wDay,sys.wHour,sys.wMinute,sys.wSecond,sys.wDayOfWeek);syshour=sys.wHour;sysminute=sys.wMinute;return 0;}主菜单运行结果:其中第一行调用时间函数显示当前时间4.主菜单选择函数(chose())void chose(){int n;printf(" 请输入您想做的操作: ");scanf("%d",&n);switch(n){case 1:load();system("cls"); //每次进入主菜单清空mainmenu(); break;case 2:show();break;case 3:searsh();break;case 4:buy_system();break;case 5:back_ticket();break;case 0:exit(0); //调用系统函数退出程序}}主菜单选择模块要求输入0-5选择用户想做操作。
5.输入数据模块(load())void load(void) //载入文件{char n; //定义变量记录输入字符FILE *fp;int i;sin : printf("请输入文件名或者文件路径名:"); //标记当前位置scanf("%s",filename);getchar();printf("您确定您输入的文件路径(y/n):"); //确定文件输入正确scanf("%c",&n);if(n=='y'){if((fp=fopen(filename,"r"))==NULL) //判断文件的存在,是否可读{printf("文件%s不可读,请确认文件%s存在或者文件路径正确.\n\n",filename,filename);system("pause"); //暂停显示文件状态}else{ //文件载入成功printf("录入成功\n");system("pause");for(i=0; !feof(fp)&&!ferror(fp);i++)/*将文件数据读出,数据给数组,一直到文件中数据结尾*/{fscanf(fp,"%03d",&train[i].number);if(train[i].number==0){i--;continue;}fscanf(fp,"%d%02d",&train[i].ft.hour,&train[i].ft.minute);fscanf(fp,"%s%s%f",&train[i].origin_station,&train[i].last_station,&train[i].last_time);fscanf(fp,"%d%d",&train[i].max_number,&train[i].sold_ticket);/***************************数据按格式化到数组***********************/}record=i; //将数据条数给record 记录fclose(fp); //关闭文件}}else goto sin; //当文件名输入错误时,选择‘n‘可返回标记处}6.浏览数据模块(show())void show(){int i;printf("班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\t状态\n");for(i=0;i<record;i++){printf("%03d\t%d:%02d\t\t",train[i].number,train[i].ft.hour,train[i].ft.minute);printf("%s\t%s\t\t",train[i].origin_station,train[i].last_station);printf("%.1f\t %2d\t\t%2d",train[i].last_time,train[i].max_number,train[i].sold_ticket);/***************格式化打印数据*******/if((syshour>train[i].ft.hour)||((syshour==train[i].ft.hour)&&(sysminute>train[i].ft.minute))) //判断发车时间与当前时间前后关系printf(" 车已开出");elseprintf(" ");/*当发车时间没有超过当前时间,打印空格,当发车时间超过当前时间时,打印车已开出*/ printf("\n");}system("pause");}7.查询模块A.显示查询菜单(searsh())void searsh(){system("cls"); //显示菜单时清空int s;printf("**********查询菜单**********\n");printf("* 1.按车次查询*\n");printf("* 2.精确查询*\n");printf("* 3.粗略查询*\n");printf("* 0.返回主菜单*\n");printf("****************************\n"); //打印查询菜单printf("请选择: \n");scanf("%d",&s); //选择数字输入if(s==1)searsh1();elseif(s==2)searsh2();else if(s==3)searsh3();elsemainmenu() ;}查询菜单包括4个选项,0-3,用户按需要输入数字B.(按车次查询)模块(searsh1())void searsh1(){int m; //定义变量记录输入班次bool f=false;printf("请您输入你的班次:\n");scanf("%d",&m);int flag = 1;for(int i=0;i<record;i++){ if (m==train[i].number){if(flag == 1){printf("班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\t状态\n");flag = 0;}printf("%d\t%d:%02d\t\t",train[i].number,train[i].ft.hour,train[i].ft.minute);printf("%s\t%s\t\t",train[i].origin_station,train[i].last_station);printf("%.1f\t %d\t\t%d\t",train[i].last_time,train[i].max_number,train[i].sold_ticket);if((syshour>train[i].ft.hour)||((syshour==train[i].ft.hour)&&(sysminute>train[i].ft.minute))) printf(" 车已开出");elseprintf(" ");printf("\n");system("pause");f=true;}elsecontinue;}/***********从数组起始处比较,找到与用户输入车次相同的打印出来*********/ if(!f)printf(" 没有此条车次记录\n");system("pause");searsh();}/********输入车次,打印" 没有此条车次记录\n"************}按车次查询要求用户输入要查询车次,查询成功打印车次的各种信息,同时可以打印车次是否出发。