沈阳航空航天大学课程设计任务书学院:机电工程学院专业:机械设计制造及其自动化班级:94060106 学号:2009040601204 题目:简单的汽车站售票系统一、课程设计时间2011年3月14日~20日(第二周),共计一周。
二、课程设计内容假设每天“沈阳→植物园”有4个班次的汽车,具体的数据如下:班次发车时间载客量已售票数1 06:40 50 02 09:30 40 03 13:00 40 04 16:00 40 0数据保存在文本文件或Access数据库中,请你为售票员开发一个程序,实现每天的“沈阳→植物园”的售票、退票等业务。
要求:售票时按旅客要求选择班次,如果某个班次已过了发车时间,则该班次今天不再售票,如果某个班次的票已售完,则也不能再售票。
用户界面中的菜单至少应包括“售票”、“退票”、“显示当前售票情况”、“退出”4项。
三、课程设计要求程序质量:✧贯彻事件驱动的程序设计思想。
✧用户界面友好,功能明确,操作方便;可以增加其它功能或修饰。
✧代码应适当缩进,并给出必要的注释,以增强程序的可读性。
课程设计说明书:✧课设结束后,上交课程设计说明书和源程序。
课程设计说明书的内容参见提供的模板。
四、指导教师和学生签字指导教师:________ 学生签名:________五、成绩六、教师评语目录需求分析 (4)设计分析 (4)技术要点 (6)主要界面截图 (7)总结 (9)完整的源程序 (10)参考文献 (15)需求分析介于乘客买票十分麻烦,需要开发一套自动的售票系统,实现乘客自主的买票,退票,查询,为乘客创造方便。
设计分析(1)概述:本次设计涉及到数据库系统,SQL查询语言,ADO数据控件技术,实现了用户买票,退票,售票查询等功能,并且在售票界面,根据时间判断车次是否已经发车,且在查询系统中可以显示售票情况。
(2)总体设计:汽车站售票系统应该有一个主界面,在主界面下,应该有售票界面,退票界面和查询界面。
(3)详细设计:技术要点程序中用到了Access数据库知识,SQL查询语言,ADO数据控件的使用。
例如:Adodc1.RecordSource = "select 班次, 发车时间, 载客量, 已售票数, 载客量-已售票数 as 剩余票数 from 车次信息",就运用到了SQL查询语言。
Public Sub dysjy(Adodc1 As Adodc)Adodc1.ConnectionString ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path &"\mydata.mdb;Persist Security Info=False"mandType = adCmdTextAdodc1.RecordSource = "select * from 车次信息"End Sub运用到了就是ADO控件。
1关于数据库的连接①选择数据源连接方式。
鼠标右键单击ADO数据控件,选择弹出菜单中“ADODC属性”命令,打开控件“属性页”对话框,使用方式是“使用连接字符串”。
②选择数据库类型。
单击“生成”按钮,将数据连接属性设置为Microsoft Jet 4.0 OLE DB Provider,才能连接Access数据库。
③指定数据库文件名。
在选择了OLE DB提供者后,单击“下一步”按钮或选择“连接”按钮,指定数据库文件名。
④指定记录源。
2 SQL语句的应用在SQL中用于数据查询的语句是SELECT语句。
SELECT语句常用的语法形式为:SELECT 目标表达式列表 FROM 表名[WHERE 查询条件]例如我的程序中Adodc1.RecordSource = "select * from 车次信息"就应用到了SELECT语句。
主要界面截图图1汽车售票系统主界面图2 售票界面图3 退票界面图4 当前售票情况界面总结经过了为期一周的VB课设,使我懂得了很多。
以前讲课的时候,很多东西都是老师演示给我们看,那个时候总是感觉很简单,老师轻轻松松几步,程序就出来了,所要求的功能就实现了,所以听课的时候就马马虎虎,认为VB很简单。
我的课设题目是设计一个简单的售票系统,看了以后感觉脑子里没有一点头绪,所以课设的第一天仅仅做了做界面,程序是一点都没有编出来。
回到寝室以后,仔细的看了看教材上关于数据库方面的,才慢慢的有了一些思路,尝试着去编了一些程序。
然后就试着运行,发现有错误的地方就仔细地看看书上关于这方面是怎么说的,程序应该怎么编才是正确的。
有些地方实在不明白,大家就在一起探讨一下,通过同学之间的交流,以前不明白的地方,现在都已经能掌握了。
经过了一个星期的努力,我的程序终于编完了,基本要求的功能都具备了。
看着自己花费一星期时间做的程序,感觉心里挺高兴的,努力终会有收获的。
这次的课设使我对数据库这方面知识有了更深一层次的理解,更使我理解到“纸上得来终觉浅,绝知此事要躬行”。
凡是只看别人做,觉得挺简单的,但是到我们自己做的时候才发现,其实这里面也有很深的学问,并非表面上看上去那么简单。
这次VB课设,使我认识到的最深的就是这一点。
完整的源程序Public myfrm As frmMainSub Main()'禁止同时打开多个程序If App.PrevInstance = True ThenMsgBox App.EXEName & "已经运行", vbInformation, "" EndEnd IfSet myfrm = New frmMainLoad myfrmmyfrm.ShowEnd SubPublic Sub dysjy(Adodc1 As Adodc)Adodc1.ConnectionString ="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\mydata.mdb;Persist Security Info=False"mandType = adCmdTextAdodc1.RecordSource = "select * from 车次信息"End SubPrivate Sub Command1_Click()Me.HidefrmSP.ShowEnd SubPrivate Sub Command2_Click()Me.HidefrmTP.ShowEnd SubPrivate Sub Command3_Click()Me.HidefrmSPQK.ShowEnd SubPrivate Sub Command4_Click()EndEnd SubPrivate Sub Combo1_Click()Adodc1.RecordSource = "select * from 车次信息 where 班次='" & Combo1.Text & "'"Adodc1.RefreshFor i = 0 To Adodc1.Recordset.Fields.Count - 1Text1(i).DataField = Adodc1.Recordset(i).NameNext iText2.SetFocusEnd SubPrivate Sub Command1_Click()If Combo1.ListIndex = -1 ThenMsgBox "请先选择班次", vbInformation, ""Combo1.SetFocusElseIf DateDiff("s", Time, CDate(Text1(1).Text)) <= 0 Then MsgBox "该班次已经发车,请选择其他班次", vbInformation, "提示"Combo1.SetFocusElseIf Val(Text2.Text) > (Val(Text1(2).Text) -Val(Text1(3).Text)) And (Val(Text1(2).Text) <> Val(Text1(3).Text)) Then MsgBox "售票数量不能大于当前剩余票数", vbInformation, "提示" Text2.Text = ""Text2.SetFocusElseIf Val(Text2.Text) > (Val(Text1(2).Text) -Val(Text1(3).Text)) And (Val(Text1(2).Text) = Val(Text1(3).Text)) Then MsgBox "该班次车票已经全部售完,请选择其他班次"ElseAdodc1.Recordset("已售票数").Value =Adodc1.Recordset("已售票数").Value + Val(Text2.Text)Adodc1.Recordset.UpdateMsgBox "购票成功", vbInformation, ""End IfEnd IfEnd IfEnd SubPrivate Sub Command2_Click()Me.HidefrmMain.ShowEnd SubPrivate Sub Form_Load()dysjy Adodc1Set DataGrid1.DataSource = Adodc1 '绑定到网格For i = 0 To Adodc1.Recordset.Fields.Count - 1Set Text1(i).DataSource = Adodc1 '连接数据Next iFor j = 1 To Adodc1.Recordset.RecordCountCombo1.AddItem Adodc1.Recordset("班次").ValueAdodc1.Recordset.MoveNext '执行下一条Next jEnd SubPrivate Sub Form_Unload(Cancel As Integer)Command2_ClickEnd SubPrivate Sub Combo1_Click()Adodc1.RecordSource = "select 班次, 发车时间, 载客量, 已售票数, 载客量-已售票数 as 剩余票数 from 车次信息 where 班次='" &Combo1.Text & "'"Adodc1.RefreshEnd SubPrivate Sub Command1_Click()Adodc1.RecordSource = "select 班次, 发车时间, 载客量, 已售票数, 载客量-已售票数 as 剩余票数 from 车次信息"Adodc1.RefreshEnd SubPrivate Sub Command2_Click()Me.HidefrmMain.ShowEnd SubPrivate Sub Form_Load()dysjy Adodc1Adodc1.RecordSource = "select 班次, 发车时间, 载客量, 已售票数, 载客量-已售票数 as 剩余票数 from 车次信息"Adodc1.RefreshSet DataGrid1.DataSource = Adodc1For j = 1 To Adodc1.Recordset.RecordCountCombo1.AddItem Adodc1.Recordset("班次").ValueAdodc1.Recordset.MoveNextNext jEnd SubPrivate Sub Form_Unload(Cancel As Integer)Command2_ClickEnd SubPrivate Sub Combo1_Click()Adodc1.RecordSource = "select * from 车次信息 where 班次='" & Combo1.Text & "'"Adodc1.RefreshFor i = 0 To Adodc1.Recordset.Fields.Count - 1Text1(i).DataField = Adodc1.Recordset(i).NameNext iText2.SetFocusEnd SubPrivate Sub Command1_Click()If Combo1.ListIndex = -1 ThenMsgBox "请先选择班次", vbInformation, ""Combo1.SetFocusElseIf Val(Text2.Text) > Text1(3).Text ThenMsgBox "退票数量大于已售票数,请确认班次是否正确", vbCritical, "错误"Text2.SetFocusElseAdodc1.Recordset("已售票数") = Adodc1.Recordset("已售票数") - Val(Text2.Text)Adodc1.Recordset.UpdateMsgBox "退票成功", vbInformation, ""Text2.Text = ""End IfEnd IfEnd SubPrivate Sub Command2_Click()Me.HidefrmMain.ShowEnd SubPrivate Sub Form_Load()dysjy Adodc1Set DataGrid1.DataSource = Adodc1For i = 0 To Adodc1.Recordset.Fields.Count - 1 Set Text1(i).DataSource = Adodc1Next iFor j = 1 To Adodc1.Recordset.RecordCountCombo1.AddItem Adodc1.Recordset("班次").Value Adodc1.Recordset.MoveNextNext jEnd SubPrivate Sub Form_Unload(Cancel As Integer) Command2_ClickEnd Sub参考文献[1] 刘瑞新《Visual Basic程序设计教程》机械工业出版社,2003[2] 龚沛曾《Visual Basic程序设计教程》高等教育出版社,2007。