nbhkdz.com冰点文库

北京电大计算机毕业设计论文_图文

时间:2010-11-01

北京广播电视大学

毕业设计论文

题目: 地铁车辆管理信息系统的设计与实现

姓 学

名: 号: 2006 级

刘 冰 061424221 计算机科学与技术专业 开放教育学院 苏 明

专业年级: 分 校:

指导教师:

2009 年 06 月
风行下载安装 皮皮播放器下载 uusee 网络电视 2010 下载 www.funshionweb.com www.pipiweb.com www.uusee2008.com

风行下载安装 皮皮播放器下载 uusee 网络电视 2010 下载 www.uusee2008.com www.funshionweb.com www.pipiweb.com www.uusee2008.com





本课题的研究应用于地铁或与地铁相类似的企业进行车辆和人员的信息化 管理,使管理者的管理工作更为方便、快捷。 地铁车辆管理信息系统是典型的管理信息系统(MIS) ,本系统以软件工程思 想为指导,其系统开发主要包括数据库的规划设计与维护、客户端应用程序的两 个方面。对于前者要求建立起的数据库具有完整性和一致性,且具有一定的数据 安全性。而对于后者则要求程序界面友好、功能完备、容易使用,具有流行软件 的操作习惯等特点。经过详细的调查分析,我使用SQL Server 2000作为后台数 据库的开发,使用Visual Basic 6.0作为前端开发工具,利用其提供的集成开发 环境及支持面向对象的各种标准化的控件,尤其是对ADO的支持完成对数据库的 各种操作。达到对地铁车辆及人员信息管理的目的。设计时首先在短时间内先建 立系统应用原型,然后对初始化原型系统进行需求迭代,不断修正和改进,直到 形成用户满意的实际可行系统。 该软件大大降低了地铁车辆和人员管理的难度,提高了管理工作的工作效 率,对推进地铁公司的信息化建设起到了非常重要的作用。

关键词:地铁车辆,管理,信息系统,车辆管理,乘务员管理

风行下载安装 皮皮播放器下载 uusee 网络电视 2010 下载 www.funshionweb.com www.pipiweb.com www.uusee2008.com

I

Abstract

This subject is about the metro car and person management of subway and the similar corporation so as to the manage work easier and faster. The Metro Car MIS is a typical MIS, guiding of the software engineering. The system development including the database design and maintain, the application of client. The former needs a complete, uniform and safe database, the latter has the popular software character and needs the friendly interface, perfect function and easy to use. So I take the SQL Server 2000 to develop the background database and Visual Basic 6.0 to develop the system environment and the control especially the operation of ADO supporting, so as to achieve the management goal. Build the application prototype in a short time first, and then initialize system and iterative the demand. By the correct and improve, form a satisfied and feasible system. This system greatly reduced the difficulty of metro car and person management of subway, advance the efficiency and play important roles to the Subway Company MIS construction.

Key Words: Metro car, Management, MIS, Vehicle management, trainman management

风行下载安装 皮皮播放器下载 uusee 网络电视 2010 下载 www.funshionweb.com www.pipiweb.com www.uusee2008.com

II







要............................................................................................................................ I

Abstract ........................................................................................................................ II 目 录......................................................................................................................... III

第 1 章 需求分析与技术选用 .................................................................................. 1
1.1 项目的背景...................................................................................................................... 1 1.2 需求分析 ................................................................................................................... 1 1.3 相关技术分析 .................................................................................................................. 2 1.3.1 前台开发工具的对比 ........................................................................................... 2 1.3.2 后台数据库的对比 ............................................................................................... 3 1.4 课题的软件选用 .............................................................................................................. 4 1.4.1 前台开发工具的选用 ........................................................................................... 4 1.4.2 后台数据库的选用 ............................................................................................... 4

第 2 章 系统设计....................................................................................................... 5
2.1 总体功能设计 ................................................................................................................... 5 2.2 数据库存储设计 .............................................................................................................. 6 2.2.1 数据库建模 ........................................................................................................... 6 2.2.2 关系描述的设计 ................................................................................................... 8 2.3 模块设计.......................................................................................................................... 8 2.3.1 公用模块设计 ....................................................................................................... 8 2.3.2 系统模块设计 ....................................................................................................... 9 2.4 设计中遇到的问题及解决 ............................................................................................ 10 2.4.1 如何将 Adodc 控件与 SQL Server 2000 数据库连接 ...................................... 10 2.4.2 如何使用 Connection 对象的 Execute 方法返回记录集 ................................ 10 2.4.3 如何使用 Connection 对象连接 SQL Server 数据库 ..................................... 10

第 3 章 系统的实现................................................................................................. 12
3.1 数据存储的实现 ............................................................................................................. 12 3.1.1 创建数据库 ......................................................................................................... 12

III

3.1.2 表的创建 ............................................................................................................. 13 3.1.3 数据表结构 ......................................................................................................... 13 3.2 MDI 主窗体设计 ............................................................................................................. 17 3.2.1 界面介绍 ............................................................................................................. 17 3.3 主要功能模块详细设计 ................................................................................................. 19 3.3.1 车辆档案管理 ...................................................................................................... 19 3.3.2 人员档案管理 ...................................................................................................... 24 3.3.3 数据访问技术的实现 .......................................................................................... 30 3.4 生成 EXE 文件和打包 ................................................................................................... 30 3.4.1 生成 EXE 文件 ..................................................................................................... 30 3.4.2 工程的打包操作 ............................................................................................. 31

3.5 实现中遇到的问题及解决方法 ..................................................................................... 31 3.5.1 问题一 ................................................................................................................. 31 3.5.2 问题二 ................................................................................................................. 32

第 4 章 程序优化及待开发的项目......................................................................... 33
4.1 程序优化......................................................................................................................... 33 4.2 待开发的项目 ................................................................................................................ 33

结 束 语..................................................................................................................... 34 致 谢......................................................................................................................... 35

参 考 文 献............................................................................................................... 36 附 录......................................................................................................................... 37
附录 1.主界面工具栏的设计代码: .................................................................................... 37 附录 2.车辆档案录入窗体设计代码: ................................................................................ 37 附录 3.车辆档案查询窗体设计代码: ................................................................................ 41 附录 4.人员档案录入窗体设计代码: ................................................................................ 44 附录 5.人员档案查询窗体设计代码: ................................................................................ 48 附录 6.管理员窗体的设计代码: ........................................................................................ 50 附录 7.数据恢复设计代码: ................................................................................................ 54 附录 8.数据备份设计代码: ................................................................................................ 55

IV

第 1 章 需求分析与技术选用
1.1 项目的背景
随着我国经济的快速发展,地铁已经成为人们出行不可缺少的一种交通工 具。但是,对于拥有大量车辆的地铁公司来说,车辆的管理成为日常事务中的一 项重要工作。如何让管理人员及时了解每一组车、每一个乘务员的情况,提高车 辆的使用效率,掌握人员动态,减少费用支出,就成为管理层需要解决的一个难 题。为规范企业的内部管理,提高企业管理质量,更好的服务与广大乘客,有效 跟踪管理每组列车的使用状况,带动企业进入车辆管理信息化、科学化,使企业 的车辆管理更加科学、更加规范。

1.2 需求分析
车辆信息管理是地铁公司每个车辆段都必须面对的工作,特别是近两年,随 着地铁线路的扩展,车辆不断的增多,人员不断的添加,从而给每个车辆段的车 辆管理方面和人员管理方面都带来不少的冲击,特别是对于车辆段来说,地铁车 辆管理工作是至关重要的, 但是一直以来我们都在使用传统的人工方式管理车辆 档案和人员档案,这种方式存在着许多缺点,如:效率低、保密性差。另外随着 车辆数量的增加,其工作量也将大大增加,这必然增加了管理者的工作量和劳动 强度,同时产生大量的信息和数据,这给车辆信息的查找、更新和维护都带来了 不少的困难。据调查,目前地铁公司下属的各车辆段中还有相当一部分车辆管理 还停留在纸介质的基础上。这样的管理机制已经不能适应时代发展的需要,其管 理方法将浪费许多人力和物力。 随着科学技术的不断提高,计算机科学与技术日渐成熟和计算机应用的普 及,计算机已经进入人类社会生活的各个领域,并发挥着越来越重要的作用。目 前地铁公司下属的各车辆段中还有相当一部分车辆管理还停留在纸介质的基础 上。这样的管理机制已经不能适应时代发展的需要,其管理方法将浪费许多人力 和物力。然而使用计算机对车辆档案信息进行管理,有着手工管理所无法比拟的 优点,如:检索迅速、查找方便、可靠性高、储存量大、保密性好、寿命长、成 本低等,这些优点能够极大地提高车辆档案管理的效率,也是地铁行业或铁路行 业向科学化、 正规化管理发展的必要条件, 更是中国地铁与世界接轨的重要条件。 因此,开发一个能够为用户提供充足的信息和快捷的查询手段的车辆管理信 息系统,将是非常必要的,也是十分及时地。借此机会利用已经掌握的各种专业 知识,结合实际应用,开发一个车辆管理信息系统来帮助各车辆段进行有效的管 理,并可将其作为毕业设计课题。

1

风行下载安装 皮皮播放器下载 uusee 网络电视 2010 下载 www.funshionweb.com www.pipiweb.com www.uusee2008.com

1.3 相关技术分析
1.3.1 前台开发工具的对比
Visual Basic 6.0具有强大的可视化程序设计和面向对象程序设计的功能, 近年来得到了广泛的应用。对于开发工具而言,能够编制Windows应用程序的可 视化编程工具还有很多,所针对的编程领域也各有侧重,就微软系列的可视化开 发工具而言,就有VB,Visual C++, Visual J++, Visual Foxpro等, 1. Visual Basic 与 Visual C++的对比 VB 与其家族中的老大 VC 相比, 总体差距确实很明显。 但具体到数据库开发方面, VB 有其独到的优势。VB 在这方面所具备的优势就是快速、简单、和功能完备。 一个有经验的程序员,在需求和设计都已完成的情况下,如果只是编码和调试, 使用 VB 大约不到一周就可以开发出一个功能比较完备的管理信息系统,而如果 使用 VC,则时间很难确定,而且这样做的人并不是佷多,除非是出于某些特殊 需要。其中: 2. Visual Basic 与 Visual FoxPro 的对比 Visual FoxPro 主要面向中小型的开发,它凭借着自带数据库的优势,应用也比 较广泛,但从程序执行效率和通用性角度考虑,更多的人倾向于使用 VB,因为 一个系统不仅仅就操纵数据库这么简单, 它还包括界面设计及其他必要信息的获 取与输出,在这方面,VB 相对占有更多的优势。 3. Visual Basic 与 Delphi 的对比 Delphi在系统开发方面同样具有快速、简单的优势。而且Delphi的编辑器是公认 最强的, 至少强于VB, 在做界面与其它控制方面, 也似乎要超过VB。 但不可否认, VB的简单性与开发环境的方便性, 又为VB赢得了不少用户。 总之VB更大众化一些, 更易于学习,而Delphi更为严谨,适合开发更大或要求更高的管理信息系统。 除了微软之外,其他公司也在为Windows操作平台制作应用程序开发工具, 例如前Borland的公司出品的Delphi、C++ Bulider、J++ Bulider等,其他一些 公司出品的针对数据库编程的PowerBulider,PowerDesigner等,不可否认,这 些产品相当出色,如果能够熟练掌握将是编程者能力的体现,但是必须承认,对 Windows操作系统最熟悉的还是微软, 而且微软本身Windows操作系统的源代码采 取不公开的策略,使得其他公司出产的产品在实现相同功能时多少都要走些弯 路,最终,用户在使用这些产品设计应用程序时,程序的效率将会受到影响。
风行下载安装 皮皮播放器下载 uusee 网络电视 2010 下载

2

www.funshionweb.com www.pipiweb.com www.uusee2008.com

1.3.2 后台数据库的对比
后台数据库平台的选用,主要从管理者的角度来综合权衡,包括安全性、数 据访问机制、管理的灵活性等,目前主要的数据库有:FoxPro、Access、Excel、 Oracle、Sybase、Informix、SQL Server等,其中网络型的Oracl、Sybase 、SQL Server产品安全性远远高于桌面型的:FoxPro、Access、Excel等数据库。 1.桌面型的 FoxPro、Access、Excel 等数据库主要应用于单机环境,虽然一 些后续产品(如 Visual FoxPro 6.0 等)也提供了一些诸如 WEB 发布的功能,但 究其设计的目的还是基于小型的工作组级的应用环境, 表现在不提供并行分布的 能力、没有或不完备的安全性方案。 例如 Access 数据库。Access 是一种关系型数据库,利用 Access 系统开发数 据管理软件, 一般不需要写程序, 只要根据任务提出的要求, 通过键盘和鼠标器, 选择必需的命令,就能够开发出简单、实用、美观大方的应用软件,有效地处理 日常数据。Access 有存储文件单一(所有形式的相关数据都包含在一个以 .mdb 为后缀名的数据库文件中) ,支持长文件名,便于标识与查找,面向对象的开发 方式(开发应用程序简便) ,处理多种数据信息,界面友好、工作方式灵活(直 接操作与应用程序操作) 强大的网络功能 , (Assess 数据可通过 Internet 传送) 。 但 Access 数据库很多缺点。如:不能转换为 EXE 文件,不能脱离 Access 运行, 与其他解释性开发语言一样,运行效率较慢,作为后台数据库使用时数据安全性 能差,多人同时访问时就能导致 MDB 文件损坏或者并死。 2.网络型的Oracl、Sybase 、SQL Server数据库提供并行分布的能力、完备 的安全性管理、大容量的数据库存取等,微软公司推出的SQL Server系列网络数 据库已经广泛应用于各行各业,其中的SQL Server 2000作为微软公司的“.NET” 战略中为企业开发的数据库产品, 主要用于构建电子商务和数据仓库的数据库服 务器。 例如Oracl数据库。该数据库无范式要求,可根据实际系统需求构造数据库, 采用标准的SQL结构化查询语言,具有丰富的开发工具,覆盖开发周期的各阶段, 支持大型数据库,数据类型支持数字、字符、大至2GB的二进制数据,为数据库 的面向对象存储提供数据支持,具有第四代语言的开发工具(SQL*FORMS、 SQL*REPORTS、SQL*MENU等) ,具有字符界面和图形界面,易于开发。但Oracle 数据库不常见, 通常是很大型的系统或者平台才会采用。 因为其对硬件要求比较高, 所以不是很常见,不是很实用。另外在Oracle数据仓库解决方案实施过程中,通常把 汇总数据存储在Express多维数据库中,而将详细数据存储在Oracle关系数据库 中,当需要详细数据时,Express Server通过构造SQL语句访问关系数据库。但 目前的Express还不够灵活,数据仓库设计的一个变化往往导致数据库的重构。
风行下载安装 皮皮播放器下载 uusee 网络电视 2010 下载

3

www.funshionweb.com www.pipiweb.com www.uusee2008.com

1.4 课题的软件选用
1.4.1 前台开发工具的选用
Visual Basic 属于第四代编程语言,是发展最快、学习最容易、功能最强 大的语言之一,以其开发速度快、使用简单而被广泛使用。 Visual Basic 6.0 主要具有以下特点: 面向对象的可视化设计工具 事件驱动的编程机制 易学易懂的集成开发环境 结构化的程序设计语言 强大的数据库功能 支持用户开发的 ActiveX 控件 应用程序向导 完备的 Help 联机帮助功能 由于 Visual Basic 6.0 的优点显著,所以把 Visual Basic 6.0 作为此系统 的前台开发工具。

1.4.2 后台数据库的选用
SQL Server是微软公司出品的关系型数据库管理系统(RDBMS)软件,它的 主要特点是: 全面启动WEB特性。 集成的和可扩展的分析服务 简单的管理和调整 简化的T-SQL(事物处理-SQL)开发和调用 灵活的和可扩展的数据转换 自动实现数据库的并发控制 强大的编程接口和开发工具 与Windows操作系统的高度集成特性 支持XML(扩展标记语言) 、支持用户自定义函数、支持OLE DB、分 布式的分区视图等特性 由于SQL Server 2000具有上述特点,因此在做本系统应用时可以选择其作 为后台的数据库。

风行下载安装 皮皮播放器下载 uusee 网络电视 2010 下载 www.funshionweb.com www.pipiweb.com www.uusee2008.com

4

第 2 章 系统设计
2.1总体功能设计
功能结构图如下:
地铁车辆管理信息系统 车辆档案管理 车辆档案录入 车辆档案查询 车辆档案列表 车辆管理 乘务员管理 车辆档案修改 车辆档案删除 乘务员档案管理 乘务员档案录入 乘务员档案查询 乘务员档案修改 乘务员档案删除 乘务员档案列表

异 动 添 加 查 询 清 空

临 修 添 加 查 询 清 空

掉 线 添 加 查 询 清 空

违 章 添 加 查 询 清 空

事 故 添 加 查 询 清 空 系统维护

奖 励 添 加 查 询 清 空

系统初始化 管理员设置 打 印

数据恢复 数据备份 退 出

图 2-1 地铁车辆管理信息系统功能结构图

车辆档案 录入:用于添加、修改、删除车辆档案信息。 查询:查询与车辆档案条件相符的信息。 清空:用于清空车辆档案表中的所有信息。

5

乘务员档案 录入:用于添加、修改、删除乘务员档案信息。 查询:查询符合乘务员查询条件的乘务员档案信息。 清空:用于清空乘务员表中的所有信息。 车辆管理中包括异动、临修和车辆掉线的信息。其中: 车辆临修 添加:用于添加、修改、删除车辆临修信息。 查询:查询符合条件的车辆临修信息。 清空:用于清空车辆临修表中的所有信息。 车辆异动和车辆掉线的内容均与车辆临修相符,就不再一一介绍了。 驾驶员管理中包括违章、事故和乘务员奖惩的信息。其中: 乘务员违章 添加:用于添加、修改、删除乘务员违章信息。 查询:用于查询符合查询条件的乘务员违章信息。 清空:清空乘务员违章表中的所有信息。 乘务员事故和乘务员奖惩的内容均与乘务员违章内容相符。 系统维护中包括系统初始化、管理员设置、数据恢复、数据备份。其中: 系统的初始化:将数据库中各表信息清空恢复成系统的初始状态。 管理员设置:只有管理员才有权限做任何清空处理。 数据恢复和数据备份:是怕数据感染病毒或是误操作而造成数据丢失,而做 的一个系统不可缺少的一部分。

2.2 数据库存储设计
根据用户的需求和车辆管理及人员管理数据流量的大小,同时结合SQL Server 2000数据库的灵活性和可扩展的数据转换和与Windows操作系统的高度 集成特性等优点,在地铁车辆管理信息系统中使用了SQL Server 2000数据库为 后台数据库。 地铁车辆管理信息系统数据库名为“car”,其中有11张数据表,它们是:用 户表、车辆档案表、车辆临修表、车辆类型表、车辆异动表、车辆掉线表、是否 表、乘务员事故表、乘务员档案表、乘务员奖励表、乘务员违章表。 为了把用户的数据清晰明确的表达出来,通常建立一个概念型的数学模型。 最 常 用 的 表 示 概 念 的 数 学 模 型 的 方 法 是 实 体 —— 联 系 方 法 ( Entity Relationship Approach) 。这种方法又称为E-R模型。

2.2.1 数据库建模
经过上面的分析,能够提取出以下几个实体。它们的实体如下图:

6

车号

来段时间

车 辆

类型

所属单位 图 2-2 车辆实体图

驾龄 所属车辆段

姓名

性别 出生年月

乘务员

技术级别 驾驶车号 图 2-3 乘务员实体图

联系电话

车号

车次

修复时间

车辆异动

发现者

修复地点

异动现象

图 2-4 车辆异动实体图

事故等级

姓名

事故发生地点

乘务员事故

车号

事故发生时间

事故发生经过

图 2-5 乘务员事故实体图

7

2.2.2 关系描述的设计
根据以上实体图,经过转换,可以导出各个关系。其转换规则为:首先每 个实体应转化为一个关系,有属性的联系也应转化为一个关系,然后需要给出 每个关系的关键字。根据规则直接给出所有关系。 车辆(车号、车辆类型、车辆所在单位、来段时间、异动否、备注)关键字 为车号 异动(异动车号、车次、首先发现者、发现异动时间、发现异动地点、修复 时间、修复地点、异动现象、备注)关键字为异动车号。 临修(临修车号、司机姓名、车长姓名、地勤司机、临修日期、临修原因、 是否修复、是否扣车、备注)关键字为临修车号。 掉线(车号、车次、表号、厂修时间、架修时间、月修时间、掉线司机、掉 线车长、事件车站、事件时间、事件过程、备注)关键字为车号。 乘务员(驾驶员编号、驾驶证编号、乘务员姓名、性别、出生年月、家庭住 址、技术级别、参加工作时间、联系电话、司机驾龄、运行安全公里、 发证日期、所属车辆段、备注)关键字为驾驶证编号。 事故(事故等级、司机姓名、车长姓名、事故车号、发生事故地点、发生事 故时间、发生事故经过、处理决定、备注)关键字为事故车号。 违章(违章乘务员、驾驶车号、违章原因、违章地点、违章时间、检查人员、 处理决定、备注)关键字为违章乘务员。 奖励(乘务员姓名、驾驶证编号、所属轮乘组、奖励级别、奖励原因、奖励 金额、备注)关键字为驾驶证编号。 在考虑系统安全的前提下, 需要增加用户关系和使用关系, 其关系模式如下: 用户(用户姓名、用户密码、用户类型)关键字为用户姓名。
风行下载安装 皮皮播放器下载 uusee 网络电视 2010 下载 www.funshionweb.com www.pipiweb.com www.uusee2008.com

2.3 模块设计
2.3.1 公用模块设计
为了节省系统资源,在本系统中新建一个模块,该模块用于连接各个模块中 的数据表,从而避免了在程序中运用大量的ADO控件,给开发应用程序带来 诸多不便。模块中的程序代码如下:
Public adoCon As New ADODB.Connection Public adors As New ADODB.Recordset Public Sub main() Set adoCon = New ADODB.Connection adoCon.Open "Provider=MSDASQL.1;Data Source= car;Persist Security

8

Info=False" frmLogin.Show frmLogin.Text1.SetFocus End Sub

2.3.2 系统模块设计

主界面

车 辆 档 案 管 理

乘 务 员 档 案 管 理

车 辆 管 理

驾 驶 员 管 理

系 统 维 护

图 2-6 软件系统模块结构图

1. 主界面模块: 该模块提供管理系统的主界面,是主系统的唯一出口。该界面提供用户选择 并调用各子模块。 2. 车辆档案管理模块 该模块是提供所有车辆档案的界面。 3. 乘务员档案管理模块 该模块是提供全部人事档案的界面。 4. 车辆管理模块 该模块是提供对车辆异动、车辆临修、车辆掉线进行的更改、删除和添加的 界面。 5. 驾驶员管理模块 该模块是提供对乘务员违章、乘务员事故和乘务员奖惩进行的添加、修改和 删除的界面。 6. 系统维护模块 该模块是提供对系统初始化、管理员设置、数据恢复、数据备份及退出进行 的操作。
风行下载安装 皮皮播放器下载 uusee 网络电视 2010 下载 www.funshionweb.com www.pipiweb.com www.uusee2008.com

9

2.4 设计中遇到的问题及解决
2.4.1如何将Adodc控件与SQL Server 2000数据库连接
库连接: 在“Adodc属性”对话框中单击[生成]按钮, 弹出“数据链接属性” 窗 体 , 在 提 供 程 序 中 选 择 “Microsoft OLE DB Provider for ODBC Drivers”提供者,然后单击[下一步]按钮;在“连接”选项卡中指定 数据源(本系统中的数据源为“car” ) ,设置完成后单击[测试连接] 按钮,提示成功后单击[确定]按钮。则数据源连接成功。 表链接:右键单击Adodc控件,在“属性页”/“记录源”选项卡中的“命令 类型下拉列表框中选择“1-adCmdText”列表项:在“命令文本”文本 框中输入(以‘车辆档案表’为例)“select * from车辆档案表”, 单击[确定]按钮。则‘车辆档案表’连接成功。

2.4.2如何使用Connection对象的Execute方法返回记录集
下面代码通过调用 Connection 对象的 Execute 方法,从 SQL Server 数据库 “car”的“车辆档案表”中检索车辆编号的值并返回一个记录集。代码如下列 所示:
On Error Resume Next Call Rebind Set adors = adoCon.Execute("select distinct 车号 from 车辆档案表") On Error Resume Next Do Combo1.AddItem adors.Fields(0) adors.MoveNext Loop Until adors.EOF adors.Close

2.4.3 如何使用Connection对象连接SQL Server数据库
1. 在使用 Connection 对象连接数据库之前,应先声明该对象,在本系统中 的声明对象是:Public adoCon As New ADODB.Connection 2. 使用语句 adoCon.Open "Provider=MSDASQL.1;Data Source= car;Persist Security Info=False"就可以和管理工具中的 ODBC 数据源连接。 由于 car 数据源中默认数据库为 car, 所以也就等于和 SQL Server 2000 中的 car 数据库连接。

10

风行下载安装 皮皮播放器下载 uusee 网络电视 2010 下载 www.funshionweb.com www.pipiweb.com www.uusee2008.com

11

第 3 章 系统的实现
3.1 数据存储的实现
3.1.1 创建数据库
1.打开SQL Server 2000的企业管理器,单击并逐级展开当前服务器,在“数 据库”目录上单击右键,选择“新建数据库”命令。如图3-1 创建数据库1 所示:

图 3-1 创建数据库 1

2.在弹出的对话框的名称文本框中输入所要创建的数据库名称“car”。如 图3-2 创建数据库2 所示:

图 3-2 创建数据库 2

3.点击数据文件标签,更改数据库文件路径。如图 3-3 示:

创建数据库 3



图 3-3 创建数据库 3

12

4.点击事务日志标签,更改数据库日志文件路径。如图 3-4 所示:

创建数据库 4

图 3-4 创建数据库 4

5. 点击“确定按钮”创建数据库完成。

3.1.2 表的创建
1) 完成数据库的建立后,就可以建立数据库中的表了。以“车辆档案表” 为例,介绍创建表的过程。 2) 展开要创建表的系统数据库“car”,单击“表”选项。 3) 单击鼠标右键,在出现的快捷菜单中选择“新建表”选项。 4) 数入列名。 5) 选择适当的数据类型,并设置长度。 6) 在“允许空”选项中,如果设置不允许为空,那么插入记录集或修改记录 时,将不允许空值出现,否则报错。 7) 输入完成所有的字段名,单击“保存”图标,将弹出“选择名称”对话框。 将表名设定为“车辆档案表”,然后单击[确定]按钮。

3.1.3 数据表结构

表 3-1 用户表 列名 用户姓名 用户密码 用户类型 数据类型 char char char 长度 20 10 10 允许空 否 是 否

风行下载安装 皮皮播放器下载 uusee 网络电视 2010 下载 www.pipiweb.com www.funshionweb.com www.pipiweb.com www.uusee2008.com

13

表 3-2 车辆档案表 列名 车号 车辆类型 车辆所在单位 购置日期 来段时间 异动否 备注 数据类型 char char char datetime datetime char varchar 长度 10 10 30 8 8 6 100 允许空 否 否 是 否 是 是 是

风行下载安装 皮皮播放器下载 uusee 网络电视 2010 下载 www.funshionweb.com www.pipiweb.com www.uusee2008.com 表 3-3 乘务员档案表 列名 驾驶员编号 驾驶证编号 乘务员姓名 性别 出生年月 家庭住址 联系电话 技术级别 参加工作时间 驾龄 运行安全公里 发证日期 所属车辆段 备注 数据类型 varchar varchar char char datetime char bigint char datetime char varchar datetime char varchar 长度 20 20 8 2 8 40 15 6 8 10 10 8 20 100 允许空 否 否 否 否 否 是 是 否 是 是 是 是 是 是

14

风行下载安装 皮皮播放器下载 uusee 网络电视 2010 下载 www.funshionweb.com www.pipiweb.com www.uusee2008.com 表 3-4 车辆临修表 列名 临修车号 司机姓名 车长姓名 地勤司机 临修日期 临修原因 是否修复 是否扣车 备注 数据类型 char char char char datetime varchar char char varchar 长度 10 8 8 8 8 100 4 4 100 允许空 否 否 否 否 否 否 是 否 是

表 3-5 车辆异动表 列名 异动车号 车次 首先发现者 发现异动时间 发现异动地点 修复时间 修复地点 数据类型 char char char datetime char datetime char 长度 10 6 20 8 10 8 10 允许空 否 是 否 是 是 是 是

表 3-6 乘务员档案表 列名 车号 车次 表号 厂修时间 架修时间 月修时间 掉线司机 掉线车长 数据类型 char char char datetime datetime datetime char char 长度 10 6 6 8 8 8 8 8 允许空 否 否 否 是 是 是 否 否

15

事件车站 事件时间 事件过程 备注

char datetime varchar varchar

8 8 500 100

是 是 否 是

表 3-7 车辆类型表 列名 类型 数据类型 char 长度 10 允许空 否

表 3-8 乘务员事故表 列名 事故等级 司机姓名 车长姓名 事故车号 发生事故地点 发生事故时间 发生事故经过 处理决定 备注 数据类型 char char char char char datetime varchar varchar varchar 长度 10 10 10 8 10 8 600 100 50 允许空 否 否 否 否 否 否 否 否 是

表 3-9 乘务员奖励表 列名 乘务员姓名 驾驶证编号 所属轮乘组 奖励级别 奖励原因 奖励金额 备注 数据类型 char varchar char char varchar money varchar 长度 8 20 10 10 600 8 30 允许空 否 否 是 是 否 否 是

表 3-10 乘务员违章表 列名 违章乘务员 驾驶车号 违章原因 违章地点 违章时间 数据类型 char char char char datetime 长度 8 6 30 10 8 允许空 否 是 否 否 是

16

检查人员 处理决定 备注

char varchar varchar 表 3-11 是否表

20 50 30

否 否 是

列名 是否

数据类型 char

长度 10

允许空 是

风行下载安装 皮皮播放器下载 uusee 网络电视 2010 下载 www.funshionweb.com www.pipiweb.com www.uusee2008.com

3.2 MDI主窗体设计
3.2.1 界面介绍
本系统主界面图如下:
菜单栏 工具栏

状态栏

图3-5 主界面

1. 菜单编辑器 1)单击“工具”/“菜单编辑器”菜单项,打开“菜单编辑器”对话框。 2)在菜单编辑器窗口中,“标题”文本框用于设置菜单项的标题,它对应 着菜单的caption属性。

17

3)“名称”文本框用于设置菜单项的名称,它对应着菜单项的Name属性。 4)菜单的“索引”文本框用来确定菜单标题或菜单选项在菜单控件数组中 的位置或次序,菜单项的名称不重复,索引值可以为空。 5)“复选”、“有效”和“可见”选项分别对应菜单的Checked、Enabled和 Visible属性,用于设置菜单复选,是否有效和是否可见。 6)在编辑菜单的过程中,有时需要移动菜单。 ←将选定的菜单向左移一个等级 →将选定的菜单向右移一个等级,最多创建5个等级 ↑将选定的菜单在同级菜单内向上移动一个位置 ↓将选定的菜单在同级菜单内向下一个位置 7) 单击[下一步]按钮,移动并显示菜单项,供用户新增或修改菜单项, 如果需要在某一个位置插入一个新的菜单项,则单击[插入]按钮,如果要删 除已存在的菜单项,则单击[删除]按钮。 2. 设计工具栏 〔1〕 添加工具栏 在“工程”菜单下选择“部件”菜单项,打开“部件”对话框,然后在其中选 择“Microsoft Windows Common Controls6.0”, 单击[确定]按钮。 此时ToolBar 控件和ImageList控件添加到工具箱当中。 〔2〕 向ImageList空间中添加图像 在窗体上添加一个ImageList控件。 单击鼠标右键,在弹出的菜单中选择“属性”菜单项,打开“属性页”对话 框。 单击“通用”选项卡,在此选项卡中可以设置图像的高度和宽度,以及是 否使用屏蔽颜色属性。 单击“图像”选项卡,在此选单项卡中单击[插入图片]按钮,然后从图片 库中将需要的图片添加到“图像”下的空白框中,并且在“索引”文本框中 自动产生该图片的索引值。 为图片添加关键字和标记。“关键字”取值为字符型,其值可以为空。“标 记”起到标识单个图像的作用,一般情况下也可以为空值。 如果对已添加的某一个图片不满意,可以选中其图片,单击[删除图片] 按钮,将该图片删除,然后再添加满意的图片。 〔3〕 创建并设计工具栏。 1) 在窗体上添加一个ToolBar控件。 2) 鼠标右键单击ToolBar控件,在弹出的菜单中选择“属性”菜单项,打开 “属性页”对话框。 3) 在“属性页”对话框中单击“按钮”选项卡,单击[插入按钮],这时 ToolBar控件将出现一个按钮,同时“索引”文本框可用,其值自动变为“1”, 然后在“关键字”文本框中输入该按钮的关键字,在“工具提示文本”文本框中 输入所要提示的文本信息; 在“图像”文本框中输入与ImageList1控件中图片

18

的索引值对应的值。 4) 重复步骤3),直到添加完所有的工具按钮为止,最后单击[确定]按钮 完成工具栏的设计工作。 3. 创建状态栏 创建状态栏的方法与工具栏类似,因此略。

3.3主要功能模块详细设计
3.3.1车辆档案管理
车辆档案录入操作窗体以用于添加、修改、删除车辆档案信息。车辆档案的 添加、 修改、 删除可以通过ADO对象实现, 这其中都使用了AddNew、 Update和Delete 方法。 1. 窗体界面设计 新建一窗体,设置该窗体的名称为“frmchelu” ,Caption属性为“车辆档案 录入窗体” ,BorderStyle属性为“1-Fixed Single” ,MDIChild的属性为“True” 。 添加Adodc控件,由于该控件属于ActiveX控件,在使用前应首先将其添加到工具 箱中。具体添加办法如下:由于该控件属于ActiveX控件,要想添加Adodc控件, 在使用前应首先将其添加到工具箱中,具体的添加方法是:单击“工具”/“部件” 菜单项,打开“部件”对话框。在“部件”对话框中勾选“Microsoft Ado Data Controls 6.0 (SP4)”选项,然后单击[确定]按钮。此时,ADO控件将出现在工 具 箱 中 。 在 窗 体 上 添 加 1 个 ADO 控 件 , 默 认 名 为 “ Adodc1” 。 Adodc1 控 件 的 RecordSource属性为“select * from 车辆档案表”在Adodc1控件上单击鼠标右 键选择“Adodc属性进行数据库连接和数据表链接” ,链接方法:见2.4.1节内容。 为了方便用户能够填入正确的时间格式, DTPicker控件提供了格式化好的日期格 式。所以在本系统中添加了DTPicker控件,由于该控件属于ActiveX控件,在“部 件”对话框中勾选“Microsoft Windows Common Controls-2 6.0 (SP4)”选项, 然后单击[确定]按钮。此时,ADO控件将出现在工具箱中。在窗体上添加Label、 Text、Commandbutton、ComboBox、DTPicker控件。

19

风行下载安装 皮皮播放器下载 uusee 网络电视 2010 下载 www.funshionweb.com www.pipiweb.com www.uusee2008.com 图3-5 车辆档案录入窗体

2. 程序代码设计 (1)在窗体装载前定义一个数值型变量。
Dim i As Integer

(2)设计一个Lockct1过程功能为设置控件不可用。
Private Sub Lockctl() Text1.Enabled = False: Text3.Enabled = False Text2.Enabled = False: Text4.Enabled = False Combo1.Enabled = False: Combo2.Enabled = False: DTPicker1.Enabled = False End Sub

(3)设计一个Unlockct1过程功能为设置控件可用。
Private Sub Unlockctl() Text1.Enabled = True: Text3.Enabled = True Text2.Enabled = True: Text4.Enabled = True Combo1.Enabled = True: Combo2.Enabled = True: DTPicker1.Enabled = True End Sub

(4)因为DTPicker控件的Value属性始终不能为空,所以在给DTPicker控 件赋值前,应先判断数据表中是否有数据。
Private Sub Form_Load() frmchelu.Height = 4770: frmchelu.Width = 7440 Adodc1.RecordSource = "select * from 车辆档案表 " Adodc1.Refresh If Adodc1.Recordset.RecordCount > 0 Then DTPicker1.Value = Adodc1.Recordset.Fields(3) Adodc2.RecordSource = "select * from 车辆类型表" Adodc2.Refresh

20

If Adodc2.Recordset.RecordCount = 0 Then Exit Sub For i = 0 To Adodc2.Recordset.RecordCount - 1 Combo1.AddItem Adodc2.Recordset.Fields(0).Value Adodc2.Recordset.MoveNext Adodc3.RecordSource = "select * from 是否表" Adodc3.Refresh Next If Adodc3.Recordset.RecordCount = 0 Then Exit Sub For i = 0 To Adodc3.Recordset.RecordCount - 1 Combo2.AddItem Adodc3.Recordset.Fields(0).Value Adodc3.Recordset.MoveNext Next On Error Resume Next Text1.Text = Adodc1.Recordset.Fields(0) Combo1.Text = Adodc1.Recordset.Fields(1) Text2.Text = Adodc1.Recordset.Fields(2) DTPicker1.Value = Adodc1.Recordset.Fields(3) Text3.Text = Adodc1.Recordset.Fields(4) Combo2.Text = Adodc1.Recordset.Fields(5) Text4.Text = Adodc1.Recordset.Fields(6) End Sub

(5)初始化处理,清空文本框控件中的内容,为部分控件赋初始值,然 后设置一些按钮有效,为用户添加新数据做准备。在【添加】按钮的Click 事件下添加代码如下:
Private Sub Command1_Click() Unlockctl Text1 = "": Text2 = "": Text3 = "": Text4 = "": Combo1.Text = "DK16" Combo2.Text = "是" Text1.SetFocus Command4.Enabled = True: Command5.Enabled = True Command3.Enabled = False: Command2.Enabled = False Adodc1.Enabled = False: i = 1 End Sub Combo1.Visible = True

21

(6)在【修改】按钮的Click事件下添加代码如下:
Private Sub Command2_Click() Unlockctl i = 2 Command4.Enabled = True: Command5.Enabled = True command1.Enabled = False: Command3.Enabled = False Adodc1.Enabled = False: Text1.Enabled = False End Sub

(7)使用Delete语句删除车辆信息。在【删除】按钮的Click事件下添 加代码如下:
Private Sub Command3_Click() If MsgBox("您确实要删除记录吗?", vbOKCancel, "系统提示") = vbOK Then adoCon.Execute ("delete from 车 辆档 案表 where 车号 ='" & Text1 & "'") MsgBox " 记录已删除!", , "系统提示" Adodc1.Refresh End If End Sub

(8) 通过一个变量i控制车辆档案的添加和修改, 添加通过SQL中Inser into语句实现,修改通过SQL中的Update语句实现。在【确定】按钮的 Click事件下添加代码如下:
Private Sub Command4_Click() Select Case i Case 1 If Text1 = "" Then MsgBox "车号不能为空", , "系统提示" Text1.SetFocus Exit Sub End If If Combo1.Text = "" Then MsgBox "车辆类型不能为空", , "系统提示" Combo1.SetFocus Exit Sub End If

22

Dim rs As New ADODB.Recordset Set rs = adoCon.Execute("select * from 车辆档案表 where 车 号='" & Text1.Text & "'") If rs.EOF = False Then MsgBox "此车号已经存在!", , "系统提示" Text1 = "" Text1.SetFocus End If rs.Close adoCon.Execute ("insert into 车辆档案表 values ('" & Text1 & "','" & Combo1 & "','" & Text2 & "','" & DTPicker1.Value & "','" & Text3 & "','" & Combo2 & "','" & Text4 & "')") MsgBox "记录添加成功!", , "系统提示" Adodc1.Refresh Case 2 adoCon.Execute ("update 车 辆 档 案 表 set 车 辆 类 型 ='" & Combo1 & "',车辆所在单位='" & Text2 & "',购置日期='" & DTPicker1.Value & "',来段时间='" & Text3 & "',异动否='" & Combo2 & "', 备注='" & Text4 & "' where 车号='" & Text1 & "'") MsgBox "记录修改成功!", , "系统提示" Adodc1.Refresh End Select Lockctl Command4.Enabled = False: Command5.Enabled = False command1.Enabled = True: Command2.Enabled = True Command3.Enabled = True: Adodc1.Enabled = True End Sub

(9)在【取消】按钮的Click事件下添加代码如下:
Private Sub Command5_Click() On Error Resume Next Adodc1.Recordset.CancelUpdate Adodc1.Refresh Lockctl Command4.Enabled = False: Command5.Enabled = False command1.Enabled = True: Command2.Enabled = True Command3.Enabled = True: Adodc1.Enabled = True

23

End Sub

(10)在【查询】按钮的Click事件下添加代码如下:
Private Sub Command7_Click() Dim str As String str = InputBox$("输入你要查询的车号:", "系统提示") If str = "" Then Exit Sub Adodc1.RecordSource = "select * from 车辆档案表 where 车号='" + str + "'" Adodc1.Refresh If Adodc1.Recordset.RecordCount > 0 Then On Error Resume Next '当没有添加数据的时候 处理异常 Text1.Text = Adodc1.Recordset.Fields(0) Combo1.Text = Adodc1.Recordset.Fields(1) Text2.Text = Adodc1.Recordset.Fields(2) DTPicker1.Value = Adodc1.Recordset.Fields(3) Text3.Text = Adodc1.Recordset.Fields(4) Combo2.Text = Adodc1.Recordset.Fields(5) Text4.Text = Adodc1.Recordset.Fields(6) Command2.Enabled = True: Command3.Enabled = True Else MsgBox "没有你需要的信息!", , "系统提示" Command2.Enabled = False: Command3.Enabled = False End If End Sub

(11)在【退出】按钮的Click事件下添加代码如下:
Private Sub Command6_Click() MDIForm1.StatusBar1.Panels(1).Text = "" Unload Me End Sub

3.3.2人员档案管理
车辆档案录入操作窗体以用于添加、修改、删除车辆档案信息。车辆档案的 添加、 修改、 删除可以通过ADO对象实现, 这其中都使用了AddNew、 Update和Delete 方法。

24

1. 窗体界面设计 新建一个窗体,设置该窗体的名称为“frmrenlu” ,Caption属性为“人员档 案录入窗体” BorderStyle属性为 , “1-Fixed Single” MDIChild的属性为 , “True” 。 在窗体上添加1个ADO控件,默认名为“Adodc1”。Adodc1控件的RecordSource 属性为 “select * from 人员档案表” 在窗体上添加Label、 。 Text、 Commandbutton、 ComboBox、DTPicker控件。

图3-6 人员档案录入窗体

2. 程序代码设计 (1)在窗体装载前定义一个数值型变量,代码如下:
Dim i As Integer

(2)设计一个Lockct1过程使控件不可用,该过程如下:
Private Sub Lockctl() Text1.Enabled = False: Text5.Enabled = False: Text6.Enabled = False Text2.Enabled = False: Text3.Enabled = False: Text4.Enabled = False Text7.Enabled = False: Text8.Enabled = False: Text9.Enabled = False Text10.Enabled = False: Text11.Enabled = False: Text12.Enabled = False Text13.Enabled = False: Text14.Enabled = False End Sub

(3)设计一个Unlockct1过程使控件可用,该过程如下:
Private Sub Unlockctl() Text1.Enabled = True: Text5.Enabled = True: Text6.Enabled = True

25

Text2.Enabled = True: Text3.Enabled = True: Text4.Enabled = True Text7.Enabled = True: Text8.Enabled = True: Text9.Enabled = True Text10.Enabled = True: Text11.Enabled = True: Text12.Enabled = True Text13.Enabled = True: Text14.Enabled = True End Sub

(4)在窗体Load事件下添加如下代码:
Private Sub Form_Load() frmrenlu.Height = 5745: frmrenlu.Width = 9585 Adodc1.RecordSource = "select * from 乘务员档案表" Adodc1.Refresh If Adodc1.Recordset.RecordCount > 0 Then Text1.Text = Adodc1.Recordset.Fields(0) On Error Resume Next Text1.Text = Adodc1.Recordset.Fields(0) Text2.Text = Adodc1.Recordset.Fields(1) Text3.Text = Adodc1.Recordset.Fields(2) Text5.Text = Adodc1.Recordset.Fields(3) Text6.Text = Adodc1.Recordset.Fields(4) Text9.Text = Adodc1.Recordset.Fields(5) Text8.Text = Adodc1.Recordset.Fields(6) Text7.Text = Adodc1.Recordset.Fields(7) Text12.Text = Adodc1.Recordset.Fields(8) Text10.Text = Adodc1.Recordset.Fields(9) Text13.Text = Adodc1.Recordset.Fields(10) Text11.Text = Adodc1.Recordset.Fields(11) Text4.Text = Adodc1.Recordset.Fields(12) Text14.Text = Adodc1.Recordset.Fields(13) End Sub

(5)在【添加】按钮的Click事件下添加代码如下:
Private Sub Command1_Click() Unlockctl Text1 = "": Text2 = "": Text3 = "": Text4 = "": Text5 = "": Text6 = "": Text7 = "": Text8 = "": Text9 = "": Text10 = "": Text11 = "": Text12 = "": Text13 = "": Text14 = "" Text1.SetFocus

26

Command4.Enabled = True: Command5.Enabled = True Command3.Enabled = False: Command2.Enabled = False Adodc1.Enabled = False: i = 1 End Sub

(6)在【修改】按钮的 Click 事件下添加代码如下:
Private Sub Command2_Click() Unlockctl i = 2 Command6.Enabled = True: Command5.Enabled = True Command1.Enabled = False: Command3.Enabled = False Adodc1.Enabled = False: Text1.Enabled = False End Sub

(7)在【删除】按钮的 Click 事件下添加代码如下:
Private Sub Command3_Click() If MsgBox("您确实要删除记录吗?", vbOKCancel, "系统提示") = vbOK Then adoCon.Execute ("delete from 乘务员档案表 where 驾驶员编号='" & Text1 & "'") MsgBox " 记录已删除!", , "系统提示" Adodc1.Refresh End If End Sub

(8)在【确定】按钮的 Click 事件下添加代码如下:
Private Sub Command5_Click() Select Case i Case 1 If Text1 = "" Then MsgBox "驾驶员编号不能为空", Text1.SetFocus Exit Sub End If If Text2 = "" Then MsgBox "驾驶证编号不能为空", Text2.SetFocus Exit Sub End If If Text3 = "" Then MsgBox "乘务员姓名不能为空", Text3.SetFocus Exit Sub End If If Text6 = "" Then MsgBox "出生年月不能为空", , Text6.SetFocus Exit Sub End If

, "系统提示"

, "系统提示"

, "系统提示"

"系统提示"

27

If Text7 = "" Then MsgBox "技术级别不能为空", , "系统提示" Text7.SetFocus Exit Sub End If Dim rs As New ADODB.Recordset Set rs = adoCon.Execute("select * from 乘务员档案表 where 驾驶 员编号='" & Text1.Text & "'") If rs.EOF = False Then MsgBox "此驾驶员编号已经存在!", , "系统提示" Text1 = "" Text1.SetFocus End If rs.Close adoCon.Execute ("insert into 乘务员档案表 values ('" & Text1 & "','" & Text2 & "','" & Text3 & "','" & Text5 & "','" & Text6 & "','" & Text9 & "','" & Text8 & "','" & Text7 & "','" & Text12 & "','" & Text10 & "','" & Text13 & "','" & Text11 & "','" & Text4 & "','" & Text14 & "')") MsgBox "记录添加成功!", , "系统提示" Adodc1.Refresh Case 2 adoCon.Execute ("update 乘务员档案表 set 驾驶证编号='" & Text2 & "',乘务员姓名='" & Text3 & "',性别='" & Text5 & "',出生年月='" & Text6 & "', 家庭住址='" & Text9 & "', 联系电话='" & Text8 & "', 技术级别='" & Text7 & "', 参加工作时间='" & Text12 & "', 驾龄='" & Text10 & "',运行安全公里='" & Text13 & "', 发证日期='" & Text11 & "', 所属车辆段='" & Text4 & "', 备注='" & Text14 & "' where 驾 驶员编号='" & Text1 & "'") MsgBox "记录修改成功!", , "系统提示" Adodc1.Refresh End Select Lockctl Command6.Enabled = False: Command5.Enabled = False Command1.Enabled = True: Command2.Enabled = True Command3.Enabled = True: Adodc1.Enabled = True End Sub

(9)在【取消】按钮的Click事件下添加代码如下:
Private Sub Command6_Click() On Error Resume Next Adodc1.Refresh Lockctl Command6.Enabled = False: Command5.Enabled = False Command1.Enabled = True: Command2.Enabled = True Command3.Enabled = True: Adodc1.Enabled = True End Sub '当没有添加数据的时候 处理异常 Adodc1.Recordset.CancelUpdate

28

(10)在【查询】按钮的 Click 事件下添加代码如下:
Private Sub Command4_Click() Dim str As String str = InputBox$("输入你要查询的驾驶员编号:", "系统提示") If str = "" Then Exit Sub Adodc1.RecordSource = "select * from 乘务员档案表 where 驾驶员编号='" + str + "'" Adodc1.Refresh If Adodc1.Recordset.RecordCount > 0 Then On Error Resume Next '当没有添加数据的时候 处理异常 Text1.Text = Adodc1.Recordset.Fields(0) Text2.Text = Adodc1.Recordset.Fields(1) Text3.Text = Adodc1.Recordset.Fields(2) Text5.Text = Adodc1.Recordset.Fields(3) Text6.Text = Adodc1.Recordset.Fields(4) Text9.Text = Adodc1.Recordset.Fields(5) Text8.Text = Adodc1.Recordset.Fields(6) Text7.Text = Adodc1.Recordset.Fields(7) Text12.Text = Adodc1.Recordset.Fields(8) Text10.Text = Adodc1.Recordset.Fields(9) Text13.Text = Adodc1.Recordset.Fields(10) Text11.Text = Adodc1.Recordset.Fields(11) Text4.Text = Adodc1.Recordset.Fields(12) Text14.Text = Adodc1.Recordset.Fields(13) Command2.Enabled = True: Command3.Enabled = True Else MsgBox "没有你需要的信息!", , "系统提示" Command2.Enabled = False: Command3.Enabled = False End If End Sub

(11)在【退出】按钮的Click事件下添加代码如下:
Private Sub Command7_Click() MDIForm1.StatusBar1.Panels(1).Text = "" Unload Me

29

End Sub

3.3.3数据访问技术的实现
1. 创建ODBC连接 选择“开始→程序→管理工具→数据源(ODBC)”命令,以打开ODBC数据源管 理器对话框。选择“系统DSN”选项卡,然后单击“添加”按钮。当出现“创建新数据 源”对话框时,从ODBC驱动程序列表中选择SQL Server ,然后单击“完成”按钮。 在“名称”框中指定数据源名称,在“说明”框中输入描述该数据源文字,在“服务 器”列表中选择选择要连接的SQL Server服务器,然后点击“下一步”。在新的对 话框中单击“使用网络登陆ID的Windows NT验证”或单击“使用用户输入登陆ID和 密码的SQL Server验证”。若单击后者,还应选取“连接SQL Server以获得其它配 置选项的默认设置”复选框,并输入登陆ID和密码,然后单击“下一步”按钮。然 后在选取“更改默认的数据库为”复选框, 并在可用数据库列表中选择要使用的默 认数据库,然后单击“下一步”按钮。直接单击“完成”按钮。 此时,新建的系统数据源出现在ODBC数据管理器中。若要修改该数据源,单 击该数据源,然后单击“配置”按钮,若要删除该数据源,单击该数据源,然后单 击“删除”按钮。 2.ADO控件的实现 见3.3.1节内容 3. ADO控件在车辆档案查询窗体中的设计代码 其主要代码如下:
Adodc1.ConnectionString = "Provider=MSDASQL.1;Data Source= car;Persist Security Info=False" Adodc1.RecordSource = "select * from 车辆档案表" Adodc1.Refresh

3.4 生成EXE文件和打包
3.4.1 生成EXE文件
经调试,如果没有发现任何错误,就可以建立工程的可执行文件。方法是: 1.从[文件]菜单中选取[制作 地铁车辆管理信心系统.EXE], 出现[生成工程] 对话框。 2.在[文件名]文本框中输入本系统的可执行文件名,或浏览有关目录,选定 一个现有文件名。[保存在]列表框中选择可执行文件保存的位置。 3.单击[选项]按钮, 可以在[工程属性]对话框里规定一些有关该执行文件特 定版本的详细资料。 4.单击[确定],关闭[工程属性]对话框,再在[制作 oppname.exe]对话框中

30

选取[确定],编译和连接该执行文件。双击可执行文件的图标,像运行任 何其它基于Windows的应用程序那样,可运行这个可执行文件。

3.4.2 工程的打包操作
1. 从 [ 程 序 ] 中 找 到 Microsoft Visual Basic6.0 的 程 序 , 在 程 序 中 找 到 Microsoft Visual Basic6.0工具;然后,找到“Package & Deployment 向导”,单击向导后,弹出“打包和展开向导”对话框,在“选择工程”中, 选择要打包的工程,点击[打包]按钮。 2.弹出“打包脚本”对话框,从中可以选择添加、修改打包脚本,单击“下一 步”。 3.弹出“包类型”对话框, 在“包类型”文本框中选择“标准安装包”, 单击“下一 步”。 4.弹出“打包文件夹”对话框,从中选择打好后的包,将被装配的文件夹,单 击“下一步”。 5.在“包含文件”对话框中, 选择哪些文件将被包含在要打的包中, 选择好后, 单击“下一步”。 6.在“压缩文件选项”对话框中,选择创建一个的大的或多个压缩文件的包, 单击“下一步”。 7.在“安装程序标题”对话框中,输入当安装程序运行时所显示的标题,单击 “下一步”。 8.在“启动菜单项”中确定安装进程要创建的启动菜单群组及项目,单击“下 一步”。 9.在“安装位置”窗体中选择或更改一些文件的相关位置,单击“下一步”。 10.在“共享文件”窗体中,选择共享文件后,单击“下一步”,在弹出的“已完 成!”对话框中,点击[完成]按钮。工程的打包过程结束。

3.5 实现中遇到的问题及解决方法
3.5.1 问题一
当打开车辆档案录入窗体时,发现在其窗体中已有一条记录存在,当想做任 何操作时,都会先弹出“此车号已经存在”的系统提示。 经过详细的分析得知,在代码窗体中对其代码编写错误,将Text1的LostFocus ()事件写成:
Private Sub Text1_LostFocus() If Text1.Text = "" Then Exit Sub Dim rs As New ADODB.Recordset

31

Set rs = adoCon.Execute("select * from 车 辆 档 案 表 where 车 号 ='" & Text1.Text & "'") If rs.EOF = False Then MsgBox "此车号已经存在!", , "系统提示" Text1 = "" Text1.SetFocus End If rs.Close End Sub

解决方法: 发现错误后,将其代码在确定按钮的Click()事件中改成:
Dim rs As New ADODB.Recordset Set rs = adoCon.Execute("select * from 车辆档 案表 where 车 号='" & Text1.Text & "'") If rs.EOF = False Then MsgBox "此车号已经存在!", , "系统提示" Text1 = "" Text1.SetFocus End If rs.Close

所出现的问题就迎刃而解了。

3.5.2 问题二
当点击查询窗体时,体统会出现“编译错误。未找到方法或数据成员”系统 提示。 解决方法: 经过反复的调试和实验,终于查找出其问题的原因。原因是在任何 Load 窗 体下不能添加 Adodc1.ConnectionString = "Provider=MSDASQL.1;Data Source= car;Persist Security Info=False"的代码,将这段代码放在“通用”的 Rebind 事件中,刚刚报出的错误随即消失,程序可正常运行。

32

第 4 章 程序优化及待开发的项目
4.1程序优化
由于本系统中有“系统初始化”功能,当选择“系统初始化”菜单项时,系 统将会清空数据库中所有的数据,包括用户表,当用户表中无数据时,将导致用 户从登录窗体中无法进入系统,因此有必要将程序优化。 1. 首先在系统初始化的click事件中添加: adoCon.Execute ("delete from 用户表 where 用户类型 <> '超级管理员 '") 作用是:删除用户表中除了用户类型为超级管理员的所有数据。 2. 然后在管理员设置窗体中的确定按钮的click事件中添加: adoCon.Execute ("select * from 用户表 where 用户类型 <> '超级管理 员'") 作用是: 在管理员设置窗体中用户类型的选项中除超级管理员选项不显示在 combo 中,其余的用户类型数据都显示在 combo 中。 3. 最后在登录窗体中load事件中添加: Set adors = adoCon.Execute("select * from 用户表 where 用户类型 <> '超级管理员' ") 作用是:在登录窗体中用户类型的选项中除超级管理员选项不显示在 combo 中,其余的用户类型数据都显示 combo 中。 这样一来,保证了开发者在用户表中永远有一条记录,用户可以通过这 条原始记录进入系统。

4.2 待开发的项目
由于自己所学的知识有限以及时间的问题, 在本系统中, 打印功能还未完成, 我认为打印功能的实现,可以更直接、直观的服务于用户。因此,在以后的时间 里,还要将打印功能予以实现。

33

结 束 语

经过三个多月的设计和开发,地铁车辆管理信息系统基本开发完毕。其功 能基本符合用户需求,能够完成对地铁车辆管理及人员管理的存储和查询,并 提供部分系统维护功能,使用户方便进行数据备份和数据恢复。 但是由于毕业设计时间较短,所以该系统还有许多不尽如人意的地方,比 如用户界面不够美观, 出错处理不够以及各类相关报表的打印功能还未实现等 多方面问题。这些都有待进一步改善。

34





在本次毕业设计中,我从指导教师苏明老师身上学到了很多东西。苏明老师 认真负责的工作态度,严谨的治学精神和深厚的理论水平都使我受益匪浅。他无 论在理论上还是在实践中,都给与我很大的帮助,使我得到不少的提高这对于我 以后的工作和学习都有一种巨大的帮助,感谢她耐心的辅导。 另外,在系统开发过程中还有各位同学们同样给与我不少帮助,帮助解决了 不少的难点,使得系统能及时开发完成,这里一并表示感谢!

35

参 考 文 献

[1] 陈明.Visual Basic 程序设计.2000年12月第一版.中央广播电视大学出版社, 2001年2月出版 [2] 刘世峰.数据库基础与应用.2003年12月第一版.中央广播电视大学出版社, 2004年1月出版 [3] 郭瑞军、唐邦民、谢晗昕 等.Visual Basic 数据库开发实例精粹. 2005年1月 第一版.电子工业出版社,2005年1月出版 [4] 塞奎春、高春艳、李俊民、张耀庭.Visual Basic 信息系统开发实例精选. 2005年7月第一版.机械工业出版社,2005年7月出版 [5] 刘瑞新、张二峰、齐晖、娄季峰.Visual Basic 管理信息系统开发. 2005年3月第一版.机械工业出版,2005年3月出版 [6] 明日科技、高春艳、李俊民、刘彬彬. Visual Basic 程序开发范例宝典.2006 年7月第一版.人民邮电出版社,2006年7月 [7] 徐孝凯 等.面向对象程序设计.2003年6月第一版. 中央广播电视大学出版, 2003年7月出版 [8] E.Winemiller,J.Roff,B.Heyman,R.Groom .Visual Basic 6.0数据库开 发.顾斌、杨德斌.1999年9月第一版.清华大学出版社,2000年7月第三次出 版 [9] (英 ) 迪 尤 逊 .SQL Server 2005 基 础 教程 .2006 年 第 一 版 . 人民 邮 电 出 版 社,2006. [10] 刘辉.零基础学SQL Server 2005. 2008年5月第一版.机械工业出版社,2008. [11] 蒲卫.SQL Server 2005开发者指南. 2008年第一版.科学出版社,2008.

36





附录1.主界面工具栏的设计代码:
Private Sub Toolbar1_ButtonClick(ByVal Button As MSComctlLib.Button) Select Case Button.Index Case 1 Call mnuchelu_Click Case 2 Call mnuyitian_Click Case 4 Call mnurenlu_Click Case 5 Call mnuweitian_Click Case 11 Call mnuExit_Click End Select End Sub Private Sub Toolbar1_ButtonMenuClick(ByVal MSComctlLib.ButtonMenu) Select Case ButtonMenu.Index Case 1 Call mnuchecha_Click Case 2 Call mnurencha_Click Case 4 Call mnuyicha_Click Case 5 Call mnulincha_Click Case 6 Call mnudiaocha_Click Case 8 Call mnuweicha_Click Case 9 Call mnushicha_Click Case 10 Call mnujiangcha_Click End Select End Sub ButtonMenu As

附录2.车辆档案录入窗体设计代码:
Dim i As Integer Private Sub Lockctl() Text1.Enabled = False: Text5.Enabled = False: Text6.Enabled = False Text2.Enabled = False: Text3.Enabled = False: Text4.Enabled = False Text7.Enabled = False: Text8.Enabled = False: Text9.Enabled = False Text10.Enabled = False: Text11.Enabled = False: Text12.Enabled = False

37

Text13.Enabled = False: Text14.Enabled = False End Sub Private Sub Unlockctl() Text1.Enabled = True: Text5.Enabled = True: Text6.Enabled = True Text2.Enabled = True: Text3.Enabled = True: Text4.Enabled = True Text7.Enabled = True: Text8.Enabled = True: Text9.Enabled = True Text10.Enabled = True: Text11.Enabled = True: Text12.Enabled = True Text13.Enabled = True: Text14.Enabled = True End Sub Private Sub Form_Load() frmrenlu.Height = 5745: frmrenlu.Width = 9585 Adodc1.RecordSource = "select * from 乘务员档案表" Adodc1.Refresh If Adodc1.Recordset.RecordCount > 0 Then Text1.Text = Adodc1.Recordset.Fields(0) On Error Resume Next Text1.Text = Adodc1.Recordset.Fields(0) Text2.Text = Adodc1.Recordset.Fields(1) Text3.Text = Adodc1.Recordset.Fields(2) Text5.Text = Adodc1.Recordset.Fields(3) Text6.Text = Adodc1.Recordset.Fields(4) Text9.Text = Adodc1.Recordset.Fields(5) Text8.Text = Adodc1.Recordset.Fields(6) Text7.Text = Adodc1.Recordset.Fields(7) Text12.Text = Adodc1.Recordset.Fields(8) Text10.Text = Adodc1.Recordset.Fields(9) Text13.Text = Adodc1.Recordset.Fields(10) Text11.Text = Adodc1.Recordset.Fields(11) Text4.Text = Adodc1.Recordset.Fields(12) Text14.Text = Adodc1.Recordset.Fields(13) End Sub Private Sub Command1_Click() Unlockctl Text1 = "": Text2 = "": Text3 = "": Text4 = "": Text5 = "": Text6 = "": Text7 = "": Text8 = "": Text9 = "": Text10 = "": Text11 = "": Text12 = "": Text13 = "": Text14 = "" Text1.SetFocus Command4.Enabled = True: Command5.Enabled = True Command3.Enabled = False: Command2.Enabled = False Adodc1.Enabled = False: i=1 End Sub Private Sub Command2_Click() Unlockctl i=2 Command6.Enabled = True: Command5.Enabled = True Command1.Enabled = False: Command3.Enabled = False Adodc1.Enabled = False: Text1.Enabled = False End Sub Private Sub Command3_Click() If MsgBox("您确实要删除记录吗?", vbOKCancel, "系统提示") = vbOK Then adoCon.Execute ("delete from 乘务员档案表 where 驾驶员编号='" & Text1 & "'") MsgBox " 记录已删除!", , "系统提示"

38

Adodc1.Refresh End If End Sub Private Sub Command4_Click() Dim str As String str = InputBox$("输入你要查询的驾驶员编号:", "系统提示") If str = "" Then Exit Sub Adodc1.RecordSource = "select * from 乘务员档案表 where 驾驶员编号='" + str + "'" Adodc1.Refresh If Adodc1.Recordset.RecordCount > 0 Then On Error Resume Next '当没有添加数据的时候 处理异常 Text1.Text = Adodc1.Recordset.Fields(0) Text2.Text = Adodc1.Recordset.Fields(1) Text3.Text = Adodc1.Recordset.Fields(2) Text5.Text = Adodc1.Recordset.Fields(3) Text6.Text = Adodc1.Recordset.Fields(4) Text9.Text = Adodc1.Recordset.Fields(5) Text8.Text = Adodc1.Recordset.Fields(6) Text7.Text = Adodc1.Recordset.Fields(7) Text12.Text = Adodc1.Recordset.Fields(8) Text10.Text = Adodc1.Recordset.Fields(9) Text13.Text = Adodc1.Recordset.Fields(10) Text11.Text = Adodc1.Recordset.Fields(11) Text4.Text = Adodc1.Recordset.Fields(12) Text14.Text = Adodc1.Recordset.Fields(13) Command2.Enabled = True: Command3.Enabled = True Else MsgBox "没有你需要的信息!", , "系统提示" Command2.Enabled = False: Command3.Enabled = False End If End Sub Private Sub Command5_Click() Select Case i Case 1 If Text1 = "" Then MsgBox "驾驶员编号不能为空", , "系统提示" Text1.SetFocus Exit Sub End If If Text2 = "" Then MsgBox "驾驶证编号不能为空", , "系统提示" Text2.SetFocus Exit Sub End If If Text3 = "" Then MsgBox "乘务员姓名不能为空", , "系统提示" Text3.SetFocus Exit Sub End If If Text6 = "" Then MsgBox "出生年月不能为空", , "系统提示" Text6.SetFocus

39

Exit Sub End If If Text7 = "" Then MsgBox "技术级别不能为空", , "系统提示" Text7.SetFocus Exit Sub End If Dim rs As New ADODB.Recordset Set rs = adoCon.Execute("select * from 乘务员档案表 where 驾驶员编号='" & Text1.Text & "'") If rs.EOF = False Then MsgBox "此驾驶员编号已经存在!", , "系统提示" Text1 = "" Text1.SetFocus End If rs.Close adoCon.Execute ("insert into 乘务员档案表 values ('" & Text1 & "','" & Text2 & "','" & Text3 & "','" & Text5 & "','" & Text6 & "','" & Text9 & "','" & Text8 & "','" & Text7 & "','" & Text12 & "','" & Text10 & "','" & Text13 & "','" & Text11 & "','" & Text4 & "','" & Text14 & "')") MsgBox "记录添加成功!", , "系统提示" Adodc1.Refresh Case 2 adoCon.Execute ("update 乘务员档案表 set 驾驶证编号='" & Text2 & "',乘务 员姓名='" & Text3 & "',性别='" & Text5 & "',出生年月='" & Text6 & "', 家庭住址 ='" & Text9 & "', 联系电话='" & Text8 & "', 技术级别='" & Text7 & "', 参加工作时 间='" & Text12 & "', 驾龄='" & Text10 & "',运行安全公里='" & Text13 & "', 发证 日期='" & Text11 & "', 所属车辆段='" & Text4 & "', 备注='" & Text14 & "' where 驾驶员编号='" & Text1 & "'") MsgBox "记录修改成功!", , "系统提示" Adodc1.Refresh End Select Lockctl Command6.Enabled = False: Command5.Enabled = False Command1.Enabled = True: Command2.Enabled = True Command3.Enabled = True: Adodc1.Enabled = True End Sub Private Sub Command6_Click() On Error Resume Next '当没有添加数据的时候 处理异常 Adodc1.Recordset.CancelUpdate Adodc1.Refresh Lockctl Command6.Enabled = False: Command5.Enabled = False Command1.Enabled = True: Command2.Enabled = True Command3.Enabled = True: Adodc1.Enabled = True End Sub Private Sub Command7_Click() MDIForm1.StatusBar1.Panels(1).Text = "" Unload Me End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Command7_Click End Sub Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer)

40

If KeyCode = 13 Then Text2.SetFocus End Sub Private Sub Text2_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text3.SetFocus End Sub Private Sub text3_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text4.SetFocus End Sub Private Sub text4_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text4.SetFocus End Sub Private Sub text5_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text6.SetFocus End Sub Private Sub text6_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text7.SetFocus End Sub Private Sub text7_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text8.SetFocus End Sub Private Sub text8_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text9.SetFocus End Sub Private Sub text9_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text10.SetFocus End Sub Private Sub text10_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text11.SetFocus End Sub Private Sub text11_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text12.SetFocus End Sub Private Sub text12_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text13.SetFocus End Sub Private Sub text13_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text14.SetFocus End Sub

附录3.车辆档案查询窗体设计代码:
Private Sub check1_Click() If Check1.Value Then Combo1.Enabled = True Else Combo1.Enabled = False End If End Sub Private Sub check2_Click() If Check2.Value Then Combo2.Enabled = True Else Combo2.Enabled = False End If End Sub

41

Private Sub check3_Click() If Check3.Value Then Combo3.Enabled = True Else Combo3.Enabled = False End If End Sub Private Sub Command3_Click() MDIForm1.StatusBar1.Panels(1).Text = "" Unload Me End Sub Private Sub Command2_Click() '点击查询按纽后首先清空车辆档案列表 Call QingKong Command1.Visible = True Frame1.Enabled = True Command2.Enabled = True Command3.Enabled = True End Sub Private Sub Command1_Click() Dim sql As String Dim sc1 As String If Check1.Value Then sc1 = "车号 like '" & Combo1.Text & "%'" Else sc1 = "车号 like '%'" End If Dim sc2 As String If Check2.Value Then sc2 = "车辆类型 like'%" & Combo3.Text & "%'" Else sc2 = "车辆类型 like '%'" End If Dim sc3 As String If Check3.Value Then sc3 = "异动否 like'%" & Combo2.Text & "%'" Else sc3 = "异动否 like '%'" End If sql = "select * from 车辆档案表 where " & sc1 & "and " & sc2 & "and " & sc3 & "" 'MsgBox sql If sql = "select * from 车辆档案表 where 车号 like '%'and 车辆类型 like '%'and 异 动否 like '%'" Then MsgBox "请选择查询条件", , "系统提示" '清空上一次的查询记录 Call QingKong Exit Sub End If Set adors = adoCon.Execute(sql) If adors.EOF Then '清空上一次的查询记录

42

Call QingKong '给出文本框提示 MsgBox "没有符合您查询车辆的条件!", , "系统提示" Else Adodc1.RecordSource = sql Adodc1.Refresh End If adors.Close Check1.Value = 0 Check2.Value = 0 Check3.Value = 0 End Sub Private Sub Form_Load() Command1.Visible = True Command3.Enabled = True frmchecha.Height = 5340 frmchecha.Width = 8565 '将表里存在的所有车号加到控件combo1里 On Error Resume Next Call Rebind Set adors = adoCon.Execute("select distinct 车号 from 车辆档案表") On Error Resume Next Do Combo1.AddItem adors.Fields(0) adors.MoveNext Loop Until adors.EOF adors.Close Set adors = adoCon.Execute("select distinct 车辆类型 from 车辆档案表") On Error Resume Next Do Combo2.AddItem adors.Fields(0) adors.MoveNext Loop Until adors.EOF adors.Close Set adors = adoCon.Execute("select distinct 异动否 from 车辆档案表") On Error Resume Next Do Combo3.AddItem adors.Fields(0) adors.MoveNext Loop Until adors.EOF adors.Close End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Command3_Click End Sub Private Sub Rebind() Frame2.Caption = "车辆档案列表" '联接数据库及选表 Adodc1.ConnectionString = "Provider=MSDASQL.1;Data Source= car;Persist Security Info=False" Adodc1.RecordSource = "select * from 车辆档案表" Adodc1.Refresh End Sub Private Sub QingKong() Frame2.Caption = "您所要查询的车辆档案如下:"

43

'清空datagrid1控件里的记录 Adodc1.ConnectionString = "Provider=MSDASQL.1;Data Source= Security Info=False" Adodc1.RecordSource = "select * from 车辆档案表 where 0=1" Adodc1.Refresh End Sub

car;Persist

附录4.人员档案录入窗体设计代码:
Dim i As Integer Private Sub Lockctl() Text1.Enabled = False: Text5.Enabled = False: Text6.Enabled = False Text2.Enabled = False: Text3.Enabled = False: Text4.Enabled = False Text7.Enabled = False: Text8.Enabled = False: Text9.Enabled = False Text10.Enabled = False: Text11.Enabled = False: Text12.Enabled = False Text13.Enabled = False: Text14.Enabled = False End Sub Private Sub Unlockctl() Text1.Enabled = True: Text5.Enabled = True: Text6.Enabled = True Text2.Enabled = True: Text3.Enabled = True: Text4.Enabled = True Text7.Enabled = True: Text8.Enabled = True: Text9.Enabled = True Text10.Enabled = True: Text11.Enabled = True: Text12.Enabled = True Text13.Enabled = True: Text14.Enabled = True End Sub Private Sub Form_Load() frmrenlu.Height = 5745: frmrenlu.Width = 9585 Adodc1.RecordSource = "select * from 乘务员档案表" Adodc1.Refresh If Adodc1.Recordset.RecordCount > 0 Then Text1.Text = Adodc1.Recordset.Fields(0) On Error Resume Next Text1.Text = Adodc1.Recordset.Fields(0) Text2.Text = Adodc1.Recordset.Fields(1) Text3.Text = Adodc1.Recordset.Fields(2) Text5.Text = Adodc1.Recordset.Fields(3) Text6.Text = Adodc1.Recordset.Fields(4) Text9.Text = Adodc1.Recordset.Fields(5) Text8.Text = Adodc1.Recordset.Fields(6) Text7.Text = Adodc1.Recordset.Fields(7) Text12.Text = Adodc1.Recordset.Fields(8) Text10.Text = Adodc1.Recordset.Fields(9) Text13.Text = Adodc1.Recordset.Fields(10) Text11.Text = Adodc1.Recordset.Fields(11) Text4.Text = Adodc1.Recordset.Fields(12) Text14.Text = Adodc1.Recordset.Fields(13) End Sub Private Sub Command1_Click() Unlockctl Text1 = "": Text2 = "": Text3 = "": Text4 = "": Text5 = "": Text6 = "": Text7 = "": Text8 = "": Text9 = "": Text10 = "": Text11 = "": Text12 = "": Text13 = "": Text14 = "" Text1.SetFocus Command4.Enabled = True: Command5.Enabled = True Command3.Enabled = False: Command2.Enabled = False Adodc1.Enabled = False:

44

i=1 End Sub Private Sub Command2_Click() Unlockctl i=2 Command6.Enabled = True: Command5.Enabled = True Command1.Enabled = False: Command3.Enabled = False Adodc1.Enabled = False: Text1.Enabled = False End Sub Private Sub Command3_Click() If MsgBox("您确实要删除记录吗?", vbOKCancel, "系统提示") = vbOK Then adoCon.Execute ("delete from 乘务员档案表 where 驾驶员编号='" & Text1 & "'") MsgBox " 记录已删除!", , "系统提示" Adodc1.Refresh End If End Sub Private Sub Command4_Click() Dim str As String str = InputBox$("输入你要查询的驾驶员编号:", "系统提示") If str = "" Then Exit Sub Adodc1.RecordSource = "select * from 乘务员档案表 where 驾驶员编号='" + str + "'" Adodc1.Refresh If Adodc1.Recordset.RecordCount > 0 Then On Error Resume Next '当没有添加数据的时候 处理异常 Text1.Text = Adodc1.Recordset.Fields(0) Text2.Text = Adodc1.Recordset.Fields(1) Text3.Text = Adodc1.Recordset.Fields(2) Text5.Text = Adodc1.Recordset.Fields(3) Text6.Text = Adodc1.Recordset.Fields(4) Text9.Text = Adodc1.Recordset.Fields(5) Text8.Text = Adodc1.Recordset.Fields(6) Text7.Text = Adodc1.Recordset.Fields(7) Text12.Text = Adodc1.Recordset.Fields(8) Text10.Text = Adodc1.Recordset.Fields(9) Text13.Text = Adodc1.Recordset.Fields(10) Text11.Text = Adodc1.Recordset.Fields(11) Text4.Text = Adodc1.Recordset.Fields(12) Text14.Text = Adodc1.Recordset.Fields(13) Command2.Enabled = True: Command3.Enabled = True Else MsgBox "没有你需要的信息!", , "系统提示" Command2.Enabled = False: Command3.Enabled = False End If End Sub Private Sub Command5_Click() Select Case i Case 1 If Text1 = "" Then MsgBox "驾驶员编号不能为空", , "系统提示"

45

Text1.SetFocus Exit Sub End If If Text2 = "" Then MsgBox "驾驶证编号不能为空", , "系统提示" Text2.SetFocus Exit Sub End If If Text3 = "" Then MsgBox "乘务员姓名不能为空", , "系统提示" Text3.SetFocus Exit Sub End If If Text6 = "" Then MsgBox "出生年月不能为空", , "系统提示" Text6.SetFocus Exit Sub End If If Text7 = "" Then MsgBox "技术级别不能为空", , "系统提示" Text7.SetFocus Exit Sub End If Dim rs As New ADODB.Recordset Set rs = adoCon.Execute("select * from 乘务员档案表 where 驾驶员编号='" & Text1.Text & "'") If rs.EOF = False Then MsgBox "此驾驶员编号已经存在!", , "系统提示" Text1 = "" Text1.SetFocus End If rs.Close adoCon.Execute ("insert into 乘务员档案表 values ('" & Text1 & "','" & Text2 & "','" & Text3 & "','" & Text5 & "','" & Text6 & "','" & Text9 & "','" & Text8 & "','" & Text7 & "','" & Text12 & "','" & Text10 & "','" & Text13 & "','" & Text11 & "','" & Text4 & "','" & Text14 & "')") MsgBox "记录添加成功!", , "系统提示" Adodc1.Refresh Case 2 adoCon.Execute ("update 乘务员档案表 set 驾驶证编号='" & Text2 & "',乘务 员姓名='" & Text3 & "',性别='" & Text5 & "',出生年月='" & Text6 & "', 家庭住址='" & Text9 & "', 联系电话='" & Text8 & "', 技术级别='" & Text7 & "', 参加工作时间='" & Text12 & "', 驾龄 ='" & Text10 & "',运行安全公里='" & Text13 & "', 发证日期='" & Text11 & "', 所属车辆段='" & Text4 & "', 备注='" & Text14 & "' where 驾驶员编号='" & Text1 & "'") MsgBox "记录修改成功!", , "系统提示" Adodc1.Refresh End Select Lockctl Command6.Enabled = False: Command5.Enabled = False Command1.Enabled = True: Command2.Enabled = True Command3.Enabled = True: Adodc1.Enabled = True End Sub Private Sub Command6_Click() On Error Resume Next '当没有添加数据的时候 处理异常 Adodc1.Recordset.CancelUpdate

46

Adodc1.Refresh Lockctl Command6.Enabled = False: Command5.Enabled = False Command1.Enabled = True: Command2.Enabled = True Command3.Enabled = True: Adodc1.Enabled = True End Sub Private Sub Command7_Click() MDIForm1.StatusBar1.Panels(1).Text = "" Unload Me End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Command7_Click End Sub Private Sub Text1_KeyDown(KeyCode As Integer, Shift As Integer) If KeyCode = 13 Then Text2.SetFocus End Sub Private Sub Text2_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text3.SetFocus End Sub Private Sub text3_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text4.SetFocus End Sub Private Sub text4_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text4.SetFocus End Sub Private Sub text5_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text6.SetFocus End Sub Private Sub text6_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text7.SetFocus End Sub Private Sub text7_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text8.SetFocus End Sub Private Sub text8_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text9.SetFocus End Sub Private Sub text9_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text10.SetFocus End Sub Private Sub text10_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text11.SetFocus End Sub Private Sub text11_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text12.SetFocus End Sub Private Sub text12_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text13.SetFocus End Sub Private Sub text13_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text14.SetFocus End Sub

47

附录5.人员档案查询窗体设计代码:
Private Sub check1_Click() If Check1.Value Then Combo1.Enabled = True Else Combo1.Enabled = False End If End Sub Private Sub check2_Click() If Check2.Value Then Combo2.Enabled = True Else Combo2.Enabled = False End If End Sub Private Sub check3_Click() If Check3.Value Then Combo3.Enabled = True Else Combo3.Enabled = False End If End Sub Private Sub check4_Click() If Check4.Value Then Combo4.Enabled = True Else Combo4.Enabled = False End If End Sub Private Sub Command3_Click() MDIForm1.StatusBar1.Panels(1).Text = "" Unload Me End Sub Private Sub Command2_Click() '点击查询按纽后首先清空车辆档案列表 Call QingKong Command1.Visible = True Frame1.Enabled = True Command2.Enabled = True Command3.Enabled = True End Sub Private Sub Command1_Click() Dim sql As String Dim sc1 As String If Check1.Value Then sc1 = "驾驶证编号 like '" & Combo1.Text & "%'" Else sc1 = "驾驶证编号 like '%'" End If Dim sc2 As String If Check2.Value Then sc2 = "乘务员姓名 like'%" & Combo2.Text & "%'" Else

48

sc2 = "乘务员姓名 like '%'" End If Dim sc3 As String If Check3.Value Then sc3 = "性别 like'%" & Combo3.Text & "%'" Else sc3 = "性别 like '%'" End If Dim sc4 As String If Check4.Value Then sc4 = "技术级别 like'%" & Combo4.Text & "%'" Else sc4 = "技术级别 like '%'" End If sql = "select * from 乘务员档案表 where " & sc1 & "and " & sc2 & "and " & sc3 & "and " & sc4 & "" 'MsgBox sql If sql = "select * from 乘务员档案表 where 驾驶证编号 like '%'and 乘务员姓名 like '%'and 性别 like '%'and 技术级别 like '%'" Then MsgBox "请选择查询条件", , "系统提示" '清空上一次的查询记录 Call QingKong Exit Sub End If Set adors = adoCon.Execute(sql) If adors.EOF Then '清空上一次的查询记录 Call QingKong '给出文本框提示 MsgBox "没有符合您查询乘务员档案的条件!", , "系统提示" Else Adodc1.RecordSource = sql Adodc1.Refresh End If adors.Close Check1.Value = 0 Check2.Value = 0 Check3.Value = 0 Check4.Value = 0 End Sub Private Sub Form_Load() Command1.Visible = True Command3.Enabled = True frmrencha.Height = 6495 frmrencha.Width = 8550 '将表里存在的所有车号加到控件combo1里 On Error Resume Next Call Rebind Set adors = adoCon.Execute("select distinct 驾驶证编号 from 乘务员档案表") On Error Resume Next Do

49

Combo1.AddItem adors.Fields(0) adors.MoveNext Loop Until adors.EOF adors.Close Set adors = adoCon.Execute("select distinct 乘务员姓名 from 乘务员档案表") On Error Resume Next Do Combo2.AddItem adors.Fields(0) adors.MoveNext Loop Until adors.EOF adors.Close Set adors = adoCon.Execute("select distinct 性别 from 乘务员档案表") On Error Resume Next Do Combo3.AddItem adors.Fields(0) adors.MoveNext Loop Until adors.EOF adors.Close Set adors = adoCon.Execute("select distinct 技术级别 from 乘务员档案表") On Error Resume Next Do Combo4.AddItem adors.Fields(0) adors.MoveNext Loop Until adors.EOF adors.Close End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) Command3_Click End Sub Private Sub Rebind() Frame2.Caption = "乘务员档案列表" '联接数据库及选表 Adodc1.ConnectionString = "Provider=MSDASQL.1;Data Source= car;Persist Security Info=False" Adodc1.RecordSource = "select * from 乘务员档案表" Adodc1.Refresh End Sub Private Sub QingKong() Frame2.Caption = "您所要查询的乘务员档案如下:" '清空datagrid1控件里的记录 Adodc1.ConnectionString = "Provider=MSDASQL.1;Data Source= Security Info=False" Adodc1.RecordSource = "select * from 乘务员档案表 where 0=1" Adodc1.Refresh End Sub

car;Persist

附录6.管理员窗体的设计代码:
Dim i As Integer Dim adoRs1 As New ADODB.Recordset Private Sub cmdAdd_Click() Unlockctl Text1 = "" Text2 = "" Text3 = ""

50

Combo1.Text = "" Text1.SetFocus cmdOk.Enabled = True cmdCancel.Enabled = True cmdUpdate.Enabled = False cmdDelete.Enabled = False cmdAdd.Enabled = False i=1 End Sub Private Sub cmdCancel_Click() On Error Resume Next Select Case i Case 1 Adodc1.Recordset.MoveFirst Case 2 Adodc1.Recordset.MoveNext If Adodc1.Recordset.EOF Then Adodc1.Recordset.MovePrevious End Select Lockctl cmdCancel.Enabled = False cmdOk.Enabled = False cmdUpdate.Enabled = True cmdDelete.Enabled = True cmdAdd.Enabled = True End Sub Private Sub cmdDelete_Click() If MsgBox("确实要删除这条记录吗?", vbOKCancel, "系统提示") = vbOK Then On Error Resume Next Adodc1.Recordset.Delete Adodc1.Recordset.MoveFirst If Adodc1.Recordset.RecordCount > 0 Then showdata Else Text1.Text = "" Text2.Text = "" Text3.Text = "" Combo1.Text = "" End If End If End Sub Private Sub cmdExit_Click() On Error Resume Next adors.Close MDIForm1.StatusBar1.Panels(1).Text = "" Unload Me End Sub Private Sub cmdFirst_Click() On Error Resume Next adors.MoveFirst End Sub Private Sub cmdLast_Click() On Error Resume Next

51

adors.MoveLast End Sub Private Sub cmdNext_Click() On Error Resume Next adors.MoveNext If Not adors.EOF Then Else MsgBox "已到末记录!", , "系统提示" End If End Sub Private Sub cmdOk_Click() If Text3 <> Text2 Then Text2 = "" Text3 = "" Text2.SetFocus MsgBox "确认密码必须与密码一致!", , "系统提示" Exit Sub End If Select Case i Case 1 If Text1 = "" Then MsgBox "用户姓名不能为空", , "系统提示" Text1.SetFocus Exit Sub End If If Text2 = "" Then MsgBox "密码不能为空", , "系统提示" Text2.SetFocus Exit Sub End If If Text3 = "" Then MsgBox "确认密码不能为空", , "系统提示" Text3.SetFocus Exit Sub End If If Combo1.Text = "" Then MsgBox "用户类型不能为空", , "系统提示" Combo1.SetFocus Exit Sub End If Adodc1.Recordset.AddNew Adodc1.Recordset.Fields(0) = Text1.Text Adodc1.Recordset.Fields(1) = Text2.Text Adodc1.Recordset.Fields(2) = Combo1.Text Adodc1.Recordset.Update MsgBox "记录添加成功!", , "系统提示" Lockctl cmdUpdate.Enabled = True cmdDelete.Enabled = True cmdAdd.Enabled = True cmdOk.Enabled = False cmdCancel.Enabled = False Case 2 'adoCon.Execute ("update 用户表 set 密码='" & Text2 & "',用户类型= '" & Combo1.Text & "' where 用户姓名='" & Text1 & "'")

52

On Error Resume Next Adodc1.Recordset.Fields(0) = Text1.Text Adodc1.Recordset.Fields(1) = Text2.Text Adodc1.Recordset.Fields(2) = Combo1.Text Adodc1.Recordset.Update MsgBox "记录修改成功!", , "系统提示" Lockctl cmdUpdate.Enabled = True cmdDelete.Enabled = True cmdAdd.Enabled = True cmdOk.Enabled = False cmdCancel.Enabled = False End Select End Sub Private Sub cmdUpdate_Click() Unlockctl Text1.Enabled = False cmdOk.Enabled = True cmdCancel.Enabled = True i=2 End Sub Private Sub Command1_Click(Index As Integer) On Error Resume Next Select Case Index Case 0 Adodc1.Recordset.MoveFirst Case 1 If Adodc1.Recordset.BOF = False Then Adodc1.Recordset.MovePrevious End If Case 2 If Adodc1.Recordset.EOF = False Then Adodc1.Recordset.MoveNext End If Case 3 Adodc1.Recordset.MoveLast End Select showdata End Sub Private Sub Form_Load() frmguanliyuan.Width = 6405 frmguanliyuan.Height = 3960 adors.Open "select * from 用户表", adoCon, adOpenKeyset, adLockOptimistic adors.Close Adodc1.RecordSource = "select * from 用户表" Adodc1.Refresh If Adodc1.Recordset.RecordCount > 0 Then showdata End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) cmdExit_Click End Sub Private Sub Text1_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text2.SetFocus

53

End Sub Private Sub Text1_LostFocus() Set adoRs1 = adoCon.Execute("select * from 用户表 where 用户姓名='" & Text1 & "'") If Not adoRs1.EOF Then MsgBox "此用户已经存在,请重新输入用户姓名!", , "系统提示" Text1 = "" Text1.SetFocus Exit Sub End If adoRs1.Close End Sub Private Sub Text2_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Text3.SetFocus End Sub Private Sub text3_KeyPress(KeyAscii As Integer) If KeyAscii = 13 Then Combo1.SetFocus End Sub Private Sub Lockctl() Text1.Enabled = False Text2.Enabled = False Text3.Enabled = False Combo1.Enabled = False End Sub Private Sub Unlockctl() Text1.Enabled = True Text2.Enabled = True Text3.Enabled = True Combo1.Enabled = True End Sub Sub showdata() Text1.Text = Adodc1.Recordset.Fields(0) Text2.Text = Adodc1.Recordset.Fields(1) Combo1.Text = Adodc1.Recordset.Fields(2) End Sub

附录7.数据恢复设计代码:
Private Sub cmdExit_Click() MDIForm1.StatusBar1.Panels(1).Text = "" Set adoCon = New ADODB.Connection adoCon.Open "Provider=MSDASQL.1;Data Info=False" Unload Me End Sub Private Sub cmdHF_Click() On Error Resume Next FileCopy car, car MsgBox "恢复成功!", , "系统提示"

Source=

car;Persist

Security

54

End Sub Private Sub Form_Load() frmshujuhui.Width = 8656 frmshujuhui.Height = 2985 adoCon.Close End Sub Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer) cmdExit_Click End Sub Private Sub Form_Unload(Cancel As Integer) Set adoCon = New ADODB.Connection adoCon.Open "Provider=MSDASQL.1;Data Info=False" End Sub

Source=

car;Persist

Security

附录8.数据备份设计代码:
Private Sub cmdCopy_Click() On Error Resume Next FileCopy car, car MsgBox "备份成功!", , "系统提示" End Sub Private Sub cmdExit_Click() MDIForm1.StatusBar1.Panels(1).Text = "" Set adoCon = New ADODB.Connection adoCon.Open "Provider=MSDASQL.1;Data Source= car;Persist Security Info=False" Unload Me End Sub Private Sub Form_Load() frmshujubei.Width = 8656 frmshujubei.Height = 2985 adoCon.Close End Sub Private Sub Form_Unload(Cancel As Integer) Set adoCon = New ADODB.Connection adoCon.Open "Provider=MSDASQL.1;Data Source= car;Persist Security Info=False" End Sub 风行下载安装 皮皮播放器下载 uusee 网络电视 2010 下载 www.funshionweb.com www.pipiweb.com www.uusee2008.com www.funshionweb.com

55


(最新版)电大计算机毕业设计说明书样本_图文.doc

(最新版)电大计算机毕业设计说明书样本 - 毕业论文,单片机论文,毕业论文设计,毕业过关论文,毕业设计,课程设计,硕士论文,研究生论文

(完整版)电大计算机毕业设计说明书样本_图文.doc

(完整版)电大计算机毕业设计说明书样本 - 毕业论文,单片机论文,毕业论文设计,毕业过关论文,毕业设计,课程设计,硕士论文,研究生论文

【最新版】电大计算机毕业设计说明书样本_图文.doc

【最新版】电大计算机毕业设计说明书样本 - 毕业论文,单片机论文,毕业论文设计,毕业过关论文,毕业设计,毕业设计说明,硕士论文,研究生论文

电大计算机_毕业设计说明书样本_图文.doc

电大计算机_毕业设计说明书样本 - 毕业论文,单片机论文,毕业论文设计,毕业过关论文,毕业设计,毕业设计说明,硕士论文,研究生论文

【最新版】中央电大计算机专业毕业论文.doc

【最新版】中央电大计算机专业毕业论文 - 毕业设计,毕业论文,毕业论文设计,硕士论文,研究生论文,单片机论文,单片机设计,单片机设计论文

(最新版)中央电大计算机专业毕业论文.doc

(最新版)中央电大计算机专业毕业论文 - 毕业论文,单片机论文,毕业论文设计,毕业过关论文,毕业设计,毕业设计说明,硕士论文,研究生论文

电大计算机毕业设计说明书样本_图文.pdf

辽宁广播电视大学开放教育试点 计算机网络技术专业(专科) 毕业设计说明书 设计题目...广西电大毕业设计(论文)... 6页 免费 北京电大计算机毕业设计... 60页 ...

电大计算机毕业论文封皮.doc

电大计算机毕业论文封皮 - 黑龙江广播电视大学 毕业设计(论文) 题目 会计信息

计算机系统设计开发毕业论文_图文.pdf

计算机系统设计开发毕业论文_电子/电路_工程科技_专业资料。安徽广播电视大学开放...背景我作为中央电视大学 03 届计算机应用专业学员,为了在毕业之际向学校交一份...

中央电大、省级电大、电大计算机毕业论文 (完整版18).txt

计算机毕业---电大毕业论文(更多论文来源于论文保过-中国知识写作网)、中央电大毕业论文(更多论文来源于论文保过-中国知识写作网)范文 计算机毕业---电...

计算机科学与技术专业(本科)毕业论文_图文.doc

中央广播电视大学开放教育 宁波广播电视大学 计算机科学与技术专业(本科) 毕业设计(论文)报告 题目: 某汽车 4S 店局域网规划及设计 姓学专 名号业 沈方 ...

中央电大、省级电大、电大计算机毕业论文 (完整版13).txt

计算机毕业---电大毕业论文(更多论文来源于论文保过-中国知识写作网)、中央电大毕业论文(更多论文来源于论文保过-中国知识写作网)范文 计算机毕业---电大毕业论文(...

初晓坤-电大计算机专业毕业论文.doc

中央广播电视大学 毕业设计(论文) 题 目: 计算机网络故障分析及解决方案 学生

电大 计算机毕业设计 学生学籍管理系统_图文.doc

电大 计算机毕业设计 学生学籍管理系统 - 西北工业大学毕业论文 毕 业 设 计

无锡电大计算机毕业设计论文_图文.doc

无锡电大计算机毕业设计论文_工学_高等教育_教育专区。毕业论文,毕业论文设计,毕业论文设计说明书,毕业设计,毕业设计论文 (此文档为 word 格式,下载后您可任意编辑...

中央电大计算机专业毕业论文.doc

中央电大计算机专业毕业论文 - 中央广播电视大学 毕业设计(论文) 题 目: 计

北京电大毕业论文写作规范.doc

北京电大毕业论文写作规范 - 北京电大毕业论文(设计、作业) 写作规范 毕业论文是学生毕业前最后一个重要学习环节, 是学习深化与升华的重要过 程。它既是学生学习、...

电大计算机科学与技术专业毕业论文--图书信息管理系统....doc

电大计算机科学与技术专业毕业论文--图书信息管理系统的设计与实现 - 副本 -

电大计算机信息管理专业 毕业设计 开题报告书_图文.doc

毕业设计开题报告表 分校 课题名称 课题来源 石景山电大 姓名 杨波 学号 1011001454520 专业 计算机信息管理 王秀山 网站留言板系统 BBS 是电子公告板(Bulletin Board...

中央电大毕业论文(定稿).doc

中央广播电视大学 人才培养模式改革和 开放教育试点会计学 本科毕业论文 浅谈应收