第一篇:火车票订票管理系统++设计报告
摘要
随着时代的发展,计算系软件和系统的成熟,火车票的正当管理成为一个影响铁路部门正常运营的因素之一,而建立火车票订票管理系统是一个很好的解决办法。作为计算机应用的一部分,使用计算机对火车票信息进行管理,具有手工管理所无法比拟的优点,例如检索迅速、查找方便、可靠性高、存储量大、保密性好等,这些优点能够极大的提高火车票信息管理的效率,也正体现了火车票的科学化正规化管理 现在随着社会的发展,数据量急剧增长,现在人们就借助计算机和数据库技术科学的保存大量的数据,以便能更好的利用这些数据资源。本论文就是通过MFC的整体设计把数据库与应用程序相连接,做成一个火车票的订票管理系统,使得火车票管理员能够有效的管理车次信息、旅客信息、退票信息等。同时用户可以通过查询到相关的火车票信息,选择是否适合自己,也可以在网上直接订票、退票,省时省力。
关键字: SQL2000,MFC,数据库设计,火车票订票系统 目录
第一章概述
1.1项目开发背景 1.2系统开发目的 1.3技术可行性研究 第二章开发平台介绍 2.1 系统的架构
2.2系统运行环境操作系统 2.3系统开发环境 2.4开发工具
第三章数据库设计 3.1系统详细调查 3.2数据流图 3.3数据库设计
第四章系统的界面设计
4.1主窗口界面
4.2旅客信息窗口
4.3车次信息窗口
4.4取票及退票窗口 第五章系统的实现
总结与展望 致谢 参考文献 需求分析
需求分析的任务
调查机票预定系统应用领域涉及的内容,对涉及到领域的各个应用的信息要求和操作要求进行详细分析,形成需求分析说明书。最重要的是调查、收集信息、分析购票人信息和火车预定流程。处理要求、数据的安全性与完整性要求。
要求系统能有效、快速、安全、可靠和无误的完成上述操作。并要求客户机的界面要简单明了,易于操作,服务器程序利于维护。需求分析的过程
火车站为方便旅客,需开发一个火车票预定系统。为便于旅客由网上定票,把预定火车票的旅客信息,包括姓名、性别、工作单位、身份证号码、出发时间、目的地,输入火车票订票系统的客户端程序,系统经过查询火车站内的列车车次数据服务器后,为旅客安排列车,印出取票通知。旅客在火车出发前一天凭取票通知和帐单交款后取票,系统校对无误后即印出火车票给旅客。如果某方面出现问题,旅客可以持有效证件去火车站退票。
要求系统能有效、快速、安全、可靠和无误的完成上述操作。并要求客户机的界面要简单明了,易于操作,服务器程序便于维护。数据字典与流程图
经过可行性分析和初步需求调查,抽象出该系统业务流程图,结合该实例具体情况,给出旅客信息、订票信息和取票通知的具体需求。
图2.1 旅客购票流程图 ⑴调查用户需求 ①售票处需求 功能:旅客持个人证件去火车站购买火车票。希望能通过旅客姓名查到该旅客的列车车次并记录旅客基本信息。统计功能:
按火车票统计买票人数 按姓名统计火车票数 ②旅客购票需求 交费功能: 交费 退费
③取票需求 通知功能: 通知旅客取票 统计功能:
统计通过验证的人数 统计可以取票的人 统计未通过验证的人数 查询功能: 购票旅客查询 购票旅客姓名 购票旅客身份证号 购票旅客订单号 ④列车车次信息需求 查询功能: 车次 始发站 终点站 始发时间 系统框架 在调查完了用户需求之后,就要开始分析用户需求。在此,我们们采用自顶向下的结构化分析方法(SA方法)。首先,定义全局概念结构的框架,如图2.2所示。
图2.2火车票预定系统总框架图
各子系统需要进一步细化。旅客信息系统为例进一步细化,如图2.3所示。
图2.3旅客信息系统细化
以其中的查询旅客信息功能为例进一步细化,如图2.4所示。
图2.4查询旅客信息功能
图2.5列车车次信息系统细化
图2.6取票通知系统细化
图2.7旅客信息系统能查询到的内容
图2.8火车票信息系统能查询到的内容
图2.9退票信息系统细化
将所有子系统全部细化。将所有用户需求分析完毕之后,就要开始构造数据字典了。经分析之后,本系统要用到五个基本表:退票信息表,旅客信息表,列车车次信息表,取票通知信息系统,列车座位信息表。数据结构定义如表2.1所示。表2.1 数据结构定义 数据结构名
含义说明
组成退票信息
定义了退票旅客的有关信息
旅客姓名,身份证号,订单号,电话号
旅客
定义了旅客有关信息
旅客姓名,身份证号,性别,工作单位,电话号
列车车次信息表
定义了车次 的有关信息
车次号,始发地,目的地,始发时间
取票通知单
定义了取票通知相关有关信息
旅客姓名,取票时间,列车车次,座位号,火车票类型
列车座位信息表
定义了列车座位有关信息
列车号,座位号,座位信息,火车票类型
概念结构设计
概念结构设计的方法与步骤 概念结构设计的方法
概念设计阶段我们采用自底向上的方法,即自顶向下的进行需求分析,然后再自底向上的进行概念结构设计。对已经细化到无法再分的阶段逐步集成在一起,最终合成一个全局概念模式。
概念结构设计的步骤
第一步是进行局部视图的设计:由于高层的数据流图只能反映系统的概貌,而中层流图能较好的反映系统中各局部应用的子系统组成。因此我们们先逐一的设计分E-R图。
第二步是进行视图的集成:各子系统的E-R图设计好之后,下一步就是要将所有的分E-R图合成一个系统的总E-R图,一般有两个方式,多个分E-R图一次集成,另一种是一次集成两个分E-R图。我们想采用一次集成两个分E-R图的方式。数据抽象与局部视图设计
按照图2.2机票预定系统总框架图,设计实体属性图以及局部E-R图。
图3.1退票信息系统
图3.2旅客信息系统 ……图3.3列车车次信息
图3.4取票通知信息
图3.5列车座位信息表
图3.6旅客购票局部E-R 视图的集成
经过逐步细化再进行每两个一集成初步形成一个E-R图,最后得到图3.4总体概念结构E-R图
图3.4系统总体结构E-R图
逻辑结构设计
E-R图向关系模型的转换
将图3.4总体概念结构E-R图转化成关系模型。退票信息(订单号,旅客姓名,电话号,身份证号)
旅客(旅客姓名,身份证号,电话号,性别,工作单位)车次信息表(车次号,始发站,终点站,始发时间)
取票通知单(旅客姓名,取票时间,车次号,座位号,车票类型)列车座位信息表(座位号,车次号,座位信息,车票类型)数据模型的优化
将转化的关系模式进行优化,最终达到第三范式。
1、确定数据依赖
退票信息(订单号,旅客姓名,电话号,身份证号)根据这个关系写出数据依赖 订单号→旅客姓名,订单号→电话号,订单号→身份证号 旅客(旅客姓名,身份证号,电话号,性别,工作单位)旅客姓名→身份证号,旅客姓名→电话号,旅客姓名→性别,旅客姓名→工作单位 车次信息表(车次号,始发地,目的地,始发时间)列车车次→始发站,列车车次→终点站,车次→始发时间
取票通知单(旅客姓名,取票时间,车次号,座位号,机票类型)旅客姓名→取票时间,旅客姓名→车次号,旅客姓名→座位号,旅客姓名→车票类型
火车座位信息表(座位号,车次号,座位信息,车票类型)(座位号,车次号)→座位信息,(座位号,车次号,座位信息)→车票类型 对各关系模式间数据依赖进行极小化处理,消除冗余
订单号→旅客姓名,订单号→电话号,订单号→身份证号,旅客姓名→性别 旅客姓名→工作单位,旅客姓名→取票时间,旅客姓名→车次号
旅客姓名→座位号,旅客姓名→车票类型,车次号→始发站,列车号→终点站 车次号→始发时间,(座位号,车次号)→座位信息
看这些模式是否符合要求,确定是否要对某些模式进行合并或者分解 最终分解成第三范式:
(订单号,电话号,身份证号)(订单号,旅客姓名)(旅客姓名,取票时间,性别,工作单位,车票类型)(旅客姓名,车次号)(旅客姓名,座位号)(车次号,座位号,车票类型)(车次号,始发站,终点站,始发时间)
第二篇:网站架构设计技术方案(火车票订票系统)
xxx市xxxxx网管理中心
火 车 票 网 络 订 票 系 统 方 案
二零一二年二月 总体设计说明...............................................................................................................................2
1.1 项目概述...........................................................................................................................2 1.2 建设目标...........................................................................................................................2 1.3 建设原则...........................................................................................................................2 2 系统需求分析...............................................................................................................................3
2.1 服务器集群.......................................................................................................................3 2.2 负载均衡...........................................................................................................................3 2.3 数据库集群与库表散列...................................................................................................3 2.4 划分服务器....................................................................................................................4 2.5 不同网络用户的访问问题...........................................................................................4 3 系统架构设计...............................................................................................................................4
3.1 网站物理架构................................................................................................................4 3.2 Web应用开发架构.........................................................................................................5 3.3 网络拓扑结构................................................................................................................6 4 架构方案所涉及的技术...............................................................................................................7
4.1 负载均衡.........................................................................................................................7 4.2 页面静态化.......................................................................................................................8 4.3 MVC架构..........................................................................................................................9 4.4 CDN和镜像网站技术..................................................................................................10 5 网站的硬件扩容和升级.............................................................................................................11 5.1 增加服务器.....................................................................................................................11 5.2 升级服务器..................................................................................................................11 5.3 增加存储.......................................................................................................................11 5.4 网络扩容.......................................................................................................................12
实习生:杨茂饶
火车票网络订票系统设计方案 总体设计说明
1.1 项目概述
本次火车票网络订票系统项目是因为当前铁路局网上订票系统设计不合理造成用户订票难等原因而要求重新设计的。我们先前的火车票网络订票系统最主要的问题是在遭受高负载的情况下系统不能正常的运行,所以此问题也是该方案所要重点解决的。当此项目建成后,我们的火车票网络订票系统将大大减轻实地售票系统、电话订票系统的压力,使用户足不出户就能享受快速、高效的订票服务。
1.2 建设目标
该订票系统的设计要能解决当前网络订票系统订票难的问题,在高负载情况下要保证系统的正常工作。系统的建设要符合国家标准,必须要能满足当前大量用户的订票需求,能承受或杜绝同一个用户频繁对页面的点击所产生的流量。充分发挥订票系统的作用和效益。该系统采用先进成熟的技术进行建设并能根据需要为以后系统的升级做好准备。
1.3 建设原则
1.3.1 实用性
本次火车票订票系统要根据当前用户订票需求情况和系统未来的规划进行设计。结合实际使系统的性价比达到最高。1.3.2 可靠性
系统的设计要使之能长期稳定的运行,当遇到问题的时候还要能够快速有效的恢复。1.3.3 安全性
确保系统的线路设计和设备是否能安全正常工作,保证用户信息不向外泄漏。
1.3.4 兼容性与扩展性
本次网络订票系统的设计上采用先进成熟的技术设备,以保障系统的高效运行,也是为系统的扩充和升级做好准备。1.3.5 专业性
系统的设计遵照国家标准,符合国家要求。1.3.6 易管理性
系统的设计要便于管理,方便日常维护中的操作。系统需求分析
由于火车票网络订票系统建成后是为我们中国13亿人提供订票服务的,将不可避免的遭受由大量网页点击造成的网络高流量、高负载的情况。所以要求此系统要能克服这种严重的状况,保证整个系统正常、安全、可靠的运行。最终方便用户订票。
为了满足以上要求,该方案需要采取服务器集群、负载均衡、数据库划分、图片服务器分离等,不仅如此,还要考虑不同网络用户的访问问题。
2.1 服务器集群
服务器集群就是指把很多的服务器统一集中起来进行同一种服务,在客户端看起来就像是只有一个服务器在提供服务。集群可以利用多个计算机进行并行计算从而获得更高的计算速度,也可以使用多个计算机做备份,并且能使其中一台计算机坏了后整个系统依然能正常运行。此系统采用服务器集群技术,集群内的服务器能并发的处理来自网络的访问请求,当访问量过大时,各服务器共同承担访问处理的任务,这将大幅的提高系统的工作效率。除此之外,还可以根据需求添加集群中服务器的数量以增大集群的处理能力。
2.2 负载均衡
负载均衡就是把从网络中传输进系统的流量根据系统的实际工作情况进行分流和划分,然后再传输到各服务器进行处理。在此方案中将采用负载均衡器和Squid/Nginx反向代理服务器实现此功能,负载均衡器需要被放置在临近服务器集群的位置。由于采用的是服务器集群技术,但当网站系统访问量很大时,Web服务器集群里的各个服务器压力都会很大,所以我们使用负载均衡器来管理这些访问请求,把这些访问请求传输给集群中有空闲资源的服务器进行处理。这样就能充分的利用服务器集群的优势,不至于因为集群内一台服务器资源耗尽或出现故障而中断服务。
2.3 数据库集群与库表散列
数据库服务器在整个系统的地位非常的重要,因为网站的瓶颈问题大都出现在数据库身上。大型网站都有复杂的应用,这些应用必须使用数据库,在面对大量访问的时候,数据库的瓶颈很快就能显现出来,这时一台数据库将很快无法满足应用,于是我们需要使用数据库集群或者库表散列。
1.数据库集群
在数据库集群方面,不同类型的数据库都有自己不同的解决方案,使用了什么样的数据库,就参考相应的解决方案。
2.库表散列
在应用程序中安装业务和应用或者功能模块将数据库进行分离,不同的 3
模块对应不同的数据库或者表,再按照一定的策略对某个页面或者功能进行更小的数据库散列,这样就能够低成本的提升系统的性能并且有很好的扩展性。
2.4 划分服务器
按服务器种类来划分,我们一般把服务器划分为:图片服务器、页面服务器、数据库服务器、应用服务器、日志服务器等。对于访问量大的网站而言,分离单独的服务器是非常必要的。分离服务器后各个服务器只需要完成各自的功能和处理任务,这样把工作细化后系统的整体运行效率也会提升很多。
2.5 不同网络用户的访问问题
由于处于不同网络服务商的计算机想要相互通讯会比在同一网络服务商的计算机慢。为了解决此问题,本系统将通过引入CDN和镜像网站技术来解决不同网络服务商的接入速度问题。系统架构设计
3.1 网站物理架构
用户浏览页面负载均衡器1...服务器1服务器2服务器3服务器2代理服务器集群(Nginx)服务器n服务器2...服务器1服务器2服务器1服务器2服务器1服务器2服务器1服务器n图片服务器集群Web服务器集群AWeb服务器集群BSquid服务器集群
整个系统架构组成如图所示,该架构有负载均衡器、Nginx代理服务器集群
或Squid代理服务器集群以及其他种类的服务器集群。这样的架构设计能够使该系统在高负载的情况下依然能正常工作,同时系统的安全性因为有代理服务器集群的存在也会得到相当大的提高。3.1.1架构中的代理服务器
代理服务器是介于客户端和Web服务器之间的另一种服务器的存在,有了它之后,浏览器不能直接到Web服务器去取回网页,而是向代理服务器发出请求,信号会先传送到代理服务器,由代理服务器来取回浏览器所需要的信息并传回浏览器。
很多代理服务器都有很大的存储空间,它能不断的将新取得的数据存储到它本机的存储器上,如果浏览器所请求的数据在它本机存储器上有而且是最新的,那么它就不再从Web服务器上读取数据,而是直接将存储器上的数据直接传送给用户的浏览器,起到系统缓存的作用。这样就能显著的提高浏览器的速度和效率。
除了缓存功能之外,代理服务器还能连接内网与Internet充当防火墙。这是因为所有内部的主机通过代理服务器访问外界时,只映射为一个IP地址,所以外界不能直接访问到内部网络;同时还可以设置IP地址过滤,限制内外网络之间的相互访问。所以本系统中采用代理服务器集群技术是对整个系统的安全是大有裨益的。
3.1.2 架构中的Web服务器
Web服务器是指驻留于因特网上某类计算机的的程序。当客户端的Web浏览器连接到服务器上并请求文件时,服务器将处理该请求并将文件发送到浏览器上,文件附带的信息(文件类型)会告诉浏览器如何查看该文件。服务器使用Http超文本传输协议进行信息交流。Web服务器不仅能够存储信息,还能在用户通过Web浏览器提供的信息基础上运行程序。3.1.3 图片服务器分离
对于Web服务器来说,不管是Apache、IIS还是其他容器,图片是最消耗资源的,于是我们有必要将图片与页面进行分离。这样的架构可以降低提供页面访问请求的服务器系统压力,并且可以保证系统不会因为图片问题而崩溃。
3.2 Web应用开发架构
Web应用开发采用MVC架构。把各种应用程序划分为视图、模型和控制三部分。大部分Web应用程序都是用像ASP,PHP,或者CFML这样的语言来创建的。它们将像数据库查询语句这样的数据层代码和像HTML这样的表示层代码混在一起。要想使用多种方式来访问我们的应用程序,就必须要把数据从表示层中分离开来,如此就要运用到MVC架构。
如图:
现在科技的发展和用户需求不断的提升要求我们提供越来越多的方式来访问应用程序。MVC模式允许用户使用各种不同样式的视图来访问同一个服务器端的代码。它包括任何WEB(HTTP)浏览器或者无线浏览器(wap),比如,用户可以通过电脑也可通过手机来订购某样产品,虽然订购的方式不一样,但处理订购产品的方式是一样的。由于模型返回的数据没有进行格式化,所以同样的构件能被不同的界面使用。例如,很多数据可能用HTML来表示,但是也有可能用WAP来表示,而这些表示所需要的命令是改变视图层的实现方式,而控制层和模型层无需做任何改变。
3.3 网络拓扑结构
主防火墙备防火墙主交换机VRRP备交换机负载均衡器1负载均衡器2...服务器2服务器1服务器n服务器1服务器n服务器2服务器2服务器2...服务器2服务器1服务器n服务器1服务器n服务器1服务器n服务器1服务器2代理服务器集群(Nginx)网站服务器集群图片服务器集群应用服务器集群光纤交换机生产DB服务器集群查询DB服务器组管理终端光纤交换机磁盘阵列柜磁盘阵列柜
3.3.1 采用双防火墙双交换机,保障平台服务
本系统采用双防火墙接通互联网,在任何一个防火墙或者互联网发生故障后都可以自动的将流量切换到另一端,保证网站的正运行,设备或网络的故障恢复后,自动恢复先前的运行状况。不但如此,系统所采用的双千兆交换机分别接在2台防火墙上,当其中某台设备或者网络链路发生故障后,好的设备自动接管已坏设备的工作,不影响网站的整体运行,根据真实服务器的数量,交换机还可以随时增加。
3.3.2 采用硬件设备负载均衡器,实现网络流量的负载均衡
使用硬件设备负载均衡器,将网络流量均衡的分担到WEB服务器集群的各节点服务器,保障平台服务器资源均衡的使用。3.3.3 采用数据库集群和库表散列
本系统采用了数据库集群和库表散列技术,将大幅提高数据库的存取和查询的处理能力,不仅如此,在本方案中还为集群配置了磁盘阵列,可以在极大程度上增加数据库的存储空间。架构方案所涉及的技术
4.1 负载均衡
4.1.1 基于DNS的负载均衡
DNS负载均衡技术是最早的解决负载均衡的技术。主要是这样实现的,由于在DNS服务器中可以为不同的网络地址配置同一个域名,在DNS服务器进行解析时,它随即的得到其中一个地址。所以对于同一个域名它所解析出的地址是会不同的,用户也就访问不了同地址的Web服务器,从而在一定程度上能起到均衡负载的作用。但基于DNS的负载均衡不是真正意义上的负载均衡,由于DNS服务器在进行地址解析时不会考虑到当前Web服务器的负载情况,如果其中一台Web服务器出现了故障,DNS服务器仍然回把地址解析到此台出现故障的服务器上,导致不能响应客户端。所以在这种情况下必然会导致很大一部分用户不能享受服务器所提供的服务。
4.1.2 基于硬件四层交换的负载均衡
本网站架构就使用了基于硬件四层交换的硬件设备,在硬件四层交换产品中有很多的产品可以选择,大多数的这些产品都是比较昂贵的,但都能提供与之相符合的功能,都是物有所值的。4.1.3 基于软件四层交换的负载均衡
软件四层交换的均衡负载可以使用Linux操作系统中的LVS来解决。4.1.4 通过反向代理服务器来实现负载均衡
反向代理服务器又称为Web加速服务器,它位于Web服务器的前端,充当WEB 7
服务器的内容缓存器,反向代理服务器是专门针对Web服务器设置的,在后台运行的Web服务器对互联网用户是透明的、不可见的,用户只能看到反向代理服务器的网络地址,但却不清楚后台的Web服务器是如何组织架构的。当互联网用户请求Web服务时,DNS服务器将所请求的域名解析为反向代理服务器的IP地址,这样 URL请求将会被发送到反向代理服务器,由反向代理服务器负责处理用户的请求与应答并与后台Web服务器进行交互。如此就利用反向代理服务器减轻了后台Web服务器的负载,提高了访问速度,同时也避免了因用户直接与Web服务器通信带来的安全隐患。如图所示:
目前有许多反向代理软件,比较有名的有Nginx和 Squid。
4.2 页面静态化
4.2.1 什么是静态页面
静态页面是网页的代码都在页面中,不需要执行asp,php,jsp,.net等程序生成客户端网页代码的网页。静态页面不能自主管理发布更新页面。常见的静态页面有以.html扩展名结尾的、.htm扩展名结尾的页面。还有一点是必须注意的,静态页面并非是网页上没有动画就是静态页面。4.2.2 什么是动态页面
动态页面是通过执行asp,php,jsp,.net等程序生成客户端网页代码的网页。动态页面通常可以通过网站后台管理系统对网站内容进行更新管理。发布新闻,发布公司产品,交流互动,博客,网上调查等,这都是动态网站的一些功能,也是我们经常使用的。动态页面常见的扩展命有asp,php,jsp,cgi,.aspx等。当中需要我们注意的是动态页面的动态是指网站与客户端用户互动的意思,而并非网页上有动画就是动态页面。4.2.3 页面静态化
静态的HTML页面严格地由标准的HTML标示语言构成,并不需要服务器端即时运算生成。这意味着对一个静态HTML文档发出访问请求后,服务器端只是简单地将该文档传输到客户端。从服务器运行的那个时间片来看,这个传输过程仅仅占用了很小的CPU资源。
页面静态化就是采用效率最高、消耗最小的纯静态化的html页面来替换动态页面。我们尽可能使我们的网站上的页面采用静态页面来实现,这个最简单的方法其实也是最有效的方法。
4.3 MVC架构
MVC是一个设计模式,它强制性的把应用程序的输入、处理和输出分开。使用MVC将应用程序分成三个核心部件:模型、视图、控制器。它们各自处理自己的任务。4.3.1 视图
视图是用户看到并与之交互的界面。对老式的Web应用程序来说,视图就是由HTML元素组成的界面,在新式的Web应用程序中,HTML依旧在视图中扮演着重要的角色,但一些新的技术已层出不穷,要求要以不同的界面呈现。如何处理应用程序的界面变得越来越有挑战性。MVC一个大的好处是它能为你的应用程序处理很多不同的视图。在视图中其实没有真正的处理发生,作为视图来讲,它只是作为一种输出数据并允许用户操纵的方式。4.3.2 模型
模型表示企业数据和业务规则。在MVC的三个部件中,模型拥有最多的处理任务。例如对数据库的处理。被模型返回的数据是中立的,就是说模型与数据格式无关,这样一个模型能为多个视图提供数据。由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性。4.3.3 控制器
控制器接受用户的输入并调用模型和视图去完成用户的需求。所以当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后再确定用哪个视图来显示返回的数据。4.3.4 MVC应用优势
1.适用性
MVC模式允许使用各种不同样式的视图来访问同一个服务器端的代码。满足了用户不同方式的访问需求。
2.快速部署
使用MVC模式使开发时间得到相当大的缩减,它使程序员集中精力于业务逻辑,界面程序员集中精力于表现形式上。
3.可维护性
分离视图和业务逻辑也使得WEB应用更易于维护和修改。在维护过程中可以细化和减少工作量。
4.4 CDN和镜像网站技术
由于网站的用户可能在不同的网络运营商的网络中,不同网络中信息的交互会比在同一网络中慢。为了解决这个问题,本方案就采用了CDN技术和镜像网站技术。
用户动态内容(社区、投票、调查、搜索、点评、视频)静态内容(静态网页、图片)DNS解析电信用户网通用户CDN其他用户服务器1服务器n服务器1服务器n服务器1服务器n电信机房多线机房网通机房
4.4.1 镜像网站
镜像网站是指将一个完全相同的站点放到几个服务器上,分别都可以有自己的网址,这些服务器上的网站就称为镜像网站。镜像网站和主站并没有什么太大的差别,或者可以说是主站的拷贝。镜像网站的主要优点是,用户如果不能对主站进行正常的访问(如服务器故障,网络故障或者是网速太慢),仍然能通过访
问镜像服务器获得服务。
所以在本次方案中,我们可以在不同的网络运营商部署web服务器,通过软件工具自动同步到不同网络接入商的web服务器上,以作为主站的镜像。然后通过配置智能DNS解析来引导不同网络的访问用户到对应的网络运营商的web服务器。
4.4.2 CDN技术
CDN的全称是Content Delivery Network,即内容分发网络。其基本思想是尽可能的避开互联网上有可能影响数据传输速度和稳定性的环节,使内容的传输速度更快、更稳定。通过在网络各处放置节点服务器所构成的在现有互联网基础之上的一层智能虚拟网络,CDN系统能够实时的根据网络流量和各节点的连接、负载状况以及到各用户的距离和响应时间等综合信息将用户的请求重新导向离用户最近的服务器节点上。其根本目的是使用户可以就近的获取所需内容,避开Internet网络拥挤的状况,提高用户访问网站的响应速度。从技术上全面解决由于网络带宽小、用户访问量大、网点分布不均等原因所造成的用户访问网站响应速度慢的问题。网站的硬件扩容和升级
根据当今时代的发展,中国将会有越来越多的人群加入网民的行列,当然也就会有更多的人愿意通过互联网来购票。所以随着用户的不断增多,为了满足用户的需求,网站对今后的发展和升级也是要必须考虑的。
5.1 增加服务器
当集群不能满足用户的访问要求时,可以考虑在集群中增加服务器,增大整个集群的访问处理能力。
当Web对的并发处理有瓶颈时,增加新的web服务器,把新增的web服务器填加到Web服务器集群中,以增加Web的并发处理能力。
当数据库有处理压力时,可以增加数据库服务器,增加数据库服务器加入数据库的集群中。
5.2 升级服务器
当集群中服务器的各项处理能力不能达到要求时,这时就可以考虑对服务器进行升级。对服务器的升级其实和增加服务器的作用相差无几。但是升级服务器会比增加服务器更加繁琐而且更加昂贵。所以我们一般都采用增加服务器的方法来解决问题。
5.3 增加存储
随着网站的用户访问量的扩大和网站的升级,当然所要存储的信息和数据也就会越来越多,以前的服务器磁盘不再能满足要求。所以此时应当考虑增加磁盘 11
容器或者设立一个新的存储服务器。
5.4 网络扩容
由不断增多的大量的用户访问造成了巨大的网络流量,很可能造成网络的阻塞。原来的网络带宽设计就会无法承受。所以在系统扩容中还要考虑重新申请更大的网络带宽。不仅如此,当带宽增大后,为了适应更大的网络流量,内网交换机的升级也是必须的。
第三篇:软件工程课设-网上火车票订票系统
目录
1.选题意义.................................................................1 2.网上火车票订票系统要达到的目标及限制......................................1 2.1 要达到的目标...........................................................1 2.1.1功能目标...........................................................1 2.1.2 质量及性能目标.....................................................2 2.2 限制...................................................................2 3.用例、事件流及对应活动....................................................3 3.1 系统用例图.............................................................3 3.2 用户注册...............................................................3 3.2.1用例简述...........................................................3 3.2.2 基本事件流.........................................................3 3.2.3 活动图.............................................................4 3.3 用户登录系统...........................................................4 3.3.1 用例简述.........................................................4 3.3.2 基本事件流.......................................................4 3.3.3 活动图...........................................................5 3.4 用户退出系统...........................................................5 3.4.1 用例简述...........................................................5 3.4.2 基本事件流.........................................................5 3.5 按起点终点和出发日期浏览车票...........................................6 3.5.1 用例简述...........................................................6 3.5.2 基本事件流.........................................................6 3.5.3 活动图.............................................................6 3.6 订单生成及支付.........................................................7 3.6.1 用例简述...........................................................7 3.6.2 基本事件流.........................................................7 3.6.3 活动图.............................................................7 3.7 查看订单...............................................................8 3.7.1 用例简述...........................................................8 3.7.2 基本事件流.........................................................8 3.7.3 活动图.............................................................8 3.8 退票...................................................................8 3.8.1 用例简述...........................................................8 3.8.2 基本事件流.........................................................8 3.8.3 活动图.............................................................8 3.9 业务数据管理...........................................................9 3.9.1 用例简述...........................................................9 3.9.2 基本事件流.........................................................9 3.9.3 活动图.............................................................9 3.10 管理员账号管理.......................................................10 3.10.1 用例简述.........................................................10 3.10.2 基本事件流.......................................................10
3.10.3 活动图...........................................................10 4.类图....................................................................11 5.主要时序图..............................................................11 5.1 注册..................................................................11 5.2检索车票..............................................................12 5.3 选座购票..............................................................12
1.选题意义
铁路作为中国最重要的交通工具之一,在市场经济浪潮中,面临着严峻的考验。公路运输的便捷,航空运输的快速,这一切都对铁路运输构成很大的冲击。火车站市场的管理和规范问题,是困扰我们多年的一个老问题,也是政府管理中的一个难点,订票是客运业务中的一个最基本的业务,表面上看,它只是火车站业务的一个简单的部分,但是它涉及到管理与客户服务等多方面,因此,随着我国铁路交通的不断发展,过去传统的售票方式已经不能满足现代客运业务流量剧增的客观要求,简单的窗口售票模式已经不能满足方便人们出行的目的。采用先进的网络技术开发出方便快捷的网上订票系统是现代客运业务发展的必然要求。电子商务的出现,正好带给了铁路客运服务一个发展契机,推出新型的订票方式——网上订票,来缓解订票高峰时期的客运压力,并为用户提供方便快捷的订票服务。它既是技术上的创新,又将完善铁路服务,在一定程度上解决买票难这一大难题,增强铁路竞争力,为铁路争取到更多的客流。本次设计的火车票网上订票系统通过访问主页,可以实现个人信息注册、车次车票价格查询、在线订票退票等基本功能,为用户提供快捷方便的订票服务。
2.网上火车票订票系统要达到的目标及限制 2.1 要达到的目标 2.1.1功能目标
网上火车票订票系统登录管理个人信息管理选座订单管理注册登录查询修改选择起点终点及出发日期选择出发时刻选择座位等级下订单付款 显示取票信息退票显示历史订单图2-1-1用户功能模块图
从用户角度看:
(1)注册:普通用户可以进行注册,输入的注册信息要进行验证,验证正确后将信息存入数据库。
(2)登录:已经注册的普通用户可以正确登录,在登录页面输入信息时,如果信息输入正确可以正确登录进入系统;如果信息输入错误,能够看到信息输入错误提示,并且停留在该系统登录页面。
(3)查询:用户可以实现对个人信息的查询、车次信息的查询和已订车票信息的查询。要求: 对个人信息的查询和修改,用户可以查看并修改自己的基本信息。
2)对车次的查询,可以按照始发站和终点站进行查询。3)对订单的查询,用户可以查看自己订单的所有车票信息。
(4)添加:用户可以进行订票来添加订单。
(5)退票:用户可以对自己已付款订单车次的车票进行退票操作。
网上火车票订票系统1)
登录查询数据管理个人信息车次站点已注册用户添加删除修改 图2-1-2管理员功能模块图
从管理员的角度看:
(1)登录:管理员可以通过登录权限进入管理员模式。
(2)查询:管理员可以对个人信息进行查询、对现有车次进行查询、对站点进行查询和对已注册用户信息进行查询。
1)对个人信息的查询,管理员可以查看自己的基本信息。
2)对车次的查询,可以按照发车车次进行查询,也可以按照始发站和终点站进行查询。
3)对站点的查询,管理员查看所有已存在站点的信息。
4)对已注册用户的查询,管理员可以查看本系统中所有已注册用户的基本信息和其订单信息。
(3)添加:管理员可以实现对车次的添加、对站点的添加和对车票信息的添加。
(4)删除:管理员可以实现对车次的删除、对站点的删除和对车票信息的删除。
(5)管理员可以修改站点信息、车次信息和车票信息。
(6)管理员也可以创建、管理更低权限级别的管理员的权限级别等信息。2.1.2 质量及性能目标
系统使用时,登录、注册、检索浏览车票、生成订单等流程正常。系统可迅速且正确地响应用户的请求。2.2 限制
用户仅能修改自己的信息,不能修改管理员信息、车票信息等数据。
管理员不可以修改更高权限及相同权限级别的管理员的信息。管理员账号只 能由更高级别的管理员创建产生,不能由注册产生,也不能由同权限级别或者更低权限级别的管理员创建产生。系统默认内置一个超级管理员账号,该管理员拥有最高管理权限。
3.用例、事件流及对应活动
网上火车票订票系统描述的主要用例有:普通用户注册,用户(普通用户/管理员)登录系统,用户(普通用户)退出系统,车票浏览,查看订单,检索车票,显示车票信息,订单生成及支付,业务数据管理,管理员账号管理。
3.1 系统用例图
业务数据管理查看历史订单退出系统登录会员管理员查询车次信息管理员账号管理生成订单及支付
图3-1 系统用例图
3.2 用户注册 3.2.1用例简述
用户在购票网站上输入注册信息,成为注册用户。3.2.2 基本事件流
1、用户:在会员注册画面,输入用户编号、密码、用户姓名、证件编号、电子邮件地址和联系电话等信息,提交注册请求;
2、系统:对用户的信息进行检查;
3、系统:用户的信息被系统保存;
4、系统:保存注册信息,提示用户注册成功;
5、用例结束。3.2.3 活动图
用户系统输入注册信息显示注册界面提交注册信息检查注册信息是否合法保存注册信息显示注册成功
图3-2 用户注册活动图
3.3 用户登录系统 3.3.1 用例简述
用户输入合法的用户名和密码后,登录系统。3.3.2 基本事件流
1、用户:在用户登录页面上,输入用户名和密码;
2、系统:根据用户名和密码检索系统,获得用户信息;
3、系统:显示用户登录成功,用户身份由游客变为注册用户;
4、结束用例。3.3.3 活动图
用户系统显示登录界面输入注册信息检查登录信息是否正确显示登录成功
图 3-3 用户登录系统活动图
3.4 用户退出系统 3.4.1 用例简述
用户退出系统。3.4.2 基本事件流
1、用户:提交退出系统的请求;
2、系统:注销用户,显示退出成功;
3、用例结束。3.4.3 活动图
用户系统用户提交退出请求显示退出成功
图 3-4 用户退出系统活动图 3.5按起点终点和出发时间检索车票 3.5.1 用例简述
根据用户选择的起点终点以及出发日期显示列车信息。3.5.2 基本事件流
1、用户:选择起点和终点以及出发日期;
2、系统:检查起点和终点是否正确;
2、系统:显示符合用户选择的列车信息;
3、用户:选择某辆列车;
4、系统:显示用户选择的列车的车票信息;
5、用例结束。3.5.3 活动图
用户系统显示查票界面输入起点、终点、出发日期起始点是否正确显示各时间的列车信息选择某辆列车显示车票信息
图 3-5按照起点终点和出发日期检索车票活动图 3.6 订单生成及支付 3.6.1 用例简述
用户下单并完成支付,系统检查是否完成支付。3.6.2 基本事件流
1、用户:选择车次、座位;
2、用户:提交订单请求;
3、系统:检查用户是否已经登录;
4、系统:检查座位选择是否有效;
5、系统:生成订单,显示付款页面;
6、用户:选择支付方式,输入付款信息,进行付款;
7、系统:检查支付信息是否正确,是否完成支付;
8、系统:存储并显示车票信息等订单详情;
9、用例结束。3.6.3 活动图
用户系统选择车次、座位提交订单请求检查登录信息是否正确检查座位选择是否正确选择付款方式生成订单,显示付款界面付款检查是否完成支付保存订单信息
图 3-6订单生成及支付 3.7 查看订单 3.7.1 用例简述
顾客查看自己的历史订单。3.7.2 基本事件流
1、用户:提交查看历史订单请求;
2、系统:显示该用户所有的历史订单信息;
3、用户:选择某一条订单;
4、系统:在订单详细页面显示用户选择的某一条订单的详细信息;
5、用例结束。3.7.3 活动图
用户系统提交查看历史订单请求显示历史订单列表选择某一条订单显示选中的订单详情
图 3-7 查看订单活动图
3.8 退票
3.8.1 用例简述
顾客选择退掉已经购买的车票。3.8.2 基本事件流
1、用户:选择已购买的车票并提交退票请求;
2、系统:检查退票请求是否合法;
3、系统:显示退票成功,返回原来页面;
4、用例结束。3.8.3 活动图
用户系统显示退票界面选择车票并提交退票请求退票请求是否合法显示退票成功
图 3-8 退票活动图
3.9 业务数据管理 3.9.1 用例简述
管理员管理商品,订单,会员等相关的业务数据,包括对数据的新增,更新,删除,查询。3.9.2 基本事件流
1、管理员:实施业务数据的新增,更新,删除,查询操作;
2、系统:检查管理员登录信息;
3、系统:保存管理员对业务数据的相关操作;
4、用例结束。3.9.3 活动图
管理员系统管理业务数据检查管理员登录信息检查管理员权限保存管理员操作
图 3-10业务数据管理 3.10 管理员账号管理 3.10.1 用例简述
管理员实现对较低级别的管理员账号的管理。3.10.2 基本事件流
1、管理员:对系统中的较低级别的管理员账号进行新增,更新,删除,权限更改等操作;
2、系统:检查管理员登录信息;
3、系统:保存管理员的操作;
4、用例结束。
3.10.3 活动图
管理员系统管理管理员账号检查管理员登录信息检查管理员权限保存管理员操作
图 3-11 管理员账号管理 4.类图
订单-下单时间 : string-价格 : float-起点 : string-终点 : string-出发时间 : string-站台号 : string1-列车编号 : string-座位号 : string火车票-列车编号 : string-价格 : float-起点 : string-终点 : string-出发时间 : string-到达时间 : string-座位等级 : string-座位号 : stringm..n管理员-ID : string-用户名 : stringm..n-密码 : string-权限 : string-特性1-手机号 : string-地址 : string-真实姓名 : stringm..n+登录()+退出()+业务数据管理()+管理员账号管理()*1*注册用户-ID : string-用户名 : string-密码 : string-身份证号 : string-手机号 : string-E-mail : string-地址 : string-真实姓名 : string-注册时间 : string+登录()+退出()+检索车票()+选座下单()+查看订单()+支付()+个人信息管理()未注册用户-ID : string+注册()0..11m..n
图 4-1 类图
5.主要时序图 5.1 注册
注册界面注册系统注册用户表用户输入注册信息提交注册请求[未填写注册信息]填写注册信息提交注册信息进行合法性检查[注册信息合法]保存注册信息返回保存结果返回注册结果显示注册结果
图 5-1 用户注册时序图 5.2检索车票
检索界面检索系统车票用户选择起点终点及出发日期[未填写查询信息]填写查询信息提交查询信息检索信息返回检索结果返回检索结果显示检索结果
图 5-2 检索车票时序图
5.3 选座购票
选座界面选座系统座位表订单界面订单系统订单表用户点击选座提交选座请求查询剩余座位返回座位数据返回座位数据请求锁定座位锁定座位返回选座信息返回选座信息显示选座成功点击下单请求生成订单保存订单信息返回订单信息显示订单信息返回订单信息
图 5-3 选座购票时序图
第四篇:火车票管理系统
火车票管理系统一、课题内容和要求
改系统要求实现一个简单、实用的火车票管理程序,主要功能包括火车票数据的录入、查找、删除、显示、售票、退票等。所有火车票数据都要利用文件系统保存,以备系统下次运行时使用。通过此课题,熟练掌握文件、数组、指针的各种操作,以及一些基本算法思想的应用。
二、需求分析
功能框架图:(见图2-1)
火车票管理系统
录入
查找
删除
排序
售票
退票
保存
图2-1。
1.新增火车票数据记录:预先建立一个txt文档,存入数据,然后在程序中读取文档。
2.查找火车票数据(可按车次,发车时间、起点站、终点站等查找)。
3.删除火车票数据记录(先查找,再删除。若查找出多条记录,则进一步提示用户选择记录的车次,再删除)。
4.对火车票排序(可按车次、发车时间、起点站、终点站等排序。)。
5.显示当前所有火车票信息列表。
6.售票(先查找,当确定车次后,根据售票张数对该车次的已售票人数进行修改)。
7.退票(售票的逆处理,过程与售票类似)。
8.保存火车票数据到文件中。
9.从文件中读入火车票数据。
三、概要设计
1)主要结构体:
struct
time
{
int
hour;
int
minutes;
};
struct
ticket
{
char
SerialNumber[10];
struct
time
SetOut;
char
DeparturePoint[MAX];
char
TerminalPoint[MAX];
float
LastTime;
int
FixNumber;
int
FixedNumber;
}train[N];
2)主要函数流程图:
l
载入函数:用于从文本中载入信息。(见图3-1)
打开文本
能否打开
读入数据
是否结束
结束
否
否
开始
开始
否
是
是
读入车次
是否符合输出信息
结束
是
图3-2
图3-1
l
查找函数:利用输入的车次或站点进行顺序查找并将找到的信息输出。(见图3-2)
l
删除函数:先查找出要删除的信息再删除。(见图3-3)
否
否
是
无法订票
人数加一
是否超载
否
图3-4
结束
开始
读入车次
是否误点
否
图3-3
是
是
否
是否符合读入车次
开始
记录下标i
i=i+1,i++
i<车次总数-1
结束
l
售票退票函数:先判断该车是否已发车,若未发车且人未满则订票成功,否则无法订票退票。(见图3-4)
l
备份文件函数:将文件内容存储到用户给定的地址中(见图3—5)
图3-5
l
排序函数(见图3-6)
图3-6
四、源程序代码
#include
#include
#include
#include
#include
#include
const
int
MAX=20;
const
int
N=50;
const
int
MAXFILENAME=100;
enum
{FALSE,TRUE};
struct
time
{
int
hour;
int
minutes;
};
struct
ticket
{
char
SerialNumber[10];
struct
time
SetOut;
char
DeparturePoint[MAX];
char
TerminalPoint[MAX];
float
LastTime;
int
FixNumber;
int
FixedNumber;
}train[N];
int
RecordNumber;
int
FLAG=FALSE;
/**********************************************/
int
ShowMessage(void);
//载入原始数据
void
mainmenu(void);
//主菜单
void
InsertMessage(void);
//录入班次信息
void
SearchMenu(void);
//查询路线子菜单
void
SearchByNumber(void);
//按班次号查询
void
SearchByAddress(void);
//按终点站查询
void
cancle(void);//删除数据
void
selection(ticket
*pa,int
n);//排序
void
TicketManagement(void);
//车票售出与退回
void
TicketOrder(void);
//售票
void
TicketDelete(void);
//退票
void
exit(void);
//退出该系统
void
SaveRecord(ticket
x);
//储存信息到文件中
/********************************************/
int
main(void)
{
do{
mainmenu();
}while(FLAG==FALSE);
return
0;
}
void
mainmenu(void)
{
system(“mode
con:
cols=140
lines=130“);
char
functionNumber;
printf(“
火车票管理系统\n\n“);
printf(“============================================================================\n“);
printf(“
1.录入班次信息\t\n“);
printf(“
2.显示所有车票信息列表\t\n“);
printf(“
3.查询火车票数据\t\n“);
printf(“
4.删除火车票数据记录\t\n“);
printf(“
5.按行车时间排序\t\n“);
printf(“
6.售票与退票系统\t\n“);
printf(“
7.退出该系统\t\n“);
printf(“============================================================================\n“);
printf(“请选择你所需要的功能:“);
scanf(“%c“,&functionNumber);
switch(functionNumber)
{
case
'1':
{
InsertMessage();
printf(“\n按任意键回主菜单......\n“);
getchar();
getchar();
}
break;
case
'2':
{
RecordNumber=ShowMessage();
printf(“\n按任意键回主菜单......\n“);
getchar();
getchar();
}
break;
case
'3':
{
SearchMenu();
printf(“\n按任意键回主菜单......\n“);
getchar();
getchar();
}
break;
case
'4':
{
cancle();
printf(“\n按任意键回主菜单......\n“);
getchar();
getchar();
}
break;
case
'5':
{
selection(train,RecordNumber);
printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“);
int
i;
for(i=0;i { printf(“%s\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].FixNumber,train[i].FixedNumber); } printf(“\n按任意键回主菜单......\n“); getchar(); getchar(); } break; case '6': { TicketManagement(); getchar(); getchar(); } break; case '7': { int i; FLAG=TRUE; for(i=0;i { SaveRecord(*(train+i)); } exit(); } break; default: { printf(“输入错误,请确保你的输入为1--7.\n“); printf(“按任意键回主菜单......\n“); getchar(); getchar(); } }//switch ends FLAG=FALSE; } void InsertMessage(void) { FILE *fp; char filename[MAXFILENAME]; int i; printf(“请输入文件名或者文件路径名:“); scanf(“%s“,filename); if((fp=fopen(filename,“r“))==NULL) { printf(“文件%s不可读,请确认文件%s存在或者文件路径正确.\n\n“,filename,filename); mainmenu(); } for(i=RecordNumber;!feof(fp)&&!ferror(fp);i++) { fscanf(fp,“%s%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].FixNumber,&train[i].FixedNumber); } RecordNumber=i; /*******************************输出更新后的订票记录************************************************************/ printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“); for(i=0;i { printf(“%s\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].FixNumber,train[i].FixedNumber); } fclose(fp); } int ShowMessage(void) { int i; FILE *fp; if((fp=fopen(“add.txt“,“r“))==NULL) { printf(“读取数据失败,请检查文件add.txt是否存在.\n“); exit(-1); } for(i=RecordNumber;!feof(fp)&&!ferror(fp);i++) { fscanf(fp,“%s%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].FixNumber,&train[i].FixedNumber); } int count=i; printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“); for(i=0;i { printf(“%s\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].FixNumber,train[i].FixedNumber); printf(“\n“); } return count; } void SearchMenu(void) { system(“mode con: cols=140 lines=130“); char functionNumber; 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':SearchByNumber();break; case '2':SearchByAddress();break; case '3': getchar(); mainmenu(); break; default: printf(“输入错误,请确保你的输入为1--3.\n“); printf(“按任意键回查询子菜单......\n“); getchar(); getchar(); SearchMenu(); } } void SearchByNumber(void) { int i; char Number[MAX]; printf(“请输入班次号:“); scanf(“%s“,&Number); printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“); for(i=0;i { //对比终点站记录,找到并输出 if((strcmp(Number,train[i].SerialNumber))==0) { printf(“%s\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].FixNumber,train[i].FixedNumber); } } } void SearchByAddress(void) { int i; char Address[MAX]; printf(“请输入终点站的名称:“); scanf(“%s“,&Address); printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“); for(i=0;i { //对比终点站记录,找到并输出 if((strcmp(Address,train[i].TerminalPoint))==0) { printf(“%s\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].FixNumber,train[i].FixedNumber); } } } void cancle(void) { SearchMenu(); int i,j; char m[MAX]; printf(“请输入要删除的班次:“); scanf(“%s“,&m); for(i=0;i { if(i==RecordNumber) { printf(“对不起,没有这趟车\n“); } } for(j=i;j { train[j]=train[j+1]; } printf(“删除成功\n“); } void selection(ticket *pa,int n) { int i,k,index; struct ticket temp; for(k=0;k { index=k; for(i=k+1;i if(pa[i].LastTime index=i; if(index!=k) { temp=pa[index]; pa[index]=pa[k]; pa[k]=temp; } } } void TicketManagement(void) { char functionNumber; system(“mode con: cols=140 lines=130“); printf(“ 订票与退票菜单\n“); printf(“============================================================================\n“); printf(“ 1.订票\t\n“); printf(“ 2.退票\t\n“); printf(“ 3.返回主菜单.\n“); printf(“============================================================================\n“); printf(“选择你需要的功能:“); scanf(“%*c%c“,&functionNumber); switch(functionNumber) { case '1': { TicketOrder(); //getchar(); //getchar(); } break; case '2':TicketDelete();break; case '3': { getchar(); mainmenu(); } break; default: { printf(“输入错误,请确保你的输入为1--3.\n“); printf(“按任意键回主菜单......\n“); getchar(); getchar(); mainmenu(); } } } void TicketOrder(void) { SearchMenu(); int i,j; char a[MAX]; printf(“请输入要订购的车票的班次:“); scanf(“%s“,&a); printf(“请输入要订购的车票的张数:“); scanf(“%d“,&j); for(i=0;i { if((strcmp(a,train[i].SerialNumber))==0) { if(train[i].FixedNumber { (train[i].FixedNumber)+=j; printf(“你的订票成功,请按时上车,谢谢使用!\n“); printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“); printf(“%s\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].FixNumber,train[i].FixedNumber); } else printf(“对不起,票已卖完\n“); } } } void TicketDelete(void) { SearchMenu(); int i,j; char b[MAX]; printf(“请输入要退购的车票的班次:“); scanf(“%s“,&b); printf(“请输入要退购的车票的张数:“); scanf(“%d“,&j); for(i=0;i { if((strcmp(b,train[i].SerialNumber))==0) { if(train[i].FixedNumber>=1) { train[i].FixedNumber-=j; printf(“退订车票成功,谢谢使用!\n“); printf(“班次\t发车时间\t起点\t终点\t行车时间(小时)\t额定载量\t已定票人数\n“); printf(“%s\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].FixNumber,train[i].FixedNumber); } else printf(“对不起,今天的这趟车的票尚未卖出,无法完成退票!\n“); } } } void exit(void) { printf(“\n\n*********************谢谢使用本系统,欢迎下次继续使用***********************\n“); exit(0); } void SaveRecord(ticket x) { FILE *fp; if((fp=fopen(“add.txt“,“a“))==NULL) { printf(“打开文件%s失败\n“,“add.txt“); exit(-1); } fprintf(fp,“\n%s\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.FixNumber,x.FixedNumber); } 五、测试数据及其结果分析 显示的主菜单界面: 火车票管理系统 ============================================================================ 1.录入班次信息 2.显示所有车票信息列表 3.查询火车票数据 4.删除火车票数据记录 5.按行车时间排序 6.售票与退票系统 7.退出该系统 ============================================================================ 请选择你所需要的功能: 1)录入班次信息 输入:1 输出:请输入文件名或者文件路径名: 输入:D:\\1.txt 输出: 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 200 k1234 10:20 上海 苏州 2.0 200 t2222 12:40 长沙 上海 9.0 250 k2323 13:50 扬州 南京 1.5 200 k1122 9:20 广州 南京 20.0 300 170 按任意键回主菜单......2)显示所有车票信息列表 输入:2 输出: 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 200 k1234 10:20 上海 苏州 2.0 200 t2222 12:40 长沙 上海 9.0 250 k2323 13:50 扬州 南京 1.5 200 k1122 9:20 广州 南京 20.0 300 170 按任意键回主菜单......3)查询火车票记录 输入:3 输出: 查询子菜单 ============================================================================ 1.按班次号查询 2.按终点站查询 3.返回主菜单 ============================================================================ 请选择你所需要的功能: 输入:1 输出:请输入班次号: 输入:k1111 输出: 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 200 按任意键回主菜单......输入:2 输出:请输入终点站的名称: 输入:上海 输出: 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 200 t2222 12:40 长沙 上海 9.0 250 按任意键回主菜单......4)删除火车票数据 输入:4 输出:查询子菜单 ============================================================================ 1.按班次号查询 2.按终点站查询 3.返回主菜单 ============================================================================ 请选择你所需要的功能: (查找过程同上) 输出:请输入要删除的班次: 输入:t2222 输出:删除成功 按任意键回主菜单......5)按行车时间排序: 输入:5 输出: 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k2323 13:50 扬州 南京 1.5 200 k1234 10:20 上海 苏州 2.0 200 k1111 8:30 南京 上海 4.0 300 200 t2222 12:40 长沙 上海 9.0 250 k1122 9:20 广州 南京 20.0 300 170 按任意键回主菜单......6)售票 输入:6 输出: 订票与退票菜单 =================================================== 1.订票 2.退票 3.返回主菜单 ================================================== 选择你需要的功能: 输入:1 输出: 查询子菜单 ======================================================================== 1.按班次号查询 2.按终点站查询 3.返回主菜单 ========================================================================= 请选择你所需要的功能: (查询过程同上) 输出:请输入需要订购的车票班次 输入:k1111 输出:请输入要订购的车票张数 输入:10 输出: 您的订票成功,请按时上车,谢谢使用! 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 210 7)退票 输入:6 输出: 订票与退票菜单 =================================================== 1.订票 2.退票 3.返回主菜单 ================================================== 选择你需要的功能: 输入:2 输出: 查询子菜单 ======================================================================== 1.按班次号查询 2.按终点站查询 3.返回主菜单 ========================================================================= 请选择你所需要的功能: (查询过程同上) 输出:请输入需要退购的车票班次 输入:k1111 输出:请输入要订购的车票张数 输入:5 退订车票成功,谢谢使用! 班次 发车时间 起点 终点 行车时间(小时) 额定载量 已定票人数 k1111 8:30 南京 上海 4.0 300 195 8)退出 输入:7 输出:****************谢谢使用本系统,欢迎下次继续使用**************** 结果分析:(1).若输入数字不在1——7之间,则会提示错误。 (2).当输入列车班次信息不正确时,将不会得到结果。 (3).文件录入不正确时,将不会得到任何结果。 六、调试过程中的问题 1)文件存储方式不正确:应先定义一个文件存储函数,在其它函数中调用,方便有效。 2)删除时若遇到没有的班次则程序出错。应在不存在输入的列车班次时,输出不存在的提示 3)保存后在下次运行时出错问题:在保存信息时,应在每个信息之间加一空格来保存,否则在文件下次使用时读取就会没有分界点。 4)订票退票只能一次一张。应在用户输入列车班次后让用户输入需要订购的张数。 5)结构指针定义错误,ticket前不应加struct。 火车票管理系统可行性报告 一.引言 学习《面向对象程序设计》课程必须重视实践环节,即通过C#结合实际需求开发应用程序。本次课程实习选择使用C#开发数据库应用程序,它能将所学的C#整合SQL Server数据库知识,形成与应实际紧密结合的连贯整体,进一步加深学生对C#基础语法的理解,加强对WinForms编程的认识,提高应用ADO.NET这一.NET中数据库驱动解决方案核心技术的能力,为将来的软件设计工作打下一定的基础。 该课程的实习主要是锻炼学生的实际动手与操作的能力,充分实现理论与实践相结合,从而培养出优秀的学生! 1.摘要 系统名称: 火车票管理系统 系统功能: 实现管理员对系统的增删改查等一系列的功能,让客户可以订票、退票等,该系统只要实现简单的操作功能。 2.背景 扬州环境资源职业技术学院1012网络班小组成员在C#面向对象程序设计该课程的实训周内进行的课程实训,借此提高学生的动手能力,理论与实践相结合的能力;该系统主要是在Visual Studio C# 2005的基础上与SQL数据库相结合而成的面向对象的程序设计系统。 二.系统开发的背景、必要性及意义 1.现行系统调查研究 (1)组织机构:扬州环境资源职业技术学院 1012网络班;指导老师:陈彦(2)实训时间:2011年12月26日至2012年1月6日 (3)小组成员:徐涛平(组长)、,孙淑茵、孙垚垚、,夏盼盼、,柏铭慧、,华飞龙、,陈龙、,顾汉明 (4)成员任务:徐涛平、,孙垚垚、,夏盼盼、,柏铭慧、,华飞龙、,陈龙、,顾汉明负责系统相关文档的编写;,柏铭慧负责前期的数据库设计;孙淑茵负责设计后期与系统相连接的数据库DB的设计,并负责系统的编码编写。 (5)计算机应用情况:台式机装有Visual Studio C# 2005和SQL数据库 2.需求调查和分析 对于现在网络的迅速发展,人们越来越关注网络。人们在网络上进行交易,购物,订餐等。在网上进行订票也越来越受人们的欢迎。鉴于这种情况,本人孙淑茵想要开发一个类似的系统,故而有了现在的火车票管理系统。 该系统由于是本人的初次尝试开发,所以功能比较的简单,还存在不足之处。 三.可行性分析 1.系统运行可行性分析 该系统只需要一台装有Visual Studio C# 2005和SQL数据库的的电脑就可以进行运行,对于企业来说,这是最简单的、最实用的系统了;对于人员来说,不需要花费大量的金钱进行人员的培训,只需要招聘一个相关专业的计算机人员,就可以对系统进行操作。2.技术可行性 火车票管理系统功能简单,对人员要求以及技术要求不高,在这方面,只需要一个计算机相关专业的人员就可以操作系统,在技术上完全可以进行。3.经济可行性 在经济上,不需要额外的费用,只需要付费开发人员即可,可以说是一劳永逸,在后期,不需要企业花费费用,只需要技术人员进行定期的维护即可,在经济上完全可行。 四.系统功能简单介绍 1.数据库 火车票管理系统连接的数据库主要是SQL数据库,数据库的名称为DB.mdb,它包括了Stype表、Train表和UserInfo表三张表,由于时间匆忙,所以只有这三张表,进而组成与系统相连接的数据库。详见下图4.1 图4.1 2.系统功能介绍 火车票管理系统功能比较简单,管理员可以对系统进行增删改查,而一般的浏览者就可以对系统进行相应的查票、订票、退票操作,而不能像管理员那样对系统进行增删改查等操作,从而保证了系统的安全性。下图是系统的相关截图,如图4.2、4.3所示: 图4.2 图4.3 五.结论 在2011年12月26日至2012年1月6日实训期间,小组成员团结协作,共同努力,完成了火车票管理系统的开发,在这个过程中每个成员的努力都市值得褒奖的,尤其是负责代码编写的孙淑茵为我们的系统完成与完善更是值得奖励的。 火车票管理系统功能简单,实现方便,但也耗费了人力物力与心力,能在短时间内开发出这样一个的系统,我们的努力是值得肯定的,但是这个系统还存在着不足之处,有望在以后的日子里,对系统进行改善和维护。 六.说明 在这里,对相关的问题做一些说明: 1.我们是软件技术基础实训和C#课程实训前后进行的,软件技术基础实训在前,分组也是在软件技术基础实训期间分的,相关的文档也是在此期间完成的,代码也是在此期间编写完成,只是比较不完善,而且在软件技术基础实训期间小组成员负责前期数据库设计出的数据库并不能用,都是中文,并且表与表之间没有相关的联系,所以负责代码编写的孙淑茵就自己设计了一个数据库DB。 2.在后来的C#实训期间,小组成员孙淑茵自己对软件技术基础实训期间不完善的火车票管理系统进行了改进,在陈彦老师的指导下,才有了后来的完善的火车票管理系统,可以说这个火车票管理系统是孙淑茵同学的私有产物,与小组其他成员关系不大,在此说明一下。第五篇:火车票管理系统可行性报告(本站推荐)