毕业设计(论文)汽运售票系统的开发与应用_第1页
毕业设计(论文)汽运售票系统的开发与应用_第2页
毕业设计(论文)汽运售票系统的开发与应用_第3页
毕业设计(论文)汽运售票系统的开发与应用_第4页
毕业设计(论文)汽运售票系统的开发与应用_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、郑州大学升达经贸管理学院郑州大学升达经贸管理学院毕业论文汽运售票系统的开发与应用姓名: 班级: 07计科二班 专业:计算机科学与技术 指导老师: 日期: 2011.04.20 33汽运售票系统的开发与应用摘 要:汽运售票系统是典型的信息管理系统. 其开发的功能主要包括: 管理部分的车辆管理、目的站管理、用户管理和运输管理;售票部分的售票、退票和修改密码功能。     经过分析, 系统数据库采用microsoft sql server ,开发语言为c#语言,数据库访问技术为vs.net framework中的ado.net数据库访问技术。关键字: 数据库

2、ado.net 售票系统 bus transport booking system development and applicationabstract: bus transport booking system is the typical information management system. the main functions of the system are: bus management, stop management, user management and transport management; booking, ticket refund and change

3、 passwords.after analysis, the system database uses microsoft sql server. development language uses c#. database access technology uses ado.net in visual studio.net framework.key word: database ado.net booking system 目录1 绪论51.1选题的背景及研究意义51.2 系统基本简介52系统的关键技术及介绍62.1 使用sql server来建立数据库62.2 ado.net

4、对象模型62.3 使用c#为开发语言73 系统的整体分析与设计83.1 需求分析83.2 总体设计83.3 系统数据库设计104 部分界面实现详解134.1 登陆界面相关功能的实现134.2 售票主窗体相关功能的实现144.3 售票界面相关功能的实现154.4 退票界面相关功能的实现174.5 售票员修改密码界面相关功能的实现194.6 运输管理主界面相关功能的实现204.7 运输管理中增加运输界面相关功能的实现214.8 运输管理中编辑运输界面相关功能的实现224.9 数据访问类dataclass 所在的文件dataclass.cs225 小结25致谢26参考文献27 1 绪论1.

5、1选题的背景及研究意义随着信息技术的迅速发展,计算机在经济建设及人们的日常生活中的应用日益普及,它正在改变着人们的日常生活的各个方面. 长途汽车站售票系统就是用现代的、发展的、系统的思想和观念管理企业而建设起来的,其主要目标是实现长途汽车站的标准化、科学化和现代化的管理,以提高汽车站的社会效益和经济效益。目前一些长途运输公司仍然采用人工管理,不但效率低,而且易出错;耗费人力,随着人们生活水平的提高, 长途运输公司的发展前景应该是非常宽广的,所以提高效率;减少错误非常必要。开发此系统,能够有效的解决现阶段存在的诸如低效率;易出错;浪费人力等问题,很好的提高长途运输公司的服务,减少公司的日常支出,

6、同时为人们的出行提供更加便捷的服务。1.2 系统基本简介技术属性:此系统采用microsoft visual studio 2008为开发工具,使用microsoft sql server 为数据库平台,以.net技术依托,ado.net为数据访问技术,使用c#语言实现的。功能属性:系统有自己的登录界面。用户凭借自己的工号和密码登陆系统,系统自动识别你是不是具有管理员权限。如果你有管理员权限:你会有车辆管理、目的站管理、用户管理和运输管理功能。如果你是普通售票员:登陆后可以看到售票界面、退票界面和修改自己的密码功能。2系统的关键技术及介绍 在汽运售票系统的开发与应用的设计过程中,主要考虑了以下

7、几方面的问题:(1)     建立数据库,使用sql server来建立;(2)     ado.net对象模型;(3)     c#语言。2.1 使用sql server来建立数据库 microsoft sql server是一种关系型数据库。此种数据库采用数据分类表格化的架构,将相关的数据组成表格,表格和表格之间可以有关联性,因此称为关系型数据库。系统管理员可透过应用程序进入服务器,更改数据型态,管理及处理服务器资源。sql server 也是一种具备延展性的数据库(sc

8、alable distributed database),换句话说, sql server 可以支持多位使用者同时进入数据库中处理大量的数据。2.2 ado.net对象模型ado.net对象模型中有五个主要的组件,分别是connection对象、command对象、dataadapter、dataset以及datareader。这些组件中负责建立联机和数据操作的部分我们称为数据操作组件(managed providers)分别由connection对象、command对象、dataadapter对象以及datareader对象所组成。数据操作组件最主要是当作dataset对象以及数据源之间的桥

9、梁,负责将数据源中的数据取出后植入dataset对象中,以及将数据存回数据源的工作。ado.net对象模型如图2-1所示:图2-1 ado.net对象模型connection组件connection对象主要是开启程序和数据库之间的连结。没有利用连结对象将数据库打开,是无法从数据库中取得数据的。这个物件在ado.net的最底层,我们可以自己产生这个对象,或是由其它的对象自动产生。command组件command对象主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及呼叫存在数据库中的预存程序等。这个对象是架构在connection对象上,也就是comman

10、d对象是透过连结到数据源的connection对象来下命令的。所以connection连结到哪个数据库,command对象的命令就下到哪里。dataadapter组件dataadapter对象主要是在数据源以及dataset之间执行数据传输的工作,它可以透过command对象下达命令后,并将取得的数据放入dataset对象中。这个对象是架构在command对象上,并提供了许多配合dataset使用的功能。dataset组件dataset这个对象可以视为一个暂存区(cache),可以把从数据库中所查询到的数据保留起来,甚至可以将整个数据库显示出来。dataset的能力不只是可以储存多个table

11、而已,还可以透过dataadapter对象取得一些例如主键等的数据表结构,并可以记录数据表间的关联。dataset对象可以说是ado.net中重量级的对象,这个对象架构在dataadapter对象上,本身不具备和数据源沟通的能力,也就是说我们是将dataadapter对象当做dataset对象以及数据源间传输数据的桥梁。datareader组件当我们只需要循序的读取数据而不需要其它操作时,可以使用datareader对象。datareader对象只是一次一笔向下循序的读取数据源中的数据,而且这些数据是只读的,并不允许作其它的操作。因为datareade在读取数据的时候限制了每次只读取一笔,而且

12、只能只读,所以使用起来不但节省资源而且效率很好。使用datareader对象除了效率较好之外,因为不用把数据全部传回,故可以降低网络的负载。2.3 使用c#为开发语言c#是微软公司在2000年7月发布的一种全新且简单、安全、面向对象的程序设计语言,是专门为.net的应用而开发的语言。它吸收了c+、visual basic、delphi、java等语言的优点,体现了当今最新的程序设计技术的功能和精华。c#继承了c语言的语法风格,同时又继承了c+的面向对象特性。不同的是,c#的对象模型已经面向internet进行了重新设计,使用的是.net框架的类库;c#不再提供对指针类型的支持,使得程序不能随便

13、访问内存地址空间,从而更加健壮;c#不再支持多重继承,避免了以往类层次结构中由于多重继承带来的可怕后果。.net框架为c#提供了一个强大的、易用的、逻辑结构一致的程序设计环境。同时,公共语言运行时(common language runtime)为c#程序语言提供了一个托管的运行时环境,使程序比以往更加稳定、安全。其特点有: · 语言简洁。 · 保留了c+的强大功能。 · 快速应用开发功能。 · 语言的自由性。 · 强大的web服务器控件。 · 支持跨平台。 · 与xml相融合。3 系统的整体分析与设计3.1 需求分析 3.

14、1.1 系统需要解决的主要问题 用户进入系统应该进行身份验证。用户进入系统后,根据用户的身份(工号)判别是管理员还是一般的售票员,管理员进入管理界面,一般售票员只能进入相应的售票、退票等界面。根据汽运售票本身的特点,经过分析,管理员具有车辆管理、目的站管理和运输管理是必须的。然后管理员要有管理一般用户(售票员)的能力,所以添加了管理员针对用户管理的模块。而对一般售票员来讲,一般仅需要售票、退票、修改自己的密码的界面。3.1.2 系统功能模块划分 本汽运售票系统可分为两个主要功能模块进行设计,这两个功能模块分别为:(1)售票员功能模块: 具有车辆管理、目的站管理、用户管理和运输管理的功能。(2)

15、管理员模块:具有售票、退票和修改自己密码的功能。系统功能模块划分如图3-1所示:图3-1 系统功能模块划分图3.2 总体设计 总体设计主要包括公用登录模块的设计,管理员功能模块的设计,售票员(一般用户)功能模块的设计。程序总体流程图如图3-2所示: 图3-2 程序总体流程图3.2.1 公共登陆模块设计 所有用户都从本模块登陆,用户填写自己的工号和密码后,系统会根据所输入获得相应管理员flag。如果获取不到这个flag,系统会报密码错误。如果获得管理员flag为1(true),系统自动进入管理界面进行管理。如果为0(false),系统自动进入售票界面。3.2.2售票员(一般用户)功能模块设计 售

16、票员(一般用户)登录后,进入售票员的主界面,然后按照菜单的提示进入售票界面,退票界面和修改密码(只能修改售票员本人的密码)的界面。3.2.3 管理员功能模块设计 管理员登录后进入后台管理主界面(图3-3),由此主界面可进入车辆管理,运输管理,目的站管理和用户(权限)管理(图3-4)等功能。其中,用户(权限)管理的部分,管理员能修改自己的密码,也能创建新用户时赋予该新用户密码,但是对系统现有用户的密码不具有更改权限。图3-3管理主界面图3-4 用户(权限)管理界面3.3 系统数据库设计 3.3.1 数据库结构及说明 数据库结构是汽运售票系统设计方案中的一个重要组成部分,目的在于满足售票员、管理员

17、用户实现其操作功能。数据库中表的设计:1) 车辆信息表结构车辆:图3-5 车辆信息表2) 车票信息表结构车票:图3-6 车票信息表3) 目的地信息表结构目的地:图3-7 目的地信息表4)运输信息表结构运输:图3-8 运输信息表5) 账户信息表结构账户:图3-9 账户信息表3.3.2 用户权限简介 1)管理员在此系统中系统管理员具有车辆管理、目的站管理、用户管理和运输管理的权力。他不需注册。管理员管理一般用户。2)一般用户主要是指普通售票员,进行售票和退票等。4 部分界面实现详解4.1 登陆界面相关功能的实现登陆界面(图4-1):图4-1  用户登录界面登陆按钮下的代码: privat

18、e void button1_click(object sender, eventargs e) string sqlstmt = "select * from 账户 where 工号='" + txtusername.text + "' and 密码='" + txtpassword.text + "'" datatable dt = dc1.readtable(sqlstmt); if (dt.rows.count = 0) messagebox.show("密码错误!"); e

19、lse this.hide(); dataclass.myno = txtusername.text; if (dt.rows02.tostring().trim() = "1") form frmmain = new frmmain(); frmmain.showdialog(); else form 售票窗口 = new 售票窗口(); 售票窗口.showdialog(); 4.2 售票主窗体相关功能的实现售票员的主界面(图4-2):图4-2 售票员的主界面自动加载主窗体时窗体最大化的代码: public 售票窗口() initializecomponent(); th

20、is.windowstate = system.windows.forms.formwindowstate.maximized; 点击售票界面菜单时会触动showform(售票界面)方法: private void 售票界面toolstripmenuitem_click(object sender, eventargs e) form 售票界面 = new 售票界面(); showform(售票界面); showform()方法代码: private void showform(form frmtoshow) foreach (form frmchild in this.mdichildren

21、) if (frmchild.gettype() = frmtoshow.gettype() frmtoshow.dispose(); frmchild.activate(); return; frmtoshow.mdiparent = this; frmtoshow.show(); frmtoshow.windowstate = system.windows.forms.formwindowstate.maximized; 4.3 售票界面相关功能的实现售票界面(图4-3):图4-3 售票界面查询按钮下的代码: private void btnquery_click(object sende

22、r, eventargs e) string strsql = "select c.流水号,y.目的城市,y.目的站名,y.车辆编号,y.发车日期,y.发车时间,y.车次,y.参考全程时间,y.价格,c.座位号 from 车票 c inner join 运输 y on c.运输编号=y.运输编号 where c.售出标志 <> 'y' " if (checkbox1.checked) strsql = strsql + "and y.发车日期='" + datetimepicker1.text.tostring().t

23、rim() + "' " if (combocity .text .tostring ().trim ()!="") strsql = strsql + "and y.目的城市='" + combocity.text.tostring().trim() + "' " if (combostop.text.tostring().trim() != "") strsql = strsql + "and y.目的站名='" + combostop.t

24、ext.tostring().trim() + "' " datatable dt = new datatable(); dt = dc1.readtable(strsql); datagridview1.datasource = dt; 售出按钮下的代码: private void btnsale_click(object sender, eventargs e) if (datagridview1.rowcount <= 1) messagebox.show("数据表为空,不可以卖票!"); return; string ticketi

25、d = datagridview10, datagridview1.currentcell.rowindex.value.tostring(); dc1.execsql("update 车票 set 售出标志='y', 售票员工号='"+dataclass .myno +"'where 流水号='"+ticketid +"'"); /打印信息: /string ticketid = datagridview10, datagridview1.currentcell.rowindex.va

26、lue.tostring(); string city = datagridview11, datagridview1.currentcell.rowindex.value.tostring(); string stop = datagridview12, datagridview1.currentcell.rowindex.value.tostring(); /string busid = datagridview13, datagridview1.currentcell.rowindex.value.tostring(); string date = datagridview14, dat

27、agridview1.currentcell.rowindex.value.tostring(); string time = datagridview15, datagridview1.currentcell.rowindex.value.tostring(); string chechi = datagridview16, datagridview1.currentcell.rowindex.value.tostring(); /string alltime = datagridview17, datagridview1.currentcell.rowindex.value.tostrin

28、g(); string price = datagridview18, datagridview1.currentcell.rowindex.value.tostring(); string zuowei = datagridview19, datagridview1.currentcell.rowindex.value.tostring(); /售票员工号dataclass .myno string comeouttime = datetime.now.tostring("yyyymmdd hhmmss"); streamwriter sw = file.createte

29、xt("d:" + ticketid +"_"+ comeouttime + ".txt"); sw.writeline("流水号:"+ticketid+""); sw.writeline("出售时间:" + comeouttime + ""); sw.writeline("目的城市:" + city + ""); sw.writeline("目的站别:" + stop + ""

30、;); sw.writeline("发车日期:" + date + ""); sw.writeline("发车时间:" + time + ""); sw.writeline("车次:" + chechi + ""); sw.writeline("价格:" + price + ""); sw.writeline("座位号:" + zuowei + ""); sw.writeline("售票

31、员工号:" + dataclass.myno + ""); sw.writeline("+"); sw.writeline("欢迎您的乘坐本次班车"); sw.close(); messagebox.show("车票信息请见d盘"); combocity.text = "" combostop.text = "" /datetimepicker1.text = datetime.now.tostring("yyyymmdd"); checkbox

32、1.checked = true; this.btnquery_click(this, e); 打开d盘可见2_20110409 104711.txt的文件,其内容如图4-4:图4-4 2_20110409 104711.txt 文件的内容4.4 退票界面相关功能的实现退票界面(图4-5):图4-5 退票界面scan 器scan车票的流水号的时候触动事件代码:private void textbox1_keypress(object sender, keypresseventargs e) if (e.keychar >= 47 && e.keychar <= 58

33、 | e.keychar = 8 | e.keychar = 13)/ascii=8退格键 e.handled = false; else e.handled = true; if (e.keychar = 13) string sqlstmt = "select * from 车票 where 流水号='" + textbox1.text.tostring().trim() + "' " datatable dt = dc1.readtable(sqlstmt); if (dt.rows.count != 0) dc1.execsql(

34、"update 车票 set 售出标志='n', 售票员工号='' where 流水号='" + textbox1.text.tostring().trim() + "'"); messagebox.show("退票成功!流水号:" + textbox1.text.tostring().trim() + ""); else messagebox.show("系统中不存在此票!无法退票!"); 4.5 售票员修改密码界面相关功能的实现修改密码的界面(

35、图4-6):图4-6 修改密码的界面更新密码按钮下的代码: private void button1_click(object sender, eventargs e) /获得密码 string sqlstmt = "select 密码 from 账户 where 工号='" + dataclass.myno + "' " datatable dt = dc1.readtable(sqlstmt); string mima = dt.rows00.tostring().trim(); if (textbox1.text.tostring(

36、).trim() = mima) if (textbox2.text.tostring().trim() != "" && textbox2.text.tostring().trim() = textbox3.text.tostring().trim() dc1.execsql("update 账户 set 密码='" + textbox2.text.tostring().trim() + "' where 工号='" + dataclass.myno + "'");

37、 messagebox.show("更新密码成功!"); else messagebox.show("两次输入新密码不一致"); else messagebox.show("原始密码有误!"); 4.6 运输管理主界面相关功能的实现此界面中有导入售票系统按钮,该按钮被管理员点击之后售票员才能售此运输号下的票。运输管理界面(图4-7):图4-7 运输管理界面导入售票系统按钮下的代码: private void input_click(object sender, eventargs e) if (datagridview1.rowcou

38、nt <= 1) messagebox.show("数据表为空,不能导入。"); return; string id = datagridview10, datagridview1.currentcell.rowindex.value.tostring(); string sqlstmt = "select * from 车票 where 运输编号='" + id + "' " datatable dt = new datatable(); dt = dc1.readtable(sqlstmt); if (dt.

39、rows.count != 0) messagebox.show("已经导入售票系统"); return; /获取座位数目 /第一步:获取车辆编号 string bus_id = datagridview13, datagridview1.currentcell.rowindex.value.tostring(); /第二步:根据bus_id获取座位号 sqlstmt = "select 座位数 from 车辆 where 车辆编号='" + bus_id + "' " dt = dc1.readtable(sqlst

40、mt); string zuowei_string=dt.rows 00.tostring ().trim (); int zunwei_int =convert.toint32(zuowei_string); string sql = "" for (int i = 1; i <= zunwei_int; i+) sql = "insert into 车票(运输编号,座位号,售出标志) values ('"+id +"','"+i.tostring ()+"','n')

41、" dc1.execsql(sql); sql = "update 运输 set 是否已经导入售票系统='y' where 运输编号='"+id+"'" dc1.execsql(sql); messagebox.show("成功导入售票系统!"); combocity.text = "" combostop.text = "" combobusid.text = "" combogoofftime.text = ""

42、; this.chaxun_click(this, e); 4.7 运输管理中增加运输界面相关功能的实现添加按钮下的代码: private void insert_click(object sender, eventargs e) if (combocity.text.tostring().trim() = "" | combostop.text.tostring().trim() = "" | combobusid.text.tostring().trim() = "" | outtime.text.tostring().trim(

43、) = "" | price.text.tostring().trim() = "") messagebox.show("信息不全,拒绝插入!"); else string sqlstmt = "select count(*) from 运输 where 目的城市='"+combocity .text .tostring ().trim ()+"' and 目的站名='"+combostop .text .tostring ().trim ()+"' a

44、nd 车辆编号='"+combobusid .text .tostring ().trim ()+"' and 发车日期='"+datetimepicker1 .text .tostring ().trim ()+"' and 发车时间='"+outtime .text .tostring ().trim ()+"'" datatable dt = dc1.readtable(sqlstmt); if (dt.rows00.tostring ().trim () = "

45、;1") messagebox.show("系统中已经存在!"); else dc1.execsql("insert into 运输 (目的城市 ,目的站名,车辆编号,发车日期,发车时间,车次,参考全程时间,价格) values('" + combocity .text .tostring ().trim () + "','" + combostop.text.tostring().trim() + "','" + combobusid.text.tostring(

46、).trim() + "','" + datetimepicker1 .text.tostring().trim() + "','" + outtime.text.tostring().trim() + "','" + chechi.text.tostring().trim() + "','" + alltime.text.tostring().trim() + "','" + price.text.tostring

47、().trim() + "')"); label10.text = "添加成功!" 4.8 运输管理中编辑运输界面相关功能的实现更新按钮下的代码: private void btnupdate_click(object sender, eventargs e) if (txtprice.text.tostring().trim() != "") dc1.execsql("update 运输 set 车次='" + txtchechi.text.tostring().trim() + "&#

48、39;,参考全程时间='" + txtalltime.text.tostring().trim() + "',价格='"+txtprice .text .tostring ().trim ()+"' where 运输编号='"+lblyunshu.text + "'"); label5.text = "修改成功!" else messagebox.show("价格不能为空的!"); 4.9 数据访问类dataclass 所在的文件data

49、class.csusing system;using system.collections.generic;using system.linq;using system.text;using system.data;using system.data.sqlclient;namespace 汽运售票系统 class dataclass #region 全局变量 public static string myno = "" /定义全局变量,记录当前谁在使用该系统 public static string user_name = "" /定义全局变量,记录当前修改的学生编号 public static string city = "" /定义全局变量 public static string stop = "" /定义全局变量 public static string bus_id = "" public static string transportid = "" #endregion string strconn; public dataclass() strconn = system.c

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论