火车票订票系统
火车站售票系统

火车站售票系统简介火车站售票系统是一种为火车站旅客提供售票服务的软件系统。
通过火车站售票系统,旅客可以方便地查询车次信息、选择座位、购买车票,并实现自助取票、改签、退票等功能。
该系统旨在为旅客提供便利的售票服务,缩短购票时间,提高售票效率,提升用户体验。
功能模块火车站售票系统包含以下功能模块:1.车次查询:旅客可以通过输入出发站、到达站、出发日期和车次类型等信息,查询符合条件的车次信息。
查询结果包括列车编号、车站信息、座位情况等。
2.车票预订:旅客可以选择符合条件的车次,并选择座位类型、乘车人数等。
预订成功后,系统会生成订单号和一张包含乘车信息的车票。
3.自助取票:旅客可以凭借订单号、身份证或者手机号码,在火车站的自助取票机上打印车票。
取票机可以扫描二维码并打印准确的车票信息。
4.改签功能:对于已购买的车票,旅客可以在一定时间范围内进行改签操作。
改签成功后,系统会生成新的车票,同时作废原有车票。
5.退票功能:对于不需要乘车的旅客,可以在一定时间范围内申请退票。
系统会根据退票规则计算退票金额,并完成退票操作。
6.订单管理:系统可以记录用户的订单信息,包括订单号、车次信息、座位类型、乘车人信息、支付金额等。
用户可以通过订单管理功能查询订单状态、取消订单等。
开发技术与架构火车站售票系统的开发可以采用以下技术与架构:1.后端开发:采用Java或者其他主流后端语言进行开发。
可以使用Spring Boot框架搭建后端业务处理与数据访问的逻辑。
2.前端开发:采用HTML、CSS和JavaScript等前端技术进行开发。
可以使用Vue.js或React.js等前端框架进行页面交互与展示设计。
3.数据库:可以选择关系型数据库如MySQL或者非关系型数据库如MongoDB作为数据存储。
数据库用于存储车次信息、订单信息、座位状态等。
4.接口设计:采用RESTful API设计模式进行接口设计,保证系统的可扩展性和易于维护。
火车票售票管理系统

电子商务分析与设计设计题目火车站售票管理系统组长成员成员目录一、需求分析 (1)1.1功能需求 (1)1.2系统用例分析 (1)1.2.1.火车站售票管理系统的参与者 (1)1.2.2.管理员用例图 (2)1.2.3.系统管理员用例图 (3)1.2.4.票务管理员用例图 (4)1.2.5.乘客用例图 (5)二、静态模型设计 (6)2.1类图 (6)2.2数据库字段 (7)三、动态模型设计 (9)3.1时序图 (9)3.1.1“系统管理员时序图 (9)3.1.2顾客时序图 (10)3.1.3.票务管理员时序图 (12)3.1.4.售票员时序图 (13)3.2 状态图 (15)3.3协作图 (16)3.4活动图 (17)3.4.1.“乘客查询”活动图 (17)3.5系统部署图 (19)四、小组成员分工说明 (20)五、课程设计的收获和总结 (21)参考资料 (22)一、需求分析1.1功能需求线上预订火车票系统是一款功能强大、操作简便、易维护的、具有良好人机交互界面的线上订票系统,它包括用户管理模块、系统参数设置模块、票务信息模块提供票价、列车的实时信息、订票管理模块提供订票和退订功能、实时信息提示模块提供车况、路况、列车晚点等实时信息、数据管理模块提供数据备份、数据操作功能;实现火车票线上预定的自动化的计算机系统,为旅客提供准确、精细、迅速的火车票销售信息和方便、简单的订票功能;线上预订火车票系统主要是对于订票信息的统一管理,满足了中小型线上订票网站对于用户的管理,订票信息的收集和处理方面的要求;用现代化的方式取代以前的传统模式,更有利于信息的流通,资源的宏观管理;具有体积小,代码简洁,易维护、易修改的优点;1.2系统用例分析1.2.1.火车站售票管理系统的参与者乘客:查询、预订车票的人员;售票员:具体负责乘客的车票订单;票务管理员:负责更新车票信息;系统管理员:系统管理员负责系统的员工信息管理,会员信息管理以及系统的维护等;根据以上分析,创建系统参与者,如图所示:管理员系统管理员票务管理员售票员乘客图1-1系统参与者1.2.2.管理员用例图火车站系统中的所有人都是管理员,管理员是一个抽象的概念,他包含的行为是所有管理员的共同行为;管理员在本系统中通过合法的身份验证能够修改自身的信息和密码;根据以上分析,建立用例图如下所示:查询信息图1-2系统管理员用例图1.2.3.系统管理员用例图系统管理员能够通过本系统进行如下活动;管理会员信息:系统管理员能够对当前注册到本系统的客户进行整理;管理售票员信息:系统管理员能够管理当前系统中的售票员信息,如添加、删除和修改售票员信息等;系统设置:系统管理员可以对系统进行必要的设置和维护,如升级等; 管理乘客信息系统管理管理售票员信息系统管理员系统设置系统维护<<include>><<include>>图1-3系统管理员用图1.2.4.票务管理员用例图票务管理员能够通过本系统进行如下活动:添加车票信息、删除车票信息、修改车票信息等;修改车票信息图1-4票务管理员用例图1.2.5.乘客用例图对于火车票售票系统,乘客可以登录和查询;其下为乘客的用例图,即乘客可以进行的活动;图1-5乘客用例图二、静态模型设计2.1类图2-1系统类图2.2数据库字段乘客姓名、性别、联系电话、有效证件列车班次发车时间、起点、终点、乘坐人数、价格火车站名称、所在地、车站经过车次订票票号、列车班次号、乘客号、票价、车票类型管理员密码、姓名付款方式付款序号、付款名字乘客表列车班次表订购车票表管理员表火车站表三、动态模型设计3.1时序图3.1.1“系统管理员时序图1)系统管理员进入登录界面2)系统管理员输入登录信息3)后台数据库检验信息是否合法4)若合法,则显示登录成功,否则转85)系统管理员进入火车站管售票理系统6)系统管理员修改系统信息7)后台数据库更新8)登录信息不合法;9)系统弹出“重新登录”对话框10)若选择“是”返回到第2步图3-1系统管理员时序图3.1.2顾客时序图1)进入登录界面2)验证用户的登录信息是否正确3)若正确,显示登录成功否则转第十一步4)用户进入管理系统查询界面,输入查询信息5)返回查询信息6)用户进入预定界面7)用户进行预订8)数据库更新9)返回预订票信息10)显示预订成功11)登录信息不正确12)系统显示错误原因,并提示是否重新登录13)若选择“是”,则返回到第2步;图3-2顾客时序图3.1.3.票务管理员时序图1)选择车票添加操作进入相关页面2)系统列出表单要求填写3)填写添加车票的信息4)提供更新信息给数据库5)用户表明填写完成6)系统显示表单请求确认7)确认表单完成操作8)数据库更新、保存9)用户要求修改信息;10)返回到第2步;图3-3票务管理员时序图3.1.4.售票员时序图1)售票员要求查看相关的车票信息2)后台系统整理3)后台数据库传递相应订票信息4)系统显示出有效的订票信息5)售票员从中选择订票选项6)更新订票信息7)售票员表明订票完成8)系统显示所订车票的信息9)系统请求确认信息10)售票员确认订票信息,完成订票11)数据库保存图3-4售票员时序图3.2 状态图1)进入数据库系统界面2)进入预订车票界面3)预订成功后推出4)进入退订车票界面5)退订成功后退出6)预订退订车票失败则退出图3-5 系统状态作图3.3协作图1客户首先要连接上网络的电脑2客户进行网站搜索,检索有关的票务信息3电脑将显示的票务信息给予客户4客户再通过查看信息后选择买票5客户输入自己的账号6验证帐户并提交扣钱7电脑将票的代码显示给客户,凭证取票图3-6 系统协作图3.4活动图3.4.1.“乘客查询”活动图查询系统方便人们的生活,人们不用注册即可按照一定的要求进行查询;如,按“始发站——-终点站”进行查询;系统接收查询信息后,进行相应的整理,其过程如下:图3-7“乘客查询”活动图3.4.2.“乘客登录”活动图乘客分老客户和新客户,新客户为没有注册过的客户,那么,其首先要注册;老用户是已经注册过的用户,其直接输入用户名登录即可;其活动图如下:图3-8“乘客登录”活动图3.5系统部署图在火车站售票管理系统中,系统包括五格节点,分别是系统管理员管理系统、票务管理员管理系统、售票员管理系统、客户管理系统和售票管理系统;票务管理员管理系统负责进系统车票信息更新,系统管理员管理系统负责进行系统维护,售票管理系统负责客户预订退订票管理,客户管理系统负责对客户信息的管理,售票员管理系统负责售票管理;图3-9系统部署图四、小组成员分工说明需求分析阶段是软件开发的最核心的部分,我们组成员通过上网查阅资料,去图书馆借阅有关的书籍以及根据课本上的知识,再经过我们组成员三个人之间的默契配合,共同完成了软件的核心部分-----需求分析;完成了我们所要做的项目的需求分析之后,下面的课程设计可根据需求分析来进行,我们组成进行分工合作共同完成了这次课程设计;静态模型中的类图由刘盈娣和燕京京完成;动态模型的四部分图,时序图由我们三个共同完成,状态图和协作图由陈斌完成,活动图由燕京京完成,系统部署图由刘盈娣完成;我们分工明确,互相帮助,顺利的完成了自己的任务;最后的总结由陈斌完成,再做了最后的文档的整理;五、课程设计的收获和总结经过一个星期的实践学习,使我们对UML有了更进一步的认识和了解,要想学好它要重在实践,要通过不断的上机操作才能更好地学习它,通过实践,我们也发现我们的好多不足之处,最主要是自己在UML图形正确使用上不够熟悉,通过实践,使我们在这个方面的认识有所提高;其次,经过查找资料,调查研究,获取需求以及在这些基础上做出的系统分析;总的来说,这个系统的设计考虑了大部分要考虑的因素,一些影响不大的因素就没有考虑在内,系统的需求分析中占相当一部分比例的用例规格说明采用表格的方式,直观,便于理解,不过需求分析在整体的格式多样性上有所欠缺,这在以后的设计中要吸取教训;通过这次的课程设计,我们不但学到了很多东西,也把原来学的东西理解的更透彻了,特别是把原来学的不同科目的东西结合起来了,收获很大;通过实践的学习,我们认到学好计算机要重视实践操作,不仅仅是学习UML 语言,还是其它的语言,以及其它的计算机方面的知识都要重在实践,所以后在学习过程中,我们会更加注视实践操作,使自己更好地学好计算机;没有实践,学习就是无源之水,无本之木;以上就是我们在进行课程设计实训的心得和感受;参考资料1 李大友,陈明等实用软件工程基础清华大学出版社2吴建,汪杰等 UML基础与Rose建模案例人民邮电出版社3 Soren Lauesen 著软件需求电子工业出版社4 uml 和rational rose 2002 从入门到精通电子工业出版社。
12306流程架构设计

12306流程架构设计1.引言1.1 概述12306是中国国家铁路局开发的在线订票系统,为乘客提供便捷的火车票购买和查询服务。
作为中国最大的铁路客运服务平台,12306的流程架构设计至关重要。
本文旨在探讨12306的流程架构设计要点,并为该系统的优化提供参考。
在进行12306流程架构设计之前,我们需要对该系统的概述进行了解。
12306系统一般包括用户界面、业务逻辑、数据库和外部接口等组件。
用户界面提供给用户进行查询、订购、退票等操作的页面,业务逻辑处理用户操作的请求并进行相应的业务处理,数据库储存用户信息、车票信息等数据,外部接口用于与其他系统进行交互。
12306的流程架构设计需要考虑以下几个重要因素。
首先,在用户界面方面,应该注重用户友好性和易用性,确保用户能够轻松地进行操作。
其次,在业务逻辑方面,需要设计合理的流程以满足用户的需求,同时考虑系统的性能和稳定性。
此外,数据库的设计应考虑数据的安全性和可扩展性,以便应对不断增长的用户数量和数据量。
最后,外部接口的设计需要与其他系统进行无缝集成,确保数据的准确和及时交换。
12306的流程架构设计的目的主要是为了提供高效、稳定和安全的服务。
通过合理的架构设计,可以提高系统的性能,并能应对高并发的请求。
此外,良好的架构设计还可以降低系统的维护成本,便于功能的扩展和更新。
综上所述,12306的流程架构设计是一个复杂而重要的任务,需要综合考虑用户界面、业务逻辑、数据库和外部接口等各个方面的因素。
只有通过科学、合理的架构设计,才能为用户提供更好的服务体验,并为系统的优化和发展提供支持。
1.2 文章结构文章结构部分是为了让读者可以清楚地了解整篇文章的组织结构和内容安排。
本文的文章结构如下所述:首先,在引言部分,我们将概述本文的背景和目的,以及阐明文章的重要性和意义。
接着,在正文部分,我们将详细介绍12306流程架构设计的要点。
这些要点将涵盖12306流程的各个方面,包括流程的整体架构和关键环节的设计。
12306火车票网上订票查询

12306火车票网上订票查询12306火车票网上订票查询随着互联网的快速发展,越来越多的人开始选择网上订票查询来购买火车票,这种方式不仅方便快捷,还能避免排队、浪费时间。
12306火车票网站作为中国铁路的官方订票平台,已经成为了乘坐火车的首选方式之一。
下面将详细介绍12306火车票网上订票查询的使用方法和注意事项。
首先,我们需要在电脑或手机上打开12306的官方网站。
登录页面显示在主页上方的导航栏中,可以选择使用电脑版或手机版。
根据个人喜好,选择适合自己的版本进行操作。
登录前需要注册一个帐号,填写相关个人信息,如真实姓名、身份证号码、手机号码等。
填写完整后,点击注册按钮完成注册。
登录成功后,我们就可以开始查询火车票信息了。
在首页的查询框内,填写出发地、目的地、出发日期等相关信息,点击查询按钮,系统将自动为我们展示符合条件的车次列表。
列表中会显示车次、发车时间、到达时间、历时、余票情况、票价等信息,方便我们选择合适的车次。
在选择好车次后,我们需要选择座位类型。
在车次列表中,每个车次后面都有座位类型的选项,如硬座、硬卧、软座、软卧、无座等。
根据自己的需求和经济能力,选择合适的座位类型,并点击“预定”按钮进行下一步操作。
接下来,系统会要求我们选择乘车人。
在乘车人页面,如果之前已经填写了乘车人的信息,系统会自动显示出来。
如果没有,我们需要点击“添加联系人”按钮,填写乘车人的姓名、证件类型(一般为身份证)、证件号码、票种等信息,并保存。
添加完乘车人后,可以选择票种,并点击“提交”按钮。
在提交订单页面,确认乘车人信息、座位类型、车票价格等无误后,我们需要选择支付方式。
12306网站目前支持支付宝、微信支付、银联卡等多种支付方式。
选择合适的支付方式,点击“付款”按钮进行支付。
支付成功后,我们会收到订单支付成功的提示,并且可以在订单管理页面查看火车票订单的详细信息。
12306网站还提供了手机短信服务,会在火车票离开起点站前30分钟发送火车信息提醒。
火车票订票管理信息系统

目录1.系统背景 (1)2.信息系统分析 (1)2.1初步调查 (1)2.2可行性研究 (2)2.3现行系统的详细调查 (2)2.4新系统逻辑模型的提出 (3)2.4.1数据流图 (3)2.4.2数据字典 (4)3.信息系统设计 (7)3.1信息系统总体设计 (7)3.1.1信息系统总体布局设计 (7)3.1.2软件系统的总体结构设计 (7)3.2数据存储设计 (8)3.2.1数据库设计 (8)3.3系统结构 (9)4.系统实施 (10)4.1编程并编写文档 (10)4.2测试 (10)4.3系统转换 (12)1.系统背景中国拥有总里程超过五万公里的铁路线,是世界上最大的铁路运输网之一。
而铁路客运服务在其中又占有非常重要的地位。
其中有5000多个车站承办客运业务,日开列车2000多列。
为了在日益加剧的客户运输服务竞争中确保优势,改善铁路客户的服务质量,铁道部门一直在努力寻找提高竞争力、改善服务的新途径。
计算机应用于火车站售票的日常管理为火车站售票的现代化带来了从未有过的动力和机遇,为火车站票务管理领域的飞速发展提供了无限潜力。
能给火车站票务带来明显的经济效益和社会效益。
2.信息系统分析2.1初步调查中国铁路客票发售和预订系统的核心功能是建立一个覆盖全国铁路的计算机售票网络,实现客票管理和发售工作现代化,从而方便旅客购票和旅行,提高铁路客运经营水平和服务质量,系统可预订、预售和发售当日客票,具有售返程、联程等异地购票功能。
系统预售期为 9 天。
可以实现票额、座席、制票、计费、结算、统计等工作的计算机管理。
现行系统概述火车票票务管理的全部数据处理都由人工操作,工作量大,工作效率低,错误率高,信息反馈不及时,因此本信息系统拟对该火车票票务管理进行以下几方面的改革:◎系统功能重构◎业务流程重组◎数据流程重组为了解决上述问题,要根据目前火车票的管理模式和方法,利用Internet、局域网和计算机开发基于Web的火车票订票管理信息系统,可以实现票额、座席、制票、计费、结算、统计等工作的计算机管理。
12306票务系统原理

12306票务系统原理12306票务系统原理是指中国铁路客户服务中心开发的一套用于铁路车票销售和预订的互联网系统。
该系统的原理如下:1. 基础设施:12306票务系统基于高性能的服务器集群和分布式数据库构建,能够支持大量并发用户的访问和操作。
2. 数据库:系统中的核心数据是车次信息、车票信息、用户信息等。
这些数据保存在数据库中,并通过数据库管理系统实现高效的数据读取和写入。
3. 用户账号和认证:用户通过注册账号,登陆系统后,可以进行购票、查询、退票等操作。
账号信息保存在数据库中,系统通过用户认证机制保护用户的信息安全。
4. 车次查询和选座:用户可以通过系统提供的车次查询功能,查找满足其需求的列车班次。
查询结果显示车次的出发、到达站、车票价格、余票数量等信息。
用户可以选择心仪的车次,并预定座位。
5. 购票和支付:用户在选定座位后,可以将车票添加到购物车中,然后通过系统提供的支付接口完成支付操作。
12306系统支持多种支付方式,如网银支付、支付宝、微信支付等。
6. 订单处理和票据生成:完成支付后,系统生成订单,将乘客、乘车信息和购票金额等保存到数据库中。
系统同时生成电子票或纸质票,并向用户发送确认邮件或短信。
7. 余票管理和座位预留:系统将余票信息同步到数据库中,并通过座位预留机制,防止用户重复预订同一座位。
8. 退票和改签:用户可以在规定的时间范围内申请退票或改签。
系统处理用户的退票申请,并更新订单和余票数据库。
9. 数据统计和分析:系统还提供数据统计和分析功能,对车票销售情况、用户需求等进行分析,为车票供给、价格调整以及用户服务等方面提供参考。
通过以上原理,12306票务系统实现了在线购票、支付、订单处理、座位预留、改签、退票等功能,大大提高了用户购票的便利性和效率。
火车票预订系统

火车票预订系统
火车票预订系统是一个通过互联网进行火车票预订和购买
的系统。
它允许用户在电脑或手机上方便地查看火车票信息、选择座位、支付订单,并获得电子车票。
以下是一个
普遍的火车票预订系统的功能:
1. 火车票查询:用户可以根据出发地、目的地、日期等信
息查询火车票的可用性。
2. 车次选择:系统显示查询结果,并提供票价、出发时间、到达时间等信息,用户可以选择适合的车次。
3. 座位选择:用户可以查看火车车厢的座位布局图,选择
适合的座位。
4. 乘客信息:用户需要提供乘客的姓名、身份证号码等信息。
5. 支付:用户可以通过多种支付方式支付订单,如支付宝、微信支付、银联支付等。
6. 订单确认:用户确认订单后,系统生成订单号,并发送
确认信息到用户的手机或电子邮箱。
7. 电子车票:用户可以在系统上查看和下载电子车票,也
可以选择短信或电子邮件接收电子车票信息。
8. 订单管理:系统允许用户在个人账户中查看和管理订单
信息,包括修改座位、取消订单等操作。
9. 退票和改签:用户可以申请退票或改签,系统根据规定
的退票和改签规则进行处理。
10. 客户服务:系统提供在线客服和客服电话等渠道进行咨询和投诉。
以上只是火车票预订系统的一些基本功能,实际的系统可能还包括其他功能和特点,以满足用户的需求。
12306订票系统

• 手机号 必须录入项。留存用户手机号 是为方便铁路给其发送购票、改签 成功以及晚点通知短信,也为后续 其他旅客服务建立购票渠道
• 邮箱地址 必须录入项、留存用户邮箱购 票服务过程中建立沟通渠道,以发 送购票、改签、退票等电子票的详 细服务信息。 用户要进行购票操作必须首先 进入邮箱激活注册用户。
提交订单并再次确认信息是否无误:
每日购票人每日连续取消3次订单,当日 无法订票,只能至次日网站服务 时间再次购票
确认订单,并在45分钟内完成付款
确认订单,并在45分钟内完成付款
确认订单,并在45分钟内完成付款
确认订单,并在45分钟内完成付款
确认订单,并在45分钟内完成付款
第二种可能:当上网的环境发生网络故障 时,网站对旅客订票申请的响应出 现了问题。 第三种可能:由于其他未知原因导致预订 车票没有成功,可以稍后再试一次;当 网站其他网页访问正常而订票申请 总是出现故障,且网站没有发布升 级或停机通知时,可以根据页面中的提示服 务电话进行咨询。
一个有效身份证件同一乘车日期同一车 次限购一张车票(但使用同行成年人的有效 身份证件信息为乘车儿童购买儿童票的除外 )。一笔订单不能超过5张票,网站 可根据具体情况做适当限制。
1.打开12306订票网站搜索页面
操作区
2.进行网上订票用户注册
2.进行网上订票用户注册
2.进行网上订票用户注册
在网上自主购票
订票速度 人力成本 定退票的便捷程度 个人信息的安全程度 订票效率 信息了解程度
快 较低 快捷 较安全 高 全面
谢谢欣赏 The End
Creຫໍສະໝຸດ dits
铁路订票系统
忻州培训站
李兆伟
目录
12306铁路网上订票系统概述
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
火车票订票系统源代码#include <conio.h>#include <stdio.h>#include <stdlib.h>#include <string.h>int shoudsave=0 ;int count1=0,count2=0,mark=0,mark1=0 ;/*定义存储火车信息的结构体*/struct train{char num[10];/*列车号*/char city[10];/*目的城市*/char takeoffTime[10];/*发车时间*/char receiveTime[10];/*到达时间*/int price;/*票价*/int bookNum ;/*票数*/};/*订票人的信息*/struct man{char num[10];/*ID*/char name[10];/*姓名*/int bookNum ;/*需求的票数*/ };/*定义火车信息链表的结点结构*/ typedef struct node{struct train data ;struct node * next ;}Node,*Link ;/*定义订票人链表的结点结构*/ typedef struct people{struct man data ;struct people*next ;}bookMan,*bookManLink ;/* 初始界面*/void printInterface(){puts("********************************************************"); puts("* Welcome to use the system of booking tickets *"); puts("********************************************************"); puts("* You can choose the operation: *"); puts("* 1:Insert a train information *"); puts("* 2:Inquire a train information *"); puts("* 3:Book a train ticket *"); puts("* 4:Update the train information *"); puts("* 5:Advice to you about the train *"); puts("* 6:save information to file *"); puts("* 7:quit the system *"); puts("********************************************************"); }/*添加一个火车信息*/void InsertTraininfo(Link linkhead){struct node *p,*r,*s ;char num[10];r = linkhead ;s = linkhead->next ;while(r->next!=NULL)r=r->next ;while(1){printf("please input the number of the train(0-return)"); scanf("%s",num);if(strcmp(num,"0")==0)break ;/*判断是否已经存在*/while(s){if(strcmp(s->data.num,num)==0){printf("the train '%s'has been born!\n",num); return ;}s = s->next ;}p = (struct node*)malloc(sizeof(struct node));strcpy(p->data.num,num);printf("Input the city where the train will reach:"); scanf("%s",p->data.city);printf("Input the time which the train take off:"); scanf("%s",p->data.takeoffTime);printf("Input the time which the train receive:");scanf("%s",&p->data.receiveTime);printf("Input the price of ticket:");scanf("%d",&p->data.price);printf("Input the number of booked tickets:");scanf("%d",&p->data.bookNum);p->next=NULL ;r->next=p ;r=p ;shoudsave = 1 ;}}/*打印火车票信息*/void printTrainInfo(struct node*p){puts("\nThe following is the record you want:");printf(">>number of train: %s\n",p->data.num);printf(">>city the train will reach: %s\n",p->data.city);printf(">>the time the train take off: %s\nthe time the train reach: %s\n",p->data.takeoffTime,p->data.receiveTime);printf(">>the price of the ticket: %d\n",p->data.price);printf(">>the number of booked tickets: %d\n",p->data.bookNum); }struct node * Locate1(Link l,char findmess[],char numorcity[]){if(strcmp(numorcity,"num")==0){r=l->next ;while(r){if(strcmp(r->data.num,findmess)==0) return r ;r=r->next ;}}else if(strcmp(numorcity,"city")==0){r=l->next ;while(r){if(strcmp(r->data.city,findmess)==0) return r ;r=r->next ;}return 0 ;}/*查询火车信息*/void QueryTrain(Link l){Node *p ;int sel ;char str1[5],str2[10];if(!l->next){printf("There is not any record !");return ;}printf("Choose the way:\n>>1:according to the number of train;\n>>2:according to the city:\n");scanf("%d",&sel);if(sel==1){printf("Input the the number of train:"); scanf("%s",str1);p=Locate1(l,str1,"num");if(p){printTrainInfo(p);}else{mark1=1 ;printf("\nthe file can't be found!"); }}else if(sel==2){printf("Input the city:");scanf("%s",str2);p=Locate1(l,str2,"city");if(p){printTrainInfo(p);}else{mark1=1 ;printf("\nthe file can't be found!"); }}}/*订票子模块*/void BookTicket(Link l,bookManLink k){Node*r[10],*p ;char ch,dem ;bookMan*v,*h ;int i=0,t=0 ;char str[10],str1[10],str2[10];v=k ;while(v->next!=NULL)v=v->next ;printf("Input the city you want to go: ");scanf("%s",&str);p=l->next ;while(p!=NULL){if(strcmp(p->data.city,str)==0){r[i]=p ;i++;}p=p->next ;}printf("\n\nthe number of record have %d\n",i);for(t=0;t<i;t++)printTrainInfo(r[t]);if(i==0)printf("\n\t\t\tSorry!Can't find the train for you!\n"); else{printf("\ndo you want to book it?<1/0>\n");scanf("%d",&ch);if(ch == 1){h=(bookMan*)malloc(sizeof(bookMan));printf("Input your name: ");scanf("%s",&str1);strcpy(h->,str1);printf("Input your id: ");scanf("%s",&str2);strcpy(h->data.num,str2);printf("Input your bookNum: ");scanf("%d",&dem);h->data.bookNum=dem ;h->next=NULL ;v->next=h ;v=h ;printf("\nLucky!you have booked a ticket!"); getch();shoudsave=1 ;}}}bookMan*Locate2(bookManLink k,char findmess[]){bookMan*r ;r=k->next ;while(r){if(strcmp(r->data.num,findmess)==0){mark=1 ;return r ;}r=r->next ;}return 0 ;}/*修改火车信息*/void UpdateInfo(Link l){Node*p ;char findmess[20],ch ;if(!l->next){printf("\nthere isn't record for you to modify!\n"); return ;}else{QueryTrain(l);if(mark1==0){printf("\nDo you want to modify it?\n");getchar();scanf("%c",&ch);if(ch=='y');{printf("\nInput the number of the train:");scanf("%s",findmess);p=Locate1(l,findmess,"num");if(p){printf("Input new number of train:");scanf("%s",&p->data.num);printf("Input new city the train will reach:"); scanf("%s",&p->data.city);printf("Input new time the train take off");scanf("%s",&p->data.takeoffTime);printf("Input new time the train reach:");scanf("%s",&p->data.receiveTime);printf("Input new price of the ticket::");scanf("%d",&p->data.price);printf("Input new number of people who have booked ticket:"); scanf("%d",&p->data.bookNum);printf("\nmodifying record is sucessful!\n");shoudsave=1 ;}elseprintf("\t\t\tcan't find the record!");}}elsemark1=0 ;}}/*系统给用户的提示信息*/void AdvicedTrains(Link l){Node*r ;char str[10];int mar=0 ;r=l->next ;printf("Iuput the city you want to go: ");scanf("%s",str);while(r){if(strcmp(r->data.city,str)==0&&r->data.bookNum<200){mar=1 ;printf("\nyou can select the following train!\n");printf("\n\nplease select the fourth operation to book the ticket!\n"); printTrainInfo(r);}r=r->next ;}if(mar==0)printf("\n\t\t\tyou can't book any ticket now!\n");}/*保存火车信息*/void SaveTrainInfo(Link l){FILE*fp ;Node*p ;int count=0,flag=1 ;fp=fopen("c:\\train.txt","wb");if(fp==NULL){printf("the file can't be opened!"); return ;}p=l->next ;while(p){if(fwrite(p,sizeof(Node),1,fp)==1) {p=p->next ;count++;}else{flag=0 ;break ;}}if(flag){printf("the number of the record which have been saved is %d\n",count); shoudsave=0 ;}fclose(fp);}/*保存订票人的信息*/void SaveBookmanInfo(bookManLink k){FILE*fp ;bookMan*p ;int count=0,flag=1 ;fp=fopen("c:\\man.txt","wb");if(fp==NULL){printf("the file can't be opened!"); return ;}p=k->next ;while(p){if(fwrite(p,sizeof(bookMan),1,fp)==1) {p=p->next ;count++;}else{flag=0 ;break ;}}if(flag){printf("the number of the record which have been saved is %d\n",count); shoudsave=0 ;}fclose(fp);}int main(){FILE*fp1,*fp2 ;Node*p,*r ;char ch1,ch2 ;Link l ;bookManLink k ;bookMan*t,*h ;int sel ;l=(Node*)malloc(sizeof(Node));l->next=NULL ;r=l ;k=(bookMan*)malloc(sizeof(bookMan)); k->next=NULL ;h=k ;fp1=fopen("c:\\train.txt","ab+");if((fp1==NULL)){printf("can't open the file!");return 0 ;}while(!feof(fp1)){p=(Node*)malloc(sizeof(Node));if(fread(p,sizeof(Node),1,fp1)==1) {r->next=p ;r=p ;count1++;}}fclose(fp1);fp2=fopen("c:\\man.txt","ab+");if((fp2==NULL)){printf("can't open the file!");return 0 ;}while(!feof(fp2)){t=(bookMan*)malloc(sizeof(bookMan)); if(fread(t,sizeof(bookMan),1,fp2)==1) {h->next=t ;h=t ;count2++;}}fclose(fp2);while(1){clrscr();printInterface();printf("please choose the operation: "); scanf("%d",&sel);clrscr();if(sel==8){if(shoudsave==1){getchar();printf("\nthe file have been changed!do you want to save it(y/n)?\n"); scanf("%c",&ch1);if(ch1=='y'||ch1=='Y'){SaveBookmanInfo(k);SaveTrainInfo(l);}}printf("\nThank you!!You are welcome too\n");break ;}switch(sel){case 1 :InsertTraininfo(l);break ;case 2 :QueryTrain(l);break ;case 3 :BookTicket(l,k);break ;case 4 :UpdateInfo(l);break ;case 5 :AdvicedTrains(l);break ;case 6 :SaveTrainInfo(l);SaveBookmanInfo(k);break ;case 7 :return 0;}printf("\nplease press any key to continue......."); getch();}return 0;}3.2调试与测试主要程序运行结果:运行开始选择1输入信息:选择2查询信息选择3订票选择4没用选择5对你的建议选择7退出系统。