火车票管理系统课程设计报告.docx
- 格式:docx
- 大小:34.63 KB
- 文档页数:34
车票管理系统课程设计报告车票管理系统课程设计报告车票管理系统一目的通过课程设计,加深对《C语言程序设计》和《数据结构》课程所学知识的理解,熟练掌握和巩固C语言的基本知识和语法规范,包括:数据类型(整形、实型、字符型、指针、数组、结构等);运算类型(算术运算、逻辑运算、自增自减运算、赋值运算等);程序结构(顺序结构、判断选择结构、循环结构);库函数应用等;复杂任务功能分解方法(自顶向下逐步求精、模块化设计、信息隐藏等),熟练掌握和巩固三种基本的数据结构(线性结构、树形结构、图形结构)的逻辑结构、存储结构以及相关运算和应用。
学会编制结构清晰、风格良好、数据结构适当的C语言程序,从而具备利用计算机编程分析解决综合性实际问题的初步能力二需求分析1、首先本演示程序要实现录入班次信息的功能,并且要用文件来保存这些信息,还可以不定时的增加班次数据。
2、需要浏览班次信息是可以一次性输出当前的班次状况,并且要从实际考虑,若当前系统时间已经超过了某班次的发车时间,则要显示“此班已发出”的提示信息。
3、此程序既为车票管理系统,就要实现查询路线、售票、退票等功能。
当使用查询路线功能时,要分两种情况:按班次号查询和按终点站查询。
若使用售票功能,则只有在查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,并且要自动跟新已售票人数。
退票要输入退票的班次,当本班车尚未出发时才能退票,也要自动更新已售票人次。
4、演示程序以用户和计算机的对话方式执行,即在计算机的屏幕上显示“提示信息”下,用户根据自己的意愿自行操作,每次测试完毕,新增加的班次信息要保存在data.txt文件中。
三概要设计1、本程序各个模块的功能及调用关系:(1)主程序模块main()函数:车票管理系统课程设计报告此主程序的主要目的是用来调用读取文件函数、功能菜单函数以及保存文件信息函数。
(2)文件读入与保存函数read()、save()以及功能菜单MainMenu()函数:这三个函数的主要目的是为了读取文件,保存文件和为用户创造一个功能菜单以便于用户的操作。
课程设计报告《车票管理系统》目录一、课程设计题目 (1)二、程序运行流程图 (2)三、程序设计的想法和具体思路 (3)四、参考文献 (3)附件一:设计进度 (4)附件二:源代码 (4)一、课程设计题目C++题目二十三:车票管理系统(限最多2人完成)一车站每天有n个发车班次,每个班次都有一班次号(1、2、3…n),固定的发车时间,固定的路线(起始站、终点站),大致的行车时间,固定的额定载客量。
如班次发车时间起点站终点站行车时间额定载量已定票人数1 8:00 郫县广汉2 45 302 6:30 郫县成都0.5 40 403 7:00 郫县成都0.5 40 204 10:00 郫县成都0.5 40 2…(一)功能要求:用C/C++设计一系统,能提供下列服务:(1)录入班次信息(信息用文件保存),可不定时地增加班次数据(2)浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。
(3)查询路线:可按班次号查询,可按终点站查询(4)售票和退票功能A:当查询出已定票人数小于额定载量且当前系统时间小于发车时间时才能售票,自动更新已售票人数B:退票时,输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数(二)其它要求:(1)只能使用C/C++语言,源程序要有适当的注释,使程序容易阅读(2)至少采用文本菜单界面(如果能采用图形菜单界面更好)(3)学生可自动增加新功能模块(视情况可另外加分)(4)写出课程设计报告,具体要求见相关说明文档二、程序运行流程图三、运行结果 1:2:四、参考文献李春葆,曾平,刘斌,《C++语言程序设计题典》,北京,清华大学出版社,2003年五、总结通过两周多的编程,我们对已学的专业知识有了比较深刻的认识,同时在查找资料或和其他同学交流的过程中,发现了一些问题,所以在设计的时候,遇到了很多困难。
在对所学的有限知识的理解和掌握下,在查找资料以及大家共同努力学习和讨论后终于把课题做完。
二○一三~二○一四学年第二学期车票管理系统实验报告物理与电子工程学院课程名称:数据结构班级:学号:姓名:二○一四年六月(1)题目:车票管理系统(2)系统功能模块结构图(3)各模块的功能1.信息输入模块即录入班次信息:完成班次信息的输入功能,输入信息包括班次、发车时间、起点站、终点站、行车时间、额定载量、已定票人数等;2.信息浏览模块即浏览班次信息:完成已录入信息的显示;3.信息查询模块即查询班次信息:完成班次信息的查询,查询时对应有按班次查询和按终点站查询两种方式;4.售票和退票模块:完成车票的购买和退订的功能;5.菜单选择模块即主菜单:完成用户命令的接收,此模块也是车票管理系统的入口,用户所要进行的各种操作均需在此模块中进行选择并进而调用其他模块实现相应的功能。
(4)数据结构设计及用法说明头文件,一个名TICKET的结构体进行定义:typedef struct ticket //用typedef定义结构体为TICKET{int num; //班次char starttime[10]; //发车时间char begin[21]; //起始站char end[21]; //终点站float lasttime; //行车时间int CarryNumber; //额定载量int SellNumber; //已定票人数struct ticket *next; //结点的指针域}TICKET,*Ticket; //结构体类型指针然后对各调用函数进行定义:void InsertTicket() //录入班次void FileRead() //班次信息文件读入void Keep() //保存数据void ScanTicket() //浏览信息void ScanTicket() //浏览信息void SearchbyNum() //按班次查询班次void SearchbyEnd() //按终点站查询班次void Buyticket() //预定车票void ReturnTicket() //退订车票int GetHour(char *s) //获取班次小时int GetMinute(char *s) //获取班次分钟void exit() //退出该系统最后定义main()函数,利用函数调用,实现程序的各种功能。
程序设计报告( 2014 / 2015 学年第一学期)题目:火车票管理系统专业通信工程学生姓名班级学号指导教师指导单位计算机学院计算机软件教学中心日期火车票务管理系统一、课题内容和要求(一)课题内容该系统要求实现一个简单、实用的火车票管理程序,主要功能包括火车票数据的录入、查找、删除、显示、售票、退票等。
所有火车票数据都要利用文件系统保存,以备系统下次运行时使用。
通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些基本算法思想的应用。
(二)课题要求(1)火车票数据由多条记录组成,其信息包括:车次,发车时间,起点站,终点站,行车时间,额定载量,已售票人数等。
(2)数据保存形式:所有火车票数据要以文本或二进制文件保存。
(3)需要实现的功能1)新增火车票数据记录。
2)查找火车票数据(可按车次,发车时间、起点站、终点站等查找)。
3)删除火车票数据记录(先查找,再删除。
若查找出多条记录,则进一步提示用户选择记录的车次,再删除)。
4)对火车票排序(可按车次、发车时间、起点站、终点站等排序。
)。
5)显示当前所有火车票信息列表。
6)售票(先查找,当确定车次后,根据售票张数对该车次的已售票人数进行修改)。
7)退票(售票的逆处理,过程与售票类似)。
8)保存火车票数据到文件中。
9)从文件中读入火车票数据。
(4)界面功能要求:1)采用友好的字符界面,实现一个功能控制菜单。
2)每次操作都从该菜单选择,利用循环结构使得一次运行程序可进行多次操作。
需求分析一、功能分析图二、录入班次信息:依次输入班次、起点站和终点站等信息同时保存在文件中,并可以随时增加新的班次信息。
三、浏览班次信息:输出保存在文件中的全部班次信息,并区分当前的车次是否已发出,如发出则标记“此车已发出”。
四、按班次号查询路线:以输入的班次号为依据进行查找,找到匹配项则输出该项完整的班次信息;未找到则显示“未找到该车次信息!”五、按起点站查询路线:输入的起点站为依据进行查找,找到匹配项则输出该项完整的班次信息;未找到则显示“未找到该车次信息!”六、按终点站查询路线:输入的终点站为依据进行查找,找到匹配项则输出该项完整的班次信息;未找到则显示“未找到该车次信息!”七、排列发车时间表:按照发车时间从早到晚的顺序逐条显示车次信息。
火车订票系统课程设计一、课程目标知识目标:1. 让学生掌握火车订票系统的基本原理和功能模块;2. 帮助学生了解数据库在火车订票系统中的应用;3. 引导学生理解火车票的查询、预订、支付等业务流程。
技能目标:1. 培养学生运用所学知识设计简单的火车订票系统功能模块;2. 提高学生分析问题、解决问题的能力;3. 培养学生团队协作和沟通表达的能力。
情感态度价值观目标:1. 激发学生对计算机科学与技术学科的兴趣和热情;2. 培养学生关注社会热点问题,关注信息技术在生活中的应用;3. 引导学生树立正确的价值观,认识到科技改变生活的重要性。
课程性质:本课程为信息技术与学科整合的实践性课程,结合实际生活中的火车订票系统,让学生在实践中掌握计算机科学与技术的基本知识和技能。
学生特点:六年级学生对计算机有一定的基础,具备一定的操作能力和逻辑思维能力,对新鲜事物充满好奇心。
教学要求:注重理论知识与实践操作相结合,以学生为主体,教师为主导,鼓励学生积极参与讨论和实践活动,提高学生的动手能力和创新能力。
通过本课程的学习,使学生能够将所学知识应用于实际问题的解决中。
二、教学内容1. 火车订票系统概述:介绍火车订票系统的基本概念、发展历程和在我国的应用现状。
相关教材章节:第三章 计算机网络应用2. 火车订票系统功能模块:分析火车订票系统的功能模块,包括用户注册、登录、查询、预订、支付、改签、退票等。
相关教材章节:第四章 数据库应用3. 数据库在火车订票系统中的应用:讲解数据库的基本概念,以及如何在火车订票系统中设计数据库表、实现数据存储和查询。
相关教材章节:第五章 数据库设计4. 火车票查询与预订:详细介绍火车票查询与预订的业务流程,包括车次查询、余票查询、预订车票等。
相关教材章节:第六章 互联网编程5. 火车订票系统设计与实现:引导学生运用所学知识,设计并实现一个简单的火车订票系统。
相关教材章节:第七章 网络编程实践教学进度安排:第一课时:火车订票系统概述第二课时:火车订票系统功能模块第三课时:数据库在火车订票系统中的应用第四课时:火车票查询与预订第五课时:火车订票系统设计与实现教学内容确保科学性和系统性,注重理论与实践相结合,使学生在掌握基本知识的基础上,能够运用所学技能解决实际问题。
山西大学商务学院《软件工程课程设计》报告题目: 火车站售票管理系统的设计与实现班级:10软件G2班组长:景巧鑫一、火车站售票管理系统二、小组成员及任务分配情况1. 开发目的和意义 ........ 1.1研究背景............ 1.2开发目的和意义.… 1.3完成情况 ............ 2. 开发技术及方法 ........ 2.1开发环境和开发工具 2.2技术及方法 .......... 2.2.1 B/S 模式 ........ 2.2.2 .NET ........... 2.2.3 ........ 3. 系统分析 .............. 3.1可行性分析 .......... 3.1.1 3.1.2 3.1.3 经济可行性技术可行性 操作可行性 3.2需求分析..... 3.2.1 功能需求 3.2.2数据需求 3.2.3性能需求 4. 系统设计 ....... 4.1总体设计..... 4.2详细设计..... 4.2.1过程设计 4.3数据库设计.. 4.3.1 4.3.2 4.3.3 4.3.4 用户表 ........ 车次详细信息表 订票纪录表 —— 退票纪录表 ……5.系统实现 .......5.1系统登录界面.2..3..3 ..3 ..3 ..3 ..4 ..5 ..5 ..5 ..5 ..5 ..5 ..5 ..8 ..9 10 10 10 10 16 16 17 17信息学院《软件工程课程设计》报告-II -5.2系统管理员登录界面 5.3票务管理员登录界面 5.4乘客登录界面........ 6. 系统测试 .............. 6.1测试方法 ............ 6.2测试过程 ............ 6.3测试结果 ............ 7. 总结 ................... 7.1小结 ................ 7.2实践感想 ............ 参考文献 ................ 附录 附录 附录 附录 1 2 3 4 可行性分析文档 需求分析文档 详细设计文档 系统测试文档19 20 21 22 22 22 22 24 24 24 26 27 30 33 391.开发目的和意义1.1研究背景用信息化推动工业化,用信息技术改造传统产业,这是我国迫切要完成的一项战略性任务。
数据库课程设计报告 -------火车售票管理信息系统软件学院软件工程2013级x班姓名: xx学号:2013xxxxxxxx目录一、系统开发平台 (1)四、需求分析 (2)4.1 用户需求说明 (2)4.1.1 数据需求 (2)4.1.2 事务需求 (3)4.2 系统需求说明 (4)五、数据库逻辑设计 (4)5.1 ER图 (4)5.2 数据字典 (5)5.3 关系表 (7)六、数据库物理设计 (7)6.1 索引 (7)6.2 视图本节可选 (8)6.3 安全机制 (8)七、应用程序设计 (8)7.1 功能模块 (8)7.2 界面设计 (15)7.3 事务设计 (15)八、测试和运行 (16)九、总结 (16)一、系统开发平台题目:对火车站的售票进行管理。
主要功能:车次管理(车次、起止地点、到达时间、开车时间)、每一车次的车票管理(车厢号、座位号)、售票、退票、查询、异常处理。
开发工具:eclipse数据库:mysql操作系统:windows8.1二、数据库规划2.1 任务陈述:做一个火车票售票管理系统:对火车站的售票进行管理。
主要功能:车次管理(车次、起止地点、到达时间、开车时间)、每一车次的车票管理(车厢号、座位号)、售票、退票、查询、异常处理。
2.2 任务目标完成一个火车票售票管理系统,要实现管理员对车票的增添以及删改功能,同时需要实现用户对车票的查询购买,以及出现调整之后的退票服务。
三、系统定义3.1 系统边界管理员:可以对车票以及车次进行删改操作。
用户:可以买票,但是不可以对火车票进行添加操作3.2 用户视图3.2.1 管理员视图(1)列车管理:包括列车的录入、查询、修改和删除。
(2)用户管理:包括系统使用用户的添加、查询、修改、删除等。
在线支付用户身份信息用户注册车次设置管理员车次信息录入用户信息管理票务系统车站实际情况(3)系统数据处理:数据查询,根据关键字过滤,查看当前车次信息,车票信息,用户信息以及处理历史。
沈阳工程学院课程设计设计题目:火车票管理系统系别信息工程系班级网络本101学生姓名刘雨娇金兆宁姚宇夏林学号02 13 19 24指导教师孙宪丽、杨弘平职称副教授、副教授起止日期:2012年12月3日起——至2012年12月7日止沈阳工程学院课程设计任务书课程设计题目:火车票管理系统系别信息工程系班级网络本101 学生姓名刘雨娇金兆宁姚宇夏林学号02 13 19 24指导教师孙宪丽、杨弘平职称副教授、副教授课程设计进行地点:实训F任务下达时间:2012 年12 月 3 日起止日期:2012年12月3日起—至2012年12月7日止教研室主任年月日批准1.设计的原始资料及依据查阅有关数据库设计、Java语言程序设计以及案例分析等资料,进一步熟悉面向对象程序设计基本理论以及基本思想。
本设计要求按照软件工程、数据库设计思想及设计步骤设计一个实用程序,并采用Java开发该系统。
通过本设计可以加深对面向对象程序设计基本思想的理解,加强学生研发、调试程序的能力,培养学生分析、解决问题的能力,提高学生的科技写作能力。
2.设计的主要内容及要求(1)写出系统的需求分析。
(2)写出系统的数据库设计过程,包括概念结构设计、逻辑结构设计、物理结构设计。
(数据库应用程序管理系统类设计详细写,其它类设计可以略)(3)写出系统设计思路—工作原理、功能规划。
(4)详细设计—数据分析、算法思路、类设计、功能实现(包括程序流程图、主要代码及注释)、界面等。
(5)运行调试与分析讨论--给出运行屏幕截图,分析运行结果,有何改进等。
3.对设计说明书撰写内容、格式、字数的要求(1)学生应撰写的内容为:中文摘要和关键词、目录、正文、参考文献等。
课程设计说明书(论文)的结构及各部分内容要求参照《沈阳工程学院毕业设计(论文)撰写规范》执行。
应做到文理通顺,内容正确完整,书写工整,装订整齐。
(2)装订格式:封面、任务书、成绩评审意见表、中文摘要和关键词、目录、正文、结论、致谢、参考文献。
课程设计报告课程设计题目: Linux下的火车系统专业:软件工程班级:姓名:学号:指导教师:20 16年 7月 1日(一)实验题目Linux下的火车售票系统(二)实验时间,地点2016.6.27到2016.6.30,软件楼506(三)实验目的在linux下做一个火车售票系统(四)实验要求要求采用多线程编程,实现车票信息的查询,录入,更新,车次的修改;实现用户注册登录,订票查询、火车票预订、退票申请以及后台方面的列车车次信息发布更新、车票生成、提供取票服务。
(五)实现思路该算法用c语言编写,再在linux下用vi建立文档,gcc后生成可行文件后,./运行。
C语言实现思路为1.把ticket,user,定义为结构,其中ticket中有四个数据。
User1和user2一开始都是为空2.定义开始地点四个,终点4个3. 定义数组c1.c2,daaress.uname1,pass1.uname1,uname24.写个选择页面,共有5个页面。
5. 如果用户选择1购票,下面for循环控制路线。
如果用户选择2注册,把输入的数据存入数组如果用户选择3查询,建立for循环如果用户选择4购票,用if判断语句判断用户输入的是否在数组里如果用户选择5购票.用exit退出流程图:实现过程:定义结构,再加while if等循环实现代码#include <stdio.h>Struct ticket /*定义火车票为结构体 */ {char* starName;char* endName;int number;};struct user /*定义用户为结构体*/{char* userName;char* passWord;};struct ticket tickets[4] ;/* 火车票里有4个对象 */ struct user user1={NULL,NULL};/* 用户初始为空*/ struct user user2={NULL,NULL} ;int lq_index();/*定义数组*/void gotolq_Index();void main(){int i =0 ;char* starNames[4]={"南昌","深圳","广州","九江"};/*4个起点*/char* endNames[4]={"深圳","南昌","九江","广州"};/*4个终点*/for(i=0;i<4;i++){tickets[i].starName=starNames[i];tickets[i].endName=endNames[i];tickets[i].number=rand()%21+30; }/*for(i=0;i<4;i++){printf("%s-%snumber:%d\n",tickets[i].starName,tickets[i].endName,tickets[i]. number);}*/printf("\t**********欢迎使用火车票系统**********\n");/*输出主页面*/while(1==1){if(lq_index()==5)break;}}int lq_index(){int i=0,j=0;char yn;char c1[20];/*2个数组*/char c2[20] ;charaddress[20],uname1[20],pass1[20],uname2[20],pass2[20];printf("\n [1] 购票 [2] 注册 \n" );printf(" [3] 查询 [4] 登录 \n" );printf(" [5] 退出 \n" );printf("请输入编号");scanf("%d",&i);if(i==1) {printf("输入目的地和出发地:");scanf("%s %s",c1,c2); /*接受用户输入的数据*/j=0;for(i=0;i<4;i++){j++;if(strcmp(tickets[i].starName,c1)==0&&strcmp(tickets[i].endN ame,c2)==0)/*判断是否有票*/{if(tickets[i].number>0){printf("您的选择的线路%s-%s 还剩%d张票是否确定购买(y/n) : ",c1,c2,tickets[i].number);scanf(" %c",&yn);if(yn=='y'||yn=='Y'){if(erName!=NULL){tickets[i].number -- ;printf("恭喜您购票成功! ");}else{printf("登录后才能购票! ");}/*如果没登录显示用户登录*/gotolq_Index();/*选择路线*/}else if(yn=='n'||yn=='N'){gotolq_Index();}else{printf("输入有误!\n");i--;j--;continue;}return 1;}else{printf("抱歉您的选择的线路%s-%s 已无票出售!",c1,c2);/*如果无票就提示*/gotolq_Index();return 1;}}else if(j==4)/*路线不存在提示*/{printf("您的选择的线路%s-%s 系统中不存在!",c1,c2);gotolq_Index();return 1;}}}else if(i==2){printf("输入账号:");/*注册账号*/ scanf("%s",uname1) ;erName=uname1;printf("输入密码: ");scanf("%s",pass1);user1.passWord=pass1;printf("恭喜%s用户注册成功!",erName);gotolq_Index();}else if(i==3){printf("输入要查询的地点:"); /*查询车票*/scanf("%s",address);printf("始发站\t终点站\t票数\n");i=0;for(i=0;i<4;i++){if(strcmp(tickets[i].starName,address)==0){printf(" %s\t %s\t %d\n",tickets[i].starName,tickets[i].endN ame,tickets[i].number);}else{j++;}if(j==4){printf("未找到相应数据!\n");}}gotolq_Index();return 1;}else if(i==4){printf("输入账号:");/*用户登录与已经注册的判断*/scanf("%s",uname2) ;erName=uname2;printf("输入密码: ");scanf("%s",pass2);user2.passWord=pass2;if(erName!=NULL){if(strcmp(erName,erName)==0&&strcmp(user1.pa ssWord,user2.passWord)==0){printf("欢迎%s用户使用本系统!",erName);}else{erName=NULL;user2.passWord=NULL;printf("输入账号或者密码不一致!");}}else{printf("请先注册用户!");/*不一致提示注册*/ }gotolq_Index();}else if(i==5){printf("欢迎再次使用本系统!");return 5 ;}return 1 ;}void gotolq_Index(){printf("任意键返回首页!");/返回*/printf("\n**************************************\n"); }。
程序设计报告( 2014 / 2015 学年第一学期)题目:火车票管理系统专业通信工程学生姓名班级学号指导教师指导单位计算机学院计算机软件教学中心日期火车票务管理系统一、课题内容和要求(一)课题内容该系统要求实现一个简单、实用的火车票管理程序,主要功能包括火车票数据的录入、查找、删除、显示、售票、退票等。
所有火车票数据都要利用文件系统保存,以备系统下次运行时使用。
通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些基本算法思想的应用。
(二)课题要求(1)火车票数据由多条记录组成,其信息包括:车次,发车时间,起点站,终点站,行车时间,额定载量,已售票人数等。
(2)数据保存形式:所有火车票数据要以文本或二进制文件保存。
(3)需要实现的功能1)新增火车票数据记录。
2)查找火车票数据(可按车次,发车时间、起点站、终点站等查找)。
3)删除火车票数据记录(先查找,再删除。
若查找出多条记录,则进一步提示用户选择记录的车次,再删除)。
4)对火车票排序(可按车次、发车时间、起点站、终点站等排序。
)。
5)显示当前所有火车票信息列表。
6)售票(先查找,当确定车次后,根据售票张数对该车次的已售票人数进行修改)。
7)退票(售票的逆处理,过程与售票类似)。
8)保存火车票数据到文件中。
9)从文件中读入火车票数据。
(4)界面功能要求:1)采用友好的字符界面,实现一个功能控制菜单。
2)每次操作都从该菜单选择,利用循环结构使得一次运行程序可进行多次操作。
需求分析一、功能分析图二、录入班次信息:依次输入班次、起点站和终点站等信息同时保存在文件中,并可以随时增加新的班次信息。
三、浏览班次信息:输出保存在文件中的全部班次信息,并区分当前的车次是否已发出,如发出则标记“此车已发出”。
四、按班次号查询路线:以输入的班次号为依据进行查找,找到匹配项则输出该项完整的班次信息;未找到则显示“未找到该车次信息!”五、按起点站查询路线:输入的起点站为依据进行查找,找到匹配项则输出该项完整的班次信息;未找到则显示“未找到该车次信息!”六、按终点站查询路线:输入的终点站为依据进行查找,找到匹配项则输出该项完整的班次信息;未找到则显示“未找到该车次信息!”七、排列发车时间表:按照发车时间从早到晚的顺序逐条显示车次信息。
八、售票功能:依次输入“售票数目”和“班次号”可出售未发出的班次的车票。
九、退票功能:依次输入“退票数目”和“班次号”可退距发车时间大于半小时的班次的车票。
三、概要设计(1)类:#include<iostream.h>#include<fstream.h>#include<string.h>#include <time.h>class Ticket{char no[20];char name_b[20];char name_e[20];int hour;int minute;int tra_time;int eding;int yupiao;public:void shoupiao(fstream&f);void tuipiao(fstream&f);void searchbynumber(fstream&f);void searchbybeginplace(fstream&f);void searchbyendplace(fstream&f);void luru(fstream&f);void liulan(fstream&f);void paixu(fstream&f);friend ostream&operator<<(ostream&out,const Ticket&t);//定义重载输出运算符的友元函数bool findno(char n[])//用于判断输入的字符串是否与查找区域中的某个字符串一致{if(strcmp(no,n)==0)return true;elsereturn false;}bool findname_b(char n[]) {if(strcmp(name_b,n)==0)return true;elsereturn false;}bool findname_e(char n[]){if(strcmp(name_e,n)==0)return true;elsereturn false;}};(2)主要函数流程图:1、录入班次信息函数:用户根据提示信息逐项输入班次信息各项数据, 利用read()函数把要录入的信息写入文件。
如图1图1 图2 2、浏览班次信息显示所有的班次信息,并标记已发出的车次, 如图23、按班次号查询路线根据用户输入的班次号查找匹配项的班次信息。
4、按起点站查询路线根据用户输入的起点站查找匹配项的班次信息。
5、按终点站查询路线根据用户输入的终点站查找匹配项的班次信息。
6、排列发车时间表利用冒泡法按照发车时间的升序排列车次信息 7、售票用户输入指定的班次和售票数目进行售票 如图3 8、退票用户输入指定的班次和售票数目进行售票, 如图4#include<iostream.h>#include<fstream.h>#include<string.h>#include <time.h>class Ticket{char no[20];char name_b[20];char name_e[20];int hour;int minute;int tra_time;int eding;int yupiao;public:void shoupiao(fstream&f);void tuipiao(fstream&f);void searchbynumber(fstream&f);void searchbybeginplace(fstream&f);void searchbyendplace(fstream&f);void luru(fstream&f);void zengjia(fstream&f);void xiugai(fstream&f);void liulan(fstream&f);void paixu(fstream&f);friend ostream&operator<<(ostream&out,constTicket&t);//定义重载输出运算符的友元函数bool findno(char n[])//用于判断输入的字符串是否与查找区域中的某个字符串一致{if(strcmp(no,n)==0)return true;elsereturn false;}bool findname_b(char n[]){if(strcmp(name_b,n)==0)return true;elsereturn false;}bool findname_e(char n[]){if(strcmp(name_e,n)==0)return true;elsereturn false;}};ostream&operator<<(ostream&out,const Ticket&t)//打印车次表格{if(t.minute>=10){out<<t.no<<" "<<t.hour<<" : "<<t.minute<<""<<_b<<" "<<_e<<" "<<t.tra_time<<" "<<t.eding<<" "<<t.yupiao<<endl;}else{ out<<t.no<<" "<<t.hour<<" :"<<"0"<<t.minute<<" "<<_b<<" "<<_e<<" "<<t.tra_time<<" "<<t.eding<<" "<<t.yupiao<<endl;}return out;}void Ticket::liulan(fstream&f){int i=0;struct tm *local;long t;time(&t);local = localtime(&t);cout<<"车次"<<" "<<"发车时间"<<" "<<"起点站"<<" "<<"终点站"<<" "<<"行车时间"<<" "<<"额定载量"<<" "<<"余票数量"<<endl;f.seekg(0,ios::end);int b=f.tellg();f.seekg(0,ios::beg);int a=f.tellg();int c=(b-a)/sizeof(Ticket);//获得文件内包含的班次信息总数Ticket*T=new Ticket[c];while(!f.eof())f.read((char*)&T[i++],sizeof(Ticket));for(int j=0;j<c;j++){if((local->tm_hour>T[j].hour)||(T[j].hour==local->t m_hour)&&(local->tm_min >T[j].minute)){cout<<T[j]<<" "<<"此车已发出!"<<endl;}else{cout<<T[j]<<endl;}}}void Ticket::shoupiao(fstream&f){const int NUM=sizeof(Ticket);int n;long t;char m[20];Ticket T;struct tm *local;cout<<"请输入售票的数目:"<<endl;cin>>n;cout<<"请输入售票的班次:"<<endl;cin>>m;time(&t);local = localtime(&t);f.seekg(0,ios::beg);//从文件头开始bool fd=false;while(!f.eof()&&!fd){f.read((char*)&T,NUM);if(fd=T.findno(m))//判断是否找到匹配班次{if(T.yupiao)//判断余票数量是否大于零{if((local->tm_hour<T.hour)||(T.hour==local->tm_hour )&&(local->tm_min <T.minute)){T.yupiao-=n;f.seekg(-1*NUM,ios::cur);//从当前位置向前移动(-1*sizeof(Ticket))个字节f.write((char*)&T,NUM);cout<<"已售出"<<n<<"张该车次的车票!"<<endl;}elsecout<<"该车次已发出!"<<endl;}elsecout<<"票已售完!"<<endl;}}if(!fd)cout<<"未找到该车次信息!"<<endl;}void Ticket::tuipiao(fstream&f){const int NUM=sizeof(Ticket);int n;long t;char m[20];Ticket T;struct tm *local;cout<<"请输入退票的数目:"<<endl;cin>>n;cout<<"请输入退票的班次:"<<endl;cin>>m;time(&t);local = localtime(&t);f.seekg(0,ios::beg);//把文件指针移到文件头bool fd=false;while(!f.eof()&&!fd)//未找到匹配的车次号以及未搜索完所有数据前继续循环{f.read((char*)&T,NUM);if(fd=T.findno(m)){if((T.hour)*60+T.minute-(local->tm_hour)*60-(local->tm_min)>30){T.yupiao+=n;f.seekg(-1*NUM,ios::cur);//从当前位置向前移动(-1*sizeof(Ticket))个字节f.write((char*)&T,NUM);//更新退票后的班次信息cout<<"已退"<<n<<"张该车次的车票!"<<endl;}elsecout<<"退票失败!"<<endl;}}if(!fd)cout<<"未找到该车次信息!"<<endl;}void Ticket::paixu(fstream&f){int i=0;f.seekg(0,ios::end);int b=f.tellg();f.seekg(0,ios::beg);//把文件指针移到文件头int a=f.tellg();int num=(b-a)/sizeof(Ticket);//得到文件内班次信息总数numTicket*t=new Ticket[num+1];Ticket*T=new Ticket[num+1];for(i=0;i<num;i++){f.read((char*)&t[i],sizeof(Ticket));}for(i=0;i<num-1;i++){if(((t+i)->hour>(t+i+1)->hour)||(((t+i)->hour==(t+i +1)->hour)&&((t+i)->minute>(t+i+1)->minute))){strcpy(T->no,(t+i)->no);strcpy(T->name_b,(t+i)->name_b);strcpy(T->name_e,(t+i)->name_e);T->hour=(t+i)->hour;T->minute=(t+i)->minute;T->tra_time=(t+i)->tra_time;T->eding=(t+i)->eding;T->yupiao=(t+i)->yupiao;strcpy((t+i)->no,(t+i+1)->no);strcpy((t+i)->name_b,(t+i+1)->name_b);strcpy((t+i)->name_e,(t+i+1)->name_e);(t+i)->minute=(t+i+1)->minute;(t+i)->tra_time=(t+i+1)->tra_time;(t+i)->eding=(t+i+1)->eding;(t+i)->yupiao=(t+i+1)->yupiao;strcpy((t+i+1)->no,T->no);strcpy((t+i+1)->name_b,T->name_b);strcpy((t+i+1)->name_e,T->name_e);(t+i+1)->minute=T->minute;(t+i+1)->tra_time=T->tra_time;(t+i+1)->eding=T->eding;(t+i+1)->yupiao=T->yupiao;}//利用冒泡法将发车时间相对早的班次信息往文件头移}cout<<" 发车时间表: "<<endl;for(i=0;i<num;i++)cout<<t[i]<<endl;fstream fil;fil.open("d:\\sort.dat",ios::in|ios::out|ios::binar y);//创建并打开二进制文件"sort.dat"for(i=0;i<num;i++)fil.write((char*)&t[i],sizeof(Ticket));fil.close();}void Ticket::searchbynumber(fstream&f){char n[10];Ticket t;cout<<"请输入你要查找的班次号:"<<endl;cin>>n;f.seekg(0,ios::beg);bool fd=false;while(!f.eof()&&!fd){f.read((char*)&t,sizeof(Ticket));if(fd=t.findno(n)){cout<<"车次"<<" "<<"发车时间"<<" "<<"起点站"<<" "<<"终点站"<<" "<<"行车时间"<<" "<<"额定载量"<<" "<<"余票数量"<<endl;cout<<t;}}if(!fd)cout<<"未找到该车次信息!该车次不存在或已发出!"<<endl;}void Ticket::searchbybeginplace(fstream&f){char n[10];Ticket t;cout<<"请输入你要查找的班次的起点站:"<<endl;cin>>n;f.seekg(0,ios::beg);bool fd=false;while(!f.eof()&&!fd){f.read((char*)&t,sizeof(Ticket));if(fd=t.findname_b(n)){cout<<"车次"<<" "<<"发车时间"<<" "<<"起点站"<<" "<<"终点站"<<" "<<"行车时间"<<" "<<"额定载量"<<" "<<"余票数量"<<endl;cout<<t;}}if(!fd)cout<<"未找到该车次信息!该车次不存在或已发出!"<<endl;}void Ticket::searchbyendplace(fstream&f)char n[10];Ticket t;cout<<"请输入你要查找的班次的终点站:"<<endl;cin>>n;f.seekg(0,ios::beg);bool fd=false;while(!f.eof()&&!fd){f.read((char*)&t,sizeof(Ticket));if(fd=t.findname_e(n)){cout<<"车次"<<" "<<"发车时间"<<" "<<"起点站"<<" "<<"终点站"<<" "<<"行车时间"<<" "<<"额定载量"<<" "<<"余票数量"<<endl;cout<<t;}}if(!fd)cout<<"未找到该车次信息!该车次不存在或已发出!"<<endl;void Ticket::luru(fstream&f){int num;int i;cout<<"请输入你要录入的班次信息数量:"<<endl;cin>>num;Ticket*t=new Ticket[num];cout<<"请依次输入"<<endl<<"车次、发车时间(时)、发车时间(分)、起点站、终点站、行车时间、额定票数和余票数量 "<<endl;for(i=0;i<num;i++){cin>>t[i].no;cin>>t[i].hour;cin>>t[i].minute;cin>>t[i].name_b;cin>>t[i].name_e;cin>>t[i].tra_time;cin>>t[i].eding;cin>>t[i].yupiao;}f.seekg(0,ios::end);//文件指针指向文件尾for(i=0;i<num;i++)f.write((char*)&t[i],sizeof(Ticket));}void Ticket::zengjia(fstream&f){int num;int i;cout<<"请输入你要增加的班次信息数量:"<<endl;cin>>num;Ticket*t=new Ticket[num];cout<<"请依次输入"<<endl<<"车次、发车时间(时)、发车时间(分)、起点站、终点站、行车时间、额定票数和余票数量 "<<endl;for(i=0;i<num;i++){cin>>t[i].no;cin>>t[i].hour;cin>>t[i].minute;cin>>t[i].name_b;cin>>t[i].name_e;cin>>t[i].tra_time;cin>>t[i].eding;cin>>t[i].yupiao;}f.seekg(0,ios::end);//文件指针指向文件尾for(i=0;i<num;i++)f.write((char*)&t[i],sizeof(Ticket));}void Ticket::xiugai(fstream&f){char n[10];Ticket t;cout<<"请输入你要修改的班次:"<<endl;cin>>n;f.seekg(0,ios::beg);bool fd=false;while(!f.eof()&&!fd){f.read((char*)&t,sizeof(Ticket));if(fd=t.findno(n)){cout<<"请依次输入"<<endl<<"发车时间(时)、发车时间(分)、起点站、终点站、行车时间、额定票数和余票数量 "<<endl;cin>>t.no;cin>>t.hour;cin>>t.minute;cin>>_b;cin>>_e;cin>>t.tra_time;cin>>t.eding;cin>>t.yupiao;}}f.seekg(0,ios::end);//文件指针指向文件尾f.write((char*)&t,sizeof(Ticket));}void menu()//菜单函数{cout<<"******************************菜单********************************"<<endl;cout<<" 1:录入车次信息"<<endl;cout<<" 2:浏览车次信息"<<endl;cout<<" 3:根据车次号查询路线"<<endl;cout<<" 4:根据起点站查询路线"<<endl;cout<<" 5:根据终点站查询路线"<<endl;cout<<" 6:排列发车时间表"<<endl;cout<<" 7:售票"<<endl;cout<<" 8:退票"<<endl;cout<<" 9:增加车次"<<endl;cout<<" 10:修改车次"<<endl;cout<<" 0:退出菜单"<<endl;cout<<"请选择您需要操作的选项:"<<endl;}void main(){int x;Ticket T;fstream file;cout<<"*********************欢迎您使用票务管理系统!**********************"<<endl;menu();while(x){cin>>x;file.open("d:\\schedule.dat",ios::in|ios::out|ios:: binary);//创建并打开二进制文件schedule.datswitch(x){case 1:T.luru(file);break;case 2:T.liulan(file);break;case 3:T.searchbynumber(file);break;case 4:T.searchbybeginplace(file);break;case 5:T.searchbyendplace(file);break;case 6:T.paixu(file);break;case 7:T.shoupiao(file);break;case 8:T.tuipiao(file);break;case 9:T.zengjia(file);break;case 10:T.xiugai(file);break;case 0:break;}cout<<"操作已完成,请继续!"<<endl;file.close();//关闭二进制文件schedule.dat}cout<<"************************欢迎您下次使用!****************************"<<endl;}五、测试数据及其结果分析1、录入班次信息输入:1输出:请输入你要录入的班次信息数量:输入:4输出:请依次输入车次、起点站、终点站、发车时间(时)、发车时间(分)、行车时间、额定票数和余票数量输入:G111 南京扬州 8 0 20 100 30G222 南京北京 10 30 21 120 35G333 南京上海 11 0 22 140 50G444 南京广州 9 30 22 160 40输出:操作已完成,请继续!2、浏览班次信息输入:2输出:G111 南京扬州 8 0 20 100 30G222 南京北京 10 30 21 120 35G333 南京上海 11 0 22 140 50G444 南京广州 9 30 22 160 40操作已完成,请继续!3、根据车次号查询路线输入:3输出:请输入你要查找的班次号:输入:G111输出:G111 南京扬州 8 0 20 100 30 操作已完成,请继续!4、根据起点站查询路线输入:4输出:请输入你要查找的班次的起点站:输入:南京输出:G111 南京扬州 8 0 20 100 30G222 南京北京 10 30 21 120 35G333 南京上海 11 0 22 140 50G444 南京广州 9 30 22 160 405、根据终点站查询路线输入:5输出:请输入你要查找的班次的终点站:输入:上海输出:G333 南京上海 11 0 22 140 50 操作已完成,请继续!6、排列发车时间表输入:6输出:G111 南京扬州 8 0 20 100 30G444 南京广州 9 30 22 160 40G222 南京北京 10 30 21 120 35G333 南京上海 11 0 22 140 50操作已完成,请继续!7、售票输入:7输出:请输入售票的数目:输入:1输出:请输入售票的班次:输入:G333输出:已售出1张该车次的车票!8、退票输入:8输出:请输入退票的数目:输入:1输出:请输入退票的班次:输入:G444输出:已退1张该车次的车票!操作已完成,请继续!9、退出菜单输入:0输出:************************欢迎您下次使用!****************************结果分析:(1)按照车次号、起点站或终点站查询班次时,如输入的车次信息不在数据库里或该车次已发出,则显示“未找到该车次信息!该车次不存在或已发出!”(2)售票的班次如已发出,则显示“该车次已发出!”如无余票则提示“票已售完”。