车票管理系统
车票管理系统程序设计报告

车票管理系统程序设计报告一、引言车票管理系统是一个用于管理车票信息的软件系统。
该系统旨在提供方便快捷的购票、查询、退票等功能,以满足用户的出行需求。
本报告将详细介绍车票管理系统的设计思路、功能模块、数据结构以及程序实现等内容。
二、需求分析1. 功能需求车票管理系统需要具备以下功能:- 用户注册与登录:用户可以通过注册账号并登录系统,以便进行购票、查询等操作。
- 车票购买:用户可以根据出发地、目的地、日期等条件查询车票,并进行购买。
- 车票查询:用户可以根据出发地、目的地、日期等条件查询车票的余票情况。
- 车票退票:用户可以在购票后一定时间内申请退票,并进行退款。
- 车票管理:管理员可以对车票信息进行管理,包括添加、修改、删除等操作。
2. 性能需求车票管理系统需要满足以下性能需求:- 响应速度:系统应能够在用户购票、查询等操作时快速响应,提供流畅的用户体验。
- 安全性:系统应具备一定的安全机制,保护用户的个人信息和交易数据不被泄露或篡改。
- 扩展性:系统应具备一定的扩展性,方便后续对功能进行升级和扩展。
三、系统设计1. 架构设计车票管理系统采用三层架构设计,包括表示层、业务逻辑层和数据访问层。
表示层负责与用户进行交互,接收用户的请求并展示相应的界面;业务逻辑层负责处理用户的请求,进行业务逻辑的处理;数据访问层负责与数据库进行交互,进行数据的读取和写入操作。
2. 功能模块设计车票管理系统包括以下功能模块:- 用户模块:负责用户的注册、登录、个人信息管理等操作。
- 车票模块:负责车票的购买、查询、退票等操作。
- 管理员模块:负责管理员对车票信息的管理操作。
3. 数据结构设计车票管理系统的数据结构包括以下表:- 用户表:保存用户的基本信息,包括用户名、密码、手机号等。
- 车票表:保存车票的详细信息,包括车次、出发地、目的地、日期、余票数量等。
- 订单表:保存用户购票的订单信息,包括用户ID、车票ID、购票时间等。
车票管理系统实习报告

一、实习背景随着社会经济的快速发展,人们的出行需求日益增加,车票管理系统作为现代化交通工具的重要组成部分,其重要性不言而喻。
为了提高车票管理效率,减少人工操作带来的不便,我国各大交通部门纷纷研发和实施车票管理系统。
本人在实习期间,有幸参与了某汽车站车票管理系统的设计与开发,以下为实习报告。
二、实习目的1. 熟悉车票管理系统的基本概念、设计原则和开发流程。
2. 掌握C语言编程技术,提高编程能力。
3. 了解数据库技术,提高数据库应用能力。
4. 培养团队协作和沟通能力。
三、实习内容1. 系统需求分析在实习初期,我首先对车票管理系统进行了需求分析。
通过对汽车站售票业务的了解,我发现车票管理系统应具备以下功能:(1)车次信息管理:录入、修改、删除车次信息,包括车次号、发车时间、起点站、终点站、行车时间、额定载客量等。
(2)票务信息管理:录入、修改、删除票务信息,包括车票号、票价、座位号、乘客姓名、联系方式等。
(3)售票查询:根据车次、时间、站点等信息查询车票信息。
(4)售票操作:进行售票、退票、改签等操作。
(5)统计报表:生成售票统计报表,包括车次售票情况、票价统计、售票员业绩等。
2. 系统设计在需求分析的基础上,我进行了系统设计。
系统采用模块化设计,主要包括以下模块:(1)数据模块:负责数据的存储、检索和更新。
(2)功能模块:实现售票、查询、统计等功能。
(3)界面模块:提供用户界面,方便用户进行操作。
3. 系统实现在系统实现阶段,我主要使用C语言进行编程,并结合数据库技术实现系统功能。
具体如下:(1)数据模块:采用关系型数据库MySQL存储数据,设计数据库表结构,实现数据的增删改查。
(2)功能模块:编写售票、查询、统计等功能模块的代码,实现系统功能。
(3)界面模块:使用C语言中的图形界面库,如GTK+等,设计用户界面。
4. 系统测试与优化在系统开发完成后,我对系统进行了测试和优化。
主要测试内容包括:(1)功能测试:验证系统功能是否满足需求。
c语言车票管理系统实验报告

《车票管理系统》课程设计报告题目:车票管理系统专业:信息与计算科学班级: 1002 学号:姓名:陈婉璐包忠材邱振涛指导教师:吴选忠熊保平完成日期: 2011年12月23日一、课程设计目的本课程设计的目标就是要达到理论与实际应用相结合,提高学生组织数据及编写大型程序的能力,并培养基本的、良好的程序设计技能以及合作能力。
设计中要求综合运用所学知识,上机解决一些与实际应用结合紧密的、规模较大的问题,通过分析、设计、编码、调试等各环节的训练,使学生深刻理解、牢固掌握数据结构和算法设计技术,掌握分析、解决实际问题的能力。
通过这次设计,要在程序设计方法以及上机操作等基本技能和科学作风方面受到比较系统和严格的训练。
二、课程设计内容一.系统的主要功能:1.浏览班次信息2.查询班次:①按班次查询;②按终点查询;3.售票(1)售票成功(当车票有剩余,且车未发出时)(2)班次不存在(3)票已售完(当座位数小于等于已定票人数)(4)车已发出4.退票退票成功(输入的班次号存在且当前时间比发车时间早)退票失败(班次不存在或当前时间比发车时间晚)三、课程设计过程1.需求分析(1) 输入的形式和输入值的范围;录入的班次信息的输入形式和输入值的范围:车次(类型:int)发车时间小时(类型:int [0,24])发车时间分钟(类型:int [0,60])起始站及终点站(类型:void wap(int k))行车时间(类型:float times(int k))额定票数(类型:number(int k))已定票人数(类型:nownumber(int k,int i))(2) 输出的形式;printf(3) 程序所能达到的功能;①录入详细的班次信息(发车时间,起点,终点站,行车时间,额定票数,订票人数,是否已发车……);②浏览班次信息,可显示出所有班次当前状总(如果当前系统时间超过了某班次的发车时间,则显示“此班已发出”的提示信息)。
车票管理系统

车票管理系统⒈引言⑴目的本文档旨在介绍车票管理系统的设计和功能,包括系统的概述、功能需求、非功能需求、系统架构、用户界面设计、数据模型等。
⑵范围车票管理系统是一个用于管理车票销售、查询、退票的软件系统。
该系统可以提供便捷的购票、查询和退票功能,方便用户使用。
⒉概述⑴系统背景随着交通网络的发展,车票的销售量也逐渐增加。
为了满足用户对购票、查询和退票的需求,开发一个功能完善、易于使用的车票管理系统势在必行。
⑵功能车票管理系统将包括以下主要功能:●用户注册与登录●车票购买●车票查询●车票退票●管理员功能:车次管理、用户管理、车站管理等⒊功能需求⑴用户注册与登录用户可以通过注册账号并登录系统,以便进行车票购买、查询和退票等操作。
⑵车票购买用户可以选择车次、座位类型、乘车日期和出发站点来购买车票。
购买成功后,系统将有效的车票。
⑶车票查询用户可以根据出发站点、目的站点和乘车日期等条件来查询车票信息,包括车票余量、票价等。
⑷车票退票用户可以在规定的时间范围内申请退票,并按照规定的退票规则进行操作。
⑸管理员功能管理员可以管理车次信息,包括添加、编辑、删除车次。
管理用户信息,包括查看用户购票记录。
管理车站信息,包括添加、编辑、删除车站。
⒋非功能需求⑴性能系统应具备高并发处理能力,可以同时处理大量用户的购票、查询和退票请求。
⑵可靠性系统应具备高可靠性,能够保证购票、查询和退票等功能的正常运行,避免数据丢失或出错。
⑶安全性系统应具备良好的安全性,保护用户的个人信息和支付信息不被泄露。
⒌系统架构车票管理系统将使用客户端-服务器架构,其中客户端通过网页浏览器访问服务器端提供的服务。
⒍用户界面设计车票管理系统的用户界面应简洁、直观,方便用户进行操作。
设计应符合通用的界面规范,保持一致性和易用性。
⒎数据模型车票管理系统的数据模型将包括以下实体:●用户:保存用户信息,包括用户名、密码、姓名、方式号等。
●车次:保存车次信息,包括车次编号、出发站点、目的站点、出发时间、到达时间等。
火车票管理系统

火车票管理系统火车票管理系统文档⒈引言本文档旨在介绍火车票管理系统的功能、设计和使用方法。
该系统是为了方便用户购买、查询和管理火车票而开发的,使用户能够更加便捷地进行出行安排。
⒉系统概述⑴系统功能火车票管理系统提供以下主要功能:- 用户注册与登录:用户可以注册新账号,并使用注册信息登录系统。
- 车次查询与预订:用户可以根据出发地、目的地和出发日期等条件查询火车车次,并进行车票预订。
- 车票购买与支付:用户可以选择预订的车票进行购买,并使用合适的支付方式完成支付。
- 车票退订与退款:用户在一定时间范围内可以取消已购的车票,并申请退款。
- 车票改签:用户在一定时间范围内可以申请对已购车票的改签。
- 个人信息管理:用户可以查看、修改个人信息,并查看自己的购票记录。
- 管理员功能:管理员可以管理系统的用户信息、车次信息和订单信息。
⑵用户角色本系统包含以下几种用户角色:- 普通用户:可以进行车次查询、预订和购票等操作。
- 管理员:可以管理系统的用户信息、车次信息和订单信息。
⒊系统设计⑴系统架构火车票管理系统的架构如下图所示:(插入系统架构图)⑵数据库设计系统的核心数据结构包括以下表:- 用户表:保存用户的注册信息和个人信息。
- 车次表:保存火车车次的相关信息,如车次号、起始站、终点站、票价等。
- 订单表:保存用户购买和预订的车票订单信息。
⑶页面设计系统的主要页面包括以下几个:- 登录页:用户输入账号和密码进行登录。
- 注册页:用户填写注册信息进行账号注册。
- 车次查询页:用户输入查询条件进行车次查询。
- 车次详情页:展示选择的车次的具体信息和预订功能。
- 购票页:用户选择座位类型和支付方式进行购票。
- 个人中心页:用户查看个人信息和购票记录,进行车票退订和改签等操作。
- 管理员页面:管理员管理用户信息、车次信息和订单信息。
⒋使用方法⑴用户注册与登录用户可以通过注册页进行账号注册,填写必要的信息后提交注册申请。
火车票网上购票管理系统数据库系统分析与设计

火车票网上购票管理系统数据库系统分析与设计一、数据库需求分析1.用户需求:-用户可以通过系统注册和登录账号。
-用户可以查询火车班次及票价信息。
-用户可以选择购买火车票,并完成支付。
-用户可以查看已购买的火车票信息。
2.管理员需求:-管理员可以添加、修改和删除火车班次信息。
-管理员可以查询用户购票信息。
3.系统需求:-系统需要存储用户账号和密码信息。
-系统需要存储火车班次信息,包括班次号、起始站、终点站、出发时间、到达时间、票价等。
-系统需要存储用户购票信息,包括用户ID、班次号、座位号、购票时间等。
二、数据库设计根据以上需求,可以设计以下数据库表结构:1. 用户表(User)- 用户ID(UserID,主键)- 用户名(Username)- 密码(Password)2. 火车班次表(Train)- 班次号(TrainID,主键)- 起始站(StartStation)- 终点站(EndStation)- 出发时间(DepartureTime)- 到达时间(ArrivalTime)- 票价(Price)3. 火车票表(Ticket)- 票号(TicketID,主键)- 用户ID(UserID,外键,关联User表的UserID)- 班次号(TrainID,外键,关联Train表的TrainID) - 座位号(SeatNumber)- 购票时间(PurchaseTime)三、系统架构设计根据数据库设计,可以初步设计系统架构如下:1.前端页面:包括注册、登录、查询火车班次、购票、查看订单等页面。
2.后端服务:实现用户注册、登录、查询火车班次、购票、查看订单等功能,调用数据库进行数据操作。
3.数据库:存储用户信息、火车班次信息、订单信息等数据。
四、数据库操作根据数据库设计,可以设计以下数据库操作:1.用户相关操作:- 用户注册:向User表中插入新的用户信息。
- 用户登录:查询User表中的用户名和密码信息进行验证。
火车票售票管理系统 (3)

火车票售票管理系统介绍火车票售票管理系统是一个用于管理火车票售票、订单管理和客户信息的软件系统。
该系统提供了一个方便快捷的平台,使用户能够在线浏览、预订和购买火车票,并对订单进行管理和查询。
功能1. 火车票查询用户可以通过系统提供的火车票查询功能查找目标日期和路线的火车票。
用户可以输入出发地、目的地和日期等信息来查找合适的火车票。
查询结果包括列车的发车时间、到达时间、车次、票价和余票数量等。
2. 火车票预订用户可以查看到的火车票信息后进行预订。
用户需要输入乘车人的信息,并选择座位类型和票数进行预订。
系统会根据用户的选择自动生成订单号,并提供支付链接进行付款。
3. 订单管理用户可以在系统中管理自己的订单。
用户可以查看订单详情,包括订单号、乘车人信息、座位类型、票价和支付状态等。
用户还可以取消未支付的订单,并根据需要重新预订。
4. 客户信息管理系统提供了客户信息管理功能,用户可以在系统中维护个人信息。
用户可以修改个人信息,包括姓名、性别、手机号码和电子邮箱等。
用户也可以查看自己的历史订单和购票记录。
5. 系统管理系统管理员可以对火车票售票管理系统进行管理。
管理员可以管理火车票信息,包括添加新的火车车次、修改票价和调整余票数量等。
管理员还可以管理用户信息,包括添加新用户、修改用户信息和删除用户等。
架构火车票售票管理系统的架构包括前端和后端两部分。
前端前端使用HTML、CSS和JavaScript编写,采用响应式设计,能够在不同终端设备上良好地展示。
前端实现了用户界面和交互逻辑,包括火车票查询、预订、订单管理和客户信息管理等功能。
后端后端使用Java编程语言开发,采用Spring框架和Spring Boot技术,实现了业务逻辑和数据交互。
后端处理用户请求,调用相应的服务进行数据处理和查询,并将结果返回给前端。
数据库设计火车票售票管理系统使用关系型数据库存储数据。
数据库中包括以下主要表:用户表存储用户的个人信息,包括用户ID、姓名、性别、手机号码和电子邮箱等。
火车票管理系统

火车票管理系统火车票管理系统是一款基于网络技术和信息管理技术的管理系统,它可以对火车票的销售和管理进行全面的控制和监督。
目前,火车票管理系统已经被广泛地应用于火车票售卖、系统自动调度、车站售票、售票员管理、旅客管理等方面。
1. 系统概述火车票管理系统是一种基于现代网络技术和信息管理技术的高效、灵活、安全、完整的软件系统,它由火车票售卖、系统调度、售票员管理、旅客管理等模块组成。
该系统能够提供安全、准确、高效的售票服务,保证了火车票售卖的正常运作。
2. 功能介绍2.1 火车票售卖管理火车票售卖管理是该系统的核心模块。
在这个模块中,用户可以进行火车票查询、购票、退票、改签等功能。
用户可以输入出发地、目的地和乘车日期等信息查询车票。
如果有余票,乘客可以通过本系统在线购票。
如果乘客需要退票或更改,也可以在线操作,在规定的时间内取消或改签订单。
2.2 系统自动调度模块系统自动调度模块利用网络技术和信息管理技术自动安排日程安排和行程规划。
通过该模块,系统可以将不同地域、不同出发时间、不同的乘客等信息进行分析和计算,自动调度出合适的车次和座位,避免了人工计算所带来的时间和人为成本。
2.3 车站售票管理车站售票管理是该系统的重要组成部分。
在该模块中,车站售票员可以对售票、退票、改签、延误等问题进行处理,保证了每个乘客的行程顺利进行。
2.4 售票员管理售票员管理是该系统的另一个重要组成部分。
在该模块中,可以对售票员的信息进行管理,包括姓名、工号、部门、权限等。
通过该模块可以保证系统的稳定性、安全性、高效性等方面的优良表现。
2.5 旅客管理旅客管理是一个基于用户信息的管理模块。
用户通过本系统时必须进行身份认证,通过系统为其建立个人档案,包括姓名、身份证号码、联系方式等信息。
在旅行过程中,系统会根据乘客的行程记录其乘车信息、购票人数等信息,以便于车站售票员进行快捷查找,将其与票据信息进行核对,确保车站和车上护照的总透明。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
一、课程设计的内容车票管理系统一车站每天有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语言进行程设计的能力;2、进一步理解和运用结构化程序设计的思想和方法;3、初步掌握开发一个小型实用系统的基本方法;4、学会调试一个较长程序的基本方法;5、学会利用流程图或N-S图表示算法;6、掌握书写程序设计开发文档的能力。
三、课程设计应完成的工作1、编写完成相应题目的程序;2、编写课程设计报告,课程设计报告的内容应包括以下6个部分:1) 需求分析:包括设计题目、设计要求以及系统功能需求分析;2) 总体设计:包括系统总体设计框架和系统功能模块图;3) 详细设计:包括主要功能模块的算法设计思路以及对应的工作流程图;4) 调试分析过程描述:包括测试数据、测试输出结果,以及对程序调试过程中存在问题的思考(列出主要问题的出错现象、出错原因、解决方法及效果等,适当的包含结果截图);5) 总结:课程设计完成了哪些功能,有没有什么扩展功能?还有哪些地方需要改进?课程设计过程中的学习体会与收获、对本次课程设计的认识以及自己的建议等内容;6) 附录:主要源程序代码,含必要的注释。
3、答辩:在实验室建立程序运行的环境,并在指导教师的监督下,独立解决问题、运行程序和回答教师提出的问题。
目录第一章目的与要求 (5)第二章总体设计 (6)第三章详细设计 (9)3.1功能模块设计 (9)3.2数据结构设计 (11)第四章调试分析 (12)第五章总结 (14)第六章附录 (15)参考文献 (25)第一章目的与要求编写目的:便于车站管理部门对汽车班次信息的统计和管理,提高车站部门的工作效率,能够更好的为市民服务,同时也便于旅客了解相关的信息,方便出行。
要求:1.能够录入汽车班次信息,如班次号,发车时间,起点站,终点站,行车时间,额载量,已订票人数等。
2.能够浏览班次信息,显示信息总和(如果已发出站的要要显示“已经开出”)。
3.查询路线:可按班次号查询 ,可按终点站查询。
4.售票功能:当查询出已定票人数小于额定载量且当前系统时间小于发车时间才能售票,自动更新已售票人数。
5.退票功能:输入退票的班次,当本班车未发出时才能退票,自动更新已售票人数。
第二章总体设计1)系统总体设计框架2)主要功能流程图:录入班次信息功能流程图:浏览班次功能流程图:第三章详细设计3.1功能模块设计3.1.1售票函数while(选择的是“Y”){打印当前时间打印“班次发车时间起点站终点站行车时间额定载量已定票人数”for(){输出班次信息』提示输入车的班次}if(当查询出已定票人数小于额定载量且当前系统时间小于发车时间时){提示售票成功!订票人数加1;}IF(额定载量小于订票人数){提示票已售完!;}else if(输入的班次号小于零){该车不存在!}else if(当前系统时间晚于发车时间){提示车已发出!}提示继续售票按Y,按任意键返回主菜单!输入一个字符;}}3.1.2退票函数while(输入的是Y的时候){提示输入要退票的车次;输入一个字符;}if(输入的班次号存在和系统时间比发车时间晚) {订票人数-1;提示退票成功!}else if(输入的班次号小于零)提示该班次不存在!;)else if(要退票的那辆车的发车时间早过现在系统时间) {提示车已发出不能退票!;提示继续退票请按(Y),返回主菜单按任意键;输入一个字符;}}3.1.3菜单函数{打印“车票管理系统”;打印“系统时间”;打印“录入班次信息”;打印“查询班次信息”;打印“售票”;打印“退票”;打印“保存车次信;";打印“退出系统”;打印“请选择(0--6)”;打印“车票管理系统;得到一个字符;返回值;}3.2数据结构设计(可选)程序中涉及的数据过多,本人决定采用两个结构体处理数据。
其中时间为一个数据结构体(即结构1),它又是汽车结构体(即结构2)的一个成员元素,这样处理数据容易些。
第四章调试分析本人在写代码的过程中觉得难控制的是那个班次数。
因为本系统提供了个录入信息功能,可以不定时的增加班次,即这个班次数是不确定的。
而这个班次数又影响到查询函数,退票函数,售票函数等,另外还影响到一些功能小函数,如比较时间函数等。
经过上网查找资料,我发现有一个巧妙的方法可以解决这个问题,即设定一个静态局部变量(即代码中的H),这样每当班次号改变之后这个H的值就和它的班次号一样大,这样就可以解决之前提到的问题了。
另外,这个系统要有一个保存文件功能,由于本人对文件保存处理不清楚,设计过程中一直搞不明白。
最后在网上查到了相关信息才可以弄出。
以下是该程序运行的部分结果:主界面:信息录入图和浏览时刻表:查询售票图:退票图:保存信息图:第五章总结经历近几天的学习和锻炼,这个车票管理系统算是做出来了(不过我承认我是参考网上代码所得,我基本能看懂)。
它基本有前面提到过的功能,即录入班次信息,浏览班次信息,售票和退票,保存文件。
有一个扩展功能,即可以退出系统(代码中的sys_exit()函数)。
不过目前我发现它一个不足之出,就是不能对输入时间的格式起限制作用。
如我可以输入26:30:00,它系统不会提示说输入错误提示再输入一个正确的时间。
还有,就是整个代码条理不够清晰,只是用到一个主函数和调用其他函数,可读性差!我认为最好是能分模块化处理,分文件处理,这样条理性强,可读性高,再者修改也容易。
不过由于本人水平有限,不能这样处理。
经历这近几天的锻炼,我也比较满意自己的表现。
在这过程中我查阅了很多书,学到了很多课堂上没有的东西。
很多知识我之前不知道的现在大部分都知道了,不过理解不够深透,,导致在这近几天里碰了不少壁!近几天我觉得编程既是一项费时费力但也是有趣的事。
说它费时费力是因为它繁琐,而有趣是因为我很享受一段段的小程序编成功之后的喜悦,苦尽干来啊。
我觉得编程是一件快乐的差事,我想我今后会加把时间学习它,把它学好。
第六章附录程序代码:#include"stdio.h"#include"time.h"#include"windows.h"#include"string.h"#include"dos.h"#include"stdlib.h"#include"ctype.h"#define Max 50//最大贮赌量#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 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);//赋值void sort_time(struct Buses bus[]);//声明按时间发车的先后顺序排序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[]);//声明按终点查询函数void main(){//主函数while(1){system("cls");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;}}}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();system("cls");int i;printf("\n\t\t\t\t车辆时刻表\n");printf("\t\t\t**************************\n");printf("\t班次发车时间起点站终点站行车时间额定载量已定票人数");printf("\n\t--------------------------------------------------------------\n");sort_time(bus);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;}void sort_time(struct Buses bus[]){//按发车时间排序int i,j,k;struct Buses b={0};for(i=0;i<H-1;i++){k=i;for(j=i+1;j<H;j++){if(compare_time(bus[i].time,bus[j].time)){k=j;if(k!=i){b=copy(b,bus[i]);bus[i]=copy(bus[i],bus[k]);bus[k]=copy(bus[k],b);}}}}}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%10d%10d(已发出)\n",bus.number,bus.time.hour,bus.time.min,bus.time.sec,bus.start,bus.end,bus.time_cost,b us.carry_number,bus.booK_number);elseprintf("\t%-6d%-2d:%-2d:%-2d%6s%8s%8.1f%10d%10d\n",bus.numb er,bus.time.hour,bus.time.min,bus.time.sec,bus.start,bus.end,bus.time_cost,b us.carry_number,bus.booK_number);}int caidan(){int a;system("cls");//以下是菜单图案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|----------------------------------------------|\n");printf("\t\t| (1) 录入班次信息 |\n");printf("\t\t|----------------------------------------------|\n");printf("\t\t| (2) 显示班次信息 |\n");printf("\t\t|----------------------------------------------|\n");printf("\t\t| (3) 查询班次信息 |\n");printf("\t\t|----------------------------------------------|\n");printf("\t\t| (4) 售票 |\n");printf("\t\t|----------------------------------------------|\n");printf("\t\t| (5) 退票 |\n");printf("\t\t|----------------------------------------------|\n");printf("\t\t| (6) 保存车次信息 |\n");printf("\t\t|----------------------------------------------|\n");printf("\t\t| (0) 退出系统 |\n");printf("\t\t|----------------------------------------------|\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'){system("cls");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);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];system("cls");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'){system("cls");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_sy stime(bus[n],tnow)){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'){system("cls");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(){//退出函数system("cls");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;}参考文献1、谭浩强编著, C程序设计 1991年7月2、裘宗燕著,从问题到程序科学出版社,北京大学出版社,1999年4月。