火车票订票管理系统设计报告
- 格式:docx
- 大小:23.17 KB
- 文档页数:9
九江学院毕业设计课题名称:火车票售票管理系统班级:信B0911学号:*****************指导老师:***2011年11月20日火车票售票系统摘要本文针对火车站的售票实际情况,按照软件工程的结构化设计思想,经过项目的可行性研究和需求分析、总体设计、详细设计,以及编码实现和调试等步骤设计开发了火车站网上订票系统。
并运用数据流图和数据字典、E-R图和数据库逻辑结构、层次图、系统流程图、以及程序流程图,对该系统的数据需求、数据库、系统软件结构、系统流程、以及处理过程等进行了分析和设计。
工具软件利用VS2005开发工具和SQL Server 2008数据库来开发这个火车站网上售票系统。
该系统要解决的是火车站网上售票工作所要解决的问题,可以满足火车站网上售票的基本要求,包括查询、订票、退票等三个方面的功能。
该系统能运用到火车站售票的工作中,根据用户的需求,设置其权限,并快捷方便的为用户提供服务。
目录第一章. 概述...................................................1 1.1概述....................................................... 1 1.2意义.......................................................1 第二章. 系统的可行性研究与需求分析................22.1可行性研究................................................2 2.1.1经济可行性........................................22.1.2技术可行性...............................................2 2.1.3操作可行性................................................2 2.2需求分析...................................................3 2.2.1功能需求...............................................3 2.2.2数据需求...............................................4 2.2.3性能需求...................................................4 2.2.4数据库逻辑结构..........................................5 第三章. 系统的总体设计......................................73.1系统软件结构设计........................................ 7 3.1.1软件结构...................................................7 3.2系统流程图................................................7 第四章. 系统的详细设计....................94.1.1程序流程图........................................10第五章. 系统的实现与调试..............................17 5.1应用系统的开发及测试..................................17 5.1.2用户登录及访问权限.................................17 5.1.3车次信息查询........................................18 5.1.4售票......................................................19 5.15退票......................................................20 总结与展望.................................................21参考文献...............................................22附录代码.....................................................23第一章概述1.1概述目前火车站售票的状况是仅靠手工操作,以现有的工作人员很难应付车票订购高峰时刻的大量数据处理问题。
山西大学商务学院《软件工程课程设计》报告题目:火车站售票管理系统的设计与实现班级:10软件G2班组长:景巧鑫组员姓名:夏丹丹崔新华王伟说明一、火车站售票管理系统二、小组成员及任务分配情况姓名学号任务分配景巧鑫2010847209 需求分析、总体设计、系统实现夏丹丹2010847227 可行性研究、详细设计、系统实现崔新华2010847204 数据库的设计、系统实现王伟2010847223 系统界面设计与实现目录1. 开发目的和意义 (1)1.1 研究背景 (1)1.2 开发目的和意义 (1)1.3 完成情况 (2)2. 开发技术及方法 (3)2.1 开发环境和开发工具 (3)2.2 技术及方法 (3)2.2.1 B/S模式 (3)2.2.2 .NET (3)2.2.3 (4)3. 系统分析 (5)3.1 可行性分析 (5)3.1.1 经济可行性 (5)3.1.2 技术可行性 (5)3.1.3 操作可行性 (5)3.2 需求分析 (5)3.2.1 功能需求 (5)3.2.2 数据需求 (8)3.2.3性能需求 (9)4. 系统设计 (10)4.1 总体设计 (10)4.2 详细设计 (10)4.2.1过程设计 (10)4.3数据库设计 (16)4.3.1用户表 (16)4.3.2 车次详细信息表 (17)4.3.3 订票纪录表 (17)4.3.4退票纪录表 (18)5. 系统实现 (19)5.1系统登录界面 (19)信息学院《软件工程课程设计》报告5.2系统管理员登录界面 (19)5.3票务管理员登录界面 (20)5.4乘客登录界面 (21)6. 系统测试 (22)6.1测试方法 (22)6.2测试过程 (22)6.3测试结果 (22)7.总结 (24)7.1 小结 (24)7.2 实践感想 (24)参考文献 (26)附录1 可行性分析文档 (27)附录2 需求分析文档 (30)附录3 详细设计文档 (33)附录4 系统测试文档 (39)- II -1. 开发目的和意义1.1 研究背景用信息化推动工业化,用信息技术改造传统产业,这是我国迫切要完成的一项战略性任务。
基于.NET的火车联网售票系统的设计摘要基于B/S模式的火车联网售票系统是一个目前非常流行的在线售票系统。
该系统的出现大大满足了现今对于火车售票的需要,使原本极为麻烦的售票、购票过程变得方便快捷,从而提高效率并且大大降低了售票员的工作量。
火车联网售票系统主要包括的火车票查询子系统、订票子系统等功能系统。
它能够实现在线车票查询(包括简单查询、详细查询两个部分),在线订票等功能。
其开发主要包括后台数据库的建立管理和前台应用程序的开发这两个方面。
程序功能实现后用户将可通过互联网在线查询、订购所需的火车票,并能随时查看自己所订购的车票。
本文首先介绍了火车联网售票系统的整体系统构架及Microsoft SQL SERVER 2000数据库的建立,接着详细介绍了各子系统,包括各子系统的功能概述,具体实现,以及数据库相关表设计。
关键词:在线售票;订单;管理The Design of Train Online Booking System Based on .NETAbstractOnline Booking System based on B/S structure is currently a very popular online ticketing system. The system can meet the requirement of the selling train ticketing, make the extremely trouble process of buying train ticket fast and convenient. It improves efficiency and reduces workload of conductor.Train Online Booking System mainly comprise of ticket query, booking subsystem, complete online ticket query (includes simple query, detail query), online booking and so on. The development includes the establishment and management of the background database, and the implementation of application program .The system will allow customers to inquiries and book the train tickets through the Internet. They can inquire about the tickets of their booking at any time.This paper introduces the ticketing system interconnection of the overall system architecture and how to create Microsoft SQL SERVER database being followed by a detailed description of the subsystems, including the subsystems overview, the detail of realization and the related design of table.Key words:online booking ; order ; manage目录论文总页数:21页1 引言 (1)1.1 课题背景 (1)1.2 本课题研究的意义 (1)2 系统概述 (1)2.1 开发目的 (1)2.2 开发环境 (1)2.2.1 硬件环境 (1)2.2.2 软件环境 (1)2.3 软硬件需求 (2)2.3.1 硬件配置要求 (2)2.3.2 软件配置要求 (2)3 数据库设计 (2)3.1 数据库概念模型 (2)3.2 数据库各表设计 (4)3.3 数据库的连接 (6)4 系统总体设计 (7)4.1 用户登录和注册子系统 (7)4.1.1 用户登录模块 (7)4.1.2 用户注册模块 (7)4.2 火车票查询子系统 (8)4.2.1 快速查询 (8)4.2.2 详细查询 (8)4.3 订票子系统 (8)4.4 用户管理子系统 (8)4.4.1 用户注册信息的管理 (8)4.4.2 订单管理 (8)4.4.3 用户留言模块 (8)4.5 管理员管理子系统 (8)4.5.1 订单信息管理 (8)4.5.2 用户信息管理 (9)4.5.3 车票信息管理 (9)4.5.4 地址信息管理 (9)4.5.5 用户留言管理 (9)4.5.6 发布公告/热门信息模块 (9)5 系统具体设计 (9)5.1 用户登录和注册子系统设计 (9)5.1.1 功能概述 (9)5.1.2 用户登录和注册子系统的实现 (9)5.2 火车票查询子系统设计 (10)5.2.1 功能概述 (10)5.2.2 火车票查询子系统的实现 (11)5.3 订票子系统设计 (12)5.3.1 功能概述 (12)5.3.2 订票子系统的实现 (12)5.4 用户管理子系统设计 (14)5.4.1 功能概述 (14)5.4.2 用户管理子系统的实现 (15)5.5 管理员管理子系统设计 (16)5.5.1 功能概述 (16)5.5.2 管理员管理子系统的实现 (17)结论 (19)参考文献 (19)致谢 (20)声明.................................................... 错误!未定义书签。
火车票系统程序设计报告1. 引言本报告旨在介绍一个火车票系统的程序设计,该系统旨在提供用户购买火车票、查询车次信息等功能。
通过该系统,用户可以方便地预订、查询以及管理火车票信息,提高购票交通效率。
2. 功能需求火车票系统的主要功能需求如下:1. 用户注册和登录:用户可以通过注册账号和密码进行登录,以使用系统的各项功能。
2. 车次查询:用户可以根据出发地、目的地、时间等条件查询所有符合要求的车次信息。
3. 车票预订:用户可以预订特定车次的车票,并提供相应的座位选择。
4. 车票退订:用户可以取消已预订的车票。
5. 车票管理:管理员可查看所有车次信息及相应座位的预订情况,并进行车次和座位管理。
3. 系统设计3.1 数据库设计为了支持所需的功能,我们需要设计一个数据库来存储用户、车次和车票信息。
数据库的设计如下:- 用户表(User):存储用户的账号、密码、邮箱等信息。
- 车次表(Train):存储车次的出发地、目的地、时间、座位数量等信息。
- 车票表(Ticket):存储用户预订的车票信息,包括车次、座位等。
3.2 系统架构火车票系统的主要架构如下:- 用户界面:提供用户注册、登录、车次查询、车票预订和退订等功能的界面。
- 功能模块:实现用户管理、车次管理、车票管理等功能的模块。
- 数据库模块:实现与数据库的连接和数据存取的功能模块。
3.3 系统流程以下是火车票系统的主要流程:1. 用户注册:用户通过输入注册信息和密码进行账号注册。
2. 用户登录:用户输入账号和密码进行登录。
3. 车次查询:用户选择出发地、目的地、时间等条件进行车次查询。
4. 车票预订:用户选择特定车次和座位,并确认预订。
5. 车票退订:用户选择已预订的车票进行退订。
6. 管理员功能:管理员可以查看车次信息和座位情况,并进行相应管理操作。
4. 技术实现4.1 前端技术前端部分可以使用HTML、CSS和JavaScript来实现用户界面的设计和交互操作,使用AJAX技术与后端进行数据交互。
数据库课程设计报告 -------火车售票管理信息系统软件学院软件工程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)系统数据处理:数据查询,根据关键字过滤,查看当前车次信息,车票信息,用户信息以及处理历史。
设计名称:VC++课程设计题目:火车票管理系统学生姓名:黄壹戴开翼王飞梅专业:计算机科学与技术班别:计科本081学号:0804402132 0804402119 0804402108 指导老师:黄东日期:2010 年 6 月 2 日黄壹、戴开翼、王飞梅课程设计报告目录第一章概述 (2)1.1课程设计题目 (2)1.2设计目的 (2)1.3设计内容 (2)1.4系统测试要求 (3)第二章需求分析 (3)2.1需求分析的任务 (3)2.2需求分析的过程 (3)2.3数据字典与流程图 (3)2.4系统框架 (4)第三章概念结构设计 (6)3.1概念结构设计的方法与步骤 (6)3.1.1概念结构设计的方法 (7)3.1.3概念结构设计的步骤 (7)3.2数据抽象与局部视图设计 (7)3.3视图的集成 (8)第四章数据库逻辑设计 (9)4.1数据库的结构设计 (9)第五章软件功能设计 (10)5.1软件模块划分 (10)5.2软件功能结构图 (11)课程设计报告第六章界面设计 (11)第一章概述1.1课程设计题目开发一个火车票定票系统主要实现以下功能:1、用户基本信息的管理。
2、用户购票的基本信息。
3、购票以后的分发管理。
4、能实现退票功能。
5、能进行信息的统计和查询6、操作员管理1.2设计目的应用本学期对数据库系统原理的理论学习,通过上机实践的方式将理论知识与实践更好的结合起来,巩固所学知识。
实践和巩固在课堂教学中学习的关于关系数据库原理的有关知识和数据库系统的建立方法,熟练掌握对于给定实际问题,为了建立一个关系数据库信息管理系统,必须得经过系统调研、需求分析、概念设计、逻辑设计、物理设计、系统调试、维护以及系统评价的一般过程,为毕业设计打下基础。
1.3设计内容对于所选择的题目必须对课题的相关信息有一定的了解,对于这个火车票定票系统来说,必须了解火车票预定系统的基本雏形以及购票人的信息还有火车票的相关信息。
1.1 需求分析调查学生火车票预定系统应用领域涉及的内容,对涉及到领域的各个应用的信息要求和操作要求进行详细分析。
最重要的是调查、采集信息、分析购票人信息和火车票预定流程。
处理要求、数据的安全性与完整性要求。
要求系统能有效、快速、安全、可靠和无误的完成上述操作。
并要求客户端的界面要简单明了,易于操作。
火车站为方便旅客返程,需要开辟一个火车票订票系统,这个火车订票系统可以满足旅客的主要需求。
首先是要有旅客的登陆界面,包括旅客的用户名和密码。
然后登陆到主操作界面,旅客可以进行车票的查询,显示起始车站和终点车站,乘车的日期,发车时间,座号和票价,并且在查询到自己的所要车坐的车次后可以预订车票;旅客还可更改自己的用户名和密码,以保证个人信息的安全。
如是管理员登陆的话,还可以添加车次,包括起始站,终点站,发车时间,车次类型,还可以删除某个车次;并且在需要的时候,管理员也可添加和删除用户。
1.2 流程图经过可行性分析和初步需求调查,抽象出该系统业务流程图,结合该实例具体情况,给出旅客订票的具体需求。
图1.2 旅客购票流程图1.3 系统框架在调查完了系统需求之后,就要开始分析用户需求。
在此,采用自顶向下的结构化分析方法。
首先,定义全局概念结构的框架,如图 1.3 所示:图 1.3 火车定票系统总框架图每一个子系统需要进一步细化。
车次信息系统的细化如图 1.4 所示:车票信息系统的细化如图 1.5 所示:旅客信息系统的细化如图 1.6 所示:1.3 软件模块划分1.普通用户模块在普通用户模块中可以实现登陆,用户名修改,车次查询,订票。
2.管理员模块管理员模块包含三个板块的内容:①管理员可以实现登陆,用户名修改,车次查询,订票。
②车次基本信息管理:包括添加,查询,删除车次。
③用户信息管理:包括添加,删除用户。
1.4 功能结构2 详细设计(更功能模块的实现)2.1 登陆界面①用户名两个静态文本输入框②密码①用户名编辑框登陆界面两个编辑框②密码编辑框①登录两个按钮②取销登陆界面如图 2.1 所示:图2.1 登陆界面功能的实现:①首先建立一个对话框,命名为“欢迎使用火车票预订系统”,添加两个静态文本输入框“请输入用户名”和“请输入密码”,再添加两个编辑框“用户名编辑框”和“密码编辑框”然后建立类向导。
东华大学____软件设计实践___报告专业计算机科学与技术班级学号姓名完成日期一、需求分析1.1.设计背景铁路作为中国最重要的交通工具之一,在市场经济浪潮中,面临着严峻的考验。
公路运输的便捷,航空运输的快速,这一切都对铁路运输构成很大的冲击。
在对铁路客运服务存在的最大问题进行调查时,结果表明,有29.3%的乘客认为购票难排在各项选择的第一位。
火车站市场的管理和规范问题,是困扰我们多年的一个老问题,也是政府管理中的一个难点,订票是客运业务中的一个最基本的业务,表面上看,它只是火车站业务的一个简单的部分,但是它涉及到管理与客户服务等多方面,因此,随着我国铁路交通的不断发展,过去传统的售票方式已经不能满足现代客运业务流量剧增的客观要求,简单的窗口售票模式已经不能满足方便人们出行的目的。
采用先进的网络技术开发出方便快捷的网上订票系统是现代客运业务发展的必然需求。
电子商务的出现,正好带给了铁路客运服务一个发展契机,推出新型的订票方式-- 网上订票,来缓解订票高峰时期的客运压力,并为用户提供方便快捷的订票服务。
它既是技术上的创新,又将完善铁路服务,在一定程度上解决买票难这一大难题,增强铁路竞争力,为铁路争取到更多的客流。
本次设计的火车票网上订票系统通过访问主页,可以实现个人信息注册、车次车票价格查询、在线订票退票等基本功能,为用户提供方便快捷的订票服务。
本次设计便是利用开发工具VS2008和SQL Server 2005数据库共同开发的一个火车站网上订票系统,它能方便快捷地运用在火车站订票业务的营运之中。
该系统要解决的是火车站网上售票工作所要解决的问题,可以满足火车票网上售票的基本要求,包括查询、订票、退票三个方面的功能。
该系统能运用到火车站售票的工作中,根据用户的需求,设置其权限,并快捷方便的为用户提供服务。
1.2 系统设计目标本系统是利用网络的方便、快捷和计算机的准确、高效实现火车票网上订票系统。
火车票网上订票系统是通过主页访问、身份识别实现区别不同身份用户完成车票、车次的管理操作。
设计题目:火车订票管理系统班级:姓名:学号:2015年1月4日1.课程设计目的和要求火车订票管理系统的主要功能包括:1. 火车线路查询功能,乘客输入终点站名称或输入车次,输出相应的火车线路信息。
2. 订票功能。
乘客输入车次和订票数,先查询该车次的余票数,若余票数大于等于订票数,则为乘客办理订票手续,要求乘客输入姓名、身份证号码,计算出总票价,产生一个新结点,将该结点添加到对应车次的链表中,然后修改该车次的余票数。
若余票数小于订票数,则输出提示信息“余票数不足,订票失败!”。
3. 退票功能。
乘客输入车次和身份证号码,在该车次对应的链表中查找该乘客,若找到,询问乘客退票数量,若退票数小订票数,则只需修改结点的订票数;若退票数等于订票数,则将该乘客对应的结点删除,然后修改该车次的余票数;若没找到,则应提示“未找到相应信息”,要求乘客重新输入车次和身份证号码,再进行查找,如果仍未找到,则输出提示信息“输入信息错误,退票失败!”。
4. 其他查询功能。
(1) 输入车次,输出该车次的全部订票信息。
(2) 输入车次,输出该车次的订票数和余票数。
(3) 输入终点站名称,输出相关火车线路的信息。
(4) 输入日期(年.月.日),输出发车时间为该天的火车线路的信息。
(5) 输出余票数为0的火车线路的信息。
2.系统总体设计2.1 系统功能模块图2.2 数据结构设计假设有5条火车线路(起点均为济南),每条线路所涉及的信息有:终点站、车次、发车时间(年.月.日.时.分)、票价、余票数(假设火车总票数为300)。
乘客订票信息包括:乘客姓名、乘客身份证号码、订票数,总票价。
本系统要求用结构体数组和链表实现,将火车线路信息存放在结构体数组中,每条线路对应一个链表,乘客订票就是在链表中插入结点,乘客退票就是在链表中删除结点。
链表的结点类型和结构体类型定义如下:typedef struct node{char name[10]; //乘客姓名char IDcard[20]; //乘客身份证号码int TicketNum; //订票数float FareSum; //总票价struct node *next; //指针成员}SN;typedef struct Dtime{short year;short month;short day;short hour;short minute;}SD;typedef struct train{char terminal[10]; //终点站char sequence[10]; //车次struct Dtime StartTime; //发车时间float fare; //票价int SpareTicketNum; //余票数struct node *head; //指针成员,指向该线路第一个订票乘客}ST;系统整体结构见图9.3所示图9.3 系统结构示意图全局变量如下:#define N1 5 //火车线路数ST b[N1]; //火车信息结构体数组#define LEN1 sizeof(ST)//火车信息结构体数据块大小#define LEN2 sizeof(SN)//乘客信息结构体数据块大小3.系统详细设计3.1 函数说明#include<stdio.h>#include<stdlib.h>#include<string.h>#define N1 5 //*************************火车线路数//**************************************************结构体类型的定义typedef struct node{char name[20];char IDcard[20];int TicketNum;float FareSum;struct node *next;}SN;typedef struct Dtime{short year;short month;short day;short hour;short minute;}SD;typedef struct train{char terminal[20];char sequence[20];struct Dtime StartTime;float fare;int SpareTicketNum;struct node *head;}ST;ST b[N1];#define LEN1 sizeof(ST)#define LEN2 sizeof(SN)//***********************************************函数声明int Menu1(void); //*************************火车订票管理系统界面int Menu2(void); //*************************其他查询功能界面int Menu3(void); //*************************第一界面void creat1(void); //*************************管理员录入信息SN* creat2(float k); //**************************录入乘客信息void find0(void); //*************************查询void dingpiao(void); //*************************订票void tuipiao(void); //**************************退票void find1(void); //*************************查找功能1void find2(void); //*************************查找功能2void find3(void); //*************************查找功能3void find4(void); //*************************查找功能4void shuchu(void); //**************************输出0票数线路功能void LIST(SN *head); //**************************输出链表void READ(void); //**************************将数据读出生成文件void WRITE(void); //**************************将链表写入文件//************************************************************主函数int main(){int a,b,c;char m[20];b=Menu3();switch(b){case 0:printf("\n\t谢谢使用,再见!\n");exit(0);case 1:printf("\n请输入密码:");scanf("%s",m);if(strcmp(m,"666")==0) creat1();else printf("\n密码输入错误!\n\n");break;case 2:while(1){c=Menu1();switch(c){case 1:find0();break;case 2:dingpiao();break;case 3:tuipiao();break;case 4:a=Menu2();switch(a){case 1:find1();break;case 2:find2();break;case 3:find3();break;case 4:find4();break;case 5:shuchu();break;case 6:break;case 0:printf("\n\t谢谢使用,再见!\n");exit(0);default:printf("\n\t您的按键有误,请重新选择!\n");}break;case 0:printf("\n\t谢谢使用,再见!\n");exit(0);default:printf("\n\t您的按键有误,请重新选择!\n");}}}}//*********************************************************各函数定义int Menu1(void){int sel;printf("\n");printf("\t--------------------------------------------\n");printf("\t* *\n");printf("\t* 欢迎进入火车订票管理系统*\n");printf("\t* *\n");printf("\t--------------------------------------------\n");printf("\n");printf("\t请选择您要使用的功能:\n\n");printf("\t 1.火车路线查询\n");printf("\t 2.订票\n");printf("\t 3.退票\n");printf("\t 4.其他查询\n");printf("\t 0.退出系统\n\n");printf("\t 请选择按键0~4\n");scanf("%d",&sel);return(sel);}int Menu2(void){int sel;printf("\n");printf("\t--------------------------------------------\n");printf("\t* *\n");printf("\t* 欢迎进入火车订票管理系统*\n");printf("\t* *\n");printf("\t--------------------------------------------\n");printf("\n");printf("\t请选择您要使用的功能:\n\n");printf("\t 1.输入车次,查询该车次的全部订票信息\n");printf("\t 2.输入车次,查询该车次的订票数和余票数\n");printf("\t 3.输入终点站名称,查询相关火车线路的信息\n");printf("\t 4.输入日期(年·月·日),查询发车时间为该天的火车线路的信息\n");printf("\t 5.查询余票数为0的火车线路信息\n");printf("\t 6.返回上一界面\n");printf("\t 0.退出系统\n\n");printf("\t 请选择按键0~6\n");scanf("%d",&sel);return(sel);}int Menu3(void){int sel;printf("\n");printf("\t--------------------------------------------\n");printf("\t* *\n");printf("\t* 欢迎进入火车订票管理系统*\n");printf("\t* *\n");printf("\t--------------------------------------------\n");printf("\n");printf("\t 1.管理员入口\n");printf("\t 2.乘客入口\n");printf("\t 0.退出系统\n\n");printf("\t 请选择按键0~2\n");scanf("%d",&sel);return(sel);}void creat1(){SN *p1;int i,j;for(i=0;i<N1;i++){printf("\n\n");printf("请输入火车终点站:");scanf("%s",b[i].terminal);printf("请输入火车车次:");scanf("%s",b[i].sequence);printf("请输入火车发车时间(年_月_日_时_分_):");scanf("%hd%hd%hd%hd%hd",&b[i].StartTime.year,&b[i].StartTime.month, &b[i].StartTime.day,&b[i].StartTime.hour,&b[i].StartTime.minute);printf("请输入火车票价:");scanf("%f",&b[i].fare);printf("请输入火车余票数:");scanf("%d",&b[i].SpareTicketNum);b[i].head=creat2(b[i].fare);}WRITE();}SN *creat2(float k){SN *p1,*p2,*head;head=NULL;int n=0,i,m;printf("请输入您要录入的乘客人数:");scanf("%d",&m);for(i=0;i<m;i++){n++;if(n==1){p1=(SN*)malloc(LEN2);if(p1==NULL) { printf("\n No enough memory!\n"); exit(0); }printf("请输入乘客姓名:");scanf("%s",p1->name);printf("请输入乘客身份证号码:");scanf("%s",p1->IDcard);printf("请输入乘客订票数:");scanf("%d",&p1->TicketNum);p1->FareSum=p1->TicketNum*k;head=p1;}else{p1=(SN*)malloc(LEN2);if(p1==NULL) { printf("\n No enough memory!\n"); exit(0); }printf("请输入乘客姓名:");scanf("%s",p1->name);printf("请输入乘客身份证号码:");scanf("%s",p1->IDcard);printf("请输入乘客订票数:");scanf("%d",&p1->TicketNum);p1->FareSum=p1->TicketNum*k;p2->next=p1;}p2=p1;}p2->next=NULL;printf("\n输入成功!\n\n");return(head);}void find0(void){int x=0;SN *p1,*p2;int i=0,n=0,m=0,j;char ch[20];FILE *fp;READ();while(!x){printf("\n请输入您要查找的火车终点站或者车次:");scanf("%s",ch);for(i=0;i<N1;i++){if(strcmp(ch,b[i].terminal)==0||strcmp(b[i].sequence,ch)==0){printf("终点站:%s 车次:%s 发车时间:%hd年%hd月%hd日%hd 时%hd分火车票价:%.2f 火车余票数:%d\n\n",b[i].terminal,b[i].sequence,b[i].StartTime.year,b[i].StartTime.month,b[i].StartTime.day,b[i].StartTime.hour,b[i].StartTime.minute,b[i].fare,b[i].SpareTicketNum);n++;}}if(n==0){printf("\n对不起,您查找的火车信息不存在!\n\n");}printf("\n继续查找请选0,退出查询请选1\n\n");printf("请选择:");scanf("%d",&x);}}void dingpiao(void){SN *p1,*p2,*p0;char ch[20];int s,i,n=0;FILE *fp;READ( );printf("\n请输入您要订购的火车车次:");scanf("%s",ch);printf("请输入您要订购的车票数:");scanf("%d",&s);for(i=0;i<N1;i++){if(strcmp(b[i].sequence,ch)==0){n++;if(s>b[i].SpareTicketNum){printf("\n余票数不足,订票失败!\n\n");break;}else{p0=(SN*)malloc(LEN2);if(p0==NULL) { printf("\n No enough memory!\n"); exit(0); }printf("\n请输入乘客姓名:");scanf("%s",p0->name);printf("请输入乘客身份证号码:");scanf("%s",p0->IDcard);p0->TicketNum=s;p0->FareSum=p0->TicketNum*b[i].fare;p0->next=b[i].head;b[i].head=p0;b[i].SpareTicketNum=b[i].SpareTicketNum-p0->TicketNum;printf("\n订票成功!\n\n");}}}if(n==0) printf("\n对不起,您的输入有误!\n\n");WRITE();}void tuipiao(void){SN *p1,*p2,*p0;char ch[20],sh[20];int t,s=0,i,j,n=0;READ();for(j=0;j<2;j++){printf("\n请输入您要退票的车次:");scanf("%s",ch);printf("请输入身份证号码:");scanf("%s",sh);for(i=0;i<N1;i++){if(strcmp(ch,b[i].sequence)==0){s++;p0=b[i].head;while(p0!=NULL){n++;if(strcmp(sh,p0->IDcard)==0){printf("请输入您要退票的数量:");scanf("%d",&t);if(t<(p0->TicketNum)){p0->TicketNum=p0->TicketNum-t;b[i].SpareTicketNum=b[i].SpareTicketNum+t;printf("\n退票成功!\n\n");goto end;}elseif(t==(p0->TicketNum)){b[i].SpareTicketNum=b[i].SpareTicketNum+p0->TicketNum;if(n==1)b[i].head=p0->next;elsep1->next=p0->next;printf("\n退票成功!\n\n");goto end;}else{printf("\n输入退票数有误!\n\n");goto end;}}p1=p0;p0=p0->next;}}}if(j==1) printf("\n未找到相应信息,请重新查找\n\n");if(s==0) {printf("\n输入信息错误,退票失败!\n\n");} }end:WRITE();}void find1(void){char ch[20];int i,n;READ();printf("\n请输入您要查询订票信息的车次:");scanf("%s",ch);for(i=0;i<N1;i++){if(strcmp(ch,b[i].sequence)==0){LIST(b[i].head);}}if(n==0) printf("\n您查找的信息不存在,请重新查找\n\n");printf("\n谢谢您的使用\n\n");}void find2(void){char ch[20];SN *p1;int i,n=0,sum=0;READ();printf("\n请输入您要查询订票信息的车次:");scanf("%s",ch);for(i=0;i<N1;i++){if(strcmp(ch,b[i].sequence)==0){p1=b[i].head;while(p1!=NULL){sum=sum+p1->TicketNum;p1=p1->next;}printf("\n该车次的订票数为:%d 该车次的余票数为:%d\n\n",sum,b[i].SpareTicketNum);n++;}if(n==0) printf("\n未找到相应信息!\n\n");}}void find3(void){char ch[20];int i,n=0;READ();printf("\n请输入您要查询订票信息的终点站:");scanf("%s",ch);printf("\n");for(i=0;i<N1;i++){if(strcmp(ch,b[i].terminal)==0){printf("终点站:%s 车次:%s 发车时间:%hd年%hd月%hd日%hd 时%hd分火车票价:%.2f 火车余票数:%d\n\n",b[i].terminal,b[i].sequence,b[i].StartTime.year,b[i].StartTime.month,b[i].StartTime.day,b[i].StartTime.hour,b[i].StartTime.minute,b[i].fare,b[i].SpareTicketNum);n++;}}if(n==0){printf("\n您查找的信息不存在,请重新查找\n\n");}}void find4(void){char ch[20];short a,d,c;int i,n=0;READ();printf("\n请输入您要查询的日期:");scanf("%hd%hd%hd",&a,&d,&c);printf("\n");for(i=0;i<N1;i++){if(a==b[i].StartTime.year)if(d==b[i].StartTime.month)if(c==b[i].StartTime.day){printf("终点站:%s 车次:%s 发车时间:%hd年%hd月%hd 日%hd时%hd分火车票价:%.2f 火车余票数:%d\n\n",b[i].terminal,b[i].sequence,b[i].StartTime.year,b[i].StartTime.month,b[i].StartTime.day,b[i].StartTime.hour,b[i].StartTime.minute,b[i].fare,b[i].SpareTicketNum);n++;}}if(n==0) printf("\n未找到相应信息!\n\n");}void shuchu(void){int i,n=0;READ();for(i=0;i<N1;i++){if(b[i].SpareTicketNum==0){printf("\n终点站:%s 车次:%s 发车时间:%hd年%hd月%hd日%hd 时%hd分火车票价:%.2f 火车余票数:%d\n\n",b[i].terminal,b[i].sequence,b[i].StartTime.year,b[i].StartTime.month,b[i].StartTime.day,b[i].StartTime.hour,b[i].StartTime.minute,b[i].fare,b[i].SpareTicketNum);n++;}}if(n==0) printf("\n未找相应信息!\n\n");}void WRITE(void){SN *p1;//***************写入文件a[N1]*****************管理员存入数据***** FILE *fp;if((fp=fopen("file0.dat","wb+"))==NULL){ printf("Can not open file!\n") ; exit(0) ; }fwrite(b,LEN1,N1,fp);fclose(fp);//***********************************************第1个文件*******if((fp=fopen("file1.dat","wb+"))==NULL){ printf("Can not open file!\n") ; exit(0) ; }p1=b[0].head;while(p1!=NULL){fwrite(p1,LEN2,1,fp);p1=p1->next;}fclose(fp);//************************************************第2个文件******if((fp=fopen("file2.dat","wb+"))==NULL){ printf("Can not open file!\n") ; exit(0) ; }p1=b[1].head;while(p1!=NULL){fwrite(p1,LEN2,1,fp);p1=p1->next;}fclose(fp);//***********************************************第3个文件********if((fp=fopen("file3.dat","wb+"))==NULL){ printf("Can not open file!\n") ; exit(0) ; }p1=b[2].head;while(p1!=NULL){fwrite(p1,LEN2,1,fp);p1=p1->next;}fclose(fp);//********************************************第4个文件*********if((fp=fopen("file4.dat","wb+"))==NULL){ printf("Can not open file!\n") ; exit(0) ; }p1=b[3].head;while(p1!=NULL){fwrite(p1,LEN2,1,fp);p1=p1->next;}fclose(fp);//*********************************************第5个文件*******if((fp=fopen("file5.dat","wb+"))==NULL){ printf("Can not open file!\n") ; exit(0) ; }p1=b[4].head;while(p1!=NULL){fwrite(p1,LEN2,1,fp);p1=p1->next;}fclose(fp);}void READ(void){SN *p1,*p2;int i=0,j;FILE *fp;//*******读出第0个文件*********************查找数据***************** if((fp=fopen("file0.dat","rb"))==NULL){printf("Can not open the file !\n");exit(0);}fread(b,LEN1,N1,fp);fclose(fp);//***********************************************读出第1个文件******if((fp=fopen("file1.dat","rb"))==NULL){printf("Can not open the file !\n");exit(0);}j=0;p1=(SN*)malloc(LEN2);if(p1==NULL){printf("No enough memory !\n");exit(0);}fread(p1,LEN2,1,fp);while(!feof(fp)){j++;if(j==1) b[0].head=p1;else p2->next=p1;p2=p1;p1=(SN*)malloc(LEN2);if(p1==NULL){printf("No enough memory !\n");exit(0);}fread(p1,LEN2,1,fp);}p2->next=NULL;free(p1);fclose(fp);//*********************************************读出第2个文件****** if((fp=fopen("file2.dat","rb"))==NULL){printf("Can not open the file !\n");exit(0);}j=0;p1=(SN*)malloc(LEN2);if(p1==NULL){printf("No enough memory !\n");exit(0);}fread(p1,LEN2,1,fp);while(!feof(fp)){j++;if(j==1) b[1].head=p1;else p2->next=p1;p2=p1;p1=(SN*)malloc(LEN2);if(p1==NULL){printf("No enough memory !\n");exit(0);}fread(p1,LEN2,1,fp);}p2->next=NULL;free(p1);fclose(fp);//**************************************************读出第3个文件**** if((fp=fopen("file3.dat","rb"))==NULL){printf("Can not open the file !\n");exit(0);}j=0;p1=(SN*)malloc(LEN2);if(p1==NULL){printf("No enough memory !\n");exit(0);}fread(p1,LEN2,1,fp);while(!feof(fp)){j++;if(j==1) b[2].head=p1;else p2->next=p1;p2=p1;p1=(SN*)malloc(LEN2);if(p1==NULL){printf("No enough memory !\n");exit(0);}fread(p1,LEN2,1,fp);}p2->next=NULL;free(p1);fclose(fp);//**********************************************读出第4个文件***** if((fp=fopen("file4.dat","rb"))==NULL){printf("Can not open the file !\n");exit(0);}j=0;p1=(SN*)malloc(LEN2);if(p1==NULL){printf("No enough memory !\n");exit(0);}fread(p1,LEN2,1,fp);while(!feof(fp)){j++;if(j==1) b[3].head=p1;else p2->next=p1;p2=p1;p1=(SN*)malloc(LEN2);if(p1==NULL){printf("No enough memory !\n");exit(0);}fread(p1,LEN2,1,fp);}p2->next=NULL;free(p1);fclose(fp);//************************************************读出第5个文件***** if((fp=fopen("file5.dat","rb"))==NULL){printf("Can not open the file !\n");exit(0);}j=0;p1=(SN*)malloc(LEN2);if(p1==NULL){printf("No enough memory !\n");exit(0);}fread(p1,LEN2,1,fp);while(!feof(fp)){j++;if(j==1) b[4].head=p1;else p2->next=p1;p2=p1;p1=(SN*)malloc(LEN2);if(p1==NULL){printf("No enough memory !\n");exit(0);}fread(p1,LEN2,1,fp);}p2->next=NULL;free(p1);fclose(fp);}void LIST(SN *head){ SN *p ;p=head ;while ( p!=NULL ){printf("\n乘客姓名:%s 乘客身份证号码:%s 订票数%d 总票价%.2f\n\n",p->name,p->IDcard,p->TicketNum,p->FareSum);p=p->next;}}3.2 函数调用关系4.系统存在的问题与不足管理员输入密码时是有可能被别人看见,安全性没有做好。