一可行性研究
1.概述
用户:某省市乃至全国
开发单位:浙江海洋学院D02计算机(2)班 何升高
系统名称:火车售票系统
2.系统目标
在2005年5月1日之前,开发一个火车售票系统,实现对火车售票自动化,轻松方便大家的交通运输。用户可以在任何一个站点购买任何两站间的火车票,可以大大减轻买票的烦索步骤,同时也可以订票.
3.存在的问题
范围太大,开发人数太少,开发人员技术有限
4.建立新系统
根据系统的长期目标,以及现行系统存在的主要问题,建立系统可分以下几步实现。
(1)对新系统实现的硬件条件
显然该系统只是一个软件系统,它若要真正放于现实,则尚须相应的硬件支持,如打印机等.
(2)新系统可能产生的影响
要对火车站售票工作人员进行此系统软件的使用,使其逐步适应计算机化的要求。
(3)效益分析
该系统提高了大家买票的方便度,全国各地的客户可以在任何火车站购买到任何两地间的火车票,方便了大家的生活.
5.结论
由于该系统在国内外是一个技术上成熟的系统,并且有工程技术方面的保证,以及负责人采取的积极态度,因此该系统是可行的.
二系统开发计划
1.概述
(1)系统开发的目标
在一个月内建立一个完善的系统,以实现工程项目管理计算机化。
(2)系统开发的基本方针
以浙江海洋学院D02计算(2)班 何升高同学开发为主
2.实施计划
(1)工作进度
阶段 | 人数 | 工作量/人日 | 时间/日 | 起止时间 |
可行性研究 | 1 | 2 | 2 | 2005.3.11~2005.3.13 |
系统分析 | 1 | 7 | 7 | 2005.3.14~2005.3.21 |
系统设计 | 1 | 5 | 5 | 2005.3.22~2004.3.27 |
程序设计 | 1 | 5 | 5 | 2005.3.28~2005.4.2 |
系统测试 | 1 | 2 | 2 | 2005.4.3~2005.4.5 |
系统试运行 | 1 | 2 | 2 | 2005.4.6~2005.4.8 |
验收 | 1 | 3 | 3 | 2005.4.9~2005.4.12 |
三需求分析
1.概述
(1)系统分析的原理
分析目前火车的状况,及客户的需求,确定开发的目的和目标。
(2)系统分析方法
采用结构化分析方法,建立新的系统的逻辑模型,这个逻辑模型将尽可能避免计算机的专业术语,以便于客户和开发者双方人员共同讨论。
2.系统功能
第一阶段建立的工程项目管理系统由一个登录系统组成,但它分两部分登录,一个是管理员登录,一个是售票员登录,因为他们两个登录后虽然是一样的界面,但会有不一样的功能.
火车售票系统的第一层数据流程图如图1所示。
1
第二阶段: 进入火车售票系统后分为两个父系统
(1)管理员系统
该父系统又包括以下三个子系统:
1)。删除车次系统
2)。修改车次系统
3)。增加车次系统
图2
(2)售票员系统
该系统又包括以下四个子系统
1)。购票系统
2)。订票系统
3)。退票系统
4)。订票结款系统
(1)删除车次系统
其数据流程图如图1—1所示
图1—1
(2)增加车次系统
其数据流程图如图1—2所示
(4) 售票员信息修改系统
该系统分为三个子系统:
1) 增加售票员系统
其数据流程图如下所示:
- 系统需求分析报告(数据流图、数据词典和功能分析)
系统应具有售票、查询、管理和维护等功能,系统管理员可以进行对车次的更改、票价的变动及调度功能,票价的修改可以通过修改运价来进行,车次调度可通过对发车时刻表的修改来进行,维护功能即可对表进行修改。
-
- 功能需求
经过分析后确定系统应具备以下功能:
(1)、售票功能
- 销售车票
- 预订车票
- 退票
(2)、查询功能
- 车次查询
- 时刻表查询
- 售票情况查询
(3)、调度功能
- 运价修改
- 车辆修改
- 终点站修改
- 车次修改
(4)、维护功能
- 车票表修改
- 预订车票表修改
- 退票表修改
- 密码修改
(5)、统计功能
- 售票统计
- 报表打印
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 |
- 软件结构设计(画出系统软件结构图)
- 程序模块设计与调试(设计和调试各程序模块,提交主要的程序段)
用户登入用户名和密码校对:
Private Sub Cmdok_Click()
Dim username1 As String, username2 As String
username1 = Text1.Text
If Option1.Value Then
Set Text3.DataSource = Adodc1
Text3.DataField = "口令"
Adodc1.Recordset.MoveFirst
If username1 <> "" Then
username2 = "用户名='" & username1 & "'"
Adodc1.Recordset.Find username2
If Adodc1.Recordset.EOF Then
MsgBox "用户名错误请重输", 16, "错误"
Else
If Text2.Text <> Text3.Text Then
MsgBox "密码错误请重输", 16, "错误"
Text2.Text = ""
Else
MDIForm1.Show
Form1.Hide
End If
End If
End If
Else
If Option2.Value Then
Set Text3.DataSource = Adodc2
Text3.DataField = "口令"
Adodc2.Recordset.MoveFirst
If username1 <> "" Then
username2 = "工号='" & username1 & "'"
Adodc2.Recordset.Find username2
If Adodc2.Recordset.EOF Then
MsgBox "用户名错误请重输", 16, "错误"
Else
If Text2.Text <> Text3.Text Then
MsgBox "密码错误请重输", 16, "错误"
Text2.Text = ""
Else
MDIForm1.Show
Form1.Hide
End If
End If
End If
End If
End If
End Sub
当选中车次显示当前座位号和剩余票数,及拒售离开车只有五钟的车票
Private Sub DataGrid1_Click()
Dim cc As String, sum As Integer
sum = 0
Adodc3.Recordset.MoveFirst
Adodc4.Recordset.MoveFirst
Adodc6.Recordset.MoveFirst
Adodc7.Recordset.MoveFirst
Adodc8.Recordset.MoveFirst
If Month(Date) = Combo2.Text And Day(Date) = Combo3.Text Then
If (Hour(Text19.Text) - Hour(Now)) * 60 + Minute(Text19.Text) - Minute(Now) < 5 Then
MsgBox "已接近开车,停止售票", 64, "错误"
Cmdok.Visible = False
Else
Cmdok.Visible = True
End If
Else
Cmdok.Visible = True
End If
cc = "车型='" & Text5.Text & "'"
Adodc3.Recordset.Find cc
cc = "站名='" & Text6.Text & "'"
Adodc4.Recordset.Find cc
If Combo4.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)
End If
Text2.Refresh
While Not Adodc8.Recordset.EOF
If Year(Text12) = Year(Date) And Month(Text12) = Combo2.Text And Day(Text12) = Combo3.Text And Text13.Text = Text9.Text And Text25.Text = "F" Then
sum = sum + 1
End If
Adodc8.Recordset.MoveNext
Wend
Text3.Text = sum + 1
Adodc8.Recordset.MoveFirst
While Not Adodc8.Recordset.EOF
If Year(Text12) = Year(Date) And Month(Text12) = Combo2.Text And Day(Text12) = Combo3.Text And Text13.Text = Text9.Text And Text25.Text = "T" Then
Text3.Text = Text17.Text
Adodc8.Recordset.MoveLast
flag = "T"
Else
Adodc8.Recordset.MoveNext
End If
Wend
While Not Adodc9.Recordset.EOF
If Year(Text22.Text) = Year(Date) And Month(Text22.Text) = Combo2.Text And Day(Text22.Text) = Combo3.Text And Text23.Text = Text9.Text Then
sum = sum + Val(Text24.Text)
End If
Adodc9.Recordset.MoveNext
Wend
cc = "车次='" & Text9.Text & "'"
Adodc7.Recordset.Find cc
cc = " 车辆编号='" & Text11.Text & "'"
Adodc6.Recordset.Find cc
Text4.Text = Val(Text10.Text) - sum
Text4.Refresh
End Sub
退票时当输入票号后算出应退款
Private Sub Text1_LostFocus()
Dim cc As String
Adodc1.Recordset.MoveFirst
Adodc2.Recordset.MoveFirst
cc = "票号='" & Text1.Text & "'"
Adodc1.Recordset.Find cc
Text3.Text = Text6.Text
Text2.Text = Now
cc = "车次='" & Text7.Text & "'"
Adodc2.Recordset.Find cc
If Not Adodc2.Recordset.EOF Then
If Month(Text5.Text) > Month(Text2.Text) Then
Text4.Text = Int(Val(Text6.Text) * 0.1 + 0.5)
Else
If Month(Text5.Text) = Month(Text2.Text) Then
If Day(Text5.Text) > Day(Text2.Text) Then
Text4.Text = Val(Text6.Text) - Int(Val(Text6.Text) * 0.1 + 0.5)
Else
If Day(Text5.Text) = Day(Text2.Text) Then
If (Hour(Text9.Text) - Hour(Text2.Text)) * 60 + Minute(Text9.Text) - Minute(Text2.Text) >= 120 Then
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) >= 60 Then
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) < 5 Then
MsgBox "接近发车不能退票", 16, "错误"
Form5.Hide
Else
Text4.Text = Int(Val(Text6.Text) * 0.3 + 1)
End If
End If
End If
Else
MsgBox "车票过期不能退", 16, "错误"
Form5.Hide
End If
End If
Else
MsgBox "车票过期不能退", 16, "错误"
Form5.Hide
End If
End If
Else
MsgBox "没有该票", 16, "错误"
End If
End Sub
- 软件使用说明书
首先通过登录界面进行登录,登录的身份分为管理员和售票员,管理员的用户名默认为:Administrator,密码为:123456;售票员的用户名为自己的工号,初始密码也为:123456。密码的修改可以通过登录后选择文件菜单→口令修改,进行密码的修改。
售票员登录后能使用的菜单有:文件、售票、查询、统计。
-
- 售票菜单下有:销售车票、预订车票、退票等功能,退票时只需输入票号即可退票。
- 查询菜单下有:车次查询、时刻表查询、售票情况查询。车次查询可进行浏览和输入车次查询,选中某个车次后可查看它的途径站点。时刻表查询按时间的先后进行排列,一秒钟记录自动下移一条,同时显示该车的途径站点。售票情况查询按站名对每班车进行排列,每一秒钟移动一条记录,同时显示总的票数和剩余的票数。
- 统计菜单有:售票统计和报表打印。售票统计可以按车次进行统计,列出每一个次车所卖出的票数;也可以按售票员的工号进行统计,列出每位售票员卖出的票数。
管理员登录后能使用的菜单有:文件、查询、调度、维护、统计。
-
- 文件菜单、查询菜单及统计菜单与售票员的相同
- 调度菜单下有:运价修改、车辆修改、终点站修改、车次修改。运价修改可以修改运输的单价。车辆修改可以进行对车辆进行添加、修改、删除。终点站修改可以进行对终点站的添加、修改、删除。车次修改可以进行添加、修改、删除车次实现调度。
- 维护菜单下有:车票表修改、预订车票表修改、退票表修改、密码修改。车票表修改、预订车票表修改和退票表修改都具有添加、删除、更新等功能。密码修改可以对所有的售票员的口令进行修改、和删除,同时也可以进行添加,点击添加后是对售票员表添加售票员的工号和姓名,同时在售票员口令表里生成售票员的工号与初始密码123456。