车站售官票管理系统数据库课程设计报告_第1页
车站售官票管理系统数据库课程设计报告_第2页
车站售官票管理系统数据库课程设计报告_第3页
车站售官票管理系统数据库课程设计报告_第4页
车站售官票管理系统数据库课程设计报告_第5页
已阅读5页,还剩20页未读 继续免费阅读

下载本文档

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

文档简介

1、 河南理工大学万方科技学院课程设计报告2010 2011学年第 一 学期课程名称 数据库系统原理 设计题目 车站售票管理系统 学生姓名 王邦政 学 号 0828040051 专业班级 通信3班 指导教师 刘小燕 2010 年 09 月 25 日目 录1、需求求报告分析11、1 概述11、2 系统功能分析11、3 数据流图21、4 数据字典32、概念及逻辑结构设计72、1 er图 7 2、2 关系模式8 2、3数据结构9 3、数据库设计104、系统软件结构设计 114、1 系统功能设计11 4、2 其它需求12 4、3说明125、程序模块设计 155、1 功能模块详细设计155、2 界面设计16

2、5、3 附录:系统程序源代码16参考文献251系统需求分析报告1.1概述汽车售票管理系统主要用于车站日常的票务处理。车售票管理系统在正常运行中需要对使用该系统的主要是汽车站售票人员、汽车站售票工作的管理人员与系统管理员。为达到操作过程中的直观、方便、实用、安全等要求,我们组在这个系统中采用模块化程序设计的方法,便于系统功能的组合和修改,以及扩充和维护。12系统功能分析根据需求分析,本系统要实现以下的基本功能。1登录功能:分为汽车站售票人员和系统管理员两种权限登陆。用户通过输入不同用户名和密码进行身份验证,系统通过用户名和密码判断不同用户的权限,从而确定该用户可以执行的操作。2车票信息查询功能:

3、由汽车站的普通售票人员通过不同的检索入口,查询车票信息,并进行排序。3修改功能:汽车站售票人员、汽车站售票工作的管理人员能够修改自身的用户名和密码,系统管理员则能实现系统用户与普通用户的添加,修改普通用户与系统管理员的密码,以此确保该系统能够安全操作,避免不必要的损失。4汇总功能:对当天车票的信息进行汇总。图1-1 顶层图图1-2 0层图图1-3 售票1层图顾客售票人员车站售票管理系统购票信息售票信息顶层图购票信息查询可供票处理买票车票车票记录车票汇总缺票记录0层图售票记录购票信息1层图查询可供票处理买票车票售票记录车票记录订票信息查询顾客信息核对后的顾客信息查询可供票处理订票车票订票记录车票

4、记录图1-4 订票1层图退票信息处理退票退票记录图1-5 退票1层图13数据流图14数据字典1.数据项 票号、票价、车次、日期、车型、开车时间、票种、座位号、起始站、终点站、身份证号、银行卡号、数量、退票时间、退票手续费、订票时间、订票手续费2数据结构表11 车票的数据结构ds04-01 车票ds04-02:车票标志ds04-03:车次信息ds04-04:座位信息ds04-05:票价信息i1:车票编号i3:起始站i8:座位号i9:全票价i2:车票类型i4:车次编号i10:折扣i5:终点站i6:发车时间i7:乘车日期3数据流数据流编号:d04-01数据流名称:车票简述:车票有关信息数据流来源:用

5、户执行售票操作结果数据流去向:购票旅客数据流组成:车票编号+车票类型+车次信息+座位信息+票价信息4数据存储 售票记录:票号,起始站,终点站,票价,车次,日期,开车时间,车型,票种,座位号,售出时间 退票记录:票号,起始站,终点站,票价,车次,日期,开车时间,车型,票种,座位号,退票时间 订票记录:票号,起始站,终点站,票价,车次,日期,开车时间,车型,票种,座位号,订票时间,顾客身份证号缺票记录:票号,起始站,终点站,票价,车次,日期,开车时间,车型,票种 车票记录:票号,起始站,终点站,票价,车次,日期,开车时间,车型,票种,座位号,售出时间,票数5处理过程 车票汇总:工作人员将一天所售出

6、的票进行统计,包括票数,票类,形成确定的车票记录。 查询:将顾客需要的车票信息输入系统,并查询其是否可供应。 查询顾客信息:为订票所设,将顾客的准确信息记录,为其预定所车票。 处理买票:进行买票交易,把顾客需要的票(可供应)售出,并在系统中作相应记录,确定车票记录。 处理订票:进行订票交易,工作人员为顾客预定其所需车票,并在系统中作相应记录,确定订票记录。 处理退票:进行退票交易,工作人员为顾客办理退票手续,并在系统中作相应记录,确定退票记录。 2概念及逻辑结构设计 2.1 e-r图本系统根据以上的设计规划出的实体有:车票实体、车站实体、顾客实体。各个实体具体的描述-图如下: 图2-1车票er

7、图 图2-2 顾客er图 换票退票时间顾客售票退票票号退票手续费车票新票号原票号换票时间换票手续费订票日期交易时间数量起始站终点站身份证号交易金额1n1n1n1n 图2-3实体之间er图2.2关系模型:车票与顾客之间的联系售票 1:n车票(票号,车次,日期,车型,票价,开车时间,票种,座位号,起始站,终点站)顾客(身份证号,银行卡号,票号)退票1:n车票(票号,车次,日期,车型,票价,开车时间,票种,座位号,起始站,终点站)顾客(身份证号,银行卡号,票号,退票时间,退票手续费)订票1:n车票(票号,车次,日期,车型,票价,开车时间,票种,座位号,起始站,终点站)顾客(身份证号,银行卡号,票号,

8、日期,交易时间,交易金额,数量,起始站,终点站)2.3数据库结构表2.1 car表详细设计字段名数据类型是否主键是否必填字段说明carid文本是是车次编号cartype数字否否客车型号platenumber文本否是车牌号carholder文本否否责任人runningway文本否否经营路线seatlimit数字否是座位限额outsettime日期/时间否是发车时间表2.2 seat表详细设计字段名数据类型是否主键是否必填字段说明carid文本否是车次编号date时间/日期否是日期terminal文本否是终点站selled是/否否否票是否售出price数字否是车票价格表2.3 pricedisco

9、unt表详细设计字段名数据类型是否主键是否必填字段说明recordnumber自动编号是是记录号tickettypeid数字否是车票类型discount数字否是折扣carid文本否是车次表2.4 price表详细设计字段名数据类型是否主键是否必填字段说明terminalid文本是是终点站编号outstation文本否否起始站terminalname文本否是终点站tnpycode文本否是拼音码carid文本否是车次编号ticketprice数字否是票价表2.5 type表详细设计字段名数据类型是否主键是否必填字段说明recordid自动编号是是记录号tickettypeid数字否是车票类型编号t

10、ickettype文本否是车票类型3数据库设计本车站售票系统有两个实体,分别是车票和顾客,利用sql建表如下:车票顾客4 系统软件结构4.1.系统功能设计汽车站售票管理系统主要设有五个主要功能模块:分别是车次管理、票价管理、票务管理、用户管理和查询管理。如图4-1所示。1 车次管理模块该模块主要实现车次信息的编辑。车次管理中的数据源为access数据库中car表,在此管理部分中,能够使用界面操作实现车次信息的编辑,并将数据库中的数据按照编辑的要求来及时更新数据表中的相关数据。2票价管理模块该模块主要实现票价信息的录入、修改与删除以及票价折扣信息的录入、修改与删除。 票价详细信息的录入、修改、删

11、除,它的数据源为access数据库的price表。在此管理部分中,通过票价管理(frmpricemanage)界面来选择记录并决定执行何种操作,是修改、添加或删除。当命令为修改或者添加时则自动跳转到票价编辑窗体(frmpriceedit)实现票价信息的编辑并更新数据库中相应数据记录。3票务管理模块票务管理部分实现前台售票、前台退票功能。主要完成售票、远程售票、废票、取消废票功能、改签票、退票、取消退票功能、补票、售票查询和票款结算单填写等功能。4用户管理模块该模块主要实现用户添加,用户信息修改与用户的删除。所有系统用户的管理,包括系统普通用户与系统管理员。此管理模块数据源为access数据库的

12、users表。在系统主界面中首先进入的是名称为frmuserman的用户管理主窗体,通过提取用户名、用户类型来查看用户具体信息,选择添加或删除用户进入名为frmuseredit的用户编辑界面进行操作,操作完成便更新数据库数据。5查询管理模块 该模块主要实现拥护通过查询界面可以根据条件进行车次时刻、车次票价查询。汽车站售票管理系统票务管理票价管理车次管理用户管理查询管理车次信息编辑票价信息录入票价信息修改票价信息删除前台售票前台退票用户信息添加票价信息修改票价信息删除车次信息查询票价信息查询 4-1功能模块图42其他需求汽车站售票系统数据库中的数据量十分庞大,而且更新速度十分快。在数据大小方面要

13、求数据的属性要设置合理,假如是数据的属性值越大,则数据本身所占用的容量也就十分的庞大,不但会造成传输的不方便甚至错误,也更加重系统的负担,有可能削弱系统运行速度,使得系统无法达到预期的目的。另外,在整个系统当中要确保数据在保存与传递过程中的安全,以免发生严重的错误,造成巨大的损失。43说明售票 正常出售本站所有车次车票,并按要求打印出车票。 远程售票 正常出售远程车站所有车次车票,并按远程车站的要求打印出车票。 废票 在正常售票过程中, 可能因操作失误或打印机械故障等原因造成错票而作废车票。 取消废票 当废票时,发现废的票是不应该废的,即为正常票,需要通过取消废票来实现。 远程废票 对所售远程

14、车票作废票处理。 退票 在正常退票时间内办理退票,并根据退票规定收取一定的手续费。 远程退票 对所售远程车票作退票处理。 取消退票 当退票时,发现退的票是不应该退的,即为正常的票,需要通过取消退票来实现。 改签票 由于乘客或车站某种原因需对已出售的车票作更换车次的车票。改签仅允许改签一次。 远程改签票 对所售远程车票作改签处理。 注销票 删除某些由于调试程序所用的票记录及其影响。 补票 只能在超过售票时限后进行,且在未发车之前,在统计时注意对非微机售票的票的处理(例如:剪刀票)。 售票查询 通过一定的授权和设定售票员可以查询在设定时间范围内或多少张票以前的出售、作废、改签和退票的情况,并对有权

15、限的人员可有累计票款服务。 票款结算单 售票员每天售完车票后填写每日结算单,以便财务人员查询。 重打车票 在正常售票过程中, 可能因打印机械故障等原因造成错票而重新打印车票。 售票类型 车票中所有联都应有的信息为车次、起止站点、票价、发车日期时间,而正联所特有的信息为售票员工号、检票口、是否改签票、车票上应有的信息:车票固有票号、计算机打印的票号、票号条形码(仅用于自动检票的车站)。 (2)车票类型 1)正常班次车票:发售的当天或预售正常轮班车次的车票。 2)远程售票:发售远程车站车次的车票,其打印格式同远程车站。 3)流水班次车票:发售的流水班次车票。 4)退票和改签票: 退票分为 a、正常

16、退票。办理标准规定退票时间内的退票。 b、强行退票。在超过时限后退票,即强行退票。 补票:补票只能在超过售票时限后进行,且必须在未发车之前。 订票:设定定票有效期限,在有有效时限保留座位,有效时外释放座位等。 票种的定义 全价票 半价票 允许设定可用标志,自由定义名称。 免票 只允许设定可用标志。 优惠票1-3 允许设定可用标志,自由定义名称。 折扣票 对原票价的基础上进行一定的打折,有严格的权限控制。 5 程序模块设计5.1功能模块详细设计5.1.1 车次管理模块代码实现private sub cmd_ok_click()检查用户录入数据的有效性if len(trim(txtcarid) =

17、 0 then msgbox 请输入车次编号 txtcarid.setfocus exit sub end if if len(trim(txtouttime) = 0 then msgbox 请输入发车时间 txtouttime.setfocus exit sub end if 把用户录入的数据赋值到数据库对象变量中 with mytype .carid = makestr(txtcarid) 车次编号 .outsettime = makestr(timeedit) 发车时间 .runninway = makestr(wayedit) 经营路线 .cartype = makestr(type

18、edit) 车辆类型 .platenumber = makestr(cnnedit) 车牌号 .carholder = makestr(holderedit) 责任人 .seatlimit = makestr(lseatedit) 额定座位 根据变量modify决定是插入新数据,还是修改已有的数据 if modify = false then .insert 插入新数据 else 修改 .update (nid) 修改已有的数据end ifend with unload me 关闭窗口5.1.2 票价管理模块代码实现 票价管理部分代码如下(信息添加过程):private sub cmd_add

19、_click() 初始化frmdiscountedit信息 frmpriceedit.txtterminalname = frmpriceedit.txttnpycode = frmpriceedit.txtcarid = frmpriceedit.txtticketprice = frmpriceedit.modify = false frmpriceedit.vartermanalid = oriterminalid frmpriceedit.show refreshdataend sub5.1.3用户管路模块代码实现(编辑窗体代码):private sub cmd_ok_click()

20、if trim(txtusername) = then msgbox 请输入用户名 txtusername.setfocus exit sub end if if len(txtpass) 5 then msgbox 密码长度不能小于5 txtpass.setfocus txtpass.selstart = 0 txtpass.sellength = len(txtpass2) exit sub end if if txtpass txtpass2 then msgbox 密码和确认密码不相同,请重新确认txtpass2.setfocus txtpass2.selstart = 0 txtpa

21、ss2.sellength = len(txtpass2) exit sub end if 判断是否存在同名用户 with myuser if modify = false or oriuser trim(txtusername) then if .in_db(trim(txtusername) = true then msgbox 用户名已存在,请重新输入 txtusername.setfocus txtusername.selstart = 0 txtusername.sellength = len(txtusername) exit sub end if模块中的程序代码如下:public

22、 adocon as new adodb.conncetionpublic adors as new adodb.recordset连接数据库public sub main() set adocon = new adodb.connection adocon.open = provider=microsoft.jet.oledb.4.0;data source= & app.path & 汽车站售票管理系统.mdb & ;persist security info=false frmlogin.show frmlogin.txtuser.setfocusend sub53附录:系统程序源代码(

23、1)登陆窗体(frmlogin)代码public passwordkey as stringpublic namekey as stringpublic try_times as integer取消键退出登陆界面private sub cmd_cancel_click()unload meend subprivate sub cmd_ok_click() 数据库有效性检查if trim(txtuser) = then msgbox 请输入用户名txtuser.setfocus exit subend ifif trim(txtpwd) = then msgbox 请输入密码 txtpwd.se

24、tfocus exit sub end ifend subprivate function makestr() as string namekey = str(txtuser) passwordkey = str(txtpwd) 判断用户是否存在 if myuser.in_db(namekey) = flase then msgbox 用户名不存在 try_times = try_times + 1 if try_times = 3 then msgbox 您已经三次尝试进入本系统,均不成功,系统将关闭 dbapi_disconnect end else exit function end i

25、f end if 判断密码是否正确 myuser.getinfo (namekey) if myuser.pwd passwordkey then msgbox 密码错误 try_times = try_times + 1 if try_times = 3 then msgbox 您已经三次尝试进入本系统,均不成功,系统将关闭 dbapi_disconnect end else exit function end ifend if 登陆成功,将当前用户的信息保存在curuser中 curuser.username = myuser.username curuser.user_type = my

26、user.user_type curuserempid = myuser.empid 关闭自己并显示主窗体 unload me frmmain.showend function(2)主窗体(frmmain)代码设置数据库连接字符串conn = provider=microsoft.jet.oledb.4.0;data source= & app.path & 汽车站售票管理系统.mdb & ;presist security info=false系统登陆界面frmlogin.showend subprivate sub pjcx_click()end subprivate sub pjgl_c

27、lick() frmpricemanage.showend subprivate sub spgl_click() frmticketsell.showend subprivate sub tpgl_click() frmback.showend subprivate sub xgmm_click() with frmuseredit .oriuser = curuser.username .txtusername = curuser.username if curuser.user_type = 1 then .combotype.additem 系统管理员 else .combotype.

28、additem 普通用户 end if .combotype.listindex = 0 .combotype.enabled = false .modify = true .show 1 end withend subprivate sub yhgl_click() if curuser.user_type = 1 then frmuserman.show else msgbox 没有权限 end ifend subprivate sub zkgl_click() frmdiscount.showend sub(3)售票窗体(frmticketsell)代码private sub cmd_c

29、ancel_click() unload meend subprivate sub cmd_search_click() gridrsfresh 根据条件查询所有信息end subprivate sub cmd_sell_click() dim combodate as string, tnpycode as string, carid as string dim left as integer dim seatnumber as string dim strseat as string dim ticketinformation as string dim informationbook a

30、s string dim cost as long combodate = trim(combodate.text) tnpy = trim(txttnpycode) carid = trim(txtcarid) dim strcnn init_ado strquery = select carid,outstation,terminal,outsettime,date,sno from seat join price on seat.carid=price.carid where seat.date= & _ trim(combodate) & & and price.tnpycode= &

31、 trim(txttnpycode) & 根据输入的信息,从表里得出查询结果rsdata.open strquery, cnnrsdata, , , adcmdtext if rsdata.eof then msgbox 车次或拼音码输入有误,请重新输入!, , error! combodate.text = tnpycode = txtcarid = combodate.setfocus elseif len(tnpycode) = 0 then msgbox 请输入拼音码 txttnpycode.setfocus elseif len(tnpycode) 4 then msgbox 拼音码

32、过长,无效! txtcarid.setfocus elseif len(carid) = 0 then msgbox 请输入车次编号! txtcarid.setfocus elseif isnumeric(number) = false then msgbox 车次编号应为数字! txtcarid.text = txtcarid.setfocus else rsdata.close strquery = select count(*) as total from seat where seat.sell=false and seat.date= & _ trim(combodate.text)

33、 & & and seat.carid= & trim(txtcarid.text) & rsdata.open strquery, cnnrsdata, , , adcmdtext 统计本车次的剩余的座位数 rsdata.movefirst left = rsdata!total if left = 0 then msgbox 本车次已经客满! combodate.text = combosnno.text = txttnpycode.text = txtcarid.text = combodate.setfocus else rsdata.close strquery = select c

34、ount(*) as total from seat where seat.sell=false and seat.date= & _ trim(combodate) & & and seat.carid= & trim(txtcarid) & rsdata.open strquery, cnnrsdata, , , adcmdtext 统计本车次的剩余的座位数 rsdata.movefirst rsdata.addnew rsdata!date = comdate rsdata!seat = comsnno rsdata!carid = carid rsdata!tnpycode = tnp

35、ycode rsdata!sno = trim(seatnumber) rsdata.update 添加新记录 更新 seat 表 ,将刚卖出的座位号设为 false strquery = select * from seat where seat.sno= & trim(seatnumber) & _ and seat.date= & trim(combodate) & & _ and seatcarid= & trim(txtcarid) & rsdata.open strquery, cnnrsdata, , , adcmdtext if rsdata!sell = false then

36、 rsdata!sell = true rsdata.update end if combodate = txttnpycode = txtcarid = combodate.setfocus cost = val(adodc3.recordset.fields(3) txtcharge = val(txtmoney) - val(adodc3.recordset.fields(3) end sub(4)退票窗体(frmback)代码private sub cmdback_click() dim strdate as string dim strline as string dim strse

37、atno as string dim strtnl as string dim response as string dim ticketinformation as string strdate = trim(combodate.text) strcarid = trim(txtcarid.text) strseatno = trim(comboseatno.text) strtnl = trim(comboterminal.text) dim strcnn init_ado strquery = select * from sellticket where sellticket.date=

38、 & _ trim(combodate.text) & & and sellticket.sno= & trim(combosnno.text) & & _ and sellticket.carid= & trim(combocarid.text) & 检查车票日期、车次和座位是否有效 rsdata.open strquery, cnnrsdata, , , adcmdtext if rsdata.eof then msgbox 你所要退的票为无效票或是你的输入有问题! else rsdata.close strquery = select * from sellticket where se

39、llticket.date= & trim(combodate.text) & _ & and sellticket.sno= & trim(combosnno.text) & & _ and sellticket.carid= & trim(combocarid.text) & rsdata.open strquery, cnnrsdata, , , adcmdtext rsdata.movefirst combodate.text = rsdata!date combosnsno.text = rsdata!sno combocarid.text = rsdata!carid 车票有效,确

40、认日期、车次和座位号,确认是否退票 ticketinformation = 日期: & strdate & & 车次: & strcarid & & 座位号: & strsno & response = msgbox(ticketinformation, vbokcancel + vbinformation, 是否真要退票?) if response = 1 then 更改 sellticket 表 rsdata.close strquery = select * from sellticket rsdata.open strquery, cnnrsdata, , , adcmdtext rs

41、data.movefirst dim i as integer for i = 1 to rsdata.recordcount if rsdata!date = strdate and rsdata!sno = strsno and rsdata!sno = strseat then rsdata.delete end if rsdata.movenext next i rsdata.close 将刚退的票设为可卖 strquery = select * from line where seat.date= & strdate & & _ and seat.carid= & strcarid

42、& & and seat.sno= & strsno & rsdata.open strquery, cnnrsdata, , , adcmdtext if rsdata!book = true then rsdata!book = false rsdata.update end if combodate.text = combosno.text = combodate.setfocus msgbox 退票已成功! else rsdata.close combodate.text = combosno.text = combodate.setfocus end if end if end su

43、b(5)折扣管理窗体(frmdiscount)代码private sub cmd_add_click() 初始化frmdiscountedit信息 frmdiscountedit.txtterminalname = frmdiscountedit.txttnpycode = frmdiscountedit.txtcarid = frmdiscountedit.txtticketprice = frmdiscountedit.modify = false frmdiscountedit.varrecordnumber = orirecordnumber frmdiscountedit.show

44、1 refreshdataend subprivate sub cmd_cancel_click() unload meend subprivate sub cmd_del_click() dim tmpid as long if adodc1.recordset.bof = true then msgbox 请选择记录 exit sub end if tmpid = adodc1.recordset.fields(0) if msgbox(是否删除当前行, vbyesno, 请确认) = vbyes then call myfam.deletebyid(tmpid) end if refre

45、shdataend subprivate sub cmd_modi_click() 初始化frmpriceedit信息 frmdiscountedit.oriid = adodc1.recordset.fields(0) frmdiscountedit.txtcarid = adodc1.recordset.fields(2) frmdiscountedit.txttickettypeid = adodc1.recordset.fields(3) frmdiscountedit.txttickettype = adodc1.recordset.fields(4) frmdiscountedit.txtdiscount = adodc1.recordset.fiel

温馨提示

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

评论

0/150

提交评论