汽车售票系统详细分析Word文件下载.docx
《汽车售票系统详细分析Word文件下载.docx》由会员分享,可在线阅读,更多相关《汽车售票系统详细分析Word文件下载.docx(28页珍藏版)》请在冰豆网上搜索。
是
车次编号
CarType
数字
否
客车型号
PlateNumber
车牌号
CarHolder
责任人
RunningWay
经营路线
SeatLimit
座位限额
OutSetTime
日期/时间
发车时间
表2.2Seat表详细设计
Date
时间/日期
日期
Terminal
终点站
Selled
是/否
票是否售出
Price
车票价格
表2.3PriceDiscount表详细设计
RecordNumber
自动编号
记录号
TicketTypeID
车票类型
Discount
折扣
车次
表2.4Price表详细设计
TerminalID
终点站编号
OutStation
起始站
TerminalName
TNPYCode
拼音码
TicketPrice
票价
表2.5Type表详细设计
RecordID
车票类型编号
TicketType
4.2.5数据库设计
本车站售票系统有两个实体,分别是车票和顾客,利用SQL建表如下:
车票
顾客
4.2.6系统软件结构
1.系统功能设计
汽车站售票管理系统主要设有五个主要功能模块:
分别是车次管理、票价管理、票务管理、用户管理和查询管理。
如图4-1所示。
2.车次管理模块
该模块主要实现车次信息的编辑。
车次管理中的数据源为Access数据库中Car表,在此管理部分中,能够使用界面操作实现车次信息的编辑,并将数据库中的数据按照编辑的要求来及时更新数据表中的相关数据。
3.票价管理模块
该模块主要实现票价信息的录入、修改与删除以及票价折扣信息的录入、修改与删除。
票价详细信息的录入、修改、删除,它的数据源为Access数据库的Price表。
在此管理部分中,通过票价管理(FrmPriceManage)界面来选择记录并决定执行何种操作,是修改、添加或删除。
当命令为修改或者添加时则自动跳转到票价编辑窗体(FrmPriceEdit)实现票价信息的编辑并更新数据库中相应数据记录。
4.票务管理模块
票务管理部分实现前台售票、前台退票功能。
主要完成售票、远程售票、废票、取消废票功能、改签票、退票、取消退票功能、补票、售票查询和票款结算单填写等功能。
5.用户管理模块
该模块主要实现用户添加,用户信息修改与用户的删除。
所有系统用户的管理,包括系统普通用户与系统管理员。
此管理模块数据源为Access数据库的Users表。
在系统主界面中首先进入的是名称为FrmUserMan的用户管理主窗体,通过提取用户名、用户类型来查看用户具体信息,选择添加或删除用户进入名为FrmUserEdit的用户编辑界面进行操作,操作完成便更新数据库数据。
6.查询管理模块
该模块主要实现拥护通过查询界面可以根据条件进行车次时刻、车次票价查询。
4-1.功能模块图
4.2.7其他需求
汽车站售票系统数据库中的数据量十分庞大,而且更新速度十分快。
在数据大小方面要求数据的属性要设置合理,假如是数据的属性值越大,则数据本身所占用的容量也就十分的庞大,不但会造成传输的不方便甚至错误,也更加重系统的负担,有可能削弱系统运行速度,使得系统无法达到预期的目的。
另外,在整个系统当中要确保数据在保存与传递过程中的安全,以免发生严重的错误,造成巨大的损失。
4.2.8说明
售票
正常出售本站所有车次车票,并按要求打印出车票。
远程售票
正常出售远程车站所有车次车票,并按远程车站的要求打印出车票。
废票
在正常售票过程中,可能因操作失误或打印机械故障等原因造成错票而作废车票。
取消废票
当废票时,发现废的票是不应该废的,即为正常票,需要通过取消废票来实现。
远程废票
对所售远程车票作废票处理。
退票
在正常退票时间内办理退票,并根据退票规定收取一定的手续费。
远程退票
对所售远程车票作退票处理。
取消退票
当退票时,发现退的票是不应该退的,即为正常的票,需要通过取消退票来实现。
改签票
由于乘客或车站某种原因需对已出售的车票作更换车次的车票。
改签仅允许改签一次。
远程改签票
对所售远程车票作改签处理。
注销票
删除某些由于调试程序所用的票记录及其影响。
补票
只能在超过售票时限后进行,且在未发车之前,在统计时注意对非微机售票的票的处理(例如:
剪刀票)。
售票查询
通过一定的授权和设定售票员可以查询在设定时间范围内或多少张票以前的出售、作废、改签和退票的情况,并对有权限的人员可有累计票款服务。
票款结算单
售票员每天售完车票后填写每日结算单,以便财务人员查询。
重打车票
在正常售票过程中,可能因打印机械故障等原因造成错票而重新打印车票。
售票类型
车票中所有联都应有的信息为车次、起止站点、票价、发车日期时间,而正联所特有的信息为售票员工号、检票口、是否改签票、车票上应有的信息:
车票固有票号、计算机打印的票号、票号条形码(仅用于自动检票的车站)。
(2)车票类型
1)正常班次车票:
发售的当天或预售正常轮班车次的车票。
2)远程售票:
发售远程车站车次的车票,其打印格式同远程车站。
3)流水班次车票:
发售的流水班次车票。
4)退票和改签票:
退票分为
A、正常退票。
办理标准规定退票时间内的退票。
B、强行退票。
在超过时限后退票,即强行退票。
补票:
补票只能在超过售票时限后进行,且必须在未发车之前。
订票:
设定定票有效期限,在有有效时限保留座位,有效时外释放座位等。
票种的定义
①全价票
②半价票允许设定可用标志,自由定义名称。
③免票只允许设定可用标志。
④优惠票1-3允许设定可用标志,自由定义名称。
⑤折扣票对原票价的基础上进行一定的打折,有严格的权限控制。
5程序模块设计
5.1功能模块详细设计
5.1.1车次管理模块代码实现
PrivateSubCmd_OK_Click()
'
检查用户录入数据的有效性
IfLen(Trim(txtCarID))=0Then
MsgBox"
请输入车次编号"
txtCarID.SetFocus
ExitSub
EndIf
IfLen(Trim(txtOutTime))=0Then
请输入发车时间"
txtOutTime.SetFocus
'
把用户录入的数据赋值到数据库对象变量中
WithMyType
.CarID=MakeStr(txtCarID)'
.OutSetTime=MakeStr(TimeEdit)'
.RunninWay=MakeStr(WayEdit)'
.CarType=MakeStr(TypeEdit)'
车辆类型
.PlateNumber=MakeStr(CNnEdit)'
.CarHolder=MakeStr(HolderEdit)'
.SeatLimit=MakeStr(LSeatEdit)'
额定座位
根据变量Modify决定是插入新数据,还是修改已有的数据
IfModify=FalseThen
.Insert'
插入新数据
Else'
修改
.Update(nId)'
修改已有的数据
EndIf
EndWith
UnloadMe'
关闭窗口
5.1.2票价管理模块代码实现
票价管理部分代码如下(信息添加过程):
PrivateSubCmd_Add_Click()
初始化FrmDiscountEdit信息
FrmPriceEdit.txtTerminalName="
"
FrmPriceEdit.txtTNPYCode="
FrmPriceEdit.txtCarID="
FrmPriceEdit.txtTicketPrice="
FrmPriceEdit.Modify=False
FrmPriceEdit.VarTermanalID=OriTerminalID
FrmPriceEdit.Show
RefreshData
EndSub
5.1.3用户管路模块代码实现(编辑窗体代码):
IfTrim(txtUserName)="
Then
请输入用户名"
txtUserName.SetFocus
IfLen(txtPass)<
5Then
密码长度不能小于5"
txtPass.SetFocus
txtPass.SelStart=0
txtPass.SelLength=Len(txtPass2)
IftxtPass<
>
txtPass2Then
密码和确认密码不相同,请重新确认"
txtPass2.SetFocus
txtPass2.SelStart=0
txtPass2.SelLength=Len(txtPass2)
判断是否存在同名用户
WithMyUser
IfModify=FalseOrOriUser<
Trim(txtUserName)Then
If.In_DB(Trim(txtUserName))=TrueThen
用户名已存在,请重新输入"
txtUserName.SelStart=0
txtUserName.SelLength=Len(txtUserName)
模块中的程序代码如下:
PublicadoConAsNewADODB.Conncetion
PublicadorsAsNewADODB.Recordset
连接数据库
PublicSubmain()
SetadoCon=NewADODB.Connection
adoCon.Open="
Provider=Microsoft.Jet.OLEDB.4.0;
DataSource="
&
App.Path&
"
\汽车站售票管理系统.mdb"
;
PersistSecurityInfo=False"
FrmLogin.Show
FrmLogin.txtUser.SetFocus
5.2界面设计
系统主界面设计如下,主界面顶端显示不同管理模块,点击则进入相应界面。
下端显示系统当前所处日期和时间。
5.3附录:
系统程序源代码
(1)登陆窗体(FrmLogin)代码
PublicPasswordKeyAsString
PublicNameKeyAsString
PublicTry_timesAsInteger
取消键退出登陆界面
PrivateSubCmd_Cancel_Click()
UnloadMe
数据库有效性检查
IfTrim(txtUser)="
txtUser.SetFocus
IfTrim(txtPwd)="
请输入密码"
txtPwd.SetFocus
PrivateFunctionMakeStr()AsString
NameKey=Str(txtUser)
PasswordKey=Str(txtPwd)
判断用户是否存在
IfMyUser.In_DB(NameKey)=FlaseThen
用户名不存在"
Try_times=Try_times+1
IfTry_times>
=3Then
您已经三次尝试进入本系统,均不成功,系统将关闭"
DBapi_Disconnect
End
Else
ExitFunction
判断密码是否正确
MyUser.GetINfo(NameKey)
IfMyUser.Pwd<
PasswordKeyThen
密码错误"
登陆成功,将当前用户的信息保存在CurUser中
CurUser.UserName=MyUser.UserName
CurUser.User_type=MyUser.User_type
CurUserEmpID=MyUser.EmpID
关闭自己并显示主窗体
UnloadMe
FrmMain.Show
EndFunction
(2)主窗体(FrmMain)代码
设置数据库连接字符串
Conn="
\汽车站售票管理系统.mdb"
PresistSecurityInfo=False"
系统登陆界面
FrmLogin.Show
PrivateSubPJCX_Click()
PrivateSubPJGL_Click()
FrmPriceManage.Show
PrivateSubSPGL_Click()
FrmTicketSell.Show
PrivateSubTPGL_Click()
FrmBack.Show
PrivateSubXGMM_Click()
WithFrmUserEdit
.OriUser=CurUser.UserName
.txtUserName=CurUser.UserName
IfCurUser.User_type=1Then
.ComboType.AddItem"
系统管理员"
普通用户"
.ComboType.ListIndex=0
.ComboType.Enabled=False
.Modify=True
.Show1
EndWith
PrivateSubYHGL_Click()
FrmUserMan.Show
没有权限"
PrivateSubZKGL_Click()
FrmDiscount.Show
(3)售票窗体(FrmTicketSell)代码
PrivateSubCmd_Search_Click()
GridRsfresh'
根据条件查询所有信息
PrivateSubCmd_Sell_Click()
DimComboDateAsString,TNPYCodeAsString,CarIDAsString
DimleftAsInteger
DimseatnumberAsString
DimstrseatAsString
DimticketinformationAsString
DiminformationbookAsString
DimcostAsLong
ComboDate=Trim(ComboDate.Text)
TNPY=Trim(txtTNPYCode)
CarID=Trim(txtCarID)
Dimstrcnn
init_ado
strQuery="
SelectCarID,OutStation,Terminal,OutSetTime,Date,SnoFromSeatjoinPriceonSeat.CarID=Price.CarIDWhereSeat.date='
_
Trim(ComboDate)&
andPrice.TNPYCode='
Trim(txtTNPYCode)&
'
根据输入的信息,从表里得出查询结果
rsdata.OpenstrQuery,cnnrsdata,,,adCmdText
Ifrsdata.EOFThen
车次或拼音码输入有误,请重新输入!
,"
Error!
ComboDate.Text="
TNPYCode="
txtCarID="
ComboDate.SetFocus
ElseIfLen(TNPYCode)=0Then
请输入拼音码"
txtTNPYCode.SetFocus
ElseIfLen(TNPYCode)>
4Then
拼音码过长,无效!
ElseIfLen(CarID)=0Then
请输入车次编号!
ElseIfIsNumeric(Number)=FalseThen
车次编号应为数字!
txtCarID.Text="
rsdata.Close
selectcount(*)astotalfromSeatwhereSeat.sell=falseandSeat.date='
Trim(ComboDate.Text)&
andSeat.CarID='
Trim(txtCarID.Text)&
rsdata.OpenstrQuery,cnnrsdata,,,adCmdText'
统计本车次的剩余的座位数
rsdata.MoveFirst
left=rsdata!
total
Ifleft=0Then
本车次已经客满!
ComboSNno.Text="
txtTNPYCode.Text="
Trim(txtCarID)&
rsdata.AddNew
rsdata!
Date=comdate
Seat=comSNno
CarID=CarID
TNPYCode=TNPYCode
sno=Trim(seatnumber)
rsdata.Update'
添加新记录
更新Seat表,将刚卖出的座