VB汽车车票管理系统课程设计报告书_第1页
VB汽车车票管理系统课程设计报告书_第2页
VB汽车车票管理系统课程设计报告书_第3页
VB汽车车票管理系统课程设计报告书_第4页
VB汽车车票管理系统课程设计报告书_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、河北联合大学2011-2012第2学期 软件设计基础-vb课程设计报告设计名称: 长途汽车车票管理系统 姓 名: 杨漫 学 号:201114010206 专业班级: 材料化学 2班 学 院: 材料科学与工程学院 设计时间: 2012年6月 设计地点: 河北联合大学 成绩:指导教师评语: 指导教师签字: 年 月 日软件设计基础-vb课程设计报告 第 19 页,共 19 页目 录1.课程设计目的2.课程设计任务与要求3.课程设计说明书4.课程设计成果5.程序调试过程6.设计问题的不足和改进方案7.课程设计心得8.附录9.参考文献1课程设计目的软件设计基础-vb课程设计是这门课程的实践性教学环节之一

2、,本次设计结合实际应用的要求,使课程设计既覆盖vb的知识点,又接近工程实际需要。目的是通过课程设计的综合训练,培养学生实际分析问题、解决问题的能力,以及编程和动手能力,最终目标是通过课程设计这种形式,帮助学生系统掌握vb这门课程的主要内容,养成良好的编程习惯,更好的完成教学任务。2课程设计任务与要求:要求:本次课程设计利用软件设计基础-vb课程中所学到的编程知识和编程技巧,完成具有一定难度和工作量的程序设计题目,帮助学生掌握编程、调试的基本技能,独立完成所布置的任务。任务:一车站每天有n个发车班次,每个班次都有一班次号(1、2、3n),固定的发车时间,固定的路线(起始站、终点站),大致的行车时

3、间,固定的额定载客量。如车票管理系统应具有查询、浏览、数据维护和数据统计的功能,因考虑到本系统的安全性,当登陆时,可分为高级管理员和普通管理员。高级管理员可以对系统进行维护,而普通管理员只能查询有关信息。经过分析后确定系统应具备以下功能:(1)、查询功能按班次查询按终点站查询(2)、售票功能 销售车票 退票(3)、维护功能 修改 新增 删除3课程设计说明书数据流程图使用结构化分析方法,确定系统的数据主要是班次、类型、起点站、终点站、发车时间、到达时间、行车时间、额定载量、已定票人数、票价、当前状态,对数据的操作主要有修改表中的各个字段以及新增、删除等功能,可以确定系统的处理逻辑和流程,得到如下

4、所示的系统数据流图: 车票管理系统查询浏览数据维护按班次终点站所有班次指定班次新增修改删除售票退票后台数据库设计数据库设计过程分析与每张数据表的简介:在mcrosoft office access 2003中建立名为“车票管理”的数据库其中共包含两个表。车票表和用户管理信息表。车票表包含如下字段:在本表中班次为主键 字段名称 数据类型 长度说明班次文本4类型 文本4起点站文本4终点站文本4发车时间文本8到达时间文本8行车时间文本10额定载量数字3已定票人数数字3票价 数字3当前状态文本10用户管理信息表中包含如下字段:用户名为主键字段名称数据类型长度 说明用户权限文本10用户名文本10密码 文

5、本10用户权限的内容为两项:高级管理员和普通管理员。前台应用程序设计窗体模块的划分,操作流程图,连接数据库的设置, 各种操作的实现方法。第一个窗体form1为登陆界面:在本窗体中需要对登陆用户进行限制,当为高级管理员时,可以对以下窗体中的数据进行维护,否则只能对数据进行查询。需输入用户名、密码和选择用户权限。在设计时,相同的用户名只允许登陆三次,若密码错误,将不能登录系统。因用户权限考虑到选择,所以将用户权限设置为组合框。为使主窗体更加美观,所以本程序为窗体的标题设置为滚动。因本窗体中的用户名、密码、用户权限和“车票管理”数据库中的“用户管理信息“表中的字段一致,因将其绑定。在form1中添加

6、ado控件(”工程”“部件”,选择microsoft ado data control 6.0(ole))。(1)选择数据库连接方式鼠标右键单击ado数据控件,在弹出的菜单中选自”adodc属性”, 打开”属性页”对话框,选择”使用连接字符串“。(2)选择数据库类型单击”生成“按钮,选择”microsoft jet 4.0 ole db provider“。(3)指定数据库文件名单击”连接“选项卡,选择”车票管理.mdb“,单击”确定“,测试连接。(4)指定记录源在“记录源“选项卡中,在记录源中的”命令类型“下拉列表指定用于获取记录源的命令类型。在列表中选择”2adcomtable“选项(表类

7、型)。”表或存储工程名称“框指定具体可访问的记录源,本窗体中选择“用户管理信息表”(以后窗体中的数据源连接均用此方法,不再具体阐述)。在本窗体中有“确定“和”退出“两个命令按钮,当单击”确定“时,对输入的用户名、密码、用户权限进行检验,若输入正确则进入到form2窗体中进行操作,错误有相应的提示。单击”退出“,则结束本程序。对本窗体中的控件进行设置:label7的caption属性为:“欢迎进入车票管理系统” font属性为:楷体,加粗,初号。label5的caption属性为: “请输入用户名和密码:”label2的caption属性为:“用户名”label3的caption属性为:“密码”

8、label4的caption属性为:“温馨提示:登陆本系统,您只有三次机会,密码错误三次,您将不能登陆”label6的caption属性为“用户权限”label2、3、4、5、6的font属性为:楷体,加粗,四号。以上标签的forecolor属性都为:&h0000ff00& text1和text2的text属性为“”combo1的list属性为:“高级管理员、普通管理员” timer1的interval属性为50第二个窗体form2为查询浏览窗体本窗体中的查询包含两项:按班次查询和按终点站查询。浏览包含浏览所有班次的当前状态和浏览指定班次的当前状态。设计方法为在窗体中添加adodc控件和dat

9、agrid控件(”工程”“部件”,选择”microsoft)datagrid control 6.0(oledb)”),并将datagrid 控件的datasource属性设置为adodc1.在窗体的form load 事件中获取数据源。即设计数据源的连接方式、数据库类型、指定数据库名和记录源类型(8adcmdunknown)将其与adodc1绑定。按班次查询时,在文本框中输入要查询的的班次名,在“确定“按钮的单击事件中设定其记录源,将其结果显示在datagrid中。按终点站查询时,在文本框中输入要查询的终点站名,在“确定“ 按钮的单击事件中设定其记录源,将其结果显示在datagrid中。设计

10、浏览时,首先定义两个字符型变量,来存储班次的当前状态(“已发出“或”未发出“),再根据当前系统的时间来判断车次是否发出。因考虑到发车时间字段为文本型,要将其与当前系统时间比较,所以要先用cdata函数将其转换为日期型,再用hour 函数取出其小时,minute函数取出其分钟。根据比较结果将”已发出“或”未发出“填写到记录中的相应字段中,将其结果显示在datagrid 记录集中。当浏览指定班次的当前状态时,先用msgbox 弹出一个对话框,输入要查找的班次,再查找指定班次的当前状态,并将其结果显示在datagrid 记录集中。当单击“数据维护“按钮时,进入到form3窗体中。 当单击“返回系统“

11、按钮时,返回到 form1窗体中。本窗体需要的控件有:datagrid1的datasource属性为adodc1text1、text2、text3、text4的text属性为“”command1的caption属性为“数据维护”command2的caption属性为“返回系统”command3的caption属性为“确定”command4的caption属性为“确定”command5的caption属性为“浏览” command6的caption属性为“浏览查询” frame1的caption属性为“查询”label1的caption属性为“班次” frame2的caption属性为“查询”l

12、abel2的caption属性为“终点站” 第三个窗体form3为数据维护窗体本窗体中使用菜单来实现各项功能。选择“工具“”菜单编辑器“ 打开”菜单编辑器“对话框,输入标题(名称):新增(新增)、修改(修改)、删除(删除)、售票(售票)、退票(退票)、数据显示统计(数据显示统计)、返回(返回)。单击”确定“按钮。在窗体中添加adodc控件,并添加与车票表相对应的标签与文本框。设定adodc的数据源连接,并将窗体中对应的文本框的datasource 属性设置为adodc1, 将其datafield 属性设置为车票表中的相对应的字段名。1、 新增 本功能可以不定时的增加班次,当单击新增时,设置两个

13、命令按钮的visible 属性为true(窗体中设置为false),分别为确定和放弃。新增时,调用addnew方法。当单击“确定“是调用updata方法,当单击”放弃“时,调用uancelupdate方法。2、 修改 本功能是对各个字段的修改,在文本框中输入要修改的内容,单击修改按钮,调用update方法,可将修改内容更新到原表中。3、 删除 本功能可删除无用的班次信息,先输入要删除的班次号,然后再查找,在确定是否删除该班次,删除时,调用delete方法。同时也可将本班次从源表中删除。4、 售票 当单击售票时,首先输入要售票的班次,再查找出该班次,根据该班的发车时间和当前系统时间相比较,若发车

14、时间超过了当前系统时间,则提示“此班已发出”不能售票;若还没有超过当前系统时间,然后让输入将要售票的张数,同时还要将已定票人数加上售票张数,若结果超过了额定载量,也不能售票,并给出提示。;若都不满足以上两个条件,则可以售票,自动将已收票人数加上售票张数。(判断方法与form2中的判断浏览状态时相似,因为发车时间是文本型,所以要先将文本型的发车时间转换为时间型,再用hour函数取出其小时数,在用minute函数取出其分钟数,在于当前系统时间的小时与分钟进行比较以此来判断当前班次是否发出)5、 退票当单击退票时,以同样的方法来判断。首先输入要退票的班次,找到后,根据该班次的发车时间和当前系统时间相

15、比较,若发车时间超过了当前系统时间,则提示“此班已发出”不能退票;若还没有超过当前系统时间,则弹出对话框输入要退票的张数,再自动将已收票人数减此张数。(设置方法与售票相同)6、 返回 单击该按钮时,返回到form2窗体中。本窗体需要的控件有:label1.caption=“班次”label2.caption=”类型”label3.caption=”发车时间”label4.caption=”额定载量” label5.caption=”到达时间” label6.caption=”已定票人数”label7.caption=”起点站” label8.caption=”票价” label9.captio

16、n=”终点站” label10.caption=”行车时间”题上所有标签对应的文本框的datasource属性都为adodc1,且datafield属性与数据源“车票”表中的的各个字段项绑定。command1的caption属性为“确定”,visible属性为falsecommand2的caption属性为“放弃”visible属性为false5.程序调试过程登陆界面:因为该系统环境不是一般办公室环境,而是带有一定复杂性的商业环境,所以如进行操作错误,将会带来一定的经济损失,为了确保安全性,对进入本系统设置了密码,不知道密码的人是无权进入本系统,本系统的进入信息是有一个表来提供的。只有满足了该

17、表中的信息才能登陆到系统中。图(数据库中的用户管理信息表) 图(登录界面)当输入的用户名、密码、和用户权限都正确时,当用户权限为“高级管理员时”,则form2中的可用,否则不可用。且设定相同用户名一次只有三次登录机会,若三次密码都为错误,则该用户不能登录系统。如输入以上内容均正确,单击“确定”按钮则进入到下一窗体(form2)。窗体2中的查询功能包括两项:1、 按班次查询 单查询时,需要指定adodc1的数据源,一开始程序并没有运行出要查询的内容,原因是设定过数据源之后,还要使用 refresh方法进行刷新。之后运行出了正确结果。例:在文本框中输入班次为“1090”,则运行结果如下:2、按终点

18、站查询:例输入终点站为“上海”单击“确定”按钮,则运行结果如下:浏览所有班次的当前状态:一开始在数据库中设置的发车时间和到达时间均为日期/时间型,而表中也没有“当前状态”这个字段,设想先取出发车时间这个字段的值,再和当前系统时间比较,以次来判断班次是否发出,将“已发出”和“未发出”两个变量根据情况用as赋给“当前状态”,实际中表中不存在这个字段。但运行结果是出错,经分析后发现“发车时间”这个字段的值根本取不出来,于是尝试着换一种方法来设置,于是在车票表中新增了一个“当前状态”字段,将“发车时间”这个字段改为了文本型,可以取出其值,但还要与当前系统比较,所以用cdata函数将发车时间的文本型转换

19、为日期型,再用hour函数取出其小时数,用minute函数取出其分钟数,在与当前系统时间的小时数与分钟数进行比较,再根据比较结果将“已发出”和 “未发出”赋给“当前状态”。经过这一系列的调试,使得运行出了正确结果。例:当前系统时间是19:41,单击“浏览”按钮后,运行结果如下:浏览时,还可以浏览指定班次的当前状态(设置方法与以上浏览全部车次的当前状态的方法相同),只显示出班次,发车时间和当前状态三个字段。首先单击“浏览查询”按钮时,先弹出一个对话框,输入要浏览的班次号。单击“确定”按钮,即可显示出当前班次的当前状态。例:输入的班次号为:“k246”, 当前系统时间是19:41单击“确定”按钮,

20、出现如下运行结果:单击“数据维护”按钮,进入到数据维护窗体(form3)中,该窗体中包含了如下功能:单击“新增”时,所有的文本框变为空,同时,显示了“确定”和“放弃”两个按钮(一开始将这两个按钮的visible属性设置为了false),为文本框中输入了各项值后,单击“确定”按钮,可将输入的字段添加到源表中。若单击“放弃”按钮,则取消对其的新增功能即不将输入的内容添加到原表。当想要修改记录时:先在文本框中修改个字段的内容,然后单击“修改”按钮,会出现修改成功的消息框。如下所示:同时也会将修改结果回送到源表。当想要删除记录时,单击“删除”按钮,打开一个文本框让输入要删除的班次,例:输入“1132”

21、单击确定后该班次就会从源表中删除。当单击售票时,先会让输入要售票的班次号。例如输入“1090”如下所示:查找到该班次后,将其发车时间与当前系统时间进行比较,若比较结果是该班次已经发出,则有下提示:否则就让输入将要定票的张数:单击确定后,会再用该张数加上已定票人数,看其是否超过了该班次的额定载量若超过了,则有以下提示:若该班次既没有发出,定票的张数也没有超过额定载量,则已定票人数会自动加上售票的张数。退票与售票功能大致相同,这里不再具体阐述。经过以上的调试与测试,使整个系统的功能全部完成。6.设计问题的不足和改进方案可以为程序增添数据统计功能 如 用图形显示(售票人数统计)本窗体中的功能实现采用

22、菜单方式。选择“工具“”菜单编辑器“ 打开”菜单编辑器“对话框,输入标题(名称):直方图(直方图)、散点图(散点图)、折线图(折线图)、立体直方图(立体直方图),单击“确定”按钮。 首先定义一个子函数zbx(“工程”添加过程”),然后打开曾经建立的“biao.txt”文件,为了提高程序的通用性,采用动态数组存放数据,同时根据具体数值定义坐标系。设计思路是:从数据文件中读出一条记录,就增加一个数组元素存放当前数据。找出绘图数据中的最大值max ,根据该值设置scale方法中的参数,再根据文件中的记录数n 绘图。1、 直方图绘制直方图可用带参数bf的line语句来绘制。绘制过程是给出直方图中每个矩

23、形框的左下角和右上角的坐标,左下角坐标中的y=0,右上角坐标中y为绘图数据,矩形框的宽度可根据坐标系宽度和记录数计算得到。2、 散点图 绘制散点图可用circle语句来绘制。绘制过程是先算出散点图之间的宽度,再根据写入到b(i)中的已定票人数来决定点的高度。3、 折线图折线图是在绘制散点图的基础之上,将绘制的每个点之间用直线连接(line语句)4、 立体直方图绘制立体直方图是是在直方图的基础之上,利用直方图的宽度和坐标来出另外三点的坐标,并用line语句进行连接。7.课程设计心得经过这次的课程设计,让我从中学习了不少的知识,不仅单单学会了以前的理论知识和以前照着书上搬下来的程序,还让我学会了不

24、少我们教材以外的知识,对visual basic更加的了解,让我从中得到了不少收获。当然,这次系统设计也使我伤了不少的脑筋,特别是设置系统班次的当前状态,我整整一个下午都在设计这个小模块,可是它就是不出来,但又坐了下来重新研究我的程序,细心的一点一点的看,又经过老师的指导,终于把它研究出来,当它正确运行时,内心充满了高兴之情。通过这一系列使我明白, 以后作任何事情都要认真、细心,只有这样,才可能有成功的结果。另外,在这次的课程设计中,让我深深地体现到进行软件开发不是一件简单的事情,它需要设计者具有全面的专业知识、缜密的思维、严谨的工作态度以及较高的分析问题、解决问题的能力,而我在很多方面还有欠

25、缺。所以,我以后一定会更加努力的学习软件知识。最后,我要衷心感谢老师在我的设计过程中给予我的极大帮助,使我能够及时、顺利地完成此次的课程设计。8.附录一开始在数据库中设置的发车时间和到达时间均为日期/时间型,而表中也没有“当前状态”这个字段,设想先取出发车时间这个字段的值,再和当前系统时间比较,以次来判断班次是否发出,将“已发出”和“未发出”两个变量根据情况用as赋给“当前状态”,实际中表中不存在这个字段。但运行结果是出错,经分析后发现“发车时间”这个字段的值根本取不出来,于是尝试着换一种方法来设置,于是在车票表中新增了一个“当前状态”字段,将“发车时间”这个字段改为了文本型,可以取出其值,但

26、还要与当前系统比较,所以用cdata函数将发车时间的文本型转换为日期型,再用hour函数取出其小时数,用minute函数取出其分钟数,在与当前系统时间的小时数与分钟数进行比较,再根据比较结果将“已发出”和 “未发出”赋给“当前状态”。经过这一系列的调试,使得运行出了正确结果。程序代码form1中的程序编码:public user$, mima$ user为用户名,mima为密码dim mecount%, s$ mecount 记录登录次数private const gcl_hcursor = (-12) 设置系统运行时鼠标的小马特效private declare function loadcu

27、rsorfromfile lib user32 _ alias loadcursorfromfilea _ (byval lpfilename as string) _ as longprivate declare function setclasslong lib user32 _ alias setclasslonga _ (byval hwnd as long, _ byval nindex as long, _ byval dwnewlong as long) _ as longprivate declare function getclasslong lib user32 _ ali

28、as getclasslonga _ (byval hwnd as long, _ byval nindex as long) _ as longprivate sub combo1_click()s = combo1.textend subprivate sub command1_click()dim i%user = text1.textmima = text2.textif mecount = 2 thenmsgbox 对不起, 您的密码输入错误已有三次,您不能登陆系统, vbinformation, 输入错误 endend ifif text1.text = then msgbox 对

29、不起,用户名不能为空!, vbexclamation, 用户登陆elseif text2.text = then msgbox 对不起,密码不能为空!, vbexclamation, 用户登陆elseif s = then msgbox 对不起,您没有选择用户权限!, vbexclamation, 用户登陆else adodc1.recordset.find 用户名= & user & , , , 1 if adodc1.recordset.eof then msgbox 用户不是系统用户,请检查用户名输入是否正确!, vbexclamation, 用户登陆 text1.text = text

30、2.text = combo1.text = text1.setfocus elseif mima adodc1.recordset.fields(密码) then i = msgbox(密码错误,请你重新输入, 5 + vbexclamation, 警告) if i = 4 then mecount = mecount + 1 text1 = text2 = combo1.text = text1.setfocus end if elseif s adodc1.recordset.fields(用户权限) then msgbox 权限错误,请重新选择!, vbexclamation, 用户登

31、陆 else if s = 普通管理员 then 设置用户权限 form2.command1.enabled = false else form2.command2.enabled = true end if form1.hide form2.show end ifend ifend subprivate sub command2_click()endend subprivate sub form_load() dim mhbasecursor as long, mhanicursor as long 设置鼠标特效 dim lresult as long if right(app.path,

32、1) = then mhanicursor = loadcursorfromfile(app.path + horse.ani)else mhanicursor = loadcursorfromfile(app.path + horse.ani)end if lresult = setclasslong(me.hwnd, gcl_hcursor, mhanicursor)mecount = 0text1 = text1.maxlength = 10text2 = text2.maxlength = 10text2.passwordchar = *end subprivate sub timer

33、1_timer()timer1.interval = 100 设置标签的移动效果label7.move label7.left + 50if label7.left form1.width then label7.left = 0end subform2中的程序编码:private sub command1_click()form2.hideform3.showend subprivate sub command2_click()form1.showform2.hideend subprivate sub command3_click()text2 = if text1 then adodc1

34、.recordsource = select * from 车票表 where 班次= & text1 & else adodc1.recordsource = select * from 车票表 end if adodc1.refreshend subprivate sub command4_click()text1 = if text2 then adodc1.recordsource = select * from 车票表 where 终点站= & text2 & else adodc1.recordsource = select * from 车票表 end if adodc1.ref

35、reshend subprivate sub command5_click() text2 = dim a$, b%, c%, d as date text3 = 已发出 text4 = 未发出 adodc1.recordsource = select * from 车票表 adodc1.refresh do while not adodc1.recordset.eof a = adodc1.recordset.fields(发车时间) d = cdate(a) b = hour(d) c = minute(d) if b hour(time) or b = hour(time) and c

36、minute(time) then adodc1.recordset.fields(当前状态) = text4 else adodc1.recordset.fields(当前状态) = text3 end if adodc1.recordset.movenext loopadodc1.recordsource = select 班次,发车时间, 当前状态 from 车票表adodc1.refreshend subprivate sub command6_click()dim x$ adodc1.recordsource = select * from 车票表 adodc1.refresh x

37、= inputbox(请输入班次号, 查询班次状态) adodc1.recordset.find 班次= & x & , , , 1 adodc1.recordsource = select 班次,发车时间, 当前状态 from 车票表 where 班次= & x & adodc1.refreshend subprivate sub form_load() dim mpath$, mlink$ mpath = app.path if right(mpath, 1) then mpath = mpath + mlink = provider=microsoft.jet.oledb.4.0; ml

38、ink = mlink + data source = + mpath + 车票管理.mdb adodc1.connectionstring = mlink adodc1.commandtype = adcmdunknownend subform3中的程序编码private sub command1_click()adodc1.recordset.updateend subprivate sub command2_click()adodc1.recordset.cancelupdateend subprivate sub 返回_click()form3.hideform2.showend su

39、bprivate sub 删除_click()dim ask as integerdim x as integerx = inputbox(请输入要删除的班次, 删除)adodc1.recordset.find 班次= & x & , , , 1ask = msgbox(删除否?, vbyesno)if ask = 6 then adodc1.recordset.delete adodc1.recordset.movenext if adodc1.recordset.eof then adodc1.recordset.movelastend ifend subprivate sub 售票_click()dim x$dim a$, d as datedim b%, c%, f%, n%x = inputbox(请输入班次号, 售票)adodc1.recordset.find 班次= & x & , , , 1 a = adodc1.recordset.fields(出车时间) d = cdate(a) 将文本型的发车时间先转换为日期型 b = hour(d) 取出

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论