数据库设计文档.docx
《数据库设计文档.docx》由会员分享,可在线阅读,更多相关《数据库设计文档.docx(15页珍藏版)》请在冰豆网上搜索。
![数据库设计文档.docx](https://file1.bdocx.com/fileroot1/2022-11/28/e31059fb-ff77-4849-a22b-5311bcaabc68/e31059fb-ff77-4849-a22b-5311bcaabc681.gif)
数据库设计文档
宁波工程学院
数据库课程设计报告
(2004—2005学年第一学期)
系(分院)电子技术系
专业班级计02-6
学生姓名陈林
指导教师彭其美
实习地点软件工程实验室
数据库设计文档
一、系统需求分析报告(数据流图、数据词典和功能分析)
系统应具有售票、查询、管理和维护等功能,系统管理员可以进行对车次的更改、票价的变动及调度功能,票价的修改可以通过修改运价来进行,车次调度可通过对发车时刻表的修改来进行,维护功能即可对表进行修改。
1、功能需求
经过分析后确定系统应具备以下功能:
(1)、售票功能
1销售车票
2预订车票
3退票
(2)、查询功能
1车次查询
2时刻表查询
3售票情况查询
(3)、调度功能
1运价修改
2车辆修改
3终点站修改
4车次修改
(4)、维护功能
1车票表修改
2预订车票表修改
3退票表修改
4密码修改
(5)、统计功能
1售票统计
2报表打印
2、数据流图
使用结构化分析方法,确定系统的数据主要是运价、车次、终点站名、发车时间和车票,对数据的操作主要有运价修改、车次修改、终点站修改、发车时间修改、售票及打印,可以确定系统的处理逻辑和流程,得到如下所示的系统数据流图。
3、数据字典:
经过分析可以得到以下数据流条目:
车次表=车辆编号+车型+座位数
终点站名表=站名+里程
运价表=车型+运价
发车时刻表=车次+车辆编号+站名+发车时间+检票口
已售车票表=票号+乘车日期+车次+站名+发车时间+票价+全半价+工号+退票否
预订车票表=预订号+乘车日期+车次+站名+发车时间+车型+票价+客户名称+订票数量
退票表=票号+退票时间+票价+应退款
售票员编号=工号+姓名
车辆编号=6{数字}6
车次=4{字符}5
车型=1{字符}8
座位数=2{数字}2
检票口=1{数字}2
站名=1{字符}10
里程=1{数字}5
运价=1{数字}6
发车时间={时间}
乘车日期={日期}
票号=7{数字}7
票价=1{数字}5
全半价=2{字符}2
退票否={T|F}
预订号=4{数字}4
客户名称=6{字符}20
订票数量=1{数字}2
退票时间={日期时间}
应退款=1{数字}5
工号=3{字符}3
姓名=4{字符}8
二、数据逻辑结构设计(E-R图、关系模式和数据库结构)
1、E—R图
主键:
外键:
2、关系模式
车辆(车辆编号,车型,座位数)
目标站名(站名,里程)
发车时刻表(车次,站名,车辆编号,发车时间,检票口)途径(车次,站名)
车票(票号,乘车日期,车次,站名,票价,全半价,座位号,工号,退票否)
预订(预订号,车次,站名,乘车日期,顾客名称,票数)
退票(票号,退票时间,票价,应退款)
售票员(工号,姓名)
运价(车型,价格)
3、数据库结构
车辆表:
字段名
类型
长度
小数点
允许空
主/外键
车辆编号
Int
4
主
车型
Varchar
8
座位数
smallInt
2
目标站名:
字段名
类型
长度
小数点
允许空
主/外键
站名
Varchar
10
主
里程
Int
4
发车时刻表:
字段名
类型
长度
小数点
允许空
主/外键
车次
Varchar
5
主
站名
Varchar
10
外
车辆编号
Int
4
外
发车时间
Datetime
8
检票口
smallInt
2
途径表:
字段名
类型
长度
小数点
允许空
主/外键
车次
Varchar
5
主
站名
Varchar
10
外
车票表:
字段名
类型
长度
小数点
允许空
主/外键
票号
Int
4
主
乘车日期
Datetime
8
车次
Varchar
5
外
站名
Varchar
10
外
票价
Float
8
全半价
Char
2
座位号
smallInt
2
工号
Char
3
退票否
Char
1
预订表:
字段名
类型
长度
小数点
允许空
主/外键
预订号
Int
4
主
车次
Varchar
5
外
站名
Varchar
10
外
乘车日期
Datetime
8
顾客名称
Varchar
20
票数
smallInt
2
退票表:
字段名
类型
长度
小数点
允许空
主/外键
票号
Int
4
主
退票时间
Datetime
8
票价
Float
8
应退款
Float
8
售票员表:
字段名
类型
长度
小数点
允许空
主/外键
工号
Char
3
主
姓名
Char
8
运价表:
字段名
类型
长度
小数点
允许空
主/外键
车型
Varchar
8
主
价格
Float
8
三、软件结构设计(画出系统软件结构图)
四、程序模块设计与调试(设计和调试各程序模块,提交主要的程序段)
用户登入用户名和密码校对:
PrivateSubCmdok_Click()
Dimusername1AsString,username2AsString
username1=Text1.Text
IfOption1.ValueThen
SetText3.DataSource=Adodc1
Text3.DataField="口令"
Adodc1.Recordset.MoveFirst
Ifusername1<>""Then
username2="用户名='"&username1&"'"
Adodc1.Recordset.Findusername2
IfAdodc1.Recordset.EOFThen
MsgBox"用户名错误请重输",16,"错误"
Else
IfText2.Text<>Text3.TextThen
MsgBox"密码错误请重输",16,"错误"
Text2.Text=""
Else
MDIForm1.Show
Form1.Hide
EndIf
EndIf
EndIf
Else
IfOption2.ValueThen
SetText3.DataSource=Adodc2
Text3.DataField="口令"
Adodc2.Recordset.MoveFirst
Ifusername1<>""Then
username2="工号='"&username1&"'"
Adodc2.Recordset.Findusername2
IfAdodc2.Recordset.EOFThen
MsgBox"用户名错误请重输",16,"错误"
Else
IfText2.Text<>Text3.TextThen
MsgBox"密码错误请重输",16,"错误"
Text2.Text=""
Else
MDIForm1.Show
Form1.Hide
EndIf
EndIf
EndIf
EndIf
EndIf
EndSub
当选中车次显示当前座位号和剩余票数,及拒售离开车只有五钟的车票
PrivateSubDataGrid1_Click()
DimccAsString,sumAsInteger
sum=0
Adodc3.Recordset.MoveFirst
Adodc4.Recordset.MoveFirst
Adodc6.Recordset.MoveFirst
Adodc7.Recordset.MoveFirst
Adodc8.Recordset.MoveFirst
IfMonth(Date)=Combo2.TextAndDay(Date)=Combo3.TextThen
If(Hour(Text19.Text)-Hour(Now))*60+Minute(Text19.Text)-Minute(Now)<5Then
MsgBox"已接近开车,停止售票",64,"错误"
Cmdok.Visible=False
Else
Cmdok.Visible=True
EndIf
Else
Cmdok.Visible=True
EndIf
cc="车型='"&Text5.Text&"'"
Adodc3.Recordset.Findcc
cc="站名='"&Text6.Text&"'"
Adodc4.Recordset.Findcc
IfCombo4.Text="全"Then
Text2.Text=Int(Val(Text7.Text)*Val(Text8.Text)+0.5)
Else
Text2.Text=Int(Val(Text7.Text)*Val(Text8.Text)/2+0.5)
EndIf
Text2.Refresh
WhileNotAdodc8.Recordset.EOF
IfYear(Text12)=Year(Date)AndMonth(Text12)=Combo2.TextAndDay(Text12)=Combo3.TextAndText13.Text=Text9.TextAndText25.Text="F"Then
sum=sum+1
EndIf
Adodc8.Recordset.MoveNext
Wend
Text3.Text=sum+1
Adodc8.Recordset.MoveFirst
WhileNotAdodc8.Recordset.EOF
IfYear(Text12)=Year(Date)AndMonth(Text12)=Combo2.TextAndDay(Text12)=Combo3.TextAndText13.Text=Text9.TextAndText25.Text="T"Then
Text3.Text=Text17.Text
Adodc8.Recordset.MoveLast
flag="T"
Else
Adodc8.Recordset.MoveNext
EndIf
Wend
WhileNotAdodc9.Recordset.EOF
IfYear(Text22.Text)=Year(Date)AndMonth(Text22.Text)=Combo2.TextAndDay(Text22.Text)=Combo3.TextAndText23.Text=Text9.TextThen
sum=sum+Val(Text24.Text)
EndIf
Adodc9.Recordset.MoveNext
Wend
cc="车次='"&Text9.Text&"'"
Adodc7.Recordset.Findcc
cc="车辆编号='"&Text11.Text&"'"
Adodc6.Recordset.Findcc
Text4.Text=Val(Text10.Text)-sum
Text4.Refresh
EndSub
退票时当输入票号后算出应退款
PrivateSubText1_LostFocus()
DimccAsString
Adodc1.Recordset.MoveFirst
Adodc2.Recordset.MoveFirst
cc="票号='"&Text1.Text&"'"
Adodc1.Recordset.Findcc
Text3.Text=Text6.Text
Text2.Text=Now
cc="车次='"&Text7.Text&"'"
Adodc2.Recordset.Findcc
IfNotAdodc2.Recordset.EOFThen
IfMonth(Text5.Text)>Month(Text2.Text)Then
Text4.Text=Int(Val(Text6.Text)*0.1+0.5)
Else
IfMonth(Text5.Text)=Month(Text2.Text)Then
IfDay(Text5.Text)>Day(Text2.Text)Then
Text4.Text=Val(Text6.Text)-Int(Val(Text6.Text)*0.1+0.5)
Else
IfDay(Text5.Text)=Day(Text2.Text)Then
If(Hour(Text9.Text)-Hour(Text2.Text))*60+Minute(Text9.Text)-Minute(Text2.Text)>=120Then
Text4.Text=Val(Text6.Text)-Int(Val(Text6.Text)*0.1+0.5)
Else
If(Hour(Text9.Text)-Hour(Text2.Text))*60+Minute(Text9.Text)-Minute(Text2.Text)>=60Then
Text4.Text=Val(Text6.Text)-Int(Val(Text6.Text)*0.2+1)
Else
If(Hour(Text9.Text)-Hour(Text2.Text))*60+Minute(Text9.Text)-Minute(Text2.Text)<5Then
MsgBox"接近发车不能退票",16,"错误"
Form5.Hide
Else
Text4.Text=Int(Val(Text6.Text)*0.3+1)
EndIf
EndIf
EndIf
Else
MsgBox"车票过期不能退",16,"错误"
Form5.Hide
EndIf
EndIf
Else
MsgBox"车票过期不能退",16,"错误"
Form5.Hide
EndIf
EndIf
Else
MsgBox"没有该票",16,"错误"
EndIf
EndSub
五、软件使用说明书
首先通过登录界面进行登录,登录的身份分为管理员和售票员,管理员的用户名默认为:
Administrator,密码为:
123456;售票员的用户名为自己的工号,初始密码也为:
123456。
密码的修改可以通过登录后选择文件菜单→口令修改,进行密码的修改。
售票员登录后能使用的菜单有:
文件、售票、查询、统计。
1、售票菜单下有:
销售车票、预订车票、退票等功能,退票时只需输入票号即可退票。
2、查询菜单下有:
车次查询、时刻表查询、售票情况查询。
车次查询可进行浏览和输入车次查询,选中某个车次后可查看它的途径站点。
时刻表查询按时间的先后进行排列,一秒钟记录自动下移一条,同时显示该车的途径站点。
售票情况查询按站名对每班车进行排列,每一秒钟移动一条记录,同时显示总的票数和剩余的票数。
3、统计菜单有:
售票统计和报表打印。
售票统计可以按车次进行统计,列出每一个次车所卖出的票数;也可以按售票员的工号进行统计,列出每位售票员卖出的票数。
管理员登录后能使用的菜单有:
文件、查询、调度、维护、统计。
1、文件菜单、查询菜单及统计菜单与售票员的相同
2、调度菜单下有:
运价修改、车辆修改、终点站修改、车次修改。
运价修改可以修改运输的单价。
车辆修改可以进行对车辆进行添加、修改、删除。
终点站修改可以进行对终点站的添加、修改、删除。
车次修改可以进行添加、修改、删除车次实现调度。
3、维护菜单下有:
车票表修改、预订车票表修改、退票表修改、密码修改。
车票表修改、预订车票表修改和退票表修改都具有添加、删除、更新等功能。
密码修改可以对所有的售票员的口令进行修改、和删除,同时也可以进行添加,点击添加后是对售票员表添加售票员的工号和姓名,同时在售票员口令表里生成售票员的工号与初始密码123456。