C语言课程设计报告火车售票系统_第1页
C语言课程设计报告火车售票系统_第2页
C语言课程设计报告火车售票系统_第3页
C语言课程设计报告火车售票系统_第4页
C语言课程设计报告火车售票系统_第5页
已阅读5页,还剩32页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

/一、课程设计的原始资料及依据在现代社会,火车以其安全,舒适以及其服务的周到使愈来愈多的人选择了火车为长距离出行的交通工具,这就使火车公司以及车站的工作量愈来愈大,若仍然使用文件或者人工来管理公司、车站、火车、列班、路线、客户以及售票的信息,那无疑在效率上会大打折扣。21世纪的今天,信息社会占着主流地位,计算机在各行各业中的运用已经得到普及,自动化、信息化的管理越来越广泛应用于各个领域。利用计算机来储存和管理公司、车站、火车、列班、车线、客户以及售票的信息成为了首选,在这种情况下,火车订票系统就显得非常重要了。两个客户名单可分别由线性表和队列实现。为查找方便,已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构。由于预约人数无法预计,队列也应以链表作存储结构。整个系统需汇总各条路线的情况登录在一张线性表上,由于路线基本不变,可采用顺序存储结构,并按车次有序或按终点站名有序。每条路线是这张表上的一个记录,包含上述8个域,其中乘员名单域为指向乘员名单链表的头指针,等候替补的客户名单域为分别指向队头和队尾的指针。队列〔Queue是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。用队列来进行客户信息的存储。编辑用户使用菜单,内容包括:输入列班信息,保存列班信息,读取列班信息,查找列班信息,删除列班信息,订票信息,退票信息以及修改信息。二、课程设计主要内容及要求1.列车基本信息管理:输入所有列班信息。每条路线所涉及的信息有:终点站名、车次号、车厢号、开车周日〔星期几、乘员定额、余票量、已订票的客户名单〔包括姓名、订票量、座位等级1,2或3以及等候替补的客户名单〔包括姓名、所需的票量。2.列车基本信息查询:按车次号查找,按抵达站查找,按路线查找三种查找方式进行查找。3.订票管理:客户对想要购买的票进行订票。3.退票管理:将不想要的票进行退票。三、对课程设计说明书撰写内容、格式、字数的要求1.课程设计说明书是体现和总结课程设计成果的载体,主要内容包括:设计题目、设计目的、设备器材、设计原理及内容、设计步骤、遇到的问题及解决方法、设计总结、设计小组评语、参考文献等。一般不应少于3000字。2.在适当位置配合相应的实验原理图、数据通路图、微程序流程图、实验接线图、微指令代码表等图表进行说明。应做到文理通顺,内容正确完整,书写工整,装订整齐。3.设计总结部分主要写本人完成工作简介以及自己的设计体会,包括通过课程设计学到了什么,哪里遇到了困难,解决的办法以及今后的目标。设计小组评语处注明设计组编号、设计组组长、设计组成员,并由设计组组长给出评语。4.课程设计说明书手写或打印均可。手写要用学校统一的课程设计用纸,用黑或蓝黑墨水工整书写;打印时采用A4纸,页边距均为20mm,正文采用宋体小四号字,行间距18磅。文中大标题采用黑体小三号字,一级节标题采用黑体四号字,二级节标题采用黑体小四号字,表题与图题采用宋体五号字。5.课程设计说明书装订顺序为:封面、任务书、成绩评定表、目录、正文、参考文献。四、设计完成后应提交成果的种类、数量、质量等方面的要求1.完成"任务书"中指定的操作功能,运行稳定。2.课程设计说明书。五、时间进度安排顺序阶段日期计划完成内容备注1第1天〔12月27日阅读资料2第2—3天〔12月28日—12月29日系统分析设计3第4—7天〔12月30日—01月04日程序编制、调试及运行4第8—9天〔01月05日—01月06日成绩评定5第10天〔01月07日撰写课程设计说明书六、主要参考资料〔文献[1]严蔚敏吴伟民.数据结构〔C语言版.北京:清华大学出版社.2007[2]谭浩强.C程序设计.北京:清华大学出版社.1999.12[3]滕国文.数据结构课程设计.北京:清华大学出版社.2010.09[4]苏仕华等编著.数据结构课程设计.北京:机械工业出版社.2005.05[5]李春葆.数据结构〔C语言版习题与解析.北京:清华大学出版社.2002..04摘要现代科学技术的飞速发展,改变了世界,也改变了人类的生活。作为新世纪的大学生,应当站在时代发展的前列,掌握现代科学技术知识,调整自己的知识结构和能力结构,以适应社会发展的要求。新世纪需要具有丰富的现代科学知识,能够独立解决面临的任务,充满活力,又有创新意识的新型人才。随着各个领域的突飞猛进,计算机也有它卓越的进步。数据结构不仅为计算机专业工作者所使用,而且为广大计算机应用人员所喜爱和使用。数据结构是国际上广泛流行的计算机高级语言。它适合作为系统描述语言,既可以用来编写系统软件,也可以用来编写应用软件。许多高等学校,不仅在计算机专业开设数据结构课程,而且在非计算机专业也开设了数据结构课程。学习数据结构已经成为广大计算机应用人员和广大青年学生的迫切要求。本次数据结构课程设计的题目是火车售票系统。对于火车售票系统,两个客户名单可分别由线性表和队列实现。为查找方便,已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构。由于预约人数无法预计,队列也应以链表作存储结构。整个系统需汇总各条路线的情况登录在一张线性表上,由于路线基本不变,可采用顺序存储结构,并按车次有序或按终点站名有序。每条路线是这张表上的一个记录,包含上述8个域,其中乘员名单域为指向乘员名单链表的头指针,等候替补的客户名单域为分别指向队头和队尾的指针。编辑用户使用菜单,内容包括:输入列班信息,保存列班信息,读取列班信息,查找列班信息,删除列班信息,订票信息,退票信息以及修改信息。在为期两周的数据结构课程设计学习中,先要学习数据结构课程的目的掌握数据结构存储的方法,学习会用计算机语言编写程序,以实现所需要处理的任务。要正确处理算法与语法的关系,算法结构存储是程序的核心、是灵魂,语法是外壳、是工具。不应把学习重点放在语法规则上,语法是重要的,不掌握语法规则就无法编写出正确的程序。一定要把重点放在解题的思路上和运用何种存储的方法,通过思考和大量的阅读,来构造一个完整的程序。数据结构存储的设计直接关系到程序的好坏。最后,感谢老师在我们程序设计的过程中辛勤的指导和不倦的教诲。关键词线性表,数组,队列,设计目录摘要I第一章问题分析11.1引言11.2背景11.3分析11.3.2火车售票系统2第二章原理与运行环境32.1数据结构理论32.1.2火车售票系统数据结构理论32.2运行环境44.2火车售票系统功能实现214.2.1定义主函数214.2.2列车基本信息管理234.2.3列车基本信息查询254.2.4订票管理274.2.5退票管理31结论35致谢36参考文献37第一章问题分析1.1引言数据结构的教学要求是:学会分析研究计算机加工的数据结构的特征,以便为应用涉及的数据选择适当的逻辑结构、存储结构及其相应的算法,并初步掌握算法的时间分析和空间分析的技术。另一方面,本课程的学习过程也是复杂程序设计的训练过程,要求学生编写的程序结构清楚和正确易读,符合软件工程的规范。在学习中,先要学习程序设计课程的目的掌握设计程序的思路,学习会用计算机语言编写程序,以实现所需要处理的任务。要正确处理算法与语法的关系,算法是程序的核心、是灵魂,语法是外壳、是工具。不应把学习重点放在语法规则上,语法是重要的,不掌握语法规则就无法编写出正确的程序。一定要把重点放在解题的思路上,通过思考,和大量的阅读,来构造一个完整的程序。请记住:重要的是学会编程,而不是背语法。程序设计是为了锻炼我们的实际动手能力,在一定程度上,又增加了我们的各方面的知识,特别是一些联系实际的课程设计,它的完成需要自己平时积累的大量知识、并且需要勤于思考的能力和无限的激情。本次课程设计主要是学习程序设计的方法,进行程序设计的基本训练,大多数的学生应该把精力放在最基本,最常用的内容上,学好基本功。通过本次课程设计,相信我们一定能加强对数据结构这门课程的学习,尤其在动手实践上会有很大的进步。1.2背景在人们日常的火车订票和退票中,有大量的数据和信息需要存储和处理,通常纸质的档案不容易保存和使用,在查询,订票,退票上有很大的困难,浪费大量的时间和人力也不一定能够取得很好的效果,为了方便人们订票,开发一个火车售票系统迫在眉睫。1.3分析1.3.1火车售票系统两个客户名单可分别由线性表和队列实现。为查找方便,已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构。由于预约人数无法预计,队列也应以链表作存储结构。整个系统需汇总各条路线的情况登录在一张线性表上,由于路线基本不变,可采用顺序存储结构,并按车次有序或按终点站名有序。每条路线是这张表上的一个记录,包含上述8个域,其中乘员名单域为指向乘员名单链表的头指针,等候替补的客户名单域为分别指向队头和队尾的指针。队列〔Queue是只允许在一端进行插入,而在另一端进行删除的运算受限的线性表。用队列来进行客户信息的存储。编辑用户使用菜单,内容包括:列车基本信息管理,列车基本信息查询,订票管理,退票管理。火车售票系统分为四个大模块,分别为列车基本信息管理,列车基本信息查询,订票管理,退票管理。⑴列车基本信息管理输入火车的车次号。在循环中,如果火车的车次号不存在的话,创建新结点并依次输入火车的信息,该车次号的信息输入完毕,保存到文件中,结束输入;如果火车的车次号存在的话,重新输入,重复上述过程,单链表创建完毕。⑵列车基本信息查询列车基本信息查询是在已有的火车订票系统中按地点、按车次、按车线查找到火车信息,并将其显示在屏幕上。通过移动指针找到与输入相同的地点、车次、车线,并将该地点、车次、车线所对应的火车的信息输出。⑶订票管理根据查询功能查找出所要订购的车票信息,输入所要订购的车票信息。先判断链表是否为空,若为空,显示"没有任何记录";若不为空,输入车票的数量,看有没有火车票,若没有火车票,输出没有火车票,否则对该结点进行订票操作。⑷退票管理根据查询功能查找出所要退票的车票信息,先判断链表是否为空,若为空,返回主菜单;若不为空,看是否过期,若过期,输出退票失败,否则对该结点进行退票操作。主函数是程序的入口,采用模块化设计。通过一定的入口可以进行列车基本信息管理、列车基本信息查询、订票管理、退票管理。YYYYYYYY开始主菜单功能选择1?2?3?录入班次信息浏览班次信息查询行车路线选择查询按班次查询1?2?按终点查询3?4?售票与退票管理系统选择1?2?3?订票系统退票系统5?退出结束YYYN第二章原理与运行环境2.1数据结构理论2.1.1火车售票系统数据结构理论链接方式存储的线性表简称为链表。链表是一种动态存储结构,所占用的存储空间在程序的执行过程中得到,当线性表需要增加一个结点时,要为该结点向系统申请一个存储空间。当线性表删除一个结点时,要将已删除的结点的存储空间释放,归还给系统。每个存储结点不仅包含有所存储元素本身的信息〔称之为数据域,而且包含所有元素之间逻辑关系的信息,即前驱结点包含有后继结点的地址信息〔这称为指针域,这样可以通过前驱结点的指针域方便地找到后继结点的位置,提高数据查找速度。队列是一种先进后出的线性表,它只允许在表的一端进行插入,而在另一端进行删除元素。以队列的链式表示和实现为例。一个链队列需要两个分别指向队头和队尾的指针才能唯一确定。首先给链队列添加一个头结点,并且令头指针指向头结点。链队列的操作即为单链表的插入和删除的特殊情况,只是尚需修改尾指针或头指针。一般情况下,删除队列头元素时仅需修改头结点中的指针,但当队列中最后一个元素被删除后,队列尾指针也丢失了,因此,需要对队尾指针重新赋值〔指向头结点。

火车售票系统应用数据结构的知识有:链式线性表存储结构和队列。线性表的链式存储结构的特点:是用一组任意的存储单元存储线性表的数据元素,结点的一个域表示元素本身,另一个是能指示其后继的指针,用来表示线性表数据元素的逻辑关系。顺序表的可随机存取特点。我们将任务分成多个最简化的模块,增强了可读性和简单性,同时为日后的编写,调试,维护提供了极大地方便。队列的特点是:它只允许在表的一端进行插入,而在另一端进行删除元素。在火车售票系统中,我们把列车和客户分别作为一个结点,该结点类型为结构体型,结构体中的域表示列车和客户的属性。每个结点除了存放属性外,还存放指向后继结点的指针。列车基本信息管理:存储是将一个车次信息作为一个结点以链式存储在文件中。列车基本信息查询:在已有的火车售票系统中按地点,按车次,按车线查找到列车信息,并将其显示在屏幕上。订票管理:在原有的火车售票系统中查找到要订购的车次信息,并将该车次所在的结点输出。退票管理:根据查询功能查找出所要退票的车票信息,然后退票处理。2.2运行环境本程序的运行环境为MicrosoftVisualC++。开始→程序→MicrosoftVisualC++,创建工程名称,如图2-1所示。图2.1创建工程名在工程中选定文件类型,选择C++SourceFile,其界面如图2.2。图2.2文件类型新建完环境和文件类型之后,进入输入代码的界面,即工程环境,如下图2.3。图2.3工程环境第三章系统分析与设计及其实现3.2火车售票系统分析与设计3.2.1车票系统的功能本任务要求实现火车售票系统,输入火车基本信息以及客户信息,并将其存入文件中。根据需要可以进行如下操作:列车基本信息管理、列车基本信息查询、订票管理、退票管理。其功能模块图,如图3-5所示。图3-5车票售票系统模块图流程图如下。YYYYYYYY开始主菜单功能选择1?2?3?录入班次信息浏览班次信息查询行车路线选择查询按班次查询1?2?按终点查询3?4?售票与退票管理系统选择1?2?3?订票系统退票系统5?退出结束YYYN3.2.2系统模块分析及其流程图与函数〔1主函数声明/**********************************************/voidShowMessage<void>;/*载入原始数据*/voidmainmenu<void>;/*主菜单*/voidInputMessage<void>;/*录入班次信息*/voidSearchMenu<void>;/*查询路线子菜单*/voidSearchByNumber<void>;/*按班次号查询*/voidSearchByAddress<void>;/*按终点站查询*/voidTicketManagement<void>;/*车票售出与退回*/voidTicketOrder<void>;/*售票*/voidTicketDelete<void>;/*退票*/voidexit<void>;/*退出该系统*/voidSaveRecord<ticketx>;/*储存信息到文件中*/voidRead<void>;/**********************************************/在此定义所有将用到的函数,方便以后对函数的调用。〔2主菜单/*******************************************主菜单********************************************/intmain<void>{do{mainmenu<>;}while<FLAG==FALSE>;return0;}voidmainmenu<void>{system<"modecon:cols=140lines=130">;/*对运行是的界面大小做出规定*/charfunctionNumber;printf<"车票管理系统\n\n">;printf<"制作:吕齐吴明洋伍雪强\n">;printf<"日期:2011/4/08\n\n">;time_trawtime;structtm*timeinfo;time<&rawtime>;timeinfo=localtime<&rawtime>;printf<"当前时间:%d:%d",timeinfo->tm_hour,timeinfo->tm_min>;printf<"\n">;printf<"┏━━━━━━━━━━━━━━━━━━┓\n">;printf<"┃1.录入班次信息┃\t\n">;printf<"┃2.浏览班次信息┃\t\n">;printf<"┃3.查询行车路线┃\t\n">;printf<"┃4.售票与退票系统┃\t\n">;printf<"┃5.退出该系统┃\t\n">;printf<"┗━━━━━━━━━━━━━━━━━━┛\n">;printf<"__@__@__@__@__~@\n">;printf<"_`\<,__`\<,__`\<,__`\<,__`\<,_\n">;printf<"<*>/<*><*>/<*><*>/<*><*>/<*><*>/<*>\n">;printf<"\n">;/***************************************功能导入****************************************/printf<"请选择你所需要的功能:">;Read<>;scanf<"%c",&functionNumber>;switch<functionNumber>{case'1':{InputMessage<>;/*进入信息录入*/printf<"\n按任意键回主菜单\n">;getchar<>;getchar<>;}break;case'2':{//RecordNumber=ShowMessage<>;/*进入浏览信息*/ ShowMessage<>;printf<"\n按任意键回主菜单\n">;getchar<>;getchar<>;}break;case'3':{SearchMenu<>;/*进入查询子菜单*/printf<"\n按任意键回主菜单\n">;getchar<>;getchar<>;}break;case'4':{TicketManagement<>;/*进入票务管理*/getchar<>;getchar<>;}break;case'5':FLAG=TRUE;exit<>;break;default:{printf<"输入错误,请确保你的输入为1--5.\n">;/*输入操作失误,返回重新输入*/printf<"按任意键回主菜单\n">;getchar<>;getchar<>;}}FLAG=FALSE;}<2>列车信息录入列车信息录入是通过dowhile循环将所存储的列车基本信息存储在文件中,其顺序依次是车次、时间、始发站、终点站、行车时间、额定载额、已载人数。每次列车信息录入之后,用while循环来判断是否继续录入,其流程图如图3-6所示。/*******************************************录入信息函数*******************************************/voidInputMessage<void>{charyn;FILE*fp;/*再此添加引用文件*/inti=RecordNumber;if<<fp=fopen<"add.txt","a">>==NULL>/*如果文件为空,则文件打不开*/{printf<"不能打开文件\n">;return;}do{/*信息录入的"do-while"循环函数*/ printf<"车次:\n">; scanf<"%d",&train[i].SerialNumber>; printf<"发车时间:\n">; scanf<"%d:%d",&train[i].SetOut.hour,&train[i].SetOut.minutes>; if<train[i].SetOut.hour>23||train[i].SetOut.minutes>59>/*判断当前输入的列车时间是否有误*/ { printf<"输入时间有误,请重新输入\n">;/*输入有误则进行重新输入*/ getchar<>; } printf<"始发站:\n">; scanf<"%s",&train[i].DeparturePoint>; printf<"终点站:\n">; scanf<"%s",&train[i].TerminalPoint>; printf<"行车时间:\n">; scanf<"%f",&train[i].LastTime>; printf<"额定载量:\n">; scanf<"%d",&train[i].Edingzailiang>; printf<"已定票人数:\n">; scanf<"%d",&train[i].Yidingpiaorenshu>; if<train[i].Yidingpiaorenshu>train[i].Edingzailiang>/*判断此车票是否售完*/ { printf<"输入数据有误,请重新输入\n">; printf<"已定票人数:\n">; scanf<"%d",&train[i].Yidingpiaorenshu>; } fprintf<fp,"\n%d\t%d\t%d\t\t",train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes>;fprintf<fp,"%s\t%s\t\t%.1f\t%d\t\t%d",train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].Edingzailiang,train[i].Yidingpiaorenshu>;i++; getchar<>;printf<"是否继续?y/n\n">;yn=getchar<>;}while<yn=='Y'||yn=='y'>;/*对是否继续进行循环进行判断*/RecordNumber=i;fclose<fp>;/*运行完毕关闭文件*/return;}其功能实现图如图4-4所示。图4.4录入信息YYYYYYYY开始主菜单功能选择1?2?3?录入班次信息浏览班次信息查询行车路线选择查询按班次查询1?2?按终点查询3?4?售票与退票管理系统选择1?2?3?订票系统退票系统5?退出结束YYYN图3-6列车基本信息管理流程图<2>列车信息浏览列车信息浏览是将已有的火车售票系统中的各次火车信息显示在屏幕上。用户可以直观的看到所有的班次信息,方便用户查找所需的车次及路线。如图3-7所示。/***********************************************浏览信息函数***********************************************/voidShowMessage<void>{inti=0;FILE*fp;if<<fp=fopen<"add.txt","r">>==NULL>{printf<"读取数据失败,请检查文件add.txt是否存在.\n">;exit<-1>;}printf<"班次\t发车时间\t起点\t终点\t行车时间<小时>\t额定载量\t已定票人数\n">;for<i=0;i<=RecordNumber;i++>{printf<"%d\t%d:%d\t\t",train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes>;printf<"%s\t%s\t\t%.1f\t%d\t\t%d\t",train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].Edingzailiang,train[i].Yidingpiaorenshu>;/*******调用系统时间实现的功能:如果车已发出,则打出提示"此车已发出"******/time_trawtime;/*在此处引用能够调用系统时间的"time"结构体,调用系统时间*/structtm*timeinfo;time<&rawtime>;timeinfo=localtime<&rawtime>;if<<timeinfo->tm_hour==train[i].SetOut.hour&&timeinfo->tm_min>=train[i].SetOut.minutes>||<timeinfo->tm_hour>train[i].SetOut.hour>>/*将发车时间与此时系统时间作比较,判断此车是否发出*/printf<"此车已发出">;printf<"\n">;}fclose<fp>;/*运行完毕关闭文件*/return;}其功能实现图如图4-5所示。图4-5列车基本信息查询<3>车票信息查询在车票信息查询这个系统中,用户可以根据不同的需求来查找所需的班次信息,包括终点查询和班次查询,输入所需的班次或者终点站就会显示所有符合条件的车次信息了,用户就可以清楚直观的看到想要的车次了,其界面如图2.4。/******************************************查询子菜单*******************************************/voidSearchMenu<void>{system<"modecon:cols=140lines=130">;/*对运行是的界面大小做出规定*/charfunctionNumber;printf<"查询子菜单\n">;printf<"┏━━━━━━━━━━━━━━━━━━┓\t\n">;printf<"┃1.按班次号查询┃\t\n">;printf<"┃2.按终点站查询┃\t\n">;printf<"┃3.返回主菜单┃\t\n">;printf<"┗━━━━━━━━━━━━━━━━━━┛\n">;printf<"请选择你所需要的功能:">;scanf<"%*c%c",&functionNumber>;switch<functionNumber>{case'1':SearchByNumber<>;break;/*进入按班次查询*/case'2':SearchByAddress<>;break;/*进入按终点查询*/case'3':/*返回主菜单*/getchar<>;mainmenu<>;break;default:printf<"输入错误,请确保你的输入为1--3.\n">;/*输入操作有误提示*/printf<"按任意键回查询子菜单\n">;/*返回并重新输入*/getchar<>;SearchMenu<>;}}voidSearchByNumber<void>{intSearchNumber;printf<"请输入要查询的班次号:">;scanf<"%d",&SearchNumber>;printf<"班次\t发车时间\t起点\t终点\t行车时间<小时>\t额定载量\t已定票人数\n">;printf<"%d\t%d:%d\t\t",train[SearchNumber-1].SerialNumber,train[SearchNumber-1].SetOut.hour,train[SearchNumber-1].SetOut.minutes>;printf<"%s\t%s\t\t%.1f\t%d\t\t%d\n",train[SearchNumber-1].DeparturePoint,train[SearchNumber-1].TerminalPoint,train[SearchNumber-1].LastTime,train[SearchNumber-1].Edingzailiang,train[SearchNumber-1].Yidingpiaorenshu>;}voidSearchByAddress<void>{inti;charAddress[MAX];printf<"请输入终点站的名称:">;scanf<"%s",&Address>;printf<"班次\t发车时间\t起点\t终点\t行车时间<小时>\t额定载量\t已定票人数\n">;for<i=0;i<RecordNumber;i++>{//***************对比终点站记录,找到并输出**********if<<strcmp<Address,train[i].TerminalPoint>>==0>{printf<"%d\t%d:%d\t\t",train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes>;printf<"%s\t%s\t\t%.1f\t%d\t\t%d\n",train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].Edingzailiang,train[i].Yidingpiaorenshu>;}}}功能实现图如图4-6所示。图4-4列车基本信息管理<4>订票与退票管理订票管理是在原有的火车售票系统中查找到要订购的车票信息,如果有票,将该车票的发车时间与现在的时间做以比较,若车票的发车时间超过现在的时间,显示已发车;若没超过现在的时间,则可以实现订票。退票管理是在原有的火车订票系统中查找到要退票的车票信息,将该车票的发车时间与现在的时间做以比较,若车票的发车时间超过现在的时间,显示已发车,不能完成退票;若没超过现在的时间,则可以实现退票。其流程图如下。图2.2订票管理流程图图3-11退票管理流程图/*****************************************票务管理函数*****************************************/voidTicketManagement<void>{charfunctionNumber;system<"modecon:cols=140lines=130">;printf<"订票与退票菜单\n">;printf<"┏━━━━━━━━━━━━━━━━━━┓\n">;printf<"┃1.订票┃\t\n">;printf<"┃2.退票┃\t\n">;printf<"┃3.返回主菜单┃\t\n">;printf<"┗━━━━━━━━━━━━━━━━━━┛\n">;printf<"选择你需要的功能:">;scanf<"%*c%c",&functionNumber>;switch<functionNumber>{case'1':TicketOrder<>;break;case'2':TicketDelete<>;break;case'3':{getchar<>;mainmenu<>;}break;default:{printf<"输入错误,请确保你的输入为1--3.\n">;printf<"按任意键返回\n">;getchar<>;TicketManagement<>;}}}voidTicketOrder<void>{inti;time_trawtime;structtm*timeinfo;printf<"请输入要订购的车票的班次:">;scanf<"%d",&i>;printf<"i=%d\n",i>;if<i<1||i>RecordNumber+1>{printf<"对不起,今天没有这趟车,请明天再来,谢谢使用!\n">;printf<"按任意键回主菜单\n">;getchar<>;mainmenu<>;}time<&rawtime>;timeinfo=localtime<&rawtime>;printf<"ff=%d\n",timeinfo->tm_hour>;if<<timeinfo->tm_hour==train[i-1].SetOut.hour&&timeinfo->tm_min<train[i-1].SetOut.minutes>||<timeinfo->tm_hour<train[i-1].SetOut.hour>>{if<train[i-1].Yidingpiaorenshu<train[i-1].Edingzailiang>{<train[i-1].Yidingpiaorenshu>++;printf<"你的订票成功,请按时上车,谢谢使用!\n">;}elseprintf<"对不起,今天的这趟车的票已卖完,请明天再来,谢谢合作!\n">;}elseprintf<"对不起,今天的这趟车已发出,请明天再来,谢谢合作!\n">;printf<"班次\t发车时间\t起点\t终点\t行车时间<小时>\t额定载量\t已定票人数\n">;printf<"%d\t%d:%d\t\t",train[i-1].SerialNumber,train[i-1].SetOut.hour,train[i-1].SetOut.minutes>;printf<"%s\t%s\t\t%.1f\t%d\t\t%d\n",train[i-1].DeparturePoint,train[i-1].TerminalPoint,train[i-1].LastTime,train[i-1].Edingzailiang,train[i-1].Yidingpiaorenshu>;printf<"按任意键回主菜单\n">;getchar<>;getchar<>;mainmenu<>;}voidTicketDelete<void>{inti;printf<"请输入要退购的车票的班次:">;scanf<"%d",&i>;if<i<1||i>RecordNumber+1>{printf<"对不起,今天没有这趟车,无法完成退票.谢谢使用!\n">;getchar<>;getchar<>;TicketManagement<>;}time_trawtime;structtm*timeinfo;time<&rawtime>;timeinfo=localtime<&rawtime>;if<<timeinfo->tm_hour==train[i-1].SetOut.hour&&timeinfo->tm_min<train[i-1].SetOut.minutes>||<timeinfo->tm_hour<train[i-1].SetOut.hour>>{if<train[i-1].Yidingpiaorenshu>=1>{train[i-1].Yidingpiaorenshu-=1;printf<"退订车票成功,谢谢使用!\n">;}elseprintf<"对不起,今天的这趟车的票尚未卖出,无法完成退票!\n">;}elseprintf<"对不起,今天的这趟车已发出,无法完成退票!\n">;printf<"班次\t发车时间\t起点\t终点\t行车时间<小时>\t额定载量\t已定票人数\n">;printf<"%d\t%d:%d\t\t",train[i-1].SerialNumber,train[i-1].SetOut.hour,train[i-1].SetOut.minutes>;printf<"%s\t%s\t\t%.1f\t%d\t\t%d\n",train[i-1].DeparturePoint,train[i-1].TerminalPoint,train[i-1].LastTime,train[i-1].Edingzailiang,train[i-1].Yidingpiaorenshu>;printf<"按任意键回主菜单\n">;getchar<>;getchar<>;mainmenu<>;}voidexit<void>{printf<"\n\n*********************谢谢使用本系统,欢迎下次继续使用***********************\n">;exit<0>;}voidSaveRecord<ticketx>{FILE*fp;if<<fp=fopen<"add.txt","a">>==NULL>{printf<"打开文件%s失败\n","add.txt">;exit<-1>;}fprintf<fp,"\n%d\t%d\t%d\t\t",x.SerialNumber,x.SetOut.hour,x.SetOut.minutes>;fprintf<fp,"%s\t%s\t\t%.1f\t%d\t\t%d",x.DeparturePoint,x.TerminalPoint,x.LastTime,x.Edingzailiang,x.Yidingpiaorenshu>;}voidRead<void>{inti;FILE*fp;if<<fp=fopen<"add.txt","r">>==NULL>{exit<-1>;}for<i=0;!feof<fp>;i++>{fscanf<fp,"%d%d%d",&train[i].SerialNumber,&train[i].SetOut.hour,&train[i].SetOut.minutes>;fscanf<fp,"%s%s%f%d%d",train[i].DeparturePoint,train[i].TerminalPoint,&train[i].LastTime,&train[i].Edingzailiang,&train[i].Yidingpiaorenshu>;}i--;RecordNumber=i;fclose<fp>;return;}其功能实现图如图4-7所示。图4-6订票管理图4-7退票管理第四章系统功能实现4.1火车售票系统功能实现4.1.1定义主函数/**********************************************/voidShowMessage<void>;/*载入原始数据*/voidmainmenu<void>;/*主菜单*/voidInputMessage<void>;/*录入班次信息*/voidSearchMenu<void>;/*查询路线子菜单*/voidSearchByNumber<void>;/*按班次号查询*/voidSearchByAddress<void>;/*按终点站查询*/voidTicketManagement<void>;/*车票售出与退回*/voidTicketOrder<void>;/*售票*/voidTicketDelete<void>;/*退票*/voidexit<void>;/*退出该系统*/voidSaveRecord<ticketx>;/*储存信息到文件中*/voidRead<void>;/**********************************************/在此定义所有将用到的函数,方便以后对函数的调用。4.1.2主菜单函数/*******************************************主菜单********************************************/intmain<void>{do{mainmenu<>;}while<FLAG==FALSE>;return0;}voidmainmenu<void>{system<"modecon:cols=140lines=130">;/*对运行是的界面大小做出规定*/charfunctionNumber;printf<"车票管理系统\n\n">;printf<"制作:吕齐吴明洋伍雪强\n">;printf<"日期:2011/4/08\n\n">;time_trawtime;structtm*timeinfo;time<&rawtime>;timeinfo=localtime<&rawtime>;printf<"当前时间:%d:%d",timeinfo->tm_hour,timeinfo->tm_min>;printf<"\n">;printf<"┏━━━━━━━━━━━━━━━━━━┓\n">;printf<"┃1.录入班次信息┃\t\n">;printf<"┃2.浏览班次信息┃\t\n">;printf<"┃3.查询行车路线┃\t\n">;printf<"┃4.售票与退票系统┃\t\n">;printf<"┃5.退出该系统┃\t\n">;printf<"┗━━━━━━━━━━━━━━━━━━┛\n">;printf<"__@__@__@__@__~@\n">;printf<"_`\<,__`\<,__`\<,__`\<,__`\<,_\n">;printf<"<*>/<*><*>/<*><*>/<*><*>/<*><*>/<*>\n">;printf<"\n">;其功能实现图如图4-3所示。图4-3主菜单界面4.1.2列车信息录入/*******************************************录入信息函数*******************************************/voidInputMessage<void>{charyn;FILE*fp;/*再此添加引用文件*/inti=RecordNumber;if<<fp=fopen<"add.txt","a">>==NULL>/*如果文件为空,则文件打不开*/{printf<"不能打开文件\n">;return;}do{/*信息录入的"do-while"循环函数*/ printf<"车次:\n">; scanf<"%d",&train[i].SerialNumber>; printf<"发车时间:\n">; scanf<"%d:%d",&train[i].SetOut.hour,&train[i].SetOut.minutes>; if<train[i].SetOut.hour>23||train[i].SetOut.minutes>59>/*判断当前输入的列车时间是否有误*/ { printf<"输入时间有误,请重新输入\n">;/*输入有误则进行重新输入*/ getchar<>; } printf<"始发站:\n">; scanf<"%s",&train[i].DeparturePoint>; printf<"终点站:\n">; scanf<"%s",&train[i].TerminalPoint>; printf<"行车时间:\n">; scanf<"%f",&train[i].LastTime>; printf<"额定载量:\n">; scanf<"%d",&train[i].Edingzailiang>; printf<"已定票人数:\n">; scanf<"%d",&train[i].Yidingpiaorenshu>; if<train[i].Yidingpiaorenshu>train[i].Edingzailiang>/*判断此车票是否售完*/ { printf<"输入数据有误,请重新输入\n">; printf<"已定票人数:\n">; scanf<"%d",&train[i].Yidingpiaorenshu>; } fprintf<fp,"\n%d\t%d\t%d\t\t",train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes>;fprintf<fp,"%s\t%s\t\t%.1f\t%d\t\t%d",train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].Edingzailiang,train[i].Yidingpiaorenshu>;i++; getchar<>;printf<"是否继续?y/n\n">;yn=getchar<>;}while<yn=='Y'||yn=='y'>;/*对是否继续进行循环进行判断*/RecordNumber=i;fclose<fp>;/*运行完毕关闭文件*/return;}其功能实现图如图4-4所示。图4.4录入信息列车信息浏览/***********************************************浏览信息函数***********************************************/voidShowMessage<void>{inti=0;FILE*fp;if<<fp=fopen<"add.txt","r">>==NULL>{printf<"读取数据失败,请检查文件add.txt是否存在.\n">;exit<-1>;}printf<"班次\t发车时间\t起点\t终点\t行车时间<小时>\t额定载量\t已定票人数\n">;for<i=0;i<=RecordNumber;i++>{printf<"%d\t%d:%d\t\t",train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes>;printf<"%s\t%s\t\t%.1f\t%d\t\t%d\t",train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].Edingzailiang,train[i].Yidingpiaorenshu>;/*******调用系统时间实现的功能:如果车已发出,则打出提示"此车已发出"******/time_trawtime;/*在此处引用能够调用系统时间的"time"结构体,调用系统时间*/structtm*timeinfo;time<&rawtime>;timeinfo=localtime<&rawtime>;if<<timeinfo->tm_hour==train[i].SetOut.hour&&timeinfo->tm_min>=train[i].SetOut.minutes>||<timeinfo->tm_hour>train[i].SetOut.hour>>/*将发车时间与此时系统时间作比较,判断此车是否发出*/printf<"此车已发出">;printf<"\n">;}fclose<fp>;/*运行完毕关闭文件*/return;}其功能实现图如图4-5所示。图4-5列车基本信息查询车票信息查询/******************************************查询子菜单*******************************************/voidSearchMenu<void>{system<"modecon:cols=140lines=130">;/*对运行是的界面大小做出规定*/charfunctionNumber;printf<"查询子菜单\n">;printf<"┏━━━━━━━━━━━━━━━━━━┓\t\n">;printf<"┃1.按班次号查询┃\t\n">;printf<"┃2.按终点站查询┃\t\n">;printf<"┃3.返回主菜单┃\t\n">;printf<"┗━━━━━━━━━━━━━━━━━━┛\n">;printf<"请选择你所需要的功能:">;scanf<"%*c%c",&functionNumber>;switch<functionNumber>{case'1':SearchByNumber<>;break;/*进入按班次查询*/case'2':SearchByAddress<>;break;/*进入按终点查询*/case'3':/*返回主菜单*/getchar<>;mainmenu<>;break;default:printf<"输入错误,请确保你的输入为1--3.\n">;/*输入操作有误提示*/printf<"按任意键回查询子菜单\n">;/*返回并重新输入*/getchar<>;SearchMenu<>;}}voidSearchByNumber<void>{intSearchNumber;printf<"请输入要查询的班次号:">;scanf<"%d",&SearchNumber>;printf<"班次\t发车时间\t起点\t终点\t行车时间<小时>\t额定载量\t已定票人数\n">;printf<"%d\t%d:%d\t\t",train[SearchNumber-1].SerialNumber,train[SearchNumber-1].SetOut.hour,train[SearchNumber-1].SetOut.minutes>;printf<"%s\t%s\t\t%.1f\t%d\t\t%d\n",train[SearchNumber-1].DeparturePoint,train[SearchNumber-1].TerminalPoint,train[SearchNumber-1].LastTime,train[SearchNumber-1].Edingzailiang,train[SearchNumber-1].Yidingpiaorenshu>;}voidSearchByAddress<void>{inti;charAddress[MAX];printf<"请输入终点站的名称:">;scanf<"%s",&Address>;printf<"班次\t发车时间\t起点\t终点\t行车时间<小时>\t额定载量\t已定票人数\n">;for<i=0;i<RecordNumber;i++>{//***************对比终点站记录,找到并输出**********if<<strcmp<Address,train[i].TerminalPoint>>==0>{printf<"%d\t%d:%d\t\t",train[i].SerialNumber,train[i].SetOut.hour,train[i].SetOut.minutes>;printf<"%s\t%s\t\t%.1f\t%d\t\t%d\n",train[i].DeparturePoint,train[i].TerminalPoint,train[i].LastTime,train[i].Edingzailiang,train[i].Yidingpiaorenshu>;}}}功能实现图如图4-6所示。图4-4列车基本信息管理订票与退票管理退票管理是在原有的火车订票系统中查找到要退票的车票信息,如果给火车票没有过期,将该车票所在的结点进行退票处理。根据查询功能查找出所要退票的车票信息,先判断链表是否为空,若为空,返回主菜单;若不为空,看是否过期,若过期,输出退票失败,否则对该结点进行退票操作。源代码如下:/*****************************************票务管理函数*****************************************/voidTicketManagement<void>{charfunctionNumber;system<"modecon:cols=140lines=130">;printf<"订票与退票菜单\n">;printf<"┏━━━━━━━━━━━━━━━━━━┓\n">;printf<"┃1.订票┃\t\n">;printf<"┃2.退票┃\t\n">;printf<"┃3.返回主菜单┃\t\n">;printf<"┗━━━━━━━━━━━━━━━━━━┛\n">;printf<"选择你需要的功能:">;scanf<"%*c%c",&functionNumber>;switch<functionNumber>{case'1':TicketOrder<>;break;case'2':TicketDelete<>;break;case'3':{getchar<>;mainmenu<>;}break;default:{printf<"输入错误,请确保你的输入为1--3.\n">;printf<"按任意键返回\n">;getchar<>;TicketManagement<>;}}}voidTicketOrder<void>{inti;time_trawtime;structtm*timeinfo;printf<"请输入要订购的车票的班次:">;scanf<"%d",&i>;printf<"i=%d\n",i>;if<i<1||i>RecordNumber+1>{printf<"对不起,今天没有这趟车,请明天再来,谢谢使用!\n">;printf<"按任意键回主菜单\n">;getchar<>;mainmenu<>;}time

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论