c#的汽车票销售管理系统的设计
摘要:汽车销售站点普遍存在信息发布滞后、管理困难的问题,消费者无法了解信息导致购票困难。汽车票网络化销售可以极大的方便消费者与销售中心,减少许多工作量,使买与卖的关系更加明晰。应用SQL Server 后台数据库和VS 2010的C#语言共同开发这款软件,能够简单的实现这个功能,消费者可以直接从客户端购买车票,销售中心可以实时掌握所有票务的动态,双方面都能及时了解信息。另外,网络销售手段也是当代电子信息技术发展的必然趋势,中国人口数量庞大,旅游出行压力巨大,通过网络销售解决长途汽车票的销售压力,可以有效缓解上述问题。关键字:消费者;网络;SQL Server;C#;信息化Design and implementation of bus ticket sales management system based on C#Student majoring in Computer Science and Technology Zhao Zhen-han Tutor Zhao Qing-songAbstract: Auto sales site generally exist information dissemination lag, difficult management issues, consumers can not understand the information lead to purchase difficulties. Car ticket online sales can greatly facilitate the consumer and sales center, reduce the workload, so that the relationship between buying and selling more clear. Application of SQL Server database and visual studio 2010 C# language jointly develop this software, to achieve the function of simple, consumers can purchase tickets directly from the client, the sales cent
*好棒文|www.hbsrm.com +Q: *351916072*
er can real-time master the dynamics of all ticket, both sides can keep abreast of information. Also network marketing means is the modern electronic information technology development the inevitable trend, the large number of Chinese people, travel enormous pressure, through a network of sales solve bus ticket sales pressure, can effectively alleviate the above problems.1 概论1.1 研究背景及意义随着社会的信息化进程逐步加强,各行各业全部紧跟时代的脚步,从原有传统的人工管理体制向信息自动化的管理体制过渡。作为主要的交通出行工具之一的汽车,无论是出于企业的发展,还是出于满足广大乘客的需要,实现网络化的销售售票系统是非必要的。[1]人们消费模式等方面发生着巨大变化,在家里就可以实现订购、订机票、预定酒店等等,当然希望各方各面都能越来越便捷。买汽车票,尤其是春运期间买票是件很麻烦的事情,有时候排队买票就要排上很长时间,甚至有时候还因为信息的缺乏,不能及时有效的了解车票的销售情况,白跑一趟汽车站。利用网上汽车票预定系统,旅客可以通过网络查询车票的销售情况和预定汽车票,这极大的提高了订票的效率,节省了订票的时间,缓解了售票窗口拥挤的现状,网上订票系统的成功实施,提高了车站的信息化管理水平,减少了车站工作人员的工作量,为旅客节约了时间。[2]1.2 国内外研究现状目前,利用网络技术和电子商务的发展,是政府与市场最为关心的问题。电子商务在市场发展中显示了极大优势,长途汽车公司通过电子商务活动可以树立和提高企业的网上形象和知名度,提供本公司最新的车票信息,降低销售成本,提高经营效率,开拓潜在市场和销售渠道。电子商务不仅使长途汽车公司信息流动的范围扩大,还使企业管理的内涵进一步延伸,除了传统的企业财务、库存、销售、采购、生产等管理以外,涉及企业供应链的许多环节也被纳入管理范畴。这就对汽车公司的信息管理系统提出了新的要求,同时也推进新一代信息系统的产生和发展,造就了电子商务环境下管理信息系统、销售系统与以往相比具有更丰富的内涵,吸引了众多学者的研究。[3]1.2.1 汽车票互联网化的大致流程与成本如下合作单位:可以分为几级,一是省汽车票联网中心; 二是市级联网中心;三是单个汽车站。如果该地有建立有省网、市网,则网络汽车票服务商可直接对接;如无,则需要对接单个汽车站。但由于省网和市网所拥有的 汽车站车票数量有限(一个省网可能只有某个车站某趟线路3-5张票),未来,与汽车站直接对接可能是趋势。商务和IT拓展的成本:据了解,一个汽车站的商务拓展成本和IT成本,平均下来估计在数万元,具体成本受车站信息化程度、领导个人偏好、员工配合程度等不一。涉及的利益相关者:省市交通运输中心、省市信息化中心、交通运输集团总经理、信息化中心主任、车站站长、IT人员等。一般来说,IT对接的时间短,一般在5-10天内能完成;但商务对接时间则难以把握,如找到核心关键人或有领导关照,则可能很快,但如无,则甚至花费大量时间,无法攻克。总体而言,要与汽车站建立合作,实现网上售票,要解决错综复杂的利益关系,要面对不同信息化水平的汽车站,是一个线下拓展十分辛苦的累活。前途很美好,但道路十分曲折。[4]1.3 研究目标及内容2 系统开发工具及其技术2.1 系统开发及工具主要使用SQL Server Management Studio和Microsoft Visual Studio 2010 两款开发工具,使用的语言为C#语言。下面分别对系统中采用到的开发工具做简单的介绍。2.1.1 Microsoft Visual Studio 2010它将是经典的一个版本,相当于当年的6.0版。而且它可以自定义开始页;新功能还包括:(1)C# 4.0中的动态类型和动态编程;(2)多显示器支持;(3)使用Visual Studio 2010的特性支持TDD;(4)支持Office ;(5)Quick Search特性;(6)C++ 0x新特性;(7)IDE增强;(8)使用Visual C++ 2010创建Ribbon界面;(9)新增基于.NET平台的语言 F#。2.1.2 SQL Server 2005 Management Studio SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。1.真正的客户机/服务器体系结构。2.图形化用户界面,使系统管理和数据库管理更加直观、简单。3.丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地。4.SQL Server提供数据仓库功能,这个功能只在Oracle和其他更昂贵的DBMS中才有。SQL Server 2005中包含了非常丰富的新特性:通过提供一个更安全、可靠和高效的数据管理平台,增强企业组织中用户的管理能力,大幅提升IT管理效率并降低运维风险 和成本;通过提供先进的商业智能平台满足众多客户对业务的实时统计分析、监控预测等多种复杂管理需求,推动企业管理信息化建设和业务发展。[7]安全、可靠、高效的企业级数据管理平台:SQL Server 2005将在安全性、高可靠性、性能、扩展性、可管理性方面有极大的提高,不仅能够确保企业级数据业务的实时稳定运行、还能够大大提高管理效率、降低操作 复杂度和运维成本。例如,SQL Server 2005将提供全新的安全认证、数据加密技术来加强您数据系统的安全性;数据库镜像、快照、时点恢复、实时在线管理等诸多功能大大提高了企业级系统的可靠 性、扩展性;而数据集成,各种自动化管理、调试和优化工具则为您的IT管理工作带来全新的体验。在硬件方面,SQL Server 2005支持64位运算和海量数据存储。2.1.3 开发语言 C#简介C#是在Java流行起来后所诞生的一种新的语言。由于微软在操作系统上占有很大的优势。在以往的开发中累积了不少经验,所形成的.net平台,所以C#在Windows方面可以说比Java具有更大的优势。如果单纯从技术上来讲,C#在网络编程上可以与Java匹敌。C#还在Windows Forms也有一定的优势。C#是一种非常类似于C++的语言,风格是更接近于Java,不管是C++程序员还是Java程序员,都可以很方便的转到C#上来。C#的强大是依赖于.net的发展,而.net的发展是看微软在.net上的决心和投入有多少。从Windows 2003和Vista系统可以看出(前者内置.net1.1,后者内置.net2.0。).Net在Windows编程中具有重要的战略意义。[8]C#目前主要是应用在网络编程上,其他领域比如数据库、窗体编程,都逐渐在增大。C#语言的特点:1. 完全面向对象。2. 支持分布式,之所以有C#,是因为微软相信分布式应用程序是未来的趋势,即处理过程分布在客户机和服务器上。所以C#一出生就注定了能很好解决分布式问题。3. 跟Java类似,C#代码经过编译后,成为了一种IL(中间语言)。在运行时,再把IL编译为平台专用的代码。4. 健壮,C#在检查程序错误和编译与运行时错误一点也不逊于Java,C#也用了自动管理内存机制。5. C#不像Java那样完全摒弃了指针和手动内存管理。C#默认情况下是不能使用指针的,程序员在有必要时可以打开指针来使用。这样可以保证编程的灵活性。6. 安全性:C#的安全性是有.net平台来提供的。C#代码编译后成为IL语言。是一种受控代码,.net提供类型安全检查等机制保证代码是安全的。7. 可移植性:由于C#使用类似Java的中间语言机制。使得C#也跟Java类似,可以很方便的移植到其他系统。在运行时,再把中间代码编译为适合特定机器的代码。8. 解释性:C#也是一种特殊的解释性语言。9. 高性能:C#把代码编译成中间语言后,可以高效的执行程序。10. 多线程:与Java类似,可以由一个主进程分出多个执行小任务的多线程。11. 组件模式:C#很适合组件开发。各个组件可以由其他语言实现的,然后集成在.net中。2.2软件工程及面向对象机制2.2.1 软件工程 软件工程过程是将用户的需求转化为软件系统所需的软件工程活动的集合。这个过程包括投入、需求说明、规格说明、设计、实施、验证、安装和文档化等等。主要包括以下几个阶段:1.可行性分析与开发集合2.需求分析3.软件设计4.程序编码5.软件测试6.运行维护本系统的设计将按照以上软件工程的标准来实施,对每个阶段都采用科学的管理技术和良好的方法,而且在每个阶段结束之前都从技术和管理两个角度进行严格的审查,合格之后才开始下一阶段的工作,使整个开发过程以一种有条不紊的方式进行,保证软件的质量,增加软件的可维护性。[9]2.2.2 面向对象分析方法面向对象开发方式是基于客观世界的对象模型化的软件开发方法。在面向对象程序设计中,所谓对象,是一个属性集合及其操作集合的封装体。作为计算机模拟真实世界的抽象,一个对象就是一个实际问题论域、一个屋里的实体或逻辑的基本程序模块,因为它包含了数据结构和所提供的相关操作功能。面向对象分析是面向对象软件工程方法的第一个环节,包括概念原则、过程步骤、表示方法、提交文档等规范要求。3 需求分析及设计原则3.1 汽车票销售系统的总体需求需求分析是软件定义时期的最后一个阶段,它的任务是准确了解用户的需求,也就是对系统提出完整、准确、清晰、具体的要求。需求分析的结果是系统开发的基础,它做的是否透彻、完整、正确是软件项目成败的关键。通常,需求分析需要双方合作、探讨,共同定义。经过了解,我发现现在汽车票网上销售并未真正普及,很多人没有去网上订票的意愿,本身是出于对这种新售票方式的不信任、不了解所致,因此,本系统的一个重点项目也就是做网上销售系统的推广,通过广告、用户体验等方式,让广大消费者能接受这种新型方式。网上的汽车票销售动态更新非常快,只要上网查询就是可以实时掌握汽车票的销售情况,不用亲自去车站跑一趟,方便了群众,也方便了汽车销售人员的工作量,十分便捷,不但为消费者带来福利,也是长途汽车公司获利颇多。[10]3.1.1 数据库需求我做的汽车票销售管理系统很多关于数据的操作,所以必须建立起一个数据库。消费者的需求具体体现在各种车票车次信息的查询、购买、更新和删改等方面,这就要求数据库结构能充分满足各种信息的输入输出。在数据库设计上,从物理上将这几个数据表有机的分离开来,便于数据的统一管理,同时这几个功能表之间又存在着逻辑上的相互关联,可以极大的增强了数据的处理速度和增、删、改、查的综合效率,对于消费者和销售人员来说,他们在前台进行各类操作,并不用直接和数据库发生关系,十分方便。[11]3.1.2 安全性需求因为汽车票销售涉及金钱交易等问题,所以对于安全性的要求是极高的,我单独将有关银行的信息表独立成一个数据库,用来存放该信息,同时需要增加用户的密保等级。另外,汽车票和火车票一样有黄牛党倒卖票的现象存在,因此会对所有消费者账户进行监控,管理员与消费者的账号是相互独立的,前者可以监控后者,对后者将有支配权,保护整个系统的最高运行。另外会安置安全管理员运行整个系统以防奔溃,他拥有最高权限。用户与数据库之间无法建立链路关系,保证了网络的安全性。在一致性方面要求系统数据要保证一致性和准确性,当其中某一数据库中记录发生了改变时,与之关联的数据库也要随之发证变化。[12]3.1.3系统功能需求1、功能划分如图1所示图1 汽车销售系统功能模块2、功能描述消费者:消费者可以查询各个站台之间的票的信息,并进行票的购买、退票、改签等行为。在消费者个人中心模块中,可以对自己的密码等信息进行修改,另外也可以对自己账号进行银行绑定,并给自己账户充钱,对于票的购买,提供3种购买方式,不同的购买方式对于账户影响不同,消费者可以自己注册新用户。调度员:对于各个站台间的票的查询实时监控,了解各站动态,对于车次可以进行必要的增加,删除等,还可以强制将一些用户的票退除。高级管理员:专门退调度员进行管理,对其权限进行各种限制或调动,高级管理员也拥有部分调度员的权限。3.2可行性研究3.2.1技术可行性 前台的操作简单易懂,并且浏览比较流畅,用户可以很方便的进行注册、查询、购买和付款,反应速度快,技术是可行的。[13]3.2.2 经济可行性 成本:汽车销售管理信息系统的成本并不高,主要的成本就是开发成本,还有一个成本是运营成本,运营成本其实也不高,因为在系统出来以后,不需要经过营销的手段进行产品的推广。收益:从系统开始正式投入运营的那一天就有相当多的用户开始体验网上购买车票,用户流量瞬间就达到了系统的峰值,运营此系统还可以大大的减轻车站销售人员的工作量,以至可以减少车站销售人员的数量是可行的。[14]3.2.3 运行环境可行性本系统可以在Windows平台上运行。硬件要求CPU 500MHz以上,内存1G以上,操作系统建议使用Windows xp以上,操作员要求初中以上学历,对计算机操作熟练即可。4 汽车销售系统总体设计4.1 系统总体功能图该图已经在系统功能需求模块中给出。4.2子系统功能介绍4.2.1 个人模块如图2所示图2 消费个人功能模块在个人模块中,主要是查询与车票的购买功能,并且能修改密码,账户充值,绑定银行卡等功能。4.2.2 调度员模块如图3所示图3 调度员功能模块调度员主要是对于车票的检查控制,另外能对车次进行增、删、改等操作,另外能进行强制退票。4.2.3 高级管理员模块如图4所示图4 高级管理员功能模块高级管理员,可以对调度员进行权限的修改(升级或降级)或者直接获取调度员的权限,另外可以查询各项车票信息,权限最高级。4.3 消费者买票购买流程图如图5所示图5 消费者购票流程图4.4数据库设计4.4.1 数据库基础数据库是指长期储存在计算机内的、有组织的、可共享的数据集合[]。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。数据库是依照某种数据模型组织起来并存放二级存储器中的数据集合。这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增、删、改和检索由统一软件进行管理和控制。 数据库管理系统(DBMS)是用于描述、管理和维护数据库的程序系统,是数据库系统的核心组成部分。它建立在操作系统的基础上,对数据库进行统一的管理和控制。其主要功能为描述数据库、管理数据库、维护数据库、数据通信。DBMS主要有4种类型:文件管理系统、层次数据库系统、网状数据库系统和关系数据库系统。关系模型是目前最为流行的一种数据模型,用二维表格结构表示实体集,关键码表示实体间的联系。[15]数据库系统中的几个重要概念:关系数据库(Relational Database):一个关系数据库是由若干个表组成的。表(Table):一个表就是一组相关的数据按行排列,像一张表格一样。字段(Field):在表中,每一列称为一个字段。每一个字段都有相应的描述信息,如数据类型、数据宽度等。记录(Record):在表中,每一行称为一条记录。索引(Index):为了加快访问数据库的速度,许多数据库都是用索引。通过上面的系统功能分析之后,考虑苏果超市的实际及将来可能的发展情况,本系统将数据库的设计分为如下几个步骤:1、数据库需求分析2、数据库概念结构设计3、数据库逻辑结构设计4、数据库物理模型设计[16]4.4.2数据库概念结构设计如图6所示图6 系统E-R图4.5 系统出错处理1、在登录界面,只要密码或账号错误,或者与身份不相应,都会显示“无法登录。”2、在查询站台的时候,如果两站一样会报错,禁止查询。3、注册、修改密码之时信息都必须正确,否则无法进行。4、在购买票的时候,必须选择一张票,否则报错。如果余额不足,会显示“余额不足,提醒充值”的信息,无法正常购票。[17]5 汽车票销售系统的功能实现5.1 子系统设计系统主要分为3个模块,主要功能如下:(1)消费者模块:消费者可以查询各个站台之间的票的信息,并进行票的购买、退票、改签等行为。在消费者个人中心模块中,可以对自己的密码等信息进行修改,另外也可以对自己账号进行银行绑定,并给自己账户充钱,对于票的购买,提供3种购买方式,不同的购买方式对于账户影响不同,消费者可以自己注册新用户。(2)调度员模块:对于各个站台间的票的查询实时监控,了解各站动态,对于车次可以进行必要的增加,删除等,还可以强制将一些用户的票退除。(3)高级管理员:专门退调度员进行管理,对其权限进行各种限制或调动,高级管理员也拥有部分调度员的权限。[18]5.2 登录界面1. 实现目标 程序启动后,进入“登录系统”界面验证用户名和密码。系统登录窗口主要实现如下的功能:凭用户名、密码进入系统主界面。如果用户名或者密码错误返回错误信息提示。消费者登录与调度员登录的界面不同,且后者根据权限等级功能开放也不同。登录界面如图7所示图7 登录中心界面5.3模块设计5.3.1 消费者模块1 界面查看(如图8)图8 消费者个人模块2 功能介绍个人中心:登录之后,点击个人中心,会出现个人中心界面,在该界面中可以查看个人的信息,以及个人账户的余额。个人中心的几个功能我要充值:通过银行卡向个人账户进行充值,前提是必绑定一张或以上的银行卡。(如图9)图9 个人充值界面银行绑定:通过银行将自己账户与银行卡绑定,实现充值或者之后的快速支付。(如图10)图10 个人银行绑定界面购买记录:可以查看当前个人的购票情况。热门站点介绍:对于江苏13市的城市和站台进行简单的介绍查询:这个是消费者界面的重要,可以选用3种方式(首末站、车次、时间)对车票进行查询。查询之后,如下图所示,可以直接对想要的票进行购买(如图11)图11 个人购票界面在支付方式上,我列出了3种支付方式(如图12)图12 个人支付付款界面个人账户余额支付:直接使用个人账户里的钱付款。快捷支付:直接通过绑定的银行卡支付,只需要支付密码。其他银行卡支付:不需要绑定银行卡来支付,但是付款的时候需要密保卡密码。5.3.2 调度员模块个人界面(如图13)图13 调度员管理界面功能介绍:站点查询:查询自己站到其他站的票的实时情况,并能在此基础上查阅每一趟车的票的购买情况。车次添加/删减:添加或删除一趟车,再删除一趟车的同时,会将被删除车次的已购买车票的前还入消费者账户余额中。强制退票:强制屏退部分购买车票,这个操作因为其重要性,需要多次确认。5.3.3 高级管理员模块界面查看(如图14)图14 高级管理员管理界面权限更改:更改调度员的权限等级,可以进行升级或降级,甚至将调度员删除。另外,可以直接获取某个调度员的权限,即成为该调度员。查询:查询按车次、时间、首末站的查询,和消费者功能类似。5.3.4 注册模块界面查看(如15)图15 个人用户注册界面此为新用户的注册,需要选择正确的用户名,即与原来的不重复,其他信息都要填写完整,如有错误如(两次密码不一致,身份证号不为15或18位)会报错,要重新输入正确的。5.4 部分功能模块编码实现5.4.1 登录界面代码public partial class login : Form { public static String strname; public static String str2name; public static String str3name; public static int ii = 1; public login() { InitializeComponent(); } private void login_Load(object sender, EventArgs e) { toolStripStatusLabel1.Text = DateTime.Now.ToString(); }//初始化 private void button1_Click(object sender, EventArgs e) { if (textBox3.Text == "旅客") if (Program.personTable.authenticate(textBox1.Text, textBox2.Text)) { strname = textBox1.Text; this.Visible = false; start sta = new start(); sta.Visible = true; sta.l = this; } else MessageBox.Show("用户名不存在或密码错误", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Information); if (textBox3.Text == "调度员") if (Program.dbaTable.authenticate(textBox1.Text, textBox2.Text)) { str2name = textBox1.Text; this.Visible=false; person2 per2 = new person2(); per2.Visible = true; per2.l = this; } else MessageBox.Show("用户名不存在或密码错误", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Information); if (textBox3.Text == "高级管理员") if (Program.superTable.authenticate(textBox1.Text, textBox2.Text)) { str3name = textBox1.Text; this.Visible = false; super sup = new super(); sup.Visible = true; sup.l = this; } }//选择登录 private void button3_Click(object sender, EventArgs e) { textBox3.Text = "旅客"; textBox2.Clear(); textBox1.Clear(); }//重置按钮 private void button4_Click(object sender, EventArgs e) { this.Close(); }//退出按钮 private void label15_Click(object sender, EventArgs e) { register reg = new register(); reg.TopLevel = false; reg.Parent = this.panel1; reg.Visible = true; }//注册界面跳出来5.4.2 个人用户管理模块主要代码public partial class start : Form { public login l; public start() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { toolStripStatusLabel1.Text = DateTime.Now.ToString(); }//初始化,并且显示时间 private void timer1_Tick(object sender, EventArgs e) { toolStripStatusLabel1.Text = DateTime.Now.ToString(); }//时间变化 private void button18_Click(object sender, EventArgs e) { login log = new login(); log.Visible = true; }//返回登录界面 private void button15_Click(object sender, EventArgs e) { if (comboBox1.Text == comboBox2.Text) MessageBox.Show("首末站不能是同一站,请重新选择", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Information); else { inquiry inq = new inquiry(); inq.from = comboBox1.Text; inq.to = comboBox2.Text; inq.Visible = true; } }//开始查询(站点) private void button16_Click(object sender, EventArgs e) { string swap = comboBox1.Text; comboBox1.Text = comboBox2.Text; comboBox2.Text = swap; }//站点交换 private void label15_Click(object sender, EventArgs e) { groupBox2.Visible = true; person per = new person(); per.TopLevel = false; per.Parent = this.panel1; per.Visible = true; }//打开个人中心 private void label7_Click(object sender, EventArgs e) { this.Close(); l.Visible = true; } private void label8_Click(object sender, EventArgs e) { l.Close(); }//关闭 private void textBox1_MouseClick(object sender, MouseEventArgs e) { this.monthCalendar1.Visible = true; } private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e) { string DateTime =monthCalendar1.SelectionStart.Date.ToString(); textBox1.Text = DateTime; this.monthCalendar1.Visible = false; } private void monthCalendar1_MouseLeave(object sender, EventArgs e) { this.monthCalendar1.Visible = false; } private void 热门站点介绍ToolStripMenuItem_Click(object sender, EventArgs e) { if (groupBox3.Visible == false) groupBox3.Visible = true; else groupBox3.Visible = false; }//热门站点介绍}5.4.3 调度员个人模块主要代码public partial class person2 : Form { public login l; public string id; public string to; public string ss = Program.dbaTable.display(login.str2name, "astation"); public person2() { InitializeComponent(); } private void person2_Load(object sender, EventArgs e) { toolStripStatusLabel1.Text = DateTime.Now.ToString(); label2.Text = ss; label2.Text += "站"; label1.Text += Program.dbaTable.display(login.str2name, "aname"); string di = Program.dbaTable.display(login.str2name, "apermission"); if (di == "1") { label11.Text = "初级权限"; 车次操作ToolStripMenuItem.Enabled = false; 退票ToolStripMenuItem.Enabled = false; } if (di == "2") { label11.Text = "中级权限"; 退票ToolStripMenuItem.Enabled = false; } if (di == "3") { label11.Text = "高级权限"; } }//获取权限等级 private void button_Click(object sender, EventArgs e) { to = (sender as Button).Text; DataSet dis1 = Program.ticketTable.display(ss, to); dataGridView1.DataSource = dis1.Tables[0]; groupBox2.Visible = true; }//显示站站查询结果,13个按钮一起 private void label13_Click(object sender, EventArgs e) { groupBox5.Visible = true; int i = dataGridView1.CurrentCell.RowIndex; id = dataGridView1.Rows[i].Cells[0].Value.ToString(); DataSet dis2 = Program.orderTable.display2(id); dataGridView2.DataSource = dis2.Tables[0]; }//显示购票结果 private void button17_Click(object sender, EventArgs e) { string idnew = "NEW00" + login.ii.ToString(); login.ii++; string end=(int.Parse(textBox1.Text.Substring(0,2))+1).ToString()+textBox1.Text.Substring(2); double pr = 30; Program.ticketTable.addBusId(idnew,ss,to,textBox1.Text,end,pr,int.Parse(comboBox1.Text)); MessageBox.Show("添加成功", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Information); groupBox3.Visible = false; }//添加车次 private void button16_Click(object sender, EventArgs e) { int j = dataGridView1.CurrentCell.RowIndex; id = dataGridView1.Rows[j].Cells[0].Value.ToString(); Program.ticketTable.deleteBusid(id); dataGridView1.DataSource = Program.ticketTable.display(ss, to).Tables[0]; groupBox4.Visible = false; }//删除车次 private void statusStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { toolStripStatusLabel1.Text = DateTime.Now.ToString(); } private void ToolStripMenuItem_Click(object sender, EventArgs e) { to = (sender as ToolStripItem).Text; DataSet dis = Program.ticketTable.display(ss, to); dataGridView1.DataSource = dis.Tables[0]; groupBox2.Visible = true; }//显示站站查询结果 private void button19_Click(object sender, EventArgs e) { int i = dataGridView2.CurrentCell.RowIndex; int k = int.Parse(dataGridView2.Rows[i].Cells[2].Value.ToString()); string sn = dataGridView2.Rows[i].Cells[1].Value.ToString(); if (MessageBox.Show("再次确认,是否将该用户的票强制摒退?", "购票退票信息", MessageBoxButtons.OKCancel) == DialogResult.OK) { Program.orderTable.deleteBusidUsername(id, sn); ; MessageBox.Show("退票成功", "确认!", MessageBoxButtons.OK, MessageBoxIcon.Information); Program.personTable.changeMoney(sn, k * 30); DataSet dis3 = Program.orderTable.display2(id); dataGridView2.DataSource = dis3.Tables[0]; groupBox6.Visible = false; } }//强制退票}6系统的调试与测试6.1 系统调试与测试说明软件测试是软件开发过程的重要组成部分,是用来确认一个程序的质量和性能符合开发之前所提出的一些要求。软件测试是在软件投入运行前的最后审查,分析,设计和编码的软件需求,是软件质量保证的关键步骤。软件测试是程序的执行过程中发现的错误。在软件测试在软件生命周期的两个阶段:通常在写上每个模块,做必要的测试(称为单元测试)。编码和单元测试属于软件生命周期的同一阶段。在这一阶段的软件系统和集成测试,这是软件生命周期的一个独立阶段,即测试阶段。软件测试的目的,第一是确认软件的质量,另一方面是确认软件做的事情你的期望,另一方面是确认软件以正确的方式做这件事。二为提供信息,比如提供信息反馈给开发人员或项目经理,准备信息的风险评估。第三软件测试不仅是自己软件产品的测试,还包括软件开发的过程。如果一个软件产品开发的很多问题,这说明软件开发过程可能是有缺陷的。软件测试的第三个目的是保证整个软件开发过程是高质量的。软件质量是由几个方面,在正确的时间和正确的测量方法和工作要做正确的事以及一些应用程序。二、符合标准要求,例如在不同国家的用户不同的操作习惯和要求,在项目的可维护性,可测试的要求和其他要求。三、软件本身的质量,达到了最开始规定的要求,而优雅的代码或软件质量的巧妙技能并不意味着高质量的。四、他同样是根据客户的需求。作为软件测试这个行业,最重要的一件事,从客户需求出发,从客户的角度看产品的客户将如何使用这个产品,在使用过程中会遇到什么样的问题。只有解决了这些问题,软件产品的质量才是好的。6.2 系统测试方法测试有两种方法:(1) 黑盒测试:黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。(2) 白盒测试:白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件, 白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路 径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。6.3 系统测试类型为了使系统能够稳定运行,对系统作了针对性的全面测试,采用的方法是:1. 窗体项测试:相应的窗口,正确的实现系统功能,所需的数据,输入系统中,并对每一个管理窗体都作了添加,删除,修改,保存等操作,保证了各窗口功能正确实现。2. 强度测试:强度测试检查程序对异常情况的抵抗能力。强度测试总是迫使系统在异常的资源配置下运行。例如,定量地增长数据输入率,检查输入子功能的反映能力;运行需要最大存储空间(或其他资源)的测试用例;运行可能导致虚存操作系统崩溃或磁盘数据剧烈抖动的测试用例。3. 综合测试:在以上的测试基础上对系统进行整体测试,以此来检验系统功能基本符合系统设计的要求。6.4 调试过程及调试结果分析6.4.1 登录功能测试当出现登录界面后,只有选择在后台数据库中相应的用户与密码,或者是新注册的才能登录。比如选择“旅客”,用户名“user03”,密码同样为“user03”,若密码与用户名不相符合,会无法登录。6.4.2 查询与购买测试选择好首末站之后进行车票查询,然后选择喜欢的车次,进行购买,有3种购买方式可以选择,一般可以选择快捷支付或者个人账户支付,个人账户不足时快捷支付也行。购买后会在order这个表单中添加数据,相应车次的票会减少,而个人金额也会减少。6.4.3 退票退票有2种,一种是个人退票,一种是调度员强制退票。两者都会导致票在order表中删除,另外会是tickets表中的余票增加相应数量,另外,不论是何种方式买的票,退票的前都会打入个人账户余额中。6.4.4 车次增减调度员在增减车次之前需要先选择好车次,也就是首末站,当如果未选择,会无法进行删改,调度员只能查看在本站出发的车票销售情况。6.4.5 权限修改高级管理员在修改权限时要先选择某站调度员,以及想要调的等级,如果与原来等级相同会无法操作。7 性能分析汽车票销售系统包含了查询、购票、退票、改签等一系列便捷的操作,能够让客户动态了解车票的销售情况,便于了解自己的出行条件。而车站方面通过销售系统不但能够减轻销售人员压力,而且能够根据数据进行分析,在淡季和旺季提前开设新车和增减汽车等方式更加惠民。本系统数据库表较为简洁,画面功能也清晰明了,消费者用起来十分方便,节省时间,基本能够解决以往购票难的现象,实时了解车站信息,有助于买卖双方的和谐。对数据库中的数据类型和长度,有限制的数据,减少对数据库的操作产生的误差,冗余等。该系统具有良好的可靠性和可操作性,各种基本操作容易掌握库存管理,有一个非常直观和友好的用户界面,以及句子的系统要求具有效率高,维护方便,可移植性好等特点。(1)数据的准确性特别在票价一方面,保留到小数点后4位,力求精确但也不影响数据压力。(2)适用性适用于现在各类普遍使用的操作系统。(3)时间的特点软件运行十分快捷,基本不会出现死机、卡秒现象,各种程序运行也非常快,不用等待很久。8 总结这次毕业设计,我个人的收获非常大。鉴于我编码能力有限,所以为了能够按时完成这次毕业设计,我在大四学年内又花时间翻起旧书,特别是关于SQL的书籍,经过一段时间的准备和充分了解,对于SQL Server有所掌握,而我所以选择C#作为开发语言,是因为在大三期间曾经用该语言做过类似课程设计,可以说是我最熟悉的语言。在做毕业设计的时间里,我林林总总,每天都花一段时间写代码,敲代码,很多地方都不懂,这个时候我会问同学、问导师,有时候也是自己上网、上图书馆借书查,让自己写代码的能力更强。这次项目,也给我机会自学了许多新知识,放弃很多玩的时间。虽然在初期我也有些不适应,有些烦躁,但后来我都一一克服,自己养成了良好的心态,我很享受这样的感觉。这次毕业设计,我真的学到很多。致谢参考文献[1]黄莺,李宗平. 铁路客票实名制销售的系统研究[J]. 西安交通大学,2011,(41):6-8.[2]冉霓,杨丹,黄天贵. 代理人机票销售电子商务平台的研发[J]. 重庆大学,2008,(61):15-18.[3]曹晅箐,张家晨. 公园门票销售管理系统的设计与实现[J]. 吉林大学,2014,(17):22-25.[4]周辉,徐政五. 网络火车票订购系统的设计与实现[J]. 电子科技大学,2012,(5)9-10.[5]黄雪华. 基于SQL Server的高可用性在校园网教务管理系统中的实现[J]. 网络安全与技术应用,2014,(11):43—44.[6]梁春艳. Visual Studio 2010并行编程从入门到精通[M]. 北京,清华大学出版社,2013:23-27.[7]萨师煊,王珊. 数据库系统概论(第三版)[M]. 北京:高等教育出版社,2005:77-81.[8]王小科,王国辉,张鑫. C#开发实战[M]. 北京:清华大学出版社,2013:61-64.[9]史济民,顾春华,郑红. 软件工程——原理、方法与应用(第三版)[M]. 北京:高等教育出版社,2008:33-38.[10]颜昌彬,罗惠谦. 基于VC和SQLServer的实验数据库系统研究[J]. 武汉理工大学.2006,(4):8—11.[11]Tony M.Oracle .Database Upgrade Guide 10g Release 1(10.1)[M].USA:Oracle Corporation,2003:150-330 .[12]沈艺,王舒憬. 基于高校成绩管理系统的SQLServer安全策略应用[J]. 上海大学计算机应用. 2009,(13):14—19. [13]Li Z, Wei-xi Z. Design and implementation of fixed assets management system based on JavaEE[J]. Computer Engineering & Design, 2009, 30(16):3797-3800 .[14]蒋薇,赖青贵,秦玲. 基于ADO_NET数据访问技术的研究和应用[J]. 中国工程物理研究院流体物理研究所.2010,(10):5—7[15]蔡累,梁洪峻. 数据库查询语言SQL的语法分析及实现[J]. 天津大学,2006,(2):17—19. [16李昌领. 基于SQLServer2005的数据挖掘的研究[J]. 计算机与现代,2010,(5):195-197.[17]闫旭.浅谈SQLServer数据库的特点和基本功能[J]. 长春师范学院.2012,(22):229—231. [18]徐寅昊. SQL注入及SQLServer的安全性研究[J].华东师范大学.2009,(4):16—19.
目录
摘要 1
关键字 1
Abstract 1
Key words 1
1 概论 1
1.1 研究背景及意义 1
1.2 国内外研究现状 2
1.2.1 汽车票互联网化的大致流程与成本如下 2
1.3 研究目标及内容 2
2 系统开发工具及其技术 3
2.1 系统开发及工具 3
2.1.1 Microsoft Visual Studio 2010 3
2.1.2 SQL Server 2005 Management Studio 3
2.1.3 开发语言 C#简介 4
2.2软件工程及面向对象机制 4
2.2.1 软件工程 4
2.2.2 面向对象分析方法 5
3 需求分析及设计原则 5
3.1 汽车票销售系统的总体需求 5
3.1.1 数据库需求 5
3.1.2 安全性需求 5
3.1.3系统功能需求 5
3.2可行性研究 6
3.2.1技术可行性 6
3.2.2 经济可行性 6
3.2.3 运行环境可行性 6
4 汽车销售系统总体设计 6
4.1 系统总体功能图 7
4.2子系统功能介绍 7
4.2.1 个人模块 7
4.2.2 调度员模块 7
如图3所示 7
4.2.3 高级管理员模块 8
如图4所示 8
4.3 消费者买票购买流程图 8
4.4数据库设计 9
4.4.1 数据库基础 9
4.4.2数据库概念结构设计 9
4.5 系统出错处理 9
5 汽车票销售系统的功能实现 10
5.1 子系统设计 10
5.2 登录界面 10
5.3模块设计 10
5.3.1 消费者模块 11
5.3.2 调度员模块 13
5.3.3 高级管理员模块 14
5.3.4 注册模块 14
5.4 部分功能模块编码实现 15
5.4.1 登录界面代码 15
5.4.2 个人用户管理模块主要代码 16
5.4.3 调度员个人模块主要代码 18
6系统的调试与测试 20
6.1 系统调试与测试说明 20
6.2 系统测试方法 21
6.3 系统测试类型 21
6.4 调试过程及调试结果分析 21
6.4.1 登录功能测试 21
6.4.2 查询与购买测试 21
6.4.3 退票 21
6.4.4 车次增减 21
6.4.5 权限修改 22
7 性能分析 22
8 总结 22
致谢 23
参考文献 23
基于C#的汽车票销售管理系统的设计
计算机科学与技术学生 赵振涵
引言
*好棒文|www.hbsrm.com +Q: *351916072*
er can real-time master the dynamics of all ticket, both sides can keep abreast of information. Also network marketing means is the modern electronic information technology development the inevitable trend, the large number of Chinese people, travel enormous pressure, through a network of sales solve bus ticket sales pressure, can effectively alleviate the above problems.1 概论1.1 研究背景及意义随着社会的信息化进程逐步加强,各行各业全部紧跟时代的脚步,从原有传统的人工管理体制向信息自动化的管理体制过渡。作为主要的交通出行工具之一的汽车,无论是出于企业的发展,还是出于满足广大乘客的需要,实现网络化的销售售票系统是非必要的。[1]人们消费模式等方面发生着巨大变化,在家里就可以实现订购、订机票、预定酒店等等,当然希望各方各面都能越来越便捷。买汽车票,尤其是春运期间买票是件很麻烦的事情,有时候排队买票就要排上很长时间,甚至有时候还因为信息的缺乏,不能及时有效的了解车票的销售情况,白跑一趟汽车站。利用网上汽车票预定系统,旅客可以通过网络查询车票的销售情况和预定汽车票,这极大的提高了订票的效率,节省了订票的时间,缓解了售票窗口拥挤的现状,网上订票系统的成功实施,提高了车站的信息化管理水平,减少了车站工作人员的工作量,为旅客节约了时间。[2]1.2 国内外研究现状目前,利用网络技术和电子商务的发展,是政府与市场最为关心的问题。电子商务在市场发展中显示了极大优势,长途汽车公司通过电子商务活动可以树立和提高企业的网上形象和知名度,提供本公司最新的车票信息,降低销售成本,提高经营效率,开拓潜在市场和销售渠道。电子商务不仅使长途汽车公司信息流动的范围扩大,还使企业管理的内涵进一步延伸,除了传统的企业财务、库存、销售、采购、生产等管理以外,涉及企业供应链的许多环节也被纳入管理范畴。这就对汽车公司的信息管理系统提出了新的要求,同时也推进新一代信息系统的产生和发展,造就了电子商务环境下管理信息系统、销售系统与以往相比具有更丰富的内涵,吸引了众多学者的研究。[3]1.2.1 汽车票互联网化的大致流程与成本如下合作单位:可以分为几级,一是省汽车票联网中心; 二是市级联网中心;三是单个汽车站。如果该地有建立有省网、市网,则网络汽车票服务商可直接对接;如无,则需要对接单个汽车站。但由于省网和市网所拥有的 汽车站车票数量有限(一个省网可能只有某个车站某趟线路3-5张票),未来,与汽车站直接对接可能是趋势。商务和IT拓展的成本:据了解,一个汽车站的商务拓展成本和IT成本,平均下来估计在数万元,具体成本受车站信息化程度、领导个人偏好、员工配合程度等不一。涉及的利益相关者:省市交通运输中心、省市信息化中心、交通运输集团总经理、信息化中心主任、车站站长、IT人员等。一般来说,IT对接的时间短,一般在5-10天内能完成;但商务对接时间则难以把握,如找到核心关键人或有领导关照,则可能很快,但如无,则甚至花费大量时间,无法攻克。总体而言,要与汽车站建立合作,实现网上售票,要解决错综复杂的利益关系,要面对不同信息化水平的汽车站,是一个线下拓展十分辛苦的累活。前途很美好,但道路十分曲折。[4]1.3 研究目标及内容2 系统开发工具及其技术2.1 系统开发及工具主要使用SQL Server Management Studio和Microsoft Visual Studio 2010 两款开发工具,使用的语言为C#语言。下面分别对系统中采用到的开发工具做简单的介绍。2.1.1 Microsoft Visual Studio 2010它将是经典的一个版本,相当于当年的6.0版。而且它可以自定义开始页;新功能还包括:(1)C# 4.0中的动态类型和动态编程;(2)多显示器支持;(3)使用Visual Studio 2010的特性支持TDD;(4)支持Office ;(5)Quick Search特性;(6)C++ 0x新特性;(7)IDE增强;(8)使用Visual C++ 2010创建Ribbon界面;(9)新增基于.NET平台的语言 F#。2.1.2 SQL Server 2005 Management Studio SQL是英文Structured Query Language的缩写,意思为结构化查询语言。SQL语言的主要功能就是同各种数据库建立联系,进行沟通。按照ANSI(美国国家标准协会)的规定,SQL被作为关系型数据库管理系统的标准语言。1.真正的客户机/服务器体系结构。2.图形化用户界面,使系统管理和数据库管理更加直观、简单。3.丰富的编程接口工具,为用户进行程序设计提供了更大的选择余地。4.SQL Server提供数据仓库功能,这个功能只在Oracle和其他更昂贵的DBMS中才有。SQL Server 2005中包含了非常丰富的新特性:通过提供一个更安全、可靠和高效的数据管理平台,增强企业组织中用户的管理能力,大幅提升IT管理效率并降低运维风险 和成本;通过提供先进的商业智能平台满足众多客户对业务的实时统计分析、监控预测等多种复杂管理需求,推动企业管理信息化建设和业务发展。[7]安全、可靠、高效的企业级数据管理平台:SQL Server 2005将在安全性、高可靠性、性能、扩展性、可管理性方面有极大的提高,不仅能够确保企业级数据业务的实时稳定运行、还能够大大提高管理效率、降低操作 复杂度和运维成本。例如,SQL Server 2005将提供全新的安全认证、数据加密技术来加强您数据系统的安全性;数据库镜像、快照、时点恢复、实时在线管理等诸多功能大大提高了企业级系统的可靠 性、扩展性;而数据集成,各种自动化管理、调试和优化工具则为您的IT管理工作带来全新的体验。在硬件方面,SQL Server 2005支持64位运算和海量数据存储。2.1.3 开发语言 C#简介C#是在Java流行起来后所诞生的一种新的语言。由于微软在操作系统上占有很大的优势。在以往的开发中累积了不少经验,所形成的.net平台,所以C#在Windows方面可以说比Java具有更大的优势。如果单纯从技术上来讲,C#在网络编程上可以与Java匹敌。C#还在Windows Forms也有一定的优势。C#是一种非常类似于C++的语言,风格是更接近于Java,不管是C++程序员还是Java程序员,都可以很方便的转到C#上来。C#的强大是依赖于.net的发展,而.net的发展是看微软在.net上的决心和投入有多少。从Windows 2003和Vista系统可以看出(前者内置.net1.1,后者内置.net2.0。).Net在Windows编程中具有重要的战略意义。[8]C#目前主要是应用在网络编程上,其他领域比如数据库、窗体编程,都逐渐在增大。C#语言的特点:1. 完全面向对象。2. 支持分布式,之所以有C#,是因为微软相信分布式应用程序是未来的趋势,即处理过程分布在客户机和服务器上。所以C#一出生就注定了能很好解决分布式问题。3. 跟Java类似,C#代码经过编译后,成为了一种IL(中间语言)。在运行时,再把IL编译为平台专用的代码。4. 健壮,C#在检查程序错误和编译与运行时错误一点也不逊于Java,C#也用了自动管理内存机制。5. C#不像Java那样完全摒弃了指针和手动内存管理。C#默认情况下是不能使用指针的,程序员在有必要时可以打开指针来使用。这样可以保证编程的灵活性。6. 安全性:C#的安全性是有.net平台来提供的。C#代码编译后成为IL语言。是一种受控代码,.net提供类型安全检查等机制保证代码是安全的。7. 可移植性:由于C#使用类似Java的中间语言机制。使得C#也跟Java类似,可以很方便的移植到其他系统。在运行时,再把中间代码编译为适合特定机器的代码。8. 解释性:C#也是一种特殊的解释性语言。9. 高性能:C#把代码编译成中间语言后,可以高效的执行程序。10. 多线程:与Java类似,可以由一个主进程分出多个执行小任务的多线程。11. 组件模式:C#很适合组件开发。各个组件可以由其他语言实现的,然后集成在.net中。2.2软件工程及面向对象机制2.2.1 软件工程 软件工程过程是将用户的需求转化为软件系统所需的软件工程活动的集合。这个过程包括投入、需求说明、规格说明、设计、实施、验证、安装和文档化等等。主要包括以下几个阶段:1.可行性分析与开发集合2.需求分析3.软件设计4.程序编码5.软件测试6.运行维护本系统的设计将按照以上软件工程的标准来实施,对每个阶段都采用科学的管理技术和良好的方法,而且在每个阶段结束之前都从技术和管理两个角度进行严格的审查,合格之后才开始下一阶段的工作,使整个开发过程以一种有条不紊的方式进行,保证软件的质量,增加软件的可维护性。[9]2.2.2 面向对象分析方法面向对象开发方式是基于客观世界的对象模型化的软件开发方法。在面向对象程序设计中,所谓对象,是一个属性集合及其操作集合的封装体。作为计算机模拟真实世界的抽象,一个对象就是一个实际问题论域、一个屋里的实体或逻辑的基本程序模块,因为它包含了数据结构和所提供的相关操作功能。面向对象分析是面向对象软件工程方法的第一个环节,包括概念原则、过程步骤、表示方法、提交文档等规范要求。3 需求分析及设计原则3.1 汽车票销售系统的总体需求需求分析是软件定义时期的最后一个阶段,它的任务是准确了解用户的需求,也就是对系统提出完整、准确、清晰、具体的要求。需求分析的结果是系统开发的基础,它做的是否透彻、完整、正确是软件项目成败的关键。通常,需求分析需要双方合作、探讨,共同定义。经过了解,我发现现在汽车票网上销售并未真正普及,很多人没有去网上订票的意愿,本身是出于对这种新售票方式的不信任、不了解所致,因此,本系统的一个重点项目也就是做网上销售系统的推广,通过广告、用户体验等方式,让广大消费者能接受这种新型方式。网上的汽车票销售动态更新非常快,只要上网查询就是可以实时掌握汽车票的销售情况,不用亲自去车站跑一趟,方便了群众,也方便了汽车销售人员的工作量,十分便捷,不但为消费者带来福利,也是长途汽车公司获利颇多。[10]3.1.1 数据库需求我做的汽车票销售管理系统很多关于数据的操作,所以必须建立起一个数据库。消费者的需求具体体现在各种车票车次信息的查询、购买、更新和删改等方面,这就要求数据库结构能充分满足各种信息的输入输出。在数据库设计上,从物理上将这几个数据表有机的分离开来,便于数据的统一管理,同时这几个功能表之间又存在着逻辑上的相互关联,可以极大的增强了数据的处理速度和增、删、改、查的综合效率,对于消费者和销售人员来说,他们在前台进行各类操作,并不用直接和数据库发生关系,十分方便。[11]3.1.2 安全性需求因为汽车票销售涉及金钱交易等问题,所以对于安全性的要求是极高的,我单独将有关银行的信息表独立成一个数据库,用来存放该信息,同时需要增加用户的密保等级。另外,汽车票和火车票一样有黄牛党倒卖票的现象存在,因此会对所有消费者账户进行监控,管理员与消费者的账号是相互独立的,前者可以监控后者,对后者将有支配权,保护整个系统的最高运行。另外会安置安全管理员运行整个系统以防奔溃,他拥有最高权限。用户与数据库之间无法建立链路关系,保证了网络的安全性。在一致性方面要求系统数据要保证一致性和准确性,当其中某一数据库中记录发生了改变时,与之关联的数据库也要随之发证变化。[12]3.1.3系统功能需求1、功能划分如图1所示图1 汽车销售系统功能模块2、功能描述消费者:消费者可以查询各个站台之间的票的信息,并进行票的购买、退票、改签等行为。在消费者个人中心模块中,可以对自己的密码等信息进行修改,另外也可以对自己账号进行银行绑定,并给自己账户充钱,对于票的购买,提供3种购买方式,不同的购买方式对于账户影响不同,消费者可以自己注册新用户。调度员:对于各个站台间的票的查询实时监控,了解各站动态,对于车次可以进行必要的增加,删除等,还可以强制将一些用户的票退除。高级管理员:专门退调度员进行管理,对其权限进行各种限制或调动,高级管理员也拥有部分调度员的权限。3.2可行性研究3.2.1技术可行性 前台的操作简单易懂,并且浏览比较流畅,用户可以很方便的进行注册、查询、购买和付款,反应速度快,技术是可行的。[13]3.2.2 经济可行性 成本:汽车销售管理信息系统的成本并不高,主要的成本就是开发成本,还有一个成本是运营成本,运营成本其实也不高,因为在系统出来以后,不需要经过营销的手段进行产品的推广。收益:从系统开始正式投入运营的那一天就有相当多的用户开始体验网上购买车票,用户流量瞬间就达到了系统的峰值,运营此系统还可以大大的减轻车站销售人员的工作量,以至可以减少车站销售人员的数量是可行的。[14]3.2.3 运行环境可行性本系统可以在Windows平台上运行。硬件要求CPU 500MHz以上,内存1G以上,操作系统建议使用Windows xp以上,操作员要求初中以上学历,对计算机操作熟练即可。4 汽车销售系统总体设计4.1 系统总体功能图该图已经在系统功能需求模块中给出。4.2子系统功能介绍4.2.1 个人模块如图2所示图2 消费个人功能模块在个人模块中,主要是查询与车票的购买功能,并且能修改密码,账户充值,绑定银行卡等功能。4.2.2 调度员模块如图3所示图3 调度员功能模块调度员主要是对于车票的检查控制,另外能对车次进行增、删、改等操作,另外能进行强制退票。4.2.3 高级管理员模块如图4所示图4 高级管理员功能模块高级管理员,可以对调度员进行权限的修改(升级或降级)或者直接获取调度员的权限,另外可以查询各项车票信息,权限最高级。4.3 消费者买票购买流程图如图5所示图5 消费者购票流程图4.4数据库设计4.4.1 数据库基础数据库是指长期储存在计算机内的、有组织的、可共享的数据集合[]。数据库中的数据按一定的数据模型组织、描述和储存,具有较小的冗余度、较高的数据独立性和易扩展性,并可为各种用户共享。数据库是依照某种数据模型组织起来并存放二级存储器中的数据集合。这种数据集合具有如下特点:尽可能不重复,以最优方式为某个特定组织的多种应用服务,其数据结构独立于使用它的应用程序,对数据的增、删、改和检索由统一软件进行管理和控制。 数据库管理系统(DBMS)是用于描述、管理和维护数据库的程序系统,是数据库系统的核心组成部分。它建立在操作系统的基础上,对数据库进行统一的管理和控制。其主要功能为描述数据库、管理数据库、维护数据库、数据通信。DBMS主要有4种类型:文件管理系统、层次数据库系统、网状数据库系统和关系数据库系统。关系模型是目前最为流行的一种数据模型,用二维表格结构表示实体集,关键码表示实体间的联系。[15]数据库系统中的几个重要概念:关系数据库(Relational Database):一个关系数据库是由若干个表组成的。表(Table):一个表就是一组相关的数据按行排列,像一张表格一样。字段(Field):在表中,每一列称为一个字段。每一个字段都有相应的描述信息,如数据类型、数据宽度等。记录(Record):在表中,每一行称为一条记录。索引(Index):为了加快访问数据库的速度,许多数据库都是用索引。通过上面的系统功能分析之后,考虑苏果超市的实际及将来可能的发展情况,本系统将数据库的设计分为如下几个步骤:1、数据库需求分析2、数据库概念结构设计3、数据库逻辑结构设计4、数据库物理模型设计[16]4.4.2数据库概念结构设计如图6所示图6 系统E-R图4.5 系统出错处理1、在登录界面,只要密码或账号错误,或者与身份不相应,都会显示“无法登录。”2、在查询站台的时候,如果两站一样会报错,禁止查询。3、注册、修改密码之时信息都必须正确,否则无法进行。4、在购买票的时候,必须选择一张票,否则报错。如果余额不足,会显示“余额不足,提醒充值”的信息,无法正常购票。[17]5 汽车票销售系统的功能实现5.1 子系统设计系统主要分为3个模块,主要功能如下:(1)消费者模块:消费者可以查询各个站台之间的票的信息,并进行票的购买、退票、改签等行为。在消费者个人中心模块中,可以对自己的密码等信息进行修改,另外也可以对自己账号进行银行绑定,并给自己账户充钱,对于票的购买,提供3种购买方式,不同的购买方式对于账户影响不同,消费者可以自己注册新用户。(2)调度员模块:对于各个站台间的票的查询实时监控,了解各站动态,对于车次可以进行必要的增加,删除等,还可以强制将一些用户的票退除。(3)高级管理员:专门退调度员进行管理,对其权限进行各种限制或调动,高级管理员也拥有部分调度员的权限。[18]5.2 登录界面1. 实现目标 程序启动后,进入“登录系统”界面验证用户名和密码。系统登录窗口主要实现如下的功能:凭用户名、密码进入系统主界面。如果用户名或者密码错误返回错误信息提示。消费者登录与调度员登录的界面不同,且后者根据权限等级功能开放也不同。登录界面如图7所示图7 登录中心界面5.3模块设计5.3.1 消费者模块1 界面查看(如图8)图8 消费者个人模块2 功能介绍个人中心:登录之后,点击个人中心,会出现个人中心界面,在该界面中可以查看个人的信息,以及个人账户的余额。个人中心的几个功能我要充值:通过银行卡向个人账户进行充值,前提是必绑定一张或以上的银行卡。(如图9)图9 个人充值界面银行绑定:通过银行将自己账户与银行卡绑定,实现充值或者之后的快速支付。(如图10)图10 个人银行绑定界面购买记录:可以查看当前个人的购票情况。热门站点介绍:对于江苏13市的城市和站台进行简单的介绍查询:这个是消费者界面的重要,可以选用3种方式(首末站、车次、时间)对车票进行查询。查询之后,如下图所示,可以直接对想要的票进行购买(如图11)图11 个人购票界面在支付方式上,我列出了3种支付方式(如图12)图12 个人支付付款界面个人账户余额支付:直接使用个人账户里的钱付款。快捷支付:直接通过绑定的银行卡支付,只需要支付密码。其他银行卡支付:不需要绑定银行卡来支付,但是付款的时候需要密保卡密码。5.3.2 调度员模块个人界面(如图13)图13 调度员管理界面功能介绍:站点查询:查询自己站到其他站的票的实时情况,并能在此基础上查阅每一趟车的票的购买情况。车次添加/删减:添加或删除一趟车,再删除一趟车的同时,会将被删除车次的已购买车票的前还入消费者账户余额中。强制退票:强制屏退部分购买车票,这个操作因为其重要性,需要多次确认。5.3.3 高级管理员模块界面查看(如图14)图14 高级管理员管理界面权限更改:更改调度员的权限等级,可以进行升级或降级,甚至将调度员删除。另外,可以直接获取某个调度员的权限,即成为该调度员。查询:查询按车次、时间、首末站的查询,和消费者功能类似。5.3.4 注册模块界面查看(如15)图15 个人用户注册界面此为新用户的注册,需要选择正确的用户名,即与原来的不重复,其他信息都要填写完整,如有错误如(两次密码不一致,身份证号不为15或18位)会报错,要重新输入正确的。5.4 部分功能模块编码实现5.4.1 登录界面代码public partial class login : Form { public static String strname; public static String str2name; public static String str3name; public static int ii = 1; public login() { InitializeComponent(); } private void login_Load(object sender, EventArgs e) { toolStripStatusLabel1.Text = DateTime.Now.ToString(); }//初始化 private void button1_Click(object sender, EventArgs e) { if (textBox3.Text == "旅客") if (Program.personTable.authenticate(textBox1.Text, textBox2.Text)) { strname = textBox1.Text; this.Visible = false; start sta = new start(); sta.Visible = true; sta.l = this; } else MessageBox.Show("用户名不存在或密码错误", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Information); if (textBox3.Text == "调度员") if (Program.dbaTable.authenticate(textBox1.Text, textBox2.Text)) { str2name = textBox1.Text; this.Visible=false; person2 per2 = new person2(); per2.Visible = true; per2.l = this; } else MessageBox.Show("用户名不存在或密码错误", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Information); if (textBox3.Text == "高级管理员") if (Program.superTable.authenticate(textBox1.Text, textBox2.Text)) { str3name = textBox1.Text; this.Visible = false; super sup = new super(); sup.Visible = true; sup.l = this; } }//选择登录 private void button3_Click(object sender, EventArgs e) { textBox3.Text = "旅客"; textBox2.Clear(); textBox1.Clear(); }//重置按钮 private void button4_Click(object sender, EventArgs e) { this.Close(); }//退出按钮 private void label15_Click(object sender, EventArgs e) { register reg = new register(); reg.TopLevel = false; reg.Parent = this.panel1; reg.Visible = true; }//注册界面跳出来5.4.2 个人用户管理模块主要代码public partial class start : Form { public login l; public start() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { toolStripStatusLabel1.Text = DateTime.Now.ToString(); }//初始化,并且显示时间 private void timer1_Tick(object sender, EventArgs e) { toolStripStatusLabel1.Text = DateTime.Now.ToString(); }//时间变化 private void button18_Click(object sender, EventArgs e) { login log = new login(); log.Visible = true; }//返回登录界面 private void button15_Click(object sender, EventArgs e) { if (comboBox1.Text == comboBox2.Text) MessageBox.Show("首末站不能是同一站,请重新选择", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Information); else { inquiry inq = new inquiry(); inq.from = comboBox1.Text; inq.to = comboBox2.Text; inq.Visible = true; } }//开始查询(站点) private void button16_Click(object sender, EventArgs e) { string swap = comboBox1.Text; comboBox1.Text = comboBox2.Text; comboBox2.Text = swap; }//站点交换 private void label15_Click(object sender, EventArgs e) { groupBox2.Visible = true; person per = new person(); per.TopLevel = false; per.Parent = this.panel1; per.Visible = true; }//打开个人中心 private void label7_Click(object sender, EventArgs e) { this.Close(); l.Visible = true; } private void label8_Click(object sender, EventArgs e) { l.Close(); }//关闭 private void textBox1_MouseClick(object sender, MouseEventArgs e) { this.monthCalendar1.Visible = true; } private void monthCalendar1_DateSelected(object sender, DateRangeEventArgs e) { string DateTime =monthCalendar1.SelectionStart.Date.ToString(); textBox1.Text = DateTime; this.monthCalendar1.Visible = false; } private void monthCalendar1_MouseLeave(object sender, EventArgs e) { this.monthCalendar1.Visible = false; } private void 热门站点介绍ToolStripMenuItem_Click(object sender, EventArgs e) { if (groupBox3.Visible == false) groupBox3.Visible = true; else groupBox3.Visible = false; }//热门站点介绍}5.4.3 调度员个人模块主要代码public partial class person2 : Form { public login l; public string id; public string to; public string ss = Program.dbaTable.display(login.str2name, "astation"); public person2() { InitializeComponent(); } private void person2_Load(object sender, EventArgs e) { toolStripStatusLabel1.Text = DateTime.Now.ToString(); label2.Text = ss; label2.Text += "站"; label1.Text += Program.dbaTable.display(login.str2name, "aname"); string di = Program.dbaTable.display(login.str2name, "apermission"); if (di == "1") { label11.Text = "初级权限"; 车次操作ToolStripMenuItem.Enabled = false; 退票ToolStripMenuItem.Enabled = false; } if (di == "2") { label11.Text = "中级权限"; 退票ToolStripMenuItem.Enabled = false; } if (di == "3") { label11.Text = "高级权限"; } }//获取权限等级 private void button_Click(object sender, EventArgs e) { to = (sender as Button).Text; DataSet dis1 = Program.ticketTable.display(ss, to); dataGridView1.DataSource = dis1.Tables[0]; groupBox2.Visible = true; }//显示站站查询结果,13个按钮一起 private void label13_Click(object sender, EventArgs e) { groupBox5.Visible = true; int i = dataGridView1.CurrentCell.RowIndex; id = dataGridView1.Rows[i].Cells[0].Value.ToString(); DataSet dis2 = Program.orderTable.display2(id); dataGridView2.DataSource = dis2.Tables[0]; }//显示购票结果 private void button17_Click(object sender, EventArgs e) { string idnew = "NEW00" + login.ii.ToString(); login.ii++; string end=(int.Parse(textBox1.Text.Substring(0,2))+1).ToString()+textBox1.Text.Substring(2); double pr = 30; Program.ticketTable.addBusId(idnew,ss,to,textBox1.Text,end,pr,int.Parse(comboBox1.Text)); MessageBox.Show("添加成功", "提示!", MessageBoxButtons.OK, MessageBoxIcon.Information); groupBox3.Visible = false; }//添加车次 private void button16_Click(object sender, EventArgs e) { int j = dataGridView1.CurrentCell.RowIndex; id = dataGridView1.Rows[j].Cells[0].Value.ToString(); Program.ticketTable.deleteBusid(id); dataGridView1.DataSource = Program.ticketTable.display(ss, to).Tables[0]; groupBox4.Visible = false; }//删除车次 private void statusStrip1_ItemClicked(object sender, ToolStripItemClickedEventArgs e) { toolStripStatusLabel1.Text = DateTime.Now.ToString(); } private void ToolStripMenuItem_Click(object sender, EventArgs e) { to = (sender as ToolStripItem).Text; DataSet dis = Program.ticketTable.display(ss, to); dataGridView1.DataSource = dis.Tables[0]; groupBox2.Visible = true; }//显示站站查询结果 private void button19_Click(object sender, EventArgs e) { int i = dataGridView2.CurrentCell.RowIndex; int k = int.Parse(dataGridView2.Rows[i].Cells[2].Value.ToString()); string sn = dataGridView2.Rows[i].Cells[1].Value.ToString(); if (MessageBox.Show("再次确认,是否将该用户的票强制摒退?", "购票退票信息", MessageBoxButtons.OKCancel) == DialogResult.OK) { Program.orderTable.deleteBusidUsername(id, sn); ; MessageBox.Show("退票成功", "确认!", MessageBoxButtons.OK, MessageBoxIcon.Information); Program.personTable.changeMoney(sn, k * 30); DataSet dis3 = Program.orderTable.display2(id); dataGridView2.DataSource = dis3.Tables[0]; groupBox6.Visible = false; } }//强制退票}6系统的调试与测试6.1 系统调试与测试说明软件测试是软件开发过程的重要组成部分,是用来确认一个程序的质量和性能符合开发之前所提出的一些要求。软件测试是在软件投入运行前的最后审查,分析,设计和编码的软件需求,是软件质量保证的关键步骤。软件测试是程序的执行过程中发现的错误。在软件测试在软件生命周期的两个阶段:通常在写上每个模块,做必要的测试(称为单元测试)。编码和单元测试属于软件生命周期的同一阶段。在这一阶段的软件系统和集成测试,这是软件生命周期的一个独立阶段,即测试阶段。软件测试的目的,第一是确认软件的质量,另一方面是确认软件做的事情你的期望,另一方面是确认软件以正确的方式做这件事。二为提供信息,比如提供信息反馈给开发人员或项目经理,准备信息的风险评估。第三软件测试不仅是自己软件产品的测试,还包括软件开发的过程。如果一个软件产品开发的很多问题,这说明软件开发过程可能是有缺陷的。软件测试的第三个目的是保证整个软件开发过程是高质量的。软件质量是由几个方面,在正确的时间和正确的测量方法和工作要做正确的事以及一些应用程序。二、符合标准要求,例如在不同国家的用户不同的操作习惯和要求,在项目的可维护性,可测试的要求和其他要求。三、软件本身的质量,达到了最开始规定的要求,而优雅的代码或软件质量的巧妙技能并不意味着高质量的。四、他同样是根据客户的需求。作为软件测试这个行业,最重要的一件事,从客户需求出发,从客户的角度看产品的客户将如何使用这个产品,在使用过程中会遇到什么样的问题。只有解决了这些问题,软件产品的质量才是好的。6.2 系统测试方法测试有两种方法:(1) 黑盒测试:黑盒测试也称功能测试,它是通过测试来检测每个功能是否都能正常使用。在测试中,把程序看作一个不能打开的黑盒子,在完全不考虑程序内部结构和内部特性的情况下,在程序接口进行测试,它只检查程序功能是否按照需求规格说明书的规定正常使用,程序是否能适当地接收输入数据而产生正确的输出信息。黑盒测试着眼于程序外部结构,不考虑内部逻辑结构,主要针对软件界面和软件功能进行测试。(2) 白盒测试:白盒测试又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试是一种测试用例设计方法,盒子指的是被测试的软件, 白盒指的是盒子是可视的,你清楚盒子内部的东西以及里面是如何运作的。"白盒"法全面了解程序内部逻辑结构、对所有逻辑路径进行测试。"白盒"法是穷举路 径测试。在使用这一方案时,测试者必须检查程序的内部结构,从检查程序的逻辑着手,得出测试数据。贯穿程序的独立路径数是天文数字。6.3 系统测试类型为了使系统能够稳定运行,对系统作了针对性的全面测试,采用的方法是:1. 窗体项测试:相应的窗口,正确的实现系统功能,所需的数据,输入系统中,并对每一个管理窗体都作了添加,删除,修改,保存等操作,保证了各窗口功能正确实现。2. 强度测试:强度测试检查程序对异常情况的抵抗能力。强度测试总是迫使系统在异常的资源配置下运行。例如,定量地增长数据输入率,检查输入子功能的反映能力;运行需要最大存储空间(或其他资源)的测试用例;运行可能导致虚存操作系统崩溃或磁盘数据剧烈抖动的测试用例。3. 综合测试:在以上的测试基础上对系统进行整体测试,以此来检验系统功能基本符合系统设计的要求。6.4 调试过程及调试结果分析6.4.1 登录功能测试当出现登录界面后,只有选择在后台数据库中相应的用户与密码,或者是新注册的才能登录。比如选择“旅客”,用户名“user03”,密码同样为“user03”,若密码与用户名不相符合,会无法登录。6.4.2 查询与购买测试选择好首末站之后进行车票查询,然后选择喜欢的车次,进行购买,有3种购买方式可以选择,一般可以选择快捷支付或者个人账户支付,个人账户不足时快捷支付也行。购买后会在order这个表单中添加数据,相应车次的票会减少,而个人金额也会减少。6.4.3 退票退票有2种,一种是个人退票,一种是调度员强制退票。两者都会导致票在order表中删除,另外会是tickets表中的余票增加相应数量,另外,不论是何种方式买的票,退票的前都会打入个人账户余额中。6.4.4 车次增减调度员在增减车次之前需要先选择好车次,也就是首末站,当如果未选择,会无法进行删改,调度员只能查看在本站出发的车票销售情况。6.4.5 权限修改高级管理员在修改权限时要先选择某站调度员,以及想要调的等级,如果与原来等级相同会无法操作。7 性能分析汽车票销售系统包含了查询、购票、退票、改签等一系列便捷的操作,能够让客户动态了解车票的销售情况,便于了解自己的出行条件。而车站方面通过销售系统不但能够减轻销售人员压力,而且能够根据数据进行分析,在淡季和旺季提前开设新车和增减汽车等方式更加惠民。本系统数据库表较为简洁,画面功能也清晰明了,消费者用起来十分方便,节省时间,基本能够解决以往购票难的现象,实时了解车站信息,有助于买卖双方的和谐。对数据库中的数据类型和长度,有限制的数据,减少对数据库的操作产生的误差,冗余等。该系统具有良好的可靠性和可操作性,各种基本操作容易掌握库存管理,有一个非常直观和友好的用户界面,以及句子的系统要求具有效率高,维护方便,可移植性好等特点。(1)数据的准确性特别在票价一方面,保留到小数点后4位,力求精确但也不影响数据压力。(2)适用性适用于现在各类普遍使用的操作系统。(3)时间的特点软件运行十分快捷,基本不会出现死机、卡秒现象,各种程序运行也非常快,不用等待很久。8 总结这次毕业设计,我个人的收获非常大。鉴于我编码能力有限,所以为了能够按时完成这次毕业设计,我在大四学年内又花时间翻起旧书,特别是关于SQL的书籍,经过一段时间的准备和充分了解,对于SQL Server有所掌握,而我所以选择C#作为开发语言,是因为在大三期间曾经用该语言做过类似课程设计,可以说是我最熟悉的语言。在做毕业设计的时间里,我林林总总,每天都花一段时间写代码,敲代码,很多地方都不懂,这个时候我会问同学、问导师,有时候也是自己上网、上图书馆借书查,让自己写代码的能力更强。这次项目,也给我机会自学了许多新知识,放弃很多玩的时间。虽然在初期我也有些不适应,有些烦躁,但后来我都一一克服,自己养成了良好的心态,我很享受这样的感觉。这次毕业设计,我真的学到很多。致谢参考文献[1]黄莺,李宗平. 铁路客票实名制销售的系统研究[J]. 西安交通大学,2011,(41):6-8.[2]冉霓,杨丹,黄天贵. 代理人机票销售电子商务平台的研发[J]. 重庆大学,2008,(61):15-18.[3]曹晅箐,张家晨. 公园门票销售管理系统的设计与实现[J]. 吉林大学,2014,(17):22-25.[4]周辉,徐政五. 网络火车票订购系统的设计与实现[J]. 电子科技大学,2012,(5)9-10.[5]黄雪华. 基于SQL Server的高可用性在校园网教务管理系统中的实现[J]. 网络安全与技术应用,2014,(11):43—44.[6]梁春艳. Visual Studio 2010并行编程从入门到精通[M]. 北京,清华大学出版社,2013:23-27.[7]萨师煊,王珊. 数据库系统概论(第三版)[M]. 北京:高等教育出版社,2005:77-81.[8]王小科,王国辉,张鑫. C#开发实战[M]. 北京:清华大学出版社,2013:61-64.[9]史济民,顾春华,郑红. 软件工程——原理、方法与应用(第三版)[M]. 北京:高等教育出版社,2008:33-38.[10]颜昌彬,罗惠谦. 基于VC和SQLServer的实验数据库系统研究[J]. 武汉理工大学.2006,(4):8—11.[11]Tony M.Oracle .Database Upgrade Guide 10g Release 1(10.1)[M].USA:Oracle Corporation,2003:150-330 .[12]沈艺,王舒憬. 基于高校成绩管理系统的SQLServer安全策略应用[J]. 上海大学计算机应用. 2009,(13):14—19. [13]Li Z, Wei-xi Z. Design and implementation of fixed assets management system based on JavaEE[J]. Computer Engineering & Design, 2009, 30(16):3797-3800 .[14]蒋薇,赖青贵,秦玲. 基于ADO_NET数据访问技术的研究和应用[J]. 中国工程物理研究院流体物理研究所.2010,(10):5—7[15]蔡累,梁洪峻. 数据库查询语言SQL的语法分析及实现[J]. 天津大学,2006,(2):17—19. [16李昌领. 基于SQLServer2005的数据挖掘的研究[J]. 计算机与现代,2010,(5):195-197.[17]闫旭.浅谈SQLServer数据库的特点和基本功能[J]. 长春师范学院.2012,(22):229—231. [18]徐寅昊. SQL注入及SQLServer的安全性研究[J].华东师范大学.2009,(4):16—19.
目录
摘要 1
关键字 1
Abstract 1
Key words 1
1 概论 1
1.1 研究背景及意义 1
1.2 国内外研究现状 2
1.2.1 汽车票互联网化的大致流程与成本如下 2
1.3 研究目标及内容 2
2 系统开发工具及其技术 3
2.1 系统开发及工具 3
2.1.1 Microsoft Visual Studio 2010 3
2.1.2 SQL Server 2005 Management Studio 3
2.1.3 开发语言 C#简介 4
2.2软件工程及面向对象机制 4
2.2.1 软件工程 4
2.2.2 面向对象分析方法 5
3 需求分析及设计原则 5
3.1 汽车票销售系统的总体需求 5
3.1.1 数据库需求 5
3.1.2 安全性需求 5
3.1.3系统功能需求 5
3.2可行性研究 6
3.2.1技术可行性 6
3.2.2 经济可行性 6
3.2.3 运行环境可行性 6
4 汽车销售系统总体设计 6
4.1 系统总体功能图 7
4.2子系统功能介绍 7
4.2.1 个人模块 7
4.2.2 调度员模块 7
如图3所示 7
4.2.3 高级管理员模块 8
如图4所示 8
4.3 消费者买票购买流程图 8
4.4数据库设计 9
4.4.1 数据库基础 9
4.4.2数据库概念结构设计 9
4.5 系统出错处理 9
5 汽车票销售系统的功能实现 10
5.1 子系统设计 10
5.2 登录界面 10
5.3模块设计 10
5.3.1 消费者模块 11
5.3.2 调度员模块 13
5.3.3 高级管理员模块 14
5.3.4 注册模块 14
5.4 部分功能模块编码实现 15
5.4.1 登录界面代码 15
5.4.2 个人用户管理模块主要代码 16
5.4.3 调度员个人模块主要代码 18
6系统的调试与测试 20
6.1 系统调试与测试说明 20
6.2 系统测试方法 21
6.3 系统测试类型 21
6.4 调试过程及调试结果分析 21
6.4.1 登录功能测试 21
6.4.2 查询与购买测试 21
6.4.3 退票 21
6.4.4 车次增减 21
6.4.5 权限修改 22
7 性能分析 22
8 总结 22
致谢 23
参考文献 23
基于C#的汽车票销售管理系统的设计
计算机科学与技术学生 赵振涵
引言
版权保护: 本文由 hbsrm.com编辑,转载请保留链接: www.hbsrm.com/jsj/jsjkxyjs/2296.html