火车订票系统.docx
《火车订票系统.docx》由会员分享,可在线阅读,更多相关《火车订票系统.docx(21页珍藏版)》请在冰豆网上搜索。
火车订票系统
实习报告
题目火车订票系统
姓名:
学号:
班级:
1班
实验实习中心制
年月日
填写说明
一、字号说明:
标题类请用四号字,宋体;正文用小四号、宋体,行间距为1.5倍;
二、填写实习报告时,请先写明实习报告的题目,再填写正文;正文必须与实习过程相结合,提出自己的合理化建议,内容不得少于3000字;
三、实习报告评语、成绩(请指导老师结合学生实习日志撰写情况)由指导老师填写;
四、此模板是所有学生统一的格式,请同学们填写时,不要改变格式;
五、打印前,请同学们认真检查实习报告,不要存在错别字;
六、实习报告由各指导老师的小组长负责统一打印,学生只要按照指导教师的要求,发电子版给老师即可。
实习报告评语
实习报告成绩:
优良中及格不及格
指导老师签字:
年月日
实习报告(基本情况、实习过程及内容、收获体会)
一、设计内容
火车订票系统的设计与实现
二、设计目的
计算机应用于火车站售票的日常管理为火车站售票的现代化带来了从未有过的动力和机遇,为火车站票务管理领域的飞速发展提供了无限潜力。
采用计算机管理信息系统已成为火车站票务管理科学化和现代化的重要标志,给火车站票务带来了明显的经济效益和社会效益。
计算机已经成为人们生活不可却小的一部分。
火车订票系统是一件比较负责但又非常重要的事情,它是涉及国家铁路运输的正常工作、国民经济的发展和人民生活水平及质量的大事情。
加深对数据库原理、数据库设计理论学习的理解,增强动手能力,掌握数据库设计的基本方法和设计步骤,为毕业设计和将来参加实际项目做准备
三、设计过程
(一)需求分析
针对火车订票系统的设计目标,以及自己亲身订票经历和对订票系统的调查,确定了该系统的基本事务需求如下:
1.允许注册新的管理员用户
2.允许管理员根据客户需求根据始发站和终点站对车票进行查询
3.允许管理员根据客户需求根据火车的车次对车票进行查询
4.可以实现订票功能,并为客户提供取票时的密码
数据项条目
管理员帐号
管理员密码
车次
始发站
目的站
发车时间
到站时间
票数余额
票价
Administrator(管理员表)(管理员帐号管理员密码)
Train(车次始发站目的站发车时间到站时间票价票数余额)
简易数据流图如下
数据流程图说明
管理员输入管理员账号和密码登陆,或者注册新的管理员帐号
登陆之后之后可以根据用户需求输入车次查询查票信息,也可以根据用户需求输入车站内容查询车票信息,此外还可以点击查询显示管理员的信息
查询到乘客所需求的车票后,可以订票并修改数据库中票数余额的信息,并且为用户提供一个取票时的提取码
(二)概念结构设计
数据库中总共设计了两个实体
Adminstrator是管理员train是车票信息
各个实体具体的属性描述的E-R图如下:
系统的总体的E-R图
(三)逻辑结构设计
根据第一步中收集到的信息资料以及画出的数据流条目表,我们可以初步分析出系统应该包含2个实体,并且根据前面的分析,可以得到各个实体应该基本具备的各自属性,列表如下:
管理员{管理员帐号、密码}
火车{车次、始发站、目的站、发车时间、到站时间、票数余额、票价}
《1》管理员这一实体中,在描述管理员的属性中管理员账号、密码都是被分解到原子级的属性,不存在能够被分解,或是传递依赖的问题。
管理员{管理员帐号(数字notnull)、密码(数字notnull)}
《2》在火车的实体中,这一实体中,在描述火车的的属性中车次、始发站、目的站、发车时间、到站时间、票价、票数余额都是被分解到原子级的属性,不存在能够被分解,或是传递依赖的问题。
火车{车次(文本,notnull)、始发站(文本,notnull)、目的站(文本,notnull)、发车时间(时间日期,notnull)、到站时间(时间日期,notnull)、票数余额(数字,notnull)、票价(数字,notnull)}
完整性处理
1、实体完整性
它要求能够标识标中的任一行,不能存在二义性。
这种完整
性是通过定义一个主键来保证的,主键包含一列或一些列的组合,对于每一行他们的值是唯一的。
设置规则如下:
第一:
所有主键不能取NULL;
第二:
所有的修改都不能导致主键为空。
《1》对于管理员来讲,能够唯一描述管理员的属性就是管理员账号,所以管理员账号作主键。
《2》对于火车来说,能为一描述火车属性的是车次,所以车次是主键。
2、参照完整性
该完整性表明,某个外键的取值必须在和它取得联系的主键的取值范围内(允许取值范围),或者是NULL值。
外键是表中的列或列的组合,用于建立一个父表和另一个子表的链接。
这些对应列,必须有相同的数据类型和长度。
3、域完整性
表中的每一列都可以定义一个对于该列的取值范围,限制可以输入某列的数值,就是执行域完整性。
4、业务完整性
也称为应用的完整性,可以基于自己的业务范围来限制输入数据库的数据。
(四)数据库物理设计
模块
OptionExplicit
PublicconAsNewADODB.Connection
PublicrsAsNewADODB.Recordset
Publicrs1AsNewADODB.Recordset
PublicstrIDAsString
'PublicxAsInteger
'入口函数
Submain()
Loadlogin
login.Show(vbModal)
EndSub
'连接数据库函数
PublicFunctionConnectionDB()AsBoolean
OnErrorGoToConnectionError
Ifcon.State=adStateClosedThen
con.ConnectionTimeout=10
con.CommandTimeout=10
con.CursorLocation=adUseClient
con.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&App.Path&"\train.mdb;PersistSecurityInfo=False"
con.Open
EndIf
ConnectionDB=True
'MsgBox"数据库连接成功!
",vbInformation+vbOKOnly,"提示"
ExitFunction
ConnectionError:
ConnectionDB=False
'因为MsgBox是个Function(函数),不是Sub(过程)。
'Function是有返回值的。
所以如果用C语言的形式,加上左右括号调用,需要前面加显示的调用Call;
'或者采有VB的调用方式,不用括号,也不需要Call了
CallMsgBox("数据库连接失败!
",vbExclamation+vbOKOnly,"提示")
'UnloadfrmLogin
EndFunction
登陆界面
OptionExplicit
PrivateSubCommand1_Click()
DimbValidatePwdAsBoolean
bValidatePwd=Me.ValidatePwd(Me.Text1,Me.Text2)
IfbValidatePwd=TrueThen
LoadForm1
UnloadMe
Form1.Show'显示出来。
只是加载到内存中还不够,必须要显示出来。
显示调用Show
Else
MsgBox"用户名或密码错误!
",vbExclamation+vbOKOnly,"提示"
EndIf
EndSub
PrivateSubCommand2_Click()
DimiChoiceAsInteger
iChoice=MsgBox("您确定要退出吗?
",vbOKCancel+vbQuestion+vbDefaultButton2,"退出")
IfiChoice=1Then
UnloadMe
EndIf
EndSub
PublicFunctionValidatePwd(strUserIDAsString,strPwdAsString)AsBoolean
DimbConnectionAsBoolean
bConnection=traindata.ConnectionDB
IfbConnection=TrueThen
Calltraindata.rs.Open("select管理员账号,密码fromadminstrator",traindata.con,adOpenDynamic,adLockBatchOptimistic,-1)
Else
EndIf
DimiAsInteger
Ifrs.EOF=FalseThen
Fori=1Tors.RecordCount
IfTrim(strUserID)=Trim(rs.Fields(0))And_
Trim(strPwd)=Trim(rs.Fields
(1))Then
ValidatePwd=True
strID=strUserID
ExitFor
Else
ValidatePwd=False
EndIf
rs.MoveNext
Nexti
EndIf
rs.Close
Setrs=Nothing
EndFunction
PrivateSubCommand3_Click()
LoadForm3
UnloadMe
Form3.Show
EndSub
PrivateSubLabel1_Click()
EndSub
订票界面
OptionExplicit
PrivateSubCommand6_Click()
LoadForm4
UnloadMe
Form4.Show
EndSub
PrivateSubForm_Load()
Me.StatusBar1.Panels
(1).Text="当前用户ID:
"+traindata.strID
'me.StatusBar1.Panels
(2).Text=""
EndSub
PrivateSubCommand1_Click()
DimstrSqlAsString
Me.Adodc1.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&App.Path&"\train.mdb;PersistSecurityInfo=False"
Me.Adodc1.Visible=False
'strSql="select*fromtrainwhere1=1"
'If(Me.Text1.Text<>"")Then'&(Me.Text2.Text<>""))Then
'strSql=strSql&"and始发站=Me.Text1.Text"&"and终点站=Me.Text2.Text&"'"'判断没写完
'strSql=strSql&"and始发站like'"&Me.Text1.Text&"%'"&"终点站like'"&Me.Text2.Text&"%'"
'strSql=strSql&"andsNamelike'"&Me.txtSName.Text&"%'"
'If(Me.Text3.Text<>"")&(Me.Text1.Text<>"")&(Me.Text2.Text<>"")Then
IfMe.Text3.Text<>""Then
'strSql="select*fromtrainWhere车次in('"+Text3+"')"and终点站in('"+Text2+"')"and始发站in('"+Text1+"')"
strSql="select*fromtrainWhere车次in('"+Text3+"')"
Else
strSql="select*fromtrainWhere始发站in('"+Text1+"')and终点站in('"+Text2+"')"
'groupby车次havingcount(*)>=2)and站点in('"+Text1+"','"+Text2+"')orderby编号asc"
EndIf
Me.Adodc1.CommandType=adCmdText
Me.Adodc1.RecordSource=strSql
Me.Adodc1.Refresh
SetMe.DataGrid1.DataSource=Me.Adodc1
IfMe.Adodc1.Recordset.RecordCount=0Then
MsgBox"没有所搜索区间的列车"
EndIf
EndSub
PrivateSubCommand2_Click()
DimstrSql1AsString
Me.Adodc1.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&App.Path&"\train.mdb;PersistSecurityInfo=False"
Me.Adodc1.Visible=False
strSql1="select*fromtrain"
Me.Adodc1.CommandType=adCmdText
Me.Adodc1.RecordSource=strSql1
Me.Adodc1.Refresh
SetMe.DataGrid1.DataSource=Me.Adodc1
EndSub
PrivateSubCommand3_Click()
UnloadMe
EndSub
PrivateSubCommand4_Click()
Loadlogin
UnloadForm1
login.Show
EndSub
PrivateSubCommand5_Click()
LoadForm2
UnloadMe
Form2.Show
EndSub
PrivateSub订票_Click()
DimaAsLong
Randomize
a=Rnd(1000000)*432444
Me.Adodc1.Recordset.Fields(6).Value=Me.Adodc1.Recordset.Fields(6).Value-1
Me.Adodc1.Recordset.Update
SetMe.DataGrid1.DataSource=Me.Adodc1
MsgBox"订票成功,请通过"&a&"提取码去代售点取票"
EndSub
PrivateSubCommand1_Click()
LoadForm1
UnloadMe
Form1.Show
EndSub
PrivateSubCommand2_Click()
DimstrChoiceAsString
IfMe.Adodc1.Recordset.Fields(0)=traindata.strIDThen
MsgBox("当前加载的用户不能删除!
")
ExitSub
EndIf
strChoice=MsgBox("您确定要删除该用户吗?
",vbExclamation+vbOKCancel+vbDefaultButton2,"提示")
IfstrChoice="1"Then
Me.Adodc1.Recordset.Delete
MsgBox("删除成功")
EndIf
Me.Adodc1.Recordset.Update
Me.Adodc1.Refresh
SetMe.DataGrid1.DataSource=Me.Adodc1
EndSub
PrivateSubForm_Load()
DimstrSql1AsString
Me.Adodc1.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&App.Path&"\train.mdb;PersistSecurityInfo=False"
Me.Adodc1.Visible=False
strSql1="select*fromadminstrator"
Me.Adodc1.CommandType=adCmdText
Me.Adodc1.RecordSource=strSql1
Me.Adodc1.Refresh
SetMe.DataGrid1.DataSource=Me.Adodc1
EndSub
注册用户界面
PrivateSubCommand1_Click()
Loadlogin
UnloadMe
login.Show
EndSub
PrivateSubForm_Load()
DimstrSql1AsString
Me.Adodc1.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&App.Path&"\train.mdb;PersistSecurityInfo=False"
EndSub
PrivateSubCommand2_Click()
DimbValidatePwdAsBoolean
Me.Command2.Enabled=False
Me.Text1.Locked=False
Me.Text2.Locked=False
bValidatePwd=Me.CheckDataFields()
Me.Adodc1.CommandType=adCmdText'文本方式连接
strSql1="select*fromadminstrator"
Me.Adodc1.RecordSource=strSql1
Me.Adodc1.Refresh
Me.Adodc1.Recordset.AddNew
IfbValidatePwd=TrueThen
Me.Adodc1.Recordset.Fields(0).Value=Trim(Me.Text1.Text)
Me.Adodc1.Recordset.Fields
(1).Value=Trim(Me.Text2.Text)
Me.Adodc1.Recordset.Update
MsgBox"创建成功"
Else
MsgBox"输入有误!
",vbExclamation+vbOKOnly,"提示"
EndIf
Me.Command2.Enabled=True
EndSub
PublicFunctionCheckDataFields()AsBoolean
DimxAsString
DimbConnectionAsBoolean
bConnection=traindata.ConnectionDB
Calltraindata.rs1.Open("select管理员账号fromadminstratorwhere管理员账号='"&Me.Text1.Text&"'",traindata.con,adOpenDynamic,adLockBatchOptimistic,-1)
Ifrs1.EOF=FalseThen
MsgBox"管理员账号已存在"
CheckDataFields=False
rs1.Close
ExitFunction
EndIf
IfTrim(Me.Text1.Text)=""Then
MsgBox"管理员账号不能为空!
",vbExclamation+vbOKOnly,"提示信息:
"
CheckDataFields=False
rs1.Close
ExitFunction
EndIf
IfTrim(Me.Text2.Text)=""Then
MsgBox"管理员密码不能为空!
",vbExclamation+vbOKOnly,"提示信息:
"
CheckDataFields=False
rs1.Close
ExitFunction
EndIf
CheckDataFields=True
rs1.Close
EndFunction
(五)系统的实现
(要求抓图,并加以文字说明)
用户登录
显示全部车票信息
按车站检索所车票
按车次检索车票
订票
创建新管理员
显示管理员信息
(六)实习总结