火车票订票系统
姓名:
编号:
专业:
学校:
摘 要
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对火车信息进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高火车信息管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。
本论文主要阐述一个功能比较强大的火车票订购系统的后台操作过程及一些关键技术。该系统信息来源主要由管理员添加,方便火车票管理员的查询,用户可以通过查询到相关的火车票信息,选择是否适合自己,也可以在网上直接订票,省时省力。由于本系统的开发以节省资源为首,充分利用网络资源,所以本火车票订购上所看到的火车票信息均来自互联网。
关键词:火车票管理,订票查询,用户管理
Abstract
Along with the science and technology unceasing enhancement, computer science Cheng?qi the formidable function profoundly had known day after day for the people that, it entered the human society each domain and plays the more and more vital role □to take the computer application a part, uses the computer to carry on the management for the student information, has the manual administration center to be unable to compare superiorly □for example: Retrieves, the search rapidly convenient, the reliability high, the reserves big, the secrecy good, the life long, the cost is low and so on. These merits can enormously enhance the student information management the effect □also are enterprise's scientific style, the standardized management, connects rails the important condition with the world
The present paper mainly elaborates a function quite formidable train ticket order system backstage operating process and some essential technologies. This system information originates mainly increases by the manager, the convenient train ticket manager's inquiry, the user may through inquire to the related train ticket information, chooses whether suits oneself, also may the on-line direct order form, time-saving reduce effort. Because this system development take saves the resources as a head, fully uses the network resources, therefore in this train ticket order saw to the train ticket information comes from the Internet.
Key word: The train ticket management, the information issued, user management
目 录
摘 要......................................................................... 2
Abstract........................................................................ 3
目 录 ......................................................................... 4
第一章 概 述 ................................................................. 5
1.1 项目开发背景 ............................................................ 5
1.2 系统开发目的 ............................................................ 6
1.3 技术可行性研究 .......................................................... 7
第二章 开发平台介绍 .......................................................... 9
2.1系统的架构 .............................................................. 9
2.2系统运行环境操作系统 .................................................... 9
2.3系统开发环境 ............................................................ 9
2.4开发工具 ............................................................... 10
第三章 数据库设计 ........................................................... 16
第四章 总体设计 ............................................................... 17
4.1 系统详细调查 ........................................................... 17
4.2数据流图 .............................................................. 18
4.3 数据库设计 ............................................................. 19
第五章 系统的实现 ............................................................ 21
5.1 主窗口界面 ............................................................ 21
5.2 添加车次信息窗口 ....................................................... 24
5.3 客户信息输入窗口 ....................................................... 29
5.4售票信息模块 ........................................................... 31
5.5 车票信息报表 ........................................................... 33
总结与展望..................................................................... 36
致 谢 ........................................................................ 37
参考文献....................................................................... 38
第一章 概 述
1.1 项目开发背景
又是一年春节将近,铁路又一次迎来春运高潮。随着春节的一天天临近,远离家乡的游子们回家的心情是多么的急迫!然而,交通问题总是大部分游子们最头疼的事情,不是因为支付不起,而是有钱却买不到回家的车票。通过火车票经纪公司订票,总是听到令人失望的消息;去火车站排队,等排到自己的时候,票已售完;拉关系、找人,仍然无法得到准确的回音;各种门路,只要能想到的,人们都去想了。
有人感叹票贩子太可恶,有人感叹中国人太多,有人感叹中国铁路的运力不足。所有这些都是问题的表面现象。在 2003 年 4 月份,当人们面临“非典”的威胁时,带着对北京的恐惧而“逃离”北京时,似乎并没有来自交通方面的压力。这是因为在当时,人们已经不仅局限于乘坐火车离开了,而是有能力乘飞机就乘飞机,有能力乘火车就乘火车,赶不上火车汽车也行。所以一天之内竞会有几十万的人离开北京(具体数字不详,但绝不夸张)。旅客得到了很好的分流。
为什么春运会有如此大的压力呢?而最终绝大多数人还是能够圆了自己回家过春节的梦呢?
当问起人们春节怎样回家时,一般人都回答是乘火车。火车的票价和舒适程度以及快捷的速度和相对的安全性,是人们选择火车的主要原因。这时,并没有“非典”的威胁促使人们立即就离开。从而使火车票的需求远远超过火车票的供给。但这还构不成买票难的最大原因。
问题的根源在于中国的火车票交易市场缺乏一种公平的交易机制。在现有的火车票交易市场上,由于信息不充分(信息不透明)和信息不对称,使得铁路部门的内部人员交易与火车票的黑市交易相结合,极大的扰乱了正常的火车票交易市场。在信息极不充分的现有条件下,通过组织公安人员打击火车站的票贩子是无济于事的。票贩子可以分成几种类型:第一种是在火车站排队,通过先于其他人挤到售票窗口,抢购火车票,然后以高于票面金额的价格转手;第二种是火车站的售票员建立私人交情,在车票还没有离开窗口时,便已经预留,然后交与同谋者以高价售出;
第三种是与火车站的内部管理人员相勾结,其所拥有的车票资源最为丰厚,获利最多,也最为隐蔽;第四种是火车票经纪公司,说它是票贩子,它可能会觉得有点冤,但是它的部分交易行为与第一种票贩子无异,只不过是借助了电脑网络。在所有上述四种票贩子当中,公安人员实际上只能对第一种票贩子进行较为有力的打击,但是当第一种票贩子出现在公安人员的内部时,这种打击力度又会大打折扣。 解决问题的途径在于建立火车票的网上交易市场,并制定相应的交易规则。这有点像是股票交易市场和外汇交易市场,但应该有比股票交易市场更为详细的交易规则。铁路公司首先将火车票按照软卧、硬卧、硬座以及无坐等不同等级的火车票规定基准票价,然后委托给售方经纪公司,这类似于证券市场上的初级市场(股票一级市场),由经纪公司代为拍卖,经纪公司在拍卖中收取佣金。乘客可以直接从售方经纪公司购买火车票,也可以通过买方经纪公司代为购票,并向经纪公司支付一定的佣金。火车票交易的价格则通过自动报价系统通过买价与卖价的匹配来实现,对于不匹配的,可以进一步协商,最终在双方认可的价格上成交。火车票的售方经纪公司可以是专业化的经纪公司,也可以由银行等金融机构代理,充分利用银行发达的电子网络系统。买方经纪公司也可以是银行或专业经纪公司。
为了使火车票的购买者是最终的乘客,乘客购买火车票时需要出示自己的身份证,并被扫描,与火车票同时打印,这样每张售出的火车票都将对应唯一的身份证号、姓名以及照片,并且每一身份证仅可买一张票。这样基本可以保证最需要火车票的人购到票,减少票贩子参与交易的机会。
在火车票的网上交易市场上,由于需求大于供给,火车票的价格要高于现有交易方式下的票价,这部分溢价一方面成为经纪公司的利润来源,一方面可以增加铁路公司的收入,使铁路公司有能力进一步投资以扩大运营能力,再一方面是,随着拍卖价格的提高,会有一部分本来想乘火车的人改乘其它的交通工具。最终使得供需矛盾得到缓解,人们顺利的回家。
1.2 系统开发目的
这次我做的这个设计是一个动态火车票定票系统,运用VB编程。实现后台管理。如今商业发展,金融与市场更加的具备开拓性。我觉得做这个设计很有它现实的价值和意义;(再则,可以通过这次设计,提高我本身的水平,对进一步和社会接洽并
成为祖国可靠的栋梁具有促进推动的作用。实际上在这设计里面,我们可以获得许多宝贵的实践经验,在一生中都会受益。我们在今天做的每件事都会对我们的未来产生影响。道理浅显,但未必每个人都能理解。许多同学以为自己大学毕业了,已经很行了,但是到了实际工作中就会发现这种想法是多么的幼稚可笑。作为一名计算机专业的应届毕业生,原以为找工作是很容易的,但现实还是超想象,当今是知识经济时代,经济高速发展的同时也带动教育行业的发展,每年的大学毕业生都在不断增多,再加上计算机相关行业都需本科以上并要求要有工作经验,这对一名应届毕生来讲找份工作实在是难上加难。
研究设计工作从3月初到5月1号,从资料的收集整理到程序的编写,制作过程当中一边编写程序一边巩固学习VB的编程。整个设计的制作之中,感觉出来很多程序的运行效率考虑的还不是很全部,这个跟平时在学校学习其他语言的时候犯了同样的毛病——算法考虑的不全面;程序的安全性也有所欠缺,这主要是本人对语言知识的不全面型造成。这两个方面有待以后走出学校参加工作以后继续要学习注意的地方。
1.3 技术可行性研究
在本次论文中,为了更好的完成论文工作,我经过多方面的参考和研究,参考了之前学生的毕业论文,又研究了好多本方面的书籍,终于写下了今天的毕业论文。
本次论文完成的工作有:本次论文的选题背景、目的意义、开发平台的技术简介(VB6.0简介和ACCESS2000技术的简介)、数据库简介、需求分析包括系统的业务流程图和数据流程图、模块结构设计、数据库设计包括系统E-R图、系统功能设计、系统输入设计即对系统的简单介绍。
在做数据库设计时,我根据系统的实际情况画出了系统E-R图,以便于老师更深入的了解本系统。同时还列出了系统用到数据库中所有表的表结构,以便于参照表结构来看待本系统。
系统功能设计即系统的功能框图,以便于用户能够对本系统所实现的各项功能一目了然,从而更好地应用。
对系统的简单的介绍,有点类似于产品说明书,使老师容易地知道系统的使用
方法。
关于本篇论文实现的工作就介绍到这里,具体的工作,还请老师详看本篇论文。
第二章 开发平台介绍
2.1系统的架构
本系统开发使用的系统只是普通的PC机,操作系统为Windows 2000 Professional版本。考虑到使用的数据量不大,数据库的建立使用的是ACCESS2000。数据访问方法为使用ADO(Active数据对象ActiveDataObjects)通过ODBC的方法同数据库接口。使用这种方式访问数据,可以使用任何一种ODBC数据源,即不止适合于SQL Server、 Oracle、 Access等数据库应用程序,也适合与Excel表格、文本文件、图形文件和无格式的数据文件。
2.2系统运行环境操作系统
采用的是当前流行的主流操作系统微软公司的WindowsXP。
2.3系统开发环境
系统开发环境包括硬件平台和软件平台两种。
硬件平台是指开发与运行所需要的硬件环境,主要包括计算机机型及硬件配置。由于本系统是一个小型的MIS管理系统,因此对计算机硬件的要求不高,比较经济,只要配备有PII300处理器(或以上)、64M内存(或以上)、20G硬(或以上)的普通微机即可顺利运行。
软件平台是指系统开发与运行的软件环境。本系统在开发时选用了稳定性较强的Windows XP中文专业版和Visual Basic6.0作为开发语言,同时选用了ACCESS2000数据库,由于这些软件产品都是Microsoft公司的产品,因此彼此之间的兼容性较好,开发出的应用系统稳定性较高。
Visual Basic 6.0具有可视化的开发环境,可以快速完成系统的开发,内部集成的数据库访问通道,使得可以轻松方便的对数据库管理。
数据库采用ACCESS2000,由于我们的系统要求,采用它完全可以适合我们的工作需求,并且它所支持的数据类型十分丰富,维护简便,费用较低,容易升级。
2.4开发工具
在确定了操作系统后,就该选择开发工具了。经过了综合的比较而且最重要的是本人在铁路期间学习的就是Visual Basic。这个是个数据库管理系统,系统,所以我们必须得选一个合适的数据库。考虑到我这个系统针对的用户,已经价格方面的考虑,完全可以使用Access2000来进行开发,而且我在使用Visual Basic的时候,操作数据库方面使用的是微软提供的数据访问接口,先我们来了介绍一下Visual Basic以及微软提供了哪些数据库访问方法,并且各自都有什么特点。
2.4.1Visual Basic的简介
首先,我们还从Visual Basic这个名字开始,来认识这个软件。所谓“Visual”指的是开发图形用户界面 (GUI) 的方法。它不需编写大量的代码去描述界面元素的外观和位置,而只要把预先建立的对象添加到屏幕上的某一位置即可。如果已使用过诸如 Paint 之类的绘图程序,则实际上已掌握了创建用户界面的必要技巧。“Basic”指的是 BASIC (Beginners All-Purpose Symbolist Instruction Code) 语言,一种在计算技术发展历史上应用得最为广泛的编程语言。Visual Basic 在原有 BASIC 语言的基础上进一步发展,至今包含了数百条语句、函数及关键词,其中很多和 Windows GUI 有直接关系。专业人员可以用 Visual Basic 实现其它任何 Windows 编程语言的功能,而初学者只要掌握几个关键词就可以建立实用的应用程序。Visual Basic 不仅是 Visual Basic 编程语言。Visual Basic 编程系统和 VBA 都使用这一语言。Visual Basic Scripting Edition (VBScript) 是广泛使用的脚本语言,它是 Visual Basic 语言的子集。这样,在学习 Visual Basic 中得到的经验可应用到所有这些领域中。
接着,我们再从Visual Basic的发展历史来进一步地认识一下它。Visual Basic的最初版本是Visual Basic1.0,那时的Visual Basic只是简单地以对象的属性为中心来进行编程。到了Visual Basic2.0时,开始正式地采用面向对象技术,其有一个重要的新特性就是可拥有对象变量,并把Variant型变量作为缺省数据类型变量。没过多久Visual Basic的下两个版本Visual Basic3.0和Visual Basic4.0接踵而至,一种内建的新的控件类型——数据控件,能够使创建一个与数据库交互
作用的应用程序变得令人惊讶的容易。在微软的其它应用程序,如WORD字处理软件、EXCEL电子报表软件、ACCESS数据库软件中都做了改变,使得它们可以与Visual Basic一致工作。这种新技术被称作为Visual Basic For Applications,它帮助实现了Visual Basic的最初设想。理论上,人们总是能够通过某种叫做动态数据交换(DDE)的技术使视窗系统应用程序彼此交互。但那样既慢而且又麻烦。Visual Basic的完美之处在于它能使程序员获得一块数据——如报表,并将它看作是Visual Basic的对象。其目的就是要使视窗系统下的每一件事情都支持同样的易于使用的高级语言。Visual Basic5.0出现以后,在某些方面有了重大的突破。它给予了程序员长期期待的不用离开Visual Basic环境,就可以创建新的定制控件类型和创建其它项目类型的能力。除了一般应用程序外,程序员还能创建文档、DLLs、OLE服务器和ActiveX控件。当Visual Basic逐渐复杂时,世界已经在围着它转了。项目类型的增加不是用来迷惑程序员,而是提供灵活性的。视窗系统已经成为一个特别丰富的环境,可使应用程序彼此交流和共享数据。我们现在所使用的Visual Basic6.0被看着是Visual Basic的网络版本。可以看出它投入了相当一部分的精力去支持微软日益在Internet和分布式(网络)计算方面的重视程度。虽然它没有象Visual Basic5.0所引起的那样激动人心,但它还是在某些方面做了一些有用的改进。其最重要的一个改进就是增加了ADO数据控件,它可以缩小本地和远程数据控件之间的差别。换句话说,程序员在很大程度上可以与数据库交互作用,而不用担心网络上由谁来提供服务。
最后,我们再从数据库编程方面来了解一下Visual Basic6.0。
(1)Visual Basic 数据库的构成
Visual Basic 数据库都是由用户界面、数据库引擎以及数据仓库三大部分构成。
用户界面 包括用于与用户交互的所有界面和代码,如用户完成查看、更
新数据的窗体,以及增删记录或执行查询的代码。即是用于请求数据库服务的数据访问对象和方法,而不是对数据库的实际操作。
数据库引擎 是一组动态链接库(DLL),用于结束应用程序的请求并形成
对数据仓库的实际物理操作;管理对数据库的物理操作;维护数据库的完整和安全;处理结构化查询语言(SQL)的查询,实现对数据库的检索、增删、更改;
管理查询返回的结果。
数据仓库 用于存放数据,由若干个数据表文件组成。数据仓库仅仅只包
含数据,并不对数据进行任何处理,对数据进行操作均由数据引擎完成。
由此可以看出,数据库引擎是应用程序与实际的物理数据库之间的桥梁,
应用程序都是通过数据库引擎来实现对物理数据库中数据的存取等操作。用户只需要了解所面对的数据库接口,而不必关心所访问的数据库本身的物理特性。
(2)Visual Basic 能够访问的数据库类型
Visual Basic 能够通过数据库引擎访问内部数据库、外部数据库、ODBC
数据库这三种类型的数据库。
内部数据库: 内部数据库又称本地数据库,使用Microsoft Access数据
格式,由Microsoft Jet引擎直接创建操作,可以提供最大的灵活性和访问速度。
外部数据库:Visual Basic中能够创建操作所有的ISAM(索引顺序访问方
法),如FoxPro、dBASE、Microsoft Excel、Paradox以及顺序文本文件等。
ODBC数据库: Visual Basic 可以访问标准的客户/服务器数据库,例如
Microsoft SQL Server。可以使用ODBC Direct 直接将命令传递给服务器,从而创建客户/服务器应用程序。
(3)Visual Basic 访问数据库的方案
用Visual Basic 访问数据库有许多可供选择的方案,用户应该根据自己
现在及将来的需要决定采用何种数据库方案。大多数应用程序是用来访问以下这些数据的:ASCII文本文件、SQL数据库以及大型数据库。早期的Visual Basic数据访问工具只是简单的ASCII文件的访问工具,极少数SQL Server的前端应用程序是使用鲜为人知的数据库VBSQL编写的。早先在Visual Basic3.0盛行的时期许多程序需要访问包含远程数据源的ISAM数据,为此Microsoft 设计了Microsoft Jet Database Engine(Jet数据库引擎)和Data Access Objects(DAO),使得Visual Basic的开发人员很容易地实现与Microsoft Jet接口。而后针对用户的需求Visual Basic中逐渐包含了更快的访问远程数据和对ODBC数据源访问的优化。经过数年,ODBC技术已成为访问远程数据的主要方
法,而Microsoft Jet 和ISAM数据接口的首选方案。
Visual Basic访问数据需要通过接口方法来实现,数据访问接口方法中一
部分是简单的应用程序接口界面,但大部分是组件对象模型界面(Component Object Model)。表2.1列出Visual Basic中的数据访问接口方法;
表2. 1 Visual Basic中的数据访问接口方法
“统一数据访问”提供了高性能的存取包括关系型和非关系型在内的多种数据源,提供独立于开发工具和开发语言的简单的编程接口,这些技术使得企业集成多种数据源、选择更好的开发工具、应用软件、操作平台、建立容易维护的解决方案成为可能。实现“统一数据访问”的基础是Microsoft的数据访问组件。这些组件包括ActiveX Data Objects(ADO)、Remote Data Service(RDS,又称“高级数据连接器”ADC)、OLE DB和ODBC。表2.2列出数据访问接口的类型;
表2.2 Visual Basic数据访问接口的类型
此外,Visual Basic在数据开发方面提供了十分强大的功能。有自带的数据管理器(Data Manager)、数据控件(Data Control)及数据访问对象(DAO)等一系列功能强大的工具来协助管理人员轻松地进行与数据库的连接和管理。
2.4.2 ACCESS简介
数据库选用Microsoft公司的Access产品作为数据库应用程序。目前的Access 2000是Microsoft强大的桌面数据库平台的第六代产品,是3 2位Access的第三个版本。Access有以下一些基本定义:
(1)数据库是一个包含各种Access “对象”(表、查询、窗体、报表、宏和模块)的文件,Access中所有工作都是建立在此基础之上的。
(2)表是存放数据的容器,被设计成行和列的格式,就像电子表中的那样。每一列叫做一个“字段”,包含特定类型的信息,如姓名或学历。每一行称为一个“记录”,包含与单个实体有关的所有信息,如某个员工的姓名、性别、所在部门、学历等。对于像Access这样的关系数据库管理程序,一个数据库通常包含几个存放相关数据的不同表。
(3)查询是一个Access对象,它询问数据库中有关数据的问题。根据设计方法的不同,查询能够在数据库中检索并组合来自不同表的数据。例如,可以设计一个查询来告知在公司中工作超过1年的职员有多少。查询还可以对一组数据执行操作,如更新或删除某组记录。
(4)窗体是一个窗口,它提供一种很方便的途径来查看数据库中已有记录或向数据库中增添新记录。在Access中,可以创建一个窗体,用来同时查阅单个表或多个表中的数据,还可以打印和显示窗体。
(5)报表是一个Access对象,设计来显示数据,其作用类似于窗体,但主要是用于数据打印,不能输入数据。
(6)页是一种特殊类型的窗体,它使用户能够利用Web浏览器查看和编辑Access的表。[8]
(7)宏用来保存Access中的一系列操作。可自动执行一些日常的任务,以便简化在Access中的工作。
(8)模块是用Visual Basic for Applications(VBA) 编写的过程,VBA是Access的基础程序设计语言。利用VBA可以编写程序代码来完成Access宏所不能完成的特定任务。
第三章 数据库设计
火车信息最基本的项的表进行增加、查询、修改、删除等操作。
用户管理模块应具有的功能:这个模块从本质上来讲,当然应该只有才有权使用之,但是本系统为了使开发者有一个整体的概念,故把这一模块也纳入进来。这个模块能够实现新用户的增加、已有用户的查找、已有用户的删除、已有用户的密码修改、注销不再使用的用户等功能。
火车票管理模块应具有的功能:这个模块是本系统中相对来讲最大也是最麻烦的,当然学会这些再去开发其他比它大的系统基本一样。它包含如下子模块。
(1)新增记录:为保证数据的有效性、一致性、完整性,在录入新记录时,系统能根据操作员输入的客户编号到客户表中查询是否已经存在这样的记录,如果已经存在,则给出更换编号的提示;如果不存在,则判断姓名是否为空,如果是空的则提示输入姓名,客户号码是否录入等一系列必须输入的项目的审核,如果都通过才能把当前输入的所有信息项插入到数据库表中。
(2)查询信息:系统能按火车车次,起点站,终点站等单项或多项的组合进行精确或模糊查询,并把查询的结果显示在表格中。另外,通过笔者在实践中总结的经验所知,用二维数组形式向表格中填写数据项的方法是比较慢的(若提取的是几万条或十几万条记录可能要等几十秒甚至内存会溢出),故本系统开发中没有介绍这种方法。
(3)更新记录:本模块实际上包含两个模块,即修改和删除。在修改子模块中,首先查询出要修改的记录,然后对每一条记录进行除编号外的任何一项的修改。在删除子模块中,也同样是先查询出要删除的记录,因为删除操作是一个没有反悔余地的操作,故在删除前会给出一次确认的机会,如果此时不想删除就可马上取消,但如果真正要删除则从数据库中永久性的删除。当然可以把删除的信息保存到历史记录中。
(4)信息输入:本模块是一个非常有用的模块,也是初学者最难的一块。本系统在制作中采用Microsoft Corporation的Visual Basic6.0提供的Data Report,即快又好用,可以把记录输出以作为永久保存。当然输出标准表格是非常容易的,如果要输出数据计算和布局比较复杂的表格,请读者参考有关书籍。
第四章 总体设计
4.1 系统详细调查
传统的软件工程方法学使用结构化分析技术,完成分析用户需求工作。需求分析要了解用户的情况,接下来通过与用户交流,对用户的基本要求反复细化,以得出对目标系统的完整、准确和具体的需求。需求分析是为了发现用户的真正需求,首先应从宏观角度调查、分析用户所面临的问题,也就是说,需求分析的第一步是尽可能准确地了解用户当前的情况和需要解决的问题。充分结合起来,这样才能更好的为用户服务。
(1)功能需求
基于以上的开发目标,系统开发的范围确定如下:本系统涉及添加火车票部分,后台管理火车票,在线观看等功能;本系统提供强大的功能,可进行不同类型排行,提供多种排行;本系统提供管理火车票的添加,删除和修改。
根据火车票订购管理的需要,开发一个“火车票订购系统”,应能实现的功能如下:
①. 能够修改进入系统密码以增加系统的安全性。
②. 能够对站点信息进行维护。
③. 能够对数据库进行添加,查询。
(2)数据需求
通过调查和研究,本系统仅提供一个数据库,但该数据库包含各项所需信息,表名为TrainTicket.mdb。
(3)运行环境
大多数用户,对计算机的要求并不高,一般只需能实现火车票信息、添加站点、查询功能即可,所以计算机的配置约为普通配置,DDR256M内存,17英寸纯平显示器,80G硬盘,标准键盘和鼠标,打印机,Windows 98/xp/me/2000操作系统等。而本系统开发工具选取VB6.0,所以编制的程序在以上环境的机器中均可顺利运行,并且本系统占用空间较小,主要依靠鼠标和键盘进行录入。详细调查的重点是对管理业务的流程进行描述,通过采用系统流程图中部分图工具来描述管理活动,进行规范化说明。
系统分析的主要成果是系统的逻辑模型。本系统的逻辑模型主要是以系统的数据 流图和数据字典为主要描述工具。即在火车票管理方式和业务流程进行认真分析和研究的基础上,排除现有组织机构和业务分工所造成的信息障碍。完全从业务管理功能和管理对象出发,按照信息系统中应有的数据流和数据结构来勾画系统的概貌。
4.2数据流图
数据流图是组织中信息运动的抽象。是在调研的基础上,从系统的科学性、管理的合理性、实际运动的可行性角度出发。将信息处理功能和彼此之间的联系自顶向下,逐层分解,从逻辑上精确地描述系统应具有的数据加工功能、数据输入、数据输出、数据存储及数据来源和去向(外部实体)等项目。
首先,分析管理系统的总体情况,划分系统边界,识别系统的数据来源和去处,确定外部实体,得出系统的顶层数据流程图。
然后划分出几个主要的信息管理功能,并明确各功能之间的联系,绘制出数据流程图。
数据流程图的符号说明如图3.1所示。
外部实体 处理 数据流 数据存储
图3.1 数据流程图的符号
4.3 数据库设计
数据库(Database),是按照数据结构来组织、存储和管理数据的仓库,是用于查询的大量数据的存储区域。使用数据库可以带来许多好处:如减少了数据的冗余度,从而大大地节省了数据的存储空间,实现数据资源的充分共享等等。此外,数据库技术还为用户提供了非常简便的使用手段,使用户易于编写有关数据库应用程序。特别是近年来推出的计算机关系数据库管理系统,操作直观,使用灵活,编程方便,功能强大,环境适应广泛,数据处理能力极强。
数据库的设计是指对一个给定的应用环境,构造数据库模式,建立数据库及其应用系统,满足各种用户需求。作为信息资源开发、管理和服务的一种有效的手段,数据库技术的应用已越来越广泛,从小型的单项事务处理系统到大型的信息系统大都用先进的数据库技术来保持系统数据的安全性、完整性和共享性。对一个实际的系统来说,数据库表的设计在遵循数据库理论的同时,必须能用开发工具来实现用户在各方面提出的功能要求。
表1:
表2:
表3:
表4:
表5:
第五章 系统的实现
5.1 主窗口界面
本系统是为市场上众多的小型用户所设计,是大众型的,它主要包含以下几个模块:系统权限的设定、原始数据录入、数据的管理等等。从而,实现对火车票录入,火车票管理等实现全面、及时的管理。创建一个稳定、高效的火车票订购系统。 登陆窗体如下图所示:
登陆后便可看到程序的主界面:
主要代码如下所示:
Private Sub AdminInfo_Click()
FrmLogonUser.Show 1
End Sub
Private Sub ClientInfo_Click()
FrmCustomer.Show 1
End Sub
Private Sub CustomerInfo_Click()
FrmCustomer.Show 1
End Sub
Private Sub Form_Activate()
StatusBar1.Panels(2).Text = "当前登录用户: " + StataName
StatusBar1.Panels(3).Text = "当前系统时间:" & Format(Date, "yyyy年mm月dd日")
StatusBar1.Panels(4).Text = Time
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If vbYes = MsgBox("是否确定要退出系统?若是!请及时备份数据库!", vbInformation + vbYesNo
+ vbDefaultButton2, "询问?") Then
End
Else
Cancel = -1
End Sub
Private Sub LineInfo_Click()
FrmLine.Show 1
End Sub
Private Sub OrderTicket_Click()
FrmTickets.Show 1
End Sub
Private Sub Quit_Click()
If vbYes = MsgBox("是否确定要退出系统?若是!请及时备份数据库!", vbInformation + vbYesNo
+ vbDefaultButton2, "询问?") Then
End
Else
Exit Sub
End If
End Sub
Private Sub Reboot_Click()
Me.Hide
FrmLogon.Show 1
End Sub
Private Sub TicketInfo_Click()
FrmTicketInfo.Show 1
End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Index
Case 1
If UserType = "普通用户" Then
MsgBox "你没有足够的权限查看系统用户信息,请与系统管理员联系!", vbExclamation, "提
示!"
Exit Sub
Else
FrmLogonUser.Show 1
End If
Case 3
FrmLine.Show 1
Case 5
FrmCustomer.Show 1
Case 7
FrmTickets.Show 1
Case 9
FrmLine.Show 1
Case 11
FrmTicketInfo.Show 1
If vbYes = MsgBox("是否确定要退出系统?若是!请及时备份数据库!", vbInformation +
vbYesNo + vbDefaultButton2, "询问?") Then
End
Else
Exit Sub
End If
End Select
End Sub
Private Sub TrainInfo_Click()
FrmTrain.Show 1
End Sub
Private Sub TrainLine_Click()
FrmLine.Show 1
End Sub
Private Sub TrianInfo_Click()
FrmTrain.Show 1
End Sub
5.2 添加车次信息窗口
在添加火车票信息中,管理人员可以通过对火车票站点、到达城市,时间,火
车票类型等相关信息进行录入。
添加窗口如下图所示:
主要代码如下所示:
Private Sub CmdCancel_Click()
Unload Me
End Sub
Private Sub CmdOk_Click()
If txtLineID.Text = "" Then
MsgBox "请输入车次编号!", vbInformation, "信息提示"
txtLineID.SetFocus
Else
If Combo1.Text = "" Then
MsgBox "请输入车次类型!", vbInformation, "信息提示"
Combo1.SetFocus
Else
If txtBegin.Text = "" Then
MsgBox "请输入起点站名字!", vbInformation, "信息提示"
txtBegin.SetFocus
Else
If txtEnd.Text = "" Then
MsgBox "请输入终点站名字!", vbInformation, "信息提示"
txtEnd.SetFocus
Else
If txtBTime.Text = "" Then
MsgBox "请输入发起时间! 格式为 hh:mm ", vbInformation, "信息提示"
txtBTime.SetFocus
Else
If txtETime.Text = "" Then
MsgBox "请输入到达时间! 格式为 hh:mm ", vbInformation, "信息提示"
txtETime.SetFocus
Else
If txtDays.Text = "" Then
MsgBox "请输入历时时间间隔", vbInformation, "信息提示"
txtDays.SetFocus
Else
If txtHard.Text = "" Then
MsgBox "请输入硬座价格", vbInformation, "信息提示"
txtHard.SetFocus
Else
If txtSoft.Text = "" Then
MsgBox "请输入软座价格", vbInformation, "信息提示"
txtSoft.SetFocus
Else
If txtSleep.Text = "" Then
MsgBox "请输入卧铺价格", vbInformation, "信息提示"
txtSleep.SetFocus
Else
'检查时间格式是否正确!
If CheckTimeOk = False Then
MsgBox "你输入的 发起时间 或 到达时间 格式不对!正确的时间格式时 hh:mm ",
vbExclamation, "警告!"
txtBTime.SetFocus
Exit Sub
Else
'计算出这趟车次的历时时间
GetHowLongStr
With ObjClsLine '若存在该车次信息了 则不可再添加了
.LineID = Trim(txtLineID.Text)
.LineType = Trim(Combo1.Text)
.Begin = Trim(txtBegin.Text)
.BeginTime = TimeValue(txtBTime.Text)
.Ends = Trim(txtEnd.Text)
.EndTime = TimeValue(txtETime.Text)
.HowLong = TmpHowLongStr
.HardPrice = Int(txtHard.Text)
.SoftPrice = Int(txtSoft.Text)
.SleepPrice = Int(txtSoft.Text)
.SleepPrice = Int(txtSleep.Text)
.Days = Int(txtDays.Text)
.TrainID = Trim(Adodc1.Recordset.Fields(0))
End With
'判断时添加还是 修改
If Frag = 1 Then
With ObjClsLine '若存在该车次信息了 则不可再添加了
If .IsExist(Trim(txtLineID.Text)) = True Then
MsgBox "已经存在该编号的车次的信息了!请重新输入合适的车次编号",
vbExclamation, "提醒!"
txtLineID.Text = ""
Exit Sub
Else
'先判断该列车是否有相应的座位类型
If Int(Adodc1.Recordset.Fields(4)) = 0 And Int(txtHard.Text) 0 Then
MsgBox "要添加的车次所对应的列车没有硬座车厢!故应将硬座价格值为 0 ",
vbExclamation, "提醒!"
txtHard.Text = 0
txtHard.SetFocus
Else
If Int(Adodc1.Recordset.Fields(5)) = 0 And Int(txtSoft.Text) 0 Then
MsgBox "要添加的车次所对应的列车没有软座车厢!故应将软座价格值为 0 ",
vbExclamation, "提醒!"
txtSoft.Text = 0
txtSoft.SetFocus
Else
If Int(Adodc1.Recordset.Fields(6)) = 0 And Int(txtSleep.Text) 0 Then
MsgBox "要添加的车次所对应的列车没有卧铺车厢!故应将卧铺价格值为 0 ",
vbExclamation, "提醒!"
txtSleep.Text = 0
txtSleep.SetFocus
Else
.Insert
FrmLine.ReNewLineInfo
MsgBox "成功添加车次信息!", vbInformation, "信息提示"
txtLineID.Text = ""
End If
End If
End If
End If
End With
Else
If Frag = 2 Then
ObjClsLine.Update (Trim(txtLineID.Text))
FrmLine.ReNewLineInfo
MsgBox "成功修改车次信息!", vbInformation, "信息提示"
Unload Me
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End Sub
'计算出这趟车次的历时时间
Public Sub GetHowLongStr()
'用于计算时间的变量
Dim TmpTime
Dim Hours, Hour1, Hour2
Dim Mint
Hour1 = (Int(txtDays.Text) - 1) * 24
TmpTime = TimeValue(24 - TimeValue(txtBTime.Text)) + TimeValue(txtETime.Text)
Hour2 = Hour(TmpTime)
Hours = Hour1 + Hour2
Mint = Minute(TmpTime) Mod 60
TmpHowLongStr = Hours & "小时" & Mint & "分"
End Sub
'检查输入的时间是否符合要求!
Public Function CheckTimeOk() As Boolean
If Left(txtBTime.Text, 2) = 60 Or Right(txtBTime.Text, 2) >= 60 Or Len(txtBTime.Text)
Right(Left(txtBTime.Text, 3), 1) ":" Then
CheckTimeOk = False
Else
If Left(txtETime.Text, 2) >= 60 Or Right((txtETime.Text), 2) >= 60 Or Len(txtETime.Text) ":" Then
CheckTimeOk = False
Else
CheckTimeOk = True
End If
End If
End Function
5.3 客户信息输入窗口
订票时,客户只要根据本系统要求,填写客户编号,客户姓名,客户号码等等便可完成订票操作。
本模块主要界面如下所示:
主要代码如下所示:
Private Sub CmdOk_Click()
If ClientID.Text = "" Then
MsgBox "请输入客户编号!", vbInformation, "信息提示"
ClientID.SetFocus
Else
If ClientName.Text = "" Then
MsgBox "请输入客户姓名!", vbInformation, "信息提示"
ClientName.SetFocus
Else
If DisCunt.Text = "" Then
MsgBox "请输入客户折扣率!", vbInformation, "信息提示"
DisCunt.SetFocus
Else
If DisCunt.Text = 100 Then
MsgBox "请输入正确的客户折扣率! 数字为 0--100 的数", vbExclamation, "信息提示"
DisCunt.SetFocus
DisCunt.SelStart = 0
DisCunt.SelLength = Len(DisCunt.Text)
Else
With ObjClsCustomer
.ClientID = Trim(ClientID.Text)
.ClientName = Trim(ClientName.Text)
.ClientPhone = Trim(Phone.Text)
.DiscountRate = Int(DisCunt.Text)
End With
'判断是 添加 还是 修改
If Frag = 1 Then
If ObjClsCustomer.IsExistCustomer(Trim(ClientID.Text)) = True Then MsgBox "已经存在该客户编号的客户信息了!", vbExclamation, "信息提示" ClientID.Text = ""
ClientID.SetFocus
Else
ObjClsCustomer.Insert
FrmCustomer.ReNewDataGrid
MsgBox "成功添加客户信息!", vbInformation, "信息提示"
ClientID.Text = ""
End If
Else
If Frag = 2 Then
ObjClsCustomer.Update Trim(ClientID.Text)
FrmCustomer.ReNewDataGrid
MsgBox "成功修改客户信息!", vbInformation, "信息提示"
Unload Me
End If
End If
End If
End If
End If
End If
End Sub
5.4售票信息模块
通过本模块首先查询车次,如有查询有没该车次,然后选择购买车票的类型,日期,便可出票。界面如下图所示:
主要代码:
Private Sub CmdOk_Click()
If AdoClient.Recordset.EOF Then
MsgBox "请先确应正确的客户信息!", vbExclamation, "警告!"
Exit Sub
Else
If Adodc1.Recordset.EOF Then
MsgBox "请先确应正确的列车车次信息!", vbExclamation, "警告!"
GetLineByID (Trim(txtLineID.Text)) '默认就以车次编号 查询车次信息 Exit Sub
Else
If Combo1.Text = "" Then
MsgBox "请选择要购买的座位类型!", vbInformation, "信息提示"
Combo1.SetFocus
Else
SumPrice '先计算出客户的实际费用
'检查是否有没有相应的座位车厢存在
Select Case Combo1.Text
Case "硬座"
If Adodc1.Recordset.Fields(7).Value = 0 Then
MsgBox "该趟列车车次现暂时没有提供硬座车厢!现不提供硬座售票服务!", vbInformation, "信息提示"
Exit Sub
End If
Case "软座"
If Adodc1.Recordset.Fields(8).Value = 0 Then
MsgBox "该趟列车车次暂时没有提供软座车厢!现不提供软座售票服务!", vbInformation, "信息提示"
Exit Sub
End If
Case "卧铺"
If Adodc1.Recordset.Fields(9).Value = 0 Then
MsgBox "该趟列车车次暂时没有提供卧铺车厢!现不提供卧铺售票服务!", vbInformation, "信息提示"
Exit Sub
End If
End Select
GetMax (Adodc1.Recordset.Fields(11)) '获得该列车的硬座 ,软座 ,卧铺 ,和车厢最大人数
GetStartNo
GetTicketCount (Adodc1.Recordset.Fields(0))
If StartCarriageNo > LastCarriageNo Then
MsgBox "该列车的 " + Combo1.Text + "车票 已经出售完毕了!", vbInformation, "信息提示"
Exit Sub
End If
With ObjClsTicket
.ClientID = Trim(AdoClient.Recordset.Fields(0))
.ClientName = Trim(AdoClient.Recordset.Fields(1))
.SetDate = DateValue(DTPicker1.Value)
.LineID = Trim(Adodc1.Recordset.Fields(0))
.LineType = Trim(Adodc1.Recordset.Fields(1))
.Begin = Trim(Adodc1.Recordset.Fields(2))
.BeginTime = TimeValue(Adodc1.Recordset.Fields(3))
.Ends = Adodc1.Recordset.Fields(4)
.EndTime = TimeValue(Adodc1.Recordset.Fields(5))
.HowLong = Trim(Adodc1.Recordset.Fields(6))
.SeatNo = Trim(SeatNoStr)
.SeatType = Trim(Combo1.Text)
.Price = Int(TmpPrice)
.Insert
End With
FrmTicketConfirm.Show 1
End If
End If
End If
End Sub
5.5 车票信息报表
对已出售的车票通过本模块可以全部打印出来,明确查看出售记录,车次,站点,时间,座位类型等等。界面截图如下所示:
主要代码如下所示:
Public Sub ReNewInfo()
SqlStmt = "Select ClientID AS 客户编号, ClientName as 客户姓名 ,SetDate as 发车日期 ,LineID as 车次编号,LineType " _
+ "as 车次类型 , Begin as 起点站 ,BeginTime as 发时 ,Ends as 终点站 ,EndTime as 到时 ,SeatNo as 座位号 ,HowLong as 历时 ," _
+ "SeatType as 座位类型 ,Price as 价格 from Tickets Order by ClientName "
Adodc1.ConnectionString = DB.ConStr
Adodc1.RecordSource = SqlStmt
Adodc1.Refresh
Label4.Caption = ""
If Adodc1.Recordset.EOF Then
Label4.Caption = ""
CmdRpt.Enabled = False
Exit Sub
Else
Set DataGrid1.DataSource = Adodc1
Label4.Caption = "统计有 " & Adodc1.Recordset.RecordCount & " 条记录"
CmdRpt.Enabled = True
End If
End Sub
Public Sub GetByLineID(TmpLineID As String)
SqlStmt = "Select ClientID AS 客户编号, ClientName as 客户姓名 ,SetDate as 发车日期 ,LineID as 车次编号,LineType " _
+ "as 车次类型 , Begin as 起点站 ,BeginTime as 发时 ,Ends as 终点站 ,EndTime as 到时 ,SeatNo as 座位号 ,HowLong as 历时 ," _
+ "SeatType as 座位类型 ,Price as 价格 from Tickets Where LineID like '%" + TmpLineID + "%' Order by ClientName "
Adodc1.ConnectionString = DB.ConStr
Adodc1.RecordSource = SqlStmt
Adodc1.Refresh
Label4.Caption = ""
If Adodc1.Recordset.EOF Then
Label4.Caption = ""
CmdRpt.Enabled = False
Exit Sub
Else
Set DataGrid1.DataSource = Adodc1
Label4.Caption = "统计有 " & Adodc1.Recordset.RecordCount & " 条记录"
CmdRpt.Enabled = True
End If
End Sub
Public Sub GetByBegin(TmpBegin As String)
SqlStmt = "Select ClientID AS 客户编号, ClientName as 客户姓名 ,SetDate as 发车日期 ,LineID as 车次编号,LineType " _
+ "as 车次类型 , Begin as 起点站 ,BeginTime as 发时 ,Ends as 终点站 ,EndTime as 到时 ,SeatNo as 座位号 ,HowLong as 历时 ," _
+ "SeatType as 座位类型 ,Price as 价格 from Tickets Where Begin like '%" + TmpBegin + "%' Order by ClientName "
Adodc1.ConnectionString = DB.ConStr
Adodc1.RecordSource = SqlStmt
Adodc1.Refresh
Label4.Caption = ""
If Adodc1.Recordset.EOF Then
Label4.Caption = ""
CmdRpt.Enabled = False
Exit Sub
Else
Set DataGrid1.DataSource = Adodc1
Label4.Caption = "统计有 " & Adodc1.Recordset.RecordCount & " 条记录"
CmdRpt.Enabled = True
End If
End Sub
总结与展望
在本系统的开发过程中,由于本人是初次开发软件,在知识、经验方面都存在着不足。另外,在整个开发的过程中,时间也比较仓促。因此,该系统必然会存在一些缺陷和不足。因为对火车票订购的整个流程还不够熟悉,在需求分析时未能做到完全满足用户的需求。在系统功能上,未能实现部分功能,还有些问题没有考虑周到。
尽管该火车票管理系统存在着很多不足,但其功能全面、易于日后程序更新、数据库管理容易、界面友好、操作方便、效率高、安全性好等优点是火车票订购系统所必需的。
从这次毕业设计的过程中我学到了很多有用的东西,上面这些只是在查错方面的一些技巧。严谨、负责、求实、进取的精神则是此次毕业设计给我的最大启示。任何一个微小的错误都可能导致程序的崩溃。毕业设计将对我以后学习和工作产生更深远的影响。
致 谢
紧张忙碌的毕业设计即将结束了,在这几个月的课程设计中,我从项目的规划、调研开始,到编码、测试,充分体会了一个软件产品的生产过程,也让我看到了我自身水平的不足。与此同时,同样让我感到了继续学习、更新自身知识、加强自身能力的必要性。大学四年的学习即将结束,我也即将走向新的起点。这段毕业设计的经历给了我克服困难的决心和解决问题的经验,它将对我今后的生活、学习起到很大的帮助。
经过两个多月的学习,我初步掌握了VB语言的基本应用,基本达到了毕业设计的要求。最重要的是,毕业设计的经历增强了我自我学习的能力,做到了在不用老师手把手教授的情况下,完成了一个较为复杂的管理系统。同时,在课程设计的过程中,查阅了大量的资料,也增强了我进行资料收集、查找和对资料进行筛选的能力。
在整个毕业设计的实习过程中,我要衷心的感谢我的指导老师。他一直都在为我的毕业设计提供耐心的指导,并且帮助我解决了很多疑难问题,这样才有了我的这份毕业设计。我还要感谢我的同学们,他们也给了我许多支持。最后,也是最重要的,感谢所有这四年中传授我知识,给予我关怀和帮助的老师们!
参考文献
[1] 王国荣,张宝刚.VB 网页制作教程[M].北京:人民邮电出版社,2001年
[2] 郑学坚,周斌.微型计算机应用及原理[M].北京:清华大学出版社,2002年
[3] 谢希仁.计算机网络[M].大连:大连理工大学出版社,2000年
[4] 卡通动画工作室.Flash 5 事例与操作[M].北京:中国青年社出版,2003年
[5] 老虎工作室.Authorware 5 多媒体制作实例详解[M].北京:人民邮电出版社,2002年
[6] 闪四清.数据库系统原理与应用教程[M].北京:清华大学出版社,2002年
[7] Bill Winett .设计访问量统计教程[M].北京:清华大学出版社,2001年
[8] 刘浩.在NT网中组建自己的Web站点[M].北京:人民邮电出版社,2001年
[9] 闪四清.完全掌握SQL Server2000[M].北京:人民邮电出版社,2001年
[10] John Chirillo;Scott Blaul.Storage Security Protecting SANs,NAS,and DAS[M].2000
[11] Kevin Kline Daniel Kline. SQL 2000[M].2000
[12] Ferland J A, Fleurent C. SAPHIR: A decision support system for course scheduling[J]. Interfaces, 1994, 24 (2)
[13] Pawlak, Z. Rough Sets. International Journal of Information and Computer Science[M]. 1982, 11
[14] 张建章.浅谈VB开发WEB数据库应用技术, 计算机应用系统[J].1998,9.
[15] 龚玉清.网页设计的色彩运用, 现代教育技术[J].2003,5.
[16] 段永红、李春海.基于VB的设计建设, 电脑开发与应用[J].2000,8.
[17] 裴树军、张仁伟.基于VB的动态WEB技术设计, 哈尔滨理工大学学报
[J].1999,4.
[18] 杨青.VB的主要技术特点分析, 电脑与信息技术[J].1999,4.
[19] 曹淑琴.VB技术的设计建设, 华北科技学院学报[J].2003,1.
[20] 吴玉新.设计VB后台解决方案[M].北京:人民邮电出版社,2003年
[21] 黄明、粱旭.VB信息系统设计与开发实例[M].北京:机械工业出版社,2003
年
[22] 刘禾、蔡锋.精通VB架站技巧[M].北京:中国青年出版社,2002年
火车票订票系统
姓名:
编号:
专业:
学校:
摘 要
随着科学技术的不断提高,计算机科学日渐成熟,其强大的功能已为人们深刻认识,它已进入人类社会的各个领域并发挥着越来越重要的作用。
作为计算机应用的一部分,使用计算机对火车信息进行管理,具有手工管理所无法比拟的优点.例如:检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。这些优点能够极大地提高火车信息管理的效率,也是企业的科学化、正规化管理,与世界接轨的重要条件。
本论文主要阐述一个功能比较强大的火车票订购系统的后台操作过程及一些关键技术。该系统信息来源主要由管理员添加,方便火车票管理员的查询,用户可以通过查询到相关的火车票信息,选择是否适合自己,也可以在网上直接订票,省时省力。由于本系统的开发以节省资源为首,充分利用网络资源,所以本火车票订购上所看到的火车票信息均来自互联网。
关键词:火车票管理,订票查询,用户管理
Abstract
Along with the science and technology unceasing enhancement, computer science Cheng?qi the formidable function profoundly had known day after day for the people that, it entered the human society each domain and plays the more and more vital role □to take the computer application a part, uses the computer to carry on the management for the student information, has the manual administration center to be unable to compare superiorly □for example: Retrieves, the search rapidly convenient, the reliability high, the reserves big, the secrecy good, the life long, the cost is low and so on. These merits can enormously enhance the student information management the effect □also are enterprise's scientific style, the standardized management, connects rails the important condition with the world
The present paper mainly elaborates a function quite formidable train ticket order system backstage operating process and some essential technologies. This system information originates mainly increases by the manager, the convenient train ticket manager's inquiry, the user may through inquire to the related train ticket information, chooses whether suits oneself, also may the on-line direct order form, time-saving reduce effort. Because this system development take saves the resources as a head, fully uses the network resources, therefore in this train ticket order saw to the train ticket information comes from the Internet.
Key word: The train ticket management, the information issued, user management
目 录
摘 要......................................................................... 2
Abstract........................................................................ 3
目 录 ......................................................................... 4
第一章 概 述 ................................................................. 5
1.1 项目开发背景 ............................................................ 5
1.2 系统开发目的 ............................................................ 6
1.3 技术可行性研究 .......................................................... 7
第二章 开发平台介绍 .......................................................... 9
2.1系统的架构 .............................................................. 9
2.2系统运行环境操作系统 .................................................... 9
2.3系统开发环境 ............................................................ 9
2.4开发工具 ............................................................... 10
第三章 数据库设计 ........................................................... 16
第四章 总体设计 ............................................................... 17
4.1 系统详细调查 ........................................................... 17
4.2数据流图 .............................................................. 18
4.3 数据库设计 ............................................................. 19
第五章 系统的实现 ............................................................ 21
5.1 主窗口界面 ............................................................ 21
5.2 添加车次信息窗口 ....................................................... 24
5.3 客户信息输入窗口 ....................................................... 29
5.4售票信息模块 ........................................................... 31
5.5 车票信息报表 ........................................................... 33
总结与展望..................................................................... 36
致 谢 ........................................................................ 37
参考文献....................................................................... 38
第一章 概 述
1.1 项目开发背景
又是一年春节将近,铁路又一次迎来春运高潮。随着春节的一天天临近,远离家乡的游子们回家的心情是多么的急迫!然而,交通问题总是大部分游子们最头疼的事情,不是因为支付不起,而是有钱却买不到回家的车票。通过火车票经纪公司订票,总是听到令人失望的消息;去火车站排队,等排到自己的时候,票已售完;拉关系、找人,仍然无法得到准确的回音;各种门路,只要能想到的,人们都去想了。
有人感叹票贩子太可恶,有人感叹中国人太多,有人感叹中国铁路的运力不足。所有这些都是问题的表面现象。在 2003 年 4 月份,当人们面临“非典”的威胁时,带着对北京的恐惧而“逃离”北京时,似乎并没有来自交通方面的压力。这是因为在当时,人们已经不仅局限于乘坐火车离开了,而是有能力乘飞机就乘飞机,有能力乘火车就乘火车,赶不上火车汽车也行。所以一天之内竞会有几十万的人离开北京(具体数字不详,但绝不夸张)。旅客得到了很好的分流。
为什么春运会有如此大的压力呢?而最终绝大多数人还是能够圆了自己回家过春节的梦呢?
当问起人们春节怎样回家时,一般人都回答是乘火车。火车的票价和舒适程度以及快捷的速度和相对的安全性,是人们选择火车的主要原因。这时,并没有“非典”的威胁促使人们立即就离开。从而使火车票的需求远远超过火车票的供给。但这还构不成买票难的最大原因。
问题的根源在于中国的火车票交易市场缺乏一种公平的交易机制。在现有的火车票交易市场上,由于信息不充分(信息不透明)和信息不对称,使得铁路部门的内部人员交易与火车票的黑市交易相结合,极大的扰乱了正常的火车票交易市场。在信息极不充分的现有条件下,通过组织公安人员打击火车站的票贩子是无济于事的。票贩子可以分成几种类型:第一种是在火车站排队,通过先于其他人挤到售票窗口,抢购火车票,然后以高于票面金额的价格转手;第二种是火车站的售票员建立私人交情,在车票还没有离开窗口时,便已经预留,然后交与同谋者以高价售出;
第三种是与火车站的内部管理人员相勾结,其所拥有的车票资源最为丰厚,获利最多,也最为隐蔽;第四种是火车票经纪公司,说它是票贩子,它可能会觉得有点冤,但是它的部分交易行为与第一种票贩子无异,只不过是借助了电脑网络。在所有上述四种票贩子当中,公安人员实际上只能对第一种票贩子进行较为有力的打击,但是当第一种票贩子出现在公安人员的内部时,这种打击力度又会大打折扣。 解决问题的途径在于建立火车票的网上交易市场,并制定相应的交易规则。这有点像是股票交易市场和外汇交易市场,但应该有比股票交易市场更为详细的交易规则。铁路公司首先将火车票按照软卧、硬卧、硬座以及无坐等不同等级的火车票规定基准票价,然后委托给售方经纪公司,这类似于证券市场上的初级市场(股票一级市场),由经纪公司代为拍卖,经纪公司在拍卖中收取佣金。乘客可以直接从售方经纪公司购买火车票,也可以通过买方经纪公司代为购票,并向经纪公司支付一定的佣金。火车票交易的价格则通过自动报价系统通过买价与卖价的匹配来实现,对于不匹配的,可以进一步协商,最终在双方认可的价格上成交。火车票的售方经纪公司可以是专业化的经纪公司,也可以由银行等金融机构代理,充分利用银行发达的电子网络系统。买方经纪公司也可以是银行或专业经纪公司。
为了使火车票的购买者是最终的乘客,乘客购买火车票时需要出示自己的身份证,并被扫描,与火车票同时打印,这样每张售出的火车票都将对应唯一的身份证号、姓名以及照片,并且每一身份证仅可买一张票。这样基本可以保证最需要火车票的人购到票,减少票贩子参与交易的机会。
在火车票的网上交易市场上,由于需求大于供给,火车票的价格要高于现有交易方式下的票价,这部分溢价一方面成为经纪公司的利润来源,一方面可以增加铁路公司的收入,使铁路公司有能力进一步投资以扩大运营能力,再一方面是,随着拍卖价格的提高,会有一部分本来想乘火车的人改乘其它的交通工具。最终使得供需矛盾得到缓解,人们顺利的回家。
1.2 系统开发目的
这次我做的这个设计是一个动态火车票定票系统,运用VB编程。实现后台管理。如今商业发展,金融与市场更加的具备开拓性。我觉得做这个设计很有它现实的价值和意义;(再则,可以通过这次设计,提高我本身的水平,对进一步和社会接洽并
成为祖国可靠的栋梁具有促进推动的作用。实际上在这设计里面,我们可以获得许多宝贵的实践经验,在一生中都会受益。我们在今天做的每件事都会对我们的未来产生影响。道理浅显,但未必每个人都能理解。许多同学以为自己大学毕业了,已经很行了,但是到了实际工作中就会发现这种想法是多么的幼稚可笑。作为一名计算机专业的应届毕业生,原以为找工作是很容易的,但现实还是超想象,当今是知识经济时代,经济高速发展的同时也带动教育行业的发展,每年的大学毕业生都在不断增多,再加上计算机相关行业都需本科以上并要求要有工作经验,这对一名应届毕生来讲找份工作实在是难上加难。
研究设计工作从3月初到5月1号,从资料的收集整理到程序的编写,制作过程当中一边编写程序一边巩固学习VB的编程。整个设计的制作之中,感觉出来很多程序的运行效率考虑的还不是很全部,这个跟平时在学校学习其他语言的时候犯了同样的毛病——算法考虑的不全面;程序的安全性也有所欠缺,这主要是本人对语言知识的不全面型造成。这两个方面有待以后走出学校参加工作以后继续要学习注意的地方。
1.3 技术可行性研究
在本次论文中,为了更好的完成论文工作,我经过多方面的参考和研究,参考了之前学生的毕业论文,又研究了好多本方面的书籍,终于写下了今天的毕业论文。
本次论文完成的工作有:本次论文的选题背景、目的意义、开发平台的技术简介(VB6.0简介和ACCESS2000技术的简介)、数据库简介、需求分析包括系统的业务流程图和数据流程图、模块结构设计、数据库设计包括系统E-R图、系统功能设计、系统输入设计即对系统的简单介绍。
在做数据库设计时,我根据系统的实际情况画出了系统E-R图,以便于老师更深入的了解本系统。同时还列出了系统用到数据库中所有表的表结构,以便于参照表结构来看待本系统。
系统功能设计即系统的功能框图,以便于用户能够对本系统所实现的各项功能一目了然,从而更好地应用。
对系统的简单的介绍,有点类似于产品说明书,使老师容易地知道系统的使用
方法。
关于本篇论文实现的工作就介绍到这里,具体的工作,还请老师详看本篇论文。
第二章 开发平台介绍
2.1系统的架构
本系统开发使用的系统只是普通的PC机,操作系统为Windows 2000 Professional版本。考虑到使用的数据量不大,数据库的建立使用的是ACCESS2000。数据访问方法为使用ADO(Active数据对象ActiveDataObjects)通过ODBC的方法同数据库接口。使用这种方式访问数据,可以使用任何一种ODBC数据源,即不止适合于SQL Server、 Oracle、 Access等数据库应用程序,也适合与Excel表格、文本文件、图形文件和无格式的数据文件。
2.2系统运行环境操作系统
采用的是当前流行的主流操作系统微软公司的WindowsXP。
2.3系统开发环境
系统开发环境包括硬件平台和软件平台两种。
硬件平台是指开发与运行所需要的硬件环境,主要包括计算机机型及硬件配置。由于本系统是一个小型的MIS管理系统,因此对计算机硬件的要求不高,比较经济,只要配备有PII300处理器(或以上)、64M内存(或以上)、20G硬(或以上)的普通微机即可顺利运行。
软件平台是指系统开发与运行的软件环境。本系统在开发时选用了稳定性较强的Windows XP中文专业版和Visual Basic6.0作为开发语言,同时选用了ACCESS2000数据库,由于这些软件产品都是Microsoft公司的产品,因此彼此之间的兼容性较好,开发出的应用系统稳定性较高。
Visual Basic 6.0具有可视化的开发环境,可以快速完成系统的开发,内部集成的数据库访问通道,使得可以轻松方便的对数据库管理。
数据库采用ACCESS2000,由于我们的系统要求,采用它完全可以适合我们的工作需求,并且它所支持的数据类型十分丰富,维护简便,费用较低,容易升级。
2.4开发工具
在确定了操作系统后,就该选择开发工具了。经过了综合的比较而且最重要的是本人在铁路期间学习的就是Visual Basic。这个是个数据库管理系统,系统,所以我们必须得选一个合适的数据库。考虑到我这个系统针对的用户,已经价格方面的考虑,完全可以使用Access2000来进行开发,而且我在使用Visual Basic的时候,操作数据库方面使用的是微软提供的数据访问接口,先我们来了介绍一下Visual Basic以及微软提供了哪些数据库访问方法,并且各自都有什么特点。
2.4.1Visual Basic的简介
首先,我们还从Visual Basic这个名字开始,来认识这个软件。所谓“Visual”指的是开发图形用户界面 (GUI) 的方法。它不需编写大量的代码去描述界面元素的外观和位置,而只要把预先建立的对象添加到屏幕上的某一位置即可。如果已使用过诸如 Paint 之类的绘图程序,则实际上已掌握了创建用户界面的必要技巧。“Basic”指的是 BASIC (Beginners All-Purpose Symbolist Instruction Code) 语言,一种在计算技术发展历史上应用得最为广泛的编程语言。Visual Basic 在原有 BASIC 语言的基础上进一步发展,至今包含了数百条语句、函数及关键词,其中很多和 Windows GUI 有直接关系。专业人员可以用 Visual Basic 实现其它任何 Windows 编程语言的功能,而初学者只要掌握几个关键词就可以建立实用的应用程序。Visual Basic 不仅是 Visual Basic 编程语言。Visual Basic 编程系统和 VBA 都使用这一语言。Visual Basic Scripting Edition (VBScript) 是广泛使用的脚本语言,它是 Visual Basic 语言的子集。这样,在学习 Visual Basic 中得到的经验可应用到所有这些领域中。
接着,我们再从Visual Basic的发展历史来进一步地认识一下它。Visual Basic的最初版本是Visual Basic1.0,那时的Visual Basic只是简单地以对象的属性为中心来进行编程。到了Visual Basic2.0时,开始正式地采用面向对象技术,其有一个重要的新特性就是可拥有对象变量,并把Variant型变量作为缺省数据类型变量。没过多久Visual Basic的下两个版本Visual Basic3.0和Visual Basic4.0接踵而至,一种内建的新的控件类型——数据控件,能够使创建一个与数据库交互
作用的应用程序变得令人惊讶的容易。在微软的其它应用程序,如WORD字处理软件、EXCEL电子报表软件、ACCESS数据库软件中都做了改变,使得它们可以与Visual Basic一致工作。这种新技术被称作为Visual Basic For Applications,它帮助实现了Visual Basic的最初设想。理论上,人们总是能够通过某种叫做动态数据交换(DDE)的技术使视窗系统应用程序彼此交互。但那样既慢而且又麻烦。Visual Basic的完美之处在于它能使程序员获得一块数据——如报表,并将它看作是Visual Basic的对象。其目的就是要使视窗系统下的每一件事情都支持同样的易于使用的高级语言。Visual Basic5.0出现以后,在某些方面有了重大的突破。它给予了程序员长期期待的不用离开Visual Basic环境,就可以创建新的定制控件类型和创建其它项目类型的能力。除了一般应用程序外,程序员还能创建文档、DLLs、OLE服务器和ActiveX控件。当Visual Basic逐渐复杂时,世界已经在围着它转了。项目类型的增加不是用来迷惑程序员,而是提供灵活性的。视窗系统已经成为一个特别丰富的环境,可使应用程序彼此交流和共享数据。我们现在所使用的Visual Basic6.0被看着是Visual Basic的网络版本。可以看出它投入了相当一部分的精力去支持微软日益在Internet和分布式(网络)计算方面的重视程度。虽然它没有象Visual Basic5.0所引起的那样激动人心,但它还是在某些方面做了一些有用的改进。其最重要的一个改进就是增加了ADO数据控件,它可以缩小本地和远程数据控件之间的差别。换句话说,程序员在很大程度上可以与数据库交互作用,而不用担心网络上由谁来提供服务。
最后,我们再从数据库编程方面来了解一下Visual Basic6.0。
(1)Visual Basic 数据库的构成
Visual Basic 数据库都是由用户界面、数据库引擎以及数据仓库三大部分构成。
用户界面 包括用于与用户交互的所有界面和代码,如用户完成查看、更
新数据的窗体,以及增删记录或执行查询的代码。即是用于请求数据库服务的数据访问对象和方法,而不是对数据库的实际操作。
数据库引擎 是一组动态链接库(DLL),用于结束应用程序的请求并形成
对数据仓库的实际物理操作;管理对数据库的物理操作;维护数据库的完整和安全;处理结构化查询语言(SQL)的查询,实现对数据库的检索、增删、更改;
管理查询返回的结果。
数据仓库 用于存放数据,由若干个数据表文件组成。数据仓库仅仅只包
含数据,并不对数据进行任何处理,对数据进行操作均由数据引擎完成。
由此可以看出,数据库引擎是应用程序与实际的物理数据库之间的桥梁,
应用程序都是通过数据库引擎来实现对物理数据库中数据的存取等操作。用户只需要了解所面对的数据库接口,而不必关心所访问的数据库本身的物理特性。
(2)Visual Basic 能够访问的数据库类型
Visual Basic 能够通过数据库引擎访问内部数据库、外部数据库、ODBC
数据库这三种类型的数据库。
内部数据库: 内部数据库又称本地数据库,使用Microsoft Access数据
格式,由Microsoft Jet引擎直接创建操作,可以提供最大的灵活性和访问速度。
外部数据库:Visual Basic中能够创建操作所有的ISAM(索引顺序访问方
法),如FoxPro、dBASE、Microsoft Excel、Paradox以及顺序文本文件等。
ODBC数据库: Visual Basic 可以访问标准的客户/服务器数据库,例如
Microsoft SQL Server。可以使用ODBC Direct 直接将命令传递给服务器,从而创建客户/服务器应用程序。
(3)Visual Basic 访问数据库的方案
用Visual Basic 访问数据库有许多可供选择的方案,用户应该根据自己
现在及将来的需要决定采用何种数据库方案。大多数应用程序是用来访问以下这些数据的:ASCII文本文件、SQL数据库以及大型数据库。早期的Visual Basic数据访问工具只是简单的ASCII文件的访问工具,极少数SQL Server的前端应用程序是使用鲜为人知的数据库VBSQL编写的。早先在Visual Basic3.0盛行的时期许多程序需要访问包含远程数据源的ISAM数据,为此Microsoft 设计了Microsoft Jet Database Engine(Jet数据库引擎)和Data Access Objects(DAO),使得Visual Basic的开发人员很容易地实现与Microsoft Jet接口。而后针对用户的需求Visual Basic中逐渐包含了更快的访问远程数据和对ODBC数据源访问的优化。经过数年,ODBC技术已成为访问远程数据的主要方
法,而Microsoft Jet 和ISAM数据接口的首选方案。
Visual Basic访问数据需要通过接口方法来实现,数据访问接口方法中一
部分是简单的应用程序接口界面,但大部分是组件对象模型界面(Component Object Model)。表2.1列出Visual Basic中的数据访问接口方法;
表2. 1 Visual Basic中的数据访问接口方法
“统一数据访问”提供了高性能的存取包括关系型和非关系型在内的多种数据源,提供独立于开发工具和开发语言的简单的编程接口,这些技术使得企业集成多种数据源、选择更好的开发工具、应用软件、操作平台、建立容易维护的解决方案成为可能。实现“统一数据访问”的基础是Microsoft的数据访问组件。这些组件包括ActiveX Data Objects(ADO)、Remote Data Service(RDS,又称“高级数据连接器”ADC)、OLE DB和ODBC。表2.2列出数据访问接口的类型;
表2.2 Visual Basic数据访问接口的类型
此外,Visual Basic在数据开发方面提供了十分强大的功能。有自带的数据管理器(Data Manager)、数据控件(Data Control)及数据访问对象(DAO)等一系列功能强大的工具来协助管理人员轻松地进行与数据库的连接和管理。
2.4.2 ACCESS简介
数据库选用Microsoft公司的Access产品作为数据库应用程序。目前的Access 2000是Microsoft强大的桌面数据库平台的第六代产品,是3 2位Access的第三个版本。Access有以下一些基本定义:
(1)数据库是一个包含各种Access “对象”(表、查询、窗体、报表、宏和模块)的文件,Access中所有工作都是建立在此基础之上的。
(2)表是存放数据的容器,被设计成行和列的格式,就像电子表中的那样。每一列叫做一个“字段”,包含特定类型的信息,如姓名或学历。每一行称为一个“记录”,包含与单个实体有关的所有信息,如某个员工的姓名、性别、所在部门、学历等。对于像Access这样的关系数据库管理程序,一个数据库通常包含几个存放相关数据的不同表。
(3)查询是一个Access对象,它询问数据库中有关数据的问题。根据设计方法的不同,查询能够在数据库中检索并组合来自不同表的数据。例如,可以设计一个查询来告知在公司中工作超过1年的职员有多少。查询还可以对一组数据执行操作,如更新或删除某组记录。
(4)窗体是一个窗口,它提供一种很方便的途径来查看数据库中已有记录或向数据库中增添新记录。在Access中,可以创建一个窗体,用来同时查阅单个表或多个表中的数据,还可以打印和显示窗体。
(5)报表是一个Access对象,设计来显示数据,其作用类似于窗体,但主要是用于数据打印,不能输入数据。
(6)页是一种特殊类型的窗体,它使用户能够利用Web浏览器查看和编辑Access的表。[8]
(7)宏用来保存Access中的一系列操作。可自动执行一些日常的任务,以便简化在Access中的工作。
(8)模块是用Visual Basic for Applications(VBA) 编写的过程,VBA是Access的基础程序设计语言。利用VBA可以编写程序代码来完成Access宏所不能完成的特定任务。
第三章 数据库设计
火车信息最基本的项的表进行增加、查询、修改、删除等操作。
用户管理模块应具有的功能:这个模块从本质上来讲,当然应该只有才有权使用之,但是本系统为了使开发者有一个整体的概念,故把这一模块也纳入进来。这个模块能够实现新用户的增加、已有用户的查找、已有用户的删除、已有用户的密码修改、注销不再使用的用户等功能。
火车票管理模块应具有的功能:这个模块是本系统中相对来讲最大也是最麻烦的,当然学会这些再去开发其他比它大的系统基本一样。它包含如下子模块。
(1)新增记录:为保证数据的有效性、一致性、完整性,在录入新记录时,系统能根据操作员输入的客户编号到客户表中查询是否已经存在这样的记录,如果已经存在,则给出更换编号的提示;如果不存在,则判断姓名是否为空,如果是空的则提示输入姓名,客户号码是否录入等一系列必须输入的项目的审核,如果都通过才能把当前输入的所有信息项插入到数据库表中。
(2)查询信息:系统能按火车车次,起点站,终点站等单项或多项的组合进行精确或模糊查询,并把查询的结果显示在表格中。另外,通过笔者在实践中总结的经验所知,用二维数组形式向表格中填写数据项的方法是比较慢的(若提取的是几万条或十几万条记录可能要等几十秒甚至内存会溢出),故本系统开发中没有介绍这种方法。
(3)更新记录:本模块实际上包含两个模块,即修改和删除。在修改子模块中,首先查询出要修改的记录,然后对每一条记录进行除编号外的任何一项的修改。在删除子模块中,也同样是先查询出要删除的记录,因为删除操作是一个没有反悔余地的操作,故在删除前会给出一次确认的机会,如果此时不想删除就可马上取消,但如果真正要删除则从数据库中永久性的删除。当然可以把删除的信息保存到历史记录中。
(4)信息输入:本模块是一个非常有用的模块,也是初学者最难的一块。本系统在制作中采用Microsoft Corporation的Visual Basic6.0提供的Data Report,即快又好用,可以把记录输出以作为永久保存。当然输出标准表格是非常容易的,如果要输出数据计算和布局比较复杂的表格,请读者参考有关书籍。
第四章 总体设计
4.1 系统详细调查
传统的软件工程方法学使用结构化分析技术,完成分析用户需求工作。需求分析要了解用户的情况,接下来通过与用户交流,对用户的基本要求反复细化,以得出对目标系统的完整、准确和具体的需求。需求分析是为了发现用户的真正需求,首先应从宏观角度调查、分析用户所面临的问题,也就是说,需求分析的第一步是尽可能准确地了解用户当前的情况和需要解决的问题。充分结合起来,这样才能更好的为用户服务。
(1)功能需求
基于以上的开发目标,系统开发的范围确定如下:本系统涉及添加火车票部分,后台管理火车票,在线观看等功能;本系统提供强大的功能,可进行不同类型排行,提供多种排行;本系统提供管理火车票的添加,删除和修改。
根据火车票订购管理的需要,开发一个“火车票订购系统”,应能实现的功能如下:
①. 能够修改进入系统密码以增加系统的安全性。
②. 能够对站点信息进行维护。
③. 能够对数据库进行添加,查询。
(2)数据需求
通过调查和研究,本系统仅提供一个数据库,但该数据库包含各项所需信息,表名为TrainTicket.mdb。
(3)运行环境
大多数用户,对计算机的要求并不高,一般只需能实现火车票信息、添加站点、查询功能即可,所以计算机的配置约为普通配置,DDR256M内存,17英寸纯平显示器,80G硬盘,标准键盘和鼠标,打印机,Windows 98/xp/me/2000操作系统等。而本系统开发工具选取VB6.0,所以编制的程序在以上环境的机器中均可顺利运行,并且本系统占用空间较小,主要依靠鼠标和键盘进行录入。详细调查的重点是对管理业务的流程进行描述,通过采用系统流程图中部分图工具来描述管理活动,进行规范化说明。
系统分析的主要成果是系统的逻辑模型。本系统的逻辑模型主要是以系统的数据 流图和数据字典为主要描述工具。即在火车票管理方式和业务流程进行认真分析和研究的基础上,排除现有组织机构和业务分工所造成的信息障碍。完全从业务管理功能和管理对象出发,按照信息系统中应有的数据流和数据结构来勾画系统的概貌。
4.2数据流图
数据流图是组织中信息运动的抽象。是在调研的基础上,从系统的科学性、管理的合理性、实际运动的可行性角度出发。将信息处理功能和彼此之间的联系自顶向下,逐层分解,从逻辑上精确地描述系统应具有的数据加工功能、数据输入、数据输出、数据存储及数据来源和去向(外部实体)等项目。
首先,分析管理系统的总体情况,划分系统边界,识别系统的数据来源和去处,确定外部实体,得出系统的顶层数据流程图。
然后划分出几个主要的信息管理功能,并明确各功能之间的联系,绘制出数据流程图。
数据流程图的符号说明如图3.1所示。
外部实体 处理 数据流 数据存储
图3.1 数据流程图的符号
4.3 数据库设计
数据库(Database),是按照数据结构来组织、存储和管理数据的仓库,是用于查询的大量数据的存储区域。使用数据库可以带来许多好处:如减少了数据的冗余度,从而大大地节省了数据的存储空间,实现数据资源的充分共享等等。此外,数据库技术还为用户提供了非常简便的使用手段,使用户易于编写有关数据库应用程序。特别是近年来推出的计算机关系数据库管理系统,操作直观,使用灵活,编程方便,功能强大,环境适应广泛,数据处理能力极强。
数据库的设计是指对一个给定的应用环境,构造数据库模式,建立数据库及其应用系统,满足各种用户需求。作为信息资源开发、管理和服务的一种有效的手段,数据库技术的应用已越来越广泛,从小型的单项事务处理系统到大型的信息系统大都用先进的数据库技术来保持系统数据的安全性、完整性和共享性。对一个实际的系统来说,数据库表的设计在遵循数据库理论的同时,必须能用开发工具来实现用户在各方面提出的功能要求。
表1:
表2:
表3:
表4:
表5:
第五章 系统的实现
5.1 主窗口界面
本系统是为市场上众多的小型用户所设计,是大众型的,它主要包含以下几个模块:系统权限的设定、原始数据录入、数据的管理等等。从而,实现对火车票录入,火车票管理等实现全面、及时的管理。创建一个稳定、高效的火车票订购系统。 登陆窗体如下图所示:
登陆后便可看到程序的主界面:
主要代码如下所示:
Private Sub AdminInfo_Click()
FrmLogonUser.Show 1
End Sub
Private Sub ClientInfo_Click()
FrmCustomer.Show 1
End Sub
Private Sub CustomerInfo_Click()
FrmCustomer.Show 1
End Sub
Private Sub Form_Activate()
StatusBar1.Panels(2).Text = "当前登录用户: " + StataName
StatusBar1.Panels(3).Text = "当前系统时间:" & Format(Date, "yyyy年mm月dd日")
StatusBar1.Panels(4).Text = Time
End Sub
Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
If vbYes = MsgBox("是否确定要退出系统?若是!请及时备份数据库!", vbInformation + vbYesNo
+ vbDefaultButton2, "询问?") Then
End
Else
Cancel = -1
End Sub
Private Sub LineInfo_Click()
FrmLine.Show 1
End Sub
Private Sub OrderTicket_Click()
FrmTickets.Show 1
End Sub
Private Sub Quit_Click()
If vbYes = MsgBox("是否确定要退出系统?若是!请及时备份数据库!", vbInformation + vbYesNo
+ vbDefaultButton2, "询问?") Then
End
Else
Exit Sub
End If
End Sub
Private Sub Reboot_Click()
Me.Hide
FrmLogon.Show 1
End Sub
Private Sub TicketInfo_Click()
FrmTicketInfo.Show 1
End Sub
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button)
Select Case Button.Index
Case 1
If UserType = "普通用户" Then
MsgBox "你没有足够的权限查看系统用户信息,请与系统管理员联系!", vbExclamation, "提
示!"
Exit Sub
Else
FrmLogonUser.Show 1
End If
Case 3
FrmLine.Show 1
Case 5
FrmCustomer.Show 1
Case 7
FrmTickets.Show 1
Case 9
FrmLine.Show 1
Case 11
FrmTicketInfo.Show 1
If vbYes = MsgBox("是否确定要退出系统?若是!请及时备份数据库!", vbInformation +
vbYesNo + vbDefaultButton2, "询问?") Then
End
Else
Exit Sub
End If
End Select
End Sub
Private Sub TrainInfo_Click()
FrmTrain.Show 1
End Sub
Private Sub TrainLine_Click()
FrmLine.Show 1
End Sub
Private Sub TrianInfo_Click()
FrmTrain.Show 1
End Sub
5.2 添加车次信息窗口
在添加火车票信息中,管理人员可以通过对火车票站点、到达城市,时间,火
车票类型等相关信息进行录入。
添加窗口如下图所示:
主要代码如下所示:
Private Sub CmdCancel_Click()
Unload Me
End Sub
Private Sub CmdOk_Click()
If txtLineID.Text = "" Then
MsgBox "请输入车次编号!", vbInformation, "信息提示"
txtLineID.SetFocus
Else
If Combo1.Text = "" Then
MsgBox "请输入车次类型!", vbInformation, "信息提示"
Combo1.SetFocus
Else
If txtBegin.Text = "" Then
MsgBox "请输入起点站名字!", vbInformation, "信息提示"
txtBegin.SetFocus
Else
If txtEnd.Text = "" Then
MsgBox "请输入终点站名字!", vbInformation, "信息提示"
txtEnd.SetFocus
Else
If txtBTime.Text = "" Then
MsgBox "请输入发起时间! 格式为 hh:mm ", vbInformation, "信息提示"
txtBTime.SetFocus
Else
If txtETime.Text = "" Then
MsgBox "请输入到达时间! 格式为 hh:mm ", vbInformation, "信息提示"
txtETime.SetFocus
Else
If txtDays.Text = "" Then
MsgBox "请输入历时时间间隔", vbInformation, "信息提示"
txtDays.SetFocus
Else
If txtHard.Text = "" Then
MsgBox "请输入硬座价格", vbInformation, "信息提示"
txtHard.SetFocus
Else
If txtSoft.Text = "" Then
MsgBox "请输入软座价格", vbInformation, "信息提示"
txtSoft.SetFocus
Else
If txtSleep.Text = "" Then
MsgBox "请输入卧铺价格", vbInformation, "信息提示"
txtSleep.SetFocus
Else
'检查时间格式是否正确!
If CheckTimeOk = False Then
MsgBox "你输入的 发起时间 或 到达时间 格式不对!正确的时间格式时 hh:mm ",
vbExclamation, "警告!"
txtBTime.SetFocus
Exit Sub
Else
'计算出这趟车次的历时时间
GetHowLongStr
With ObjClsLine '若存在该车次信息了 则不可再添加了
.LineID = Trim(txtLineID.Text)
.LineType = Trim(Combo1.Text)
.Begin = Trim(txtBegin.Text)
.BeginTime = TimeValue(txtBTime.Text)
.Ends = Trim(txtEnd.Text)
.EndTime = TimeValue(txtETime.Text)
.HowLong = TmpHowLongStr
.HardPrice = Int(txtHard.Text)
.SoftPrice = Int(txtSoft.Text)
.SleepPrice = Int(txtSoft.Text)
.SleepPrice = Int(txtSleep.Text)
.Days = Int(txtDays.Text)
.TrainID = Trim(Adodc1.Recordset.Fields(0))
End With
'判断时添加还是 修改
If Frag = 1 Then
With ObjClsLine '若存在该车次信息了 则不可再添加了
If .IsExist(Trim(txtLineID.Text)) = True Then
MsgBox "已经存在该编号的车次的信息了!请重新输入合适的车次编号",
vbExclamation, "提醒!"
txtLineID.Text = ""
Exit Sub
Else
'先判断该列车是否有相应的座位类型
If Int(Adodc1.Recordset.Fields(4)) = 0 And Int(txtHard.Text) 0 Then
MsgBox "要添加的车次所对应的列车没有硬座车厢!故应将硬座价格值为 0 ",
vbExclamation, "提醒!"
txtHard.Text = 0
txtHard.SetFocus
Else
If Int(Adodc1.Recordset.Fields(5)) = 0 And Int(txtSoft.Text) 0 Then
MsgBox "要添加的车次所对应的列车没有软座车厢!故应将软座价格值为 0 ",
vbExclamation, "提醒!"
txtSoft.Text = 0
txtSoft.SetFocus
Else
If Int(Adodc1.Recordset.Fields(6)) = 0 And Int(txtSleep.Text) 0 Then
MsgBox "要添加的车次所对应的列车没有卧铺车厢!故应将卧铺价格值为 0 ",
vbExclamation, "提醒!"
txtSleep.Text = 0
txtSleep.SetFocus
Else
.Insert
FrmLine.ReNewLineInfo
MsgBox "成功添加车次信息!", vbInformation, "信息提示"
txtLineID.Text = ""
End If
End If
End If
End If
End With
Else
If Frag = 2 Then
ObjClsLine.Update (Trim(txtLineID.Text))
FrmLine.ReNewLineInfo
MsgBox "成功修改车次信息!", vbInformation, "信息提示"
Unload Me
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End If
End Sub
'计算出这趟车次的历时时间
Public Sub GetHowLongStr()
'用于计算时间的变量
Dim TmpTime
Dim Hours, Hour1, Hour2
Dim Mint
Hour1 = (Int(txtDays.Text) - 1) * 24
TmpTime = TimeValue(24 - TimeValue(txtBTime.Text)) + TimeValue(txtETime.Text)
Hour2 = Hour(TmpTime)
Hours = Hour1 + Hour2
Mint = Minute(TmpTime) Mod 60
TmpHowLongStr = Hours & "小时" & Mint & "分"
End Sub
'检查输入的时间是否符合要求!
Public Function CheckTimeOk() As Boolean
If Left(txtBTime.Text, 2) = 60 Or Right(txtBTime.Text, 2) >= 60 Or Len(txtBTime.Text)
Right(Left(txtBTime.Text, 3), 1) ":" Then
CheckTimeOk = False
Else
If Left(txtETime.Text, 2) >= 60 Or Right((txtETime.Text), 2) >= 60 Or Len(txtETime.Text) ":" Then
CheckTimeOk = False
Else
CheckTimeOk = True
End If
End If
End Function
5.3 客户信息输入窗口
订票时,客户只要根据本系统要求,填写客户编号,客户姓名,客户号码等等便可完成订票操作。
本模块主要界面如下所示:
主要代码如下所示:
Private Sub CmdOk_Click()
If ClientID.Text = "" Then
MsgBox "请输入客户编号!", vbInformation, "信息提示"
ClientID.SetFocus
Else
If ClientName.Text = "" Then
MsgBox "请输入客户姓名!", vbInformation, "信息提示"
ClientName.SetFocus
Else
If DisCunt.Text = "" Then
MsgBox "请输入客户折扣率!", vbInformation, "信息提示"
DisCunt.SetFocus
Else
If DisCunt.Text = 100 Then
MsgBox "请输入正确的客户折扣率! 数字为 0--100 的数", vbExclamation, "信息提示"
DisCunt.SetFocus
DisCunt.SelStart = 0
DisCunt.SelLength = Len(DisCunt.Text)
Else
With ObjClsCustomer
.ClientID = Trim(ClientID.Text)
.ClientName = Trim(ClientName.Text)
.ClientPhone = Trim(Phone.Text)
.DiscountRate = Int(DisCunt.Text)
End With
'判断是 添加 还是 修改
If Frag = 1 Then
If ObjClsCustomer.IsExistCustomer(Trim(ClientID.Text)) = True Then MsgBox "已经存在该客户编号的客户信息了!", vbExclamation, "信息提示" ClientID.Text = ""
ClientID.SetFocus
Else
ObjClsCustomer.Insert
FrmCustomer.ReNewDataGrid
MsgBox "成功添加客户信息!", vbInformation, "信息提示"
ClientID.Text = ""
End If
Else
If Frag = 2 Then
ObjClsCustomer.Update Trim(ClientID.Text)
FrmCustomer.ReNewDataGrid
MsgBox "成功修改客户信息!", vbInformation, "信息提示"
Unload Me
End If
End If
End If
End If
End If
End If
End Sub
5.4售票信息模块
通过本模块首先查询车次,如有查询有没该车次,然后选择购买车票的类型,日期,便可出票。界面如下图所示:
主要代码:
Private Sub CmdOk_Click()
If AdoClient.Recordset.EOF Then
MsgBox "请先确应正确的客户信息!", vbExclamation, "警告!"
Exit Sub
Else
If Adodc1.Recordset.EOF Then
MsgBox "请先确应正确的列车车次信息!", vbExclamation, "警告!"
GetLineByID (Trim(txtLineID.Text)) '默认就以车次编号 查询车次信息 Exit Sub
Else
If Combo1.Text = "" Then
MsgBox "请选择要购买的座位类型!", vbInformation, "信息提示"
Combo1.SetFocus
Else
SumPrice '先计算出客户的实际费用
'检查是否有没有相应的座位车厢存在
Select Case Combo1.Text
Case "硬座"
If Adodc1.Recordset.Fields(7).Value = 0 Then
MsgBox "该趟列车车次现暂时没有提供硬座车厢!现不提供硬座售票服务!", vbInformation, "信息提示"
Exit Sub
End If
Case "软座"
If Adodc1.Recordset.Fields(8).Value = 0 Then
MsgBox "该趟列车车次暂时没有提供软座车厢!现不提供软座售票服务!", vbInformation, "信息提示"
Exit Sub
End If
Case "卧铺"
If Adodc1.Recordset.Fields(9).Value = 0 Then
MsgBox "该趟列车车次暂时没有提供卧铺车厢!现不提供卧铺售票服务!", vbInformation, "信息提示"
Exit Sub
End If
End Select
GetMax (Adodc1.Recordset.Fields(11)) '获得该列车的硬座 ,软座 ,卧铺 ,和车厢最大人数
GetStartNo
GetTicketCount (Adodc1.Recordset.Fields(0))
If StartCarriageNo > LastCarriageNo Then
MsgBox "该列车的 " + Combo1.Text + "车票 已经出售完毕了!", vbInformation, "信息提示"
Exit Sub
End If
With ObjClsTicket
.ClientID = Trim(AdoClient.Recordset.Fields(0))
.ClientName = Trim(AdoClient.Recordset.Fields(1))
.SetDate = DateValue(DTPicker1.Value)
.LineID = Trim(Adodc1.Recordset.Fields(0))
.LineType = Trim(Adodc1.Recordset.Fields(1))
.Begin = Trim(Adodc1.Recordset.Fields(2))
.BeginTime = TimeValue(Adodc1.Recordset.Fields(3))
.Ends = Adodc1.Recordset.Fields(4)
.EndTime = TimeValue(Adodc1.Recordset.Fields(5))
.HowLong = Trim(Adodc1.Recordset.Fields(6))
.SeatNo = Trim(SeatNoStr)
.SeatType = Trim(Combo1.Text)
.Price = Int(TmpPrice)
.Insert
End With
FrmTicketConfirm.Show 1
End If
End If
End If
End Sub
5.5 车票信息报表
对已出售的车票通过本模块可以全部打印出来,明确查看出售记录,车次,站点,时间,座位类型等等。界面截图如下所示:
主要代码如下所示:
Public Sub ReNewInfo()
SqlStmt = "Select ClientID AS 客户编号, ClientName as 客户姓名 ,SetDate as 发车日期 ,LineID as 车次编号,LineType " _
+ "as 车次类型 , Begin as 起点站 ,BeginTime as 发时 ,Ends as 终点站 ,EndTime as 到时 ,SeatNo as 座位号 ,HowLong as 历时 ," _
+ "SeatType as 座位类型 ,Price as 价格 from Tickets Order by ClientName "
Adodc1.ConnectionString = DB.ConStr
Adodc1.RecordSource = SqlStmt
Adodc1.Refresh
Label4.Caption = ""
If Adodc1.Recordset.EOF Then
Label4.Caption = ""
CmdRpt.Enabled = False
Exit Sub
Else
Set DataGrid1.DataSource = Adodc1
Label4.Caption = "统计有 " & Adodc1.Recordset.RecordCount & " 条记录"
CmdRpt.Enabled = True
End If
End Sub
Public Sub GetByLineID(TmpLineID As String)
SqlStmt = "Select ClientID AS 客户编号, ClientName as 客户姓名 ,SetDate as 发车日期 ,LineID as 车次编号,LineType " _
+ "as 车次类型 , Begin as 起点站 ,BeginTime as 发时 ,Ends as 终点站 ,EndTime as 到时 ,SeatNo as 座位号 ,HowLong as 历时 ," _
+ "SeatType as 座位类型 ,Price as 价格 from Tickets Where LineID like '%" + TmpLineID + "%' Order by ClientName "
Adodc1.ConnectionString = DB.ConStr
Adodc1.RecordSource = SqlStmt
Adodc1.Refresh
Label4.Caption = ""
If Adodc1.Recordset.EOF Then
Label4.Caption = ""
CmdRpt.Enabled = False
Exit Sub
Else
Set DataGrid1.DataSource = Adodc1
Label4.Caption = "统计有 " & Adodc1.Recordset.RecordCount & " 条记录"
CmdRpt.Enabled = True
End If
End Sub
Public Sub GetByBegin(TmpBegin As String)
SqlStmt = "Select ClientID AS 客户编号, ClientName as 客户姓名 ,SetDate as 发车日期 ,LineID as 车次编号,LineType " _
+ "as 车次类型 , Begin as 起点站 ,BeginTime as 发时 ,Ends as 终点站 ,EndTime as 到时 ,SeatNo as 座位号 ,HowLong as 历时 ," _
+ "SeatType as 座位类型 ,Price as 价格 from Tickets Where Begin like '%" + TmpBegin + "%' Order by ClientName "
Adodc1.ConnectionString = DB.ConStr
Adodc1.RecordSource = SqlStmt
Adodc1.Refresh
Label4.Caption = ""
If Adodc1.Recordset.EOF Then
Label4.Caption = ""
CmdRpt.Enabled = False
Exit Sub
Else
Set DataGrid1.DataSource = Adodc1
Label4.Caption = "统计有 " & Adodc1.Recordset.RecordCount & " 条记录"
CmdRpt.Enabled = True
End If
End Sub
总结与展望
在本系统的开发过程中,由于本人是初次开发软件,在知识、经验方面都存在着不足。另外,在整个开发的过程中,时间也比较仓促。因此,该系统必然会存在一些缺陷和不足。因为对火车票订购的整个流程还不够熟悉,在需求分析时未能做到完全满足用户的需求。在系统功能上,未能实现部分功能,还有些问题没有考虑周到。
尽管该火车票管理系统存在着很多不足,但其功能全面、易于日后程序更新、数据库管理容易、界面友好、操作方便、效率高、安全性好等优点是火车票订购系统所必需的。
从这次毕业设计的过程中我学到了很多有用的东西,上面这些只是在查错方面的一些技巧。严谨、负责、求实、进取的精神则是此次毕业设计给我的最大启示。任何一个微小的错误都可能导致程序的崩溃。毕业设计将对我以后学习和工作产生更深远的影响。
致 谢
紧张忙碌的毕业设计即将结束了,在这几个月的课程设计中,我从项目的规划、调研开始,到编码、测试,充分体会了一个软件产品的生产过程,也让我看到了我自身水平的不足。与此同时,同样让我感到了继续学习、更新自身知识、加强自身能力的必要性。大学四年的学习即将结束,我也即将走向新的起点。这段毕业设计的经历给了我克服困难的决心和解决问题的经验,它将对我今后的生活、学习起到很大的帮助。
经过两个多月的学习,我初步掌握了VB语言的基本应用,基本达到了毕业设计的要求。最重要的是,毕业设计的经历增强了我自我学习的能力,做到了在不用老师手把手教授的情况下,完成了一个较为复杂的管理系统。同时,在课程设计的过程中,查阅了大量的资料,也增强了我进行资料收集、查找和对资料进行筛选的能力。
在整个毕业设计的实习过程中,我要衷心的感谢我的指导老师。他一直都在为我的毕业设计提供耐心的指导,并且帮助我解决了很多疑难问题,这样才有了我的这份毕业设计。我还要感谢我的同学们,他们也给了我许多支持。最后,也是最重要的,感谢所有这四年中传授我知识,给予我关怀和帮助的老师们!
参考文献
[1] 王国荣,张宝刚.VB 网页制作教程[M].北京:人民邮电出版社,2001年
[2] 郑学坚,周斌.微型计算机应用及原理[M].北京:清华大学出版社,2002年
[3] 谢希仁.计算机网络[M].大连:大连理工大学出版社,2000年
[4] 卡通动画工作室.Flash 5 事例与操作[M].北京:中国青年社出版,2003年
[5] 老虎工作室.Authorware 5 多媒体制作实例详解[M].北京:人民邮电出版社,2002年
[6] 闪四清.数据库系统原理与应用教程[M].北京:清华大学出版社,2002年
[7] Bill Winett .设计访问量统计教程[M].北京:清华大学出版社,2001年
[8] 刘浩.在NT网中组建自己的Web站点[M].北京:人民邮电出版社,2001年
[9] 闪四清.完全掌握SQL Server2000[M].北京:人民邮电出版社,2001年
[10] John Chirillo;Scott Blaul.Storage Security Protecting SANs,NAS,and DAS[M].2000
[11] Kevin Kline Daniel Kline. SQL 2000[M].2000
[12] Ferland J A, Fleurent C. SAPHIR: A decision support system for course scheduling[J]. Interfaces, 1994, 24 (2)
[13] Pawlak, Z. Rough Sets. International Journal of Information and Computer Science[M]. 1982, 11
[14] 张建章.浅谈VB开发WEB数据库应用技术, 计算机应用系统[J].1998,9.
[15] 龚玉清.网页设计的色彩运用, 现代教育技术[J].2003,5.
[16] 段永红、李春海.基于VB的设计建设, 电脑开发与应用[J].2000,8.
[17] 裴树军、张仁伟.基于VB的动态WEB技术设计, 哈尔滨理工大学学报
[J].1999,4.
[18] 杨青.VB的主要技术特点分析, 电脑与信息技术[J].1999,4.
[19] 曹淑琴.VB技术的设计建设, 华北科技学院学报[J].2003,1.
[20] 吴玉新.设计VB后台解决方案[M].北京:人民邮电出版社,2003年
[21] 黄明、粱旭.VB信息系统设计与开发实例[M].北京:机械工业出版社,2003
年
[22] 刘禾、蔡锋.精通VB架站技巧[M].北京:中国青年出版社,2002年