资源描述
机动车驾驶员管理系统
北京工业大学计算机学院
毕业论文
课题:机动车驾驶员管理系统
目 录
第一部分 系统概述 2
一、 前言: 2
二、 系统环境与开发工具选择 2
1. 系统环境 2
2. 选择开发工具 2
第二部分 总体设计 3
一、系统结构总图: 3
二、系统功能 3
三、 数据库设计: 4
(一)创建表结构 4
(二)数据库说明 7
第三部分 功能模块详细设计 8
一、 主界面设计: 8
二、 新增数据: 8
三、 数据编辑 13
四、 查询数据 16
五、 统计报表 18
六、 系统设置 18
七、 关于本软件 20
第四部分 结尾 21
一、 总结 21
二、 参考文献: 21
三、 附录(源程序) 21
第一部分 系统概述
一、 前言:
随着社会的发展进步,机动车和驾驶员的数量迅速增加,机动车驾驶员管理是交通管理部门的重要任务,手工操作则要求投入大量的人力物力。通过对实际情况的调查,本系统发挥了计算机系统的数据处理能力,在对所需备案基本数据进行存贮的基础上,通过数据统计、分析,帮助有关部门更好的进行管理。
二、 系统环境与开发工具选择
1. 系统环境
开发环境:Microsoft Windows95操作系统,Intel Petium处理器133Mhz,32M内存,PHILIPS显示器640×480显示分辨率。
运行环境:Microsoft Windows95/98/NT操作系统,586及以上主频,8M及以上内存,运行本系统需要8M剩余硬盘空间。
2. 选择开发工具
VISUAL FOXPRO是美国MICROSOFT公司于推出的新一代高级程序设计语言。它具有良好图形用户界面(GUI),同时又是一种完全支持面向对象程序设计(OOP)的语言。
该系统不仅可以简化数据管理,而且使应用程序的开始流程更为合理。Visual Foxpr 使组织数据、定义数据库规则和建立应用程序等工作变得简单易行。利用可视化的设计工具和向导,可以快速创建表单、查询和报表。Visual FoxPro还提供了一个集成化的开发环境,不仅拥有功能强大的面向对象程序设计工具以及客户/服务器能力,而且还支持ActiveX,这些特点都为快速开发功能全面的应用程序创造了良好的条件。基于以上的特点,本人应用中文版的Visual Fro 6.0开发了机动车驾驶员管理系统。
第二部分 总体设计
一、系统结构总图:
启动主界面
数据处理
查询数据
统计报表
系统设置数据处理
退出数据处理
数据输入处理
数据编辑输入处理
企事业单
位
驾驶员
数据
机动车数据单
位
事故
记录
会员数据处理
事故月
报
驾驶员分类统计
企
事业
单
位
设置密码数据编辑输入处理
窗体
背景
数据备份
登录
打印会员卡
二、系统功能
本系统采用面向对象的程序设计思想,以菜单和表单的形或进行各种表单的调用,主要完成以下功能:
(1)对企事业单位、驾驶员信息、机动车信息以及事故记录等进行备案登记。
(2)具有超级权限的操作员可对已经正式备案的上述信息进行修改、删除。
(3)按驾驶证号等条件查询事故记录;查询统计月事故记录以及年事故记录;
按单位名称等条件查询驾驭员基本情况或会员情况;
按单位名称等件查询机动车的基本情况;
按所在区县、地区等条件查询已备案的单位情况
(4)统计报表的预览及打印
(5)具有超级权限的操作员可对本系统密码及准驾证号等静态数据库进行维护
此外,为了保证系统的安全,在进入本系统前必须输入有效的密码,并根据用户的不同级别为其设置相应的系统菜单,以防止非法用户进入系统和用户越权操作损害数据的安全。
三、 数据库设计:
(一)创建表结构
[企业事业单位]dw.dbf 数据表字段结构
此数据表主要用来存贮备案的企事业单位的基本数据
名称
类型
长度
标题
dwbh
字符
8
单位编号
dwmc
字符
30
单位名称
dwdz
字符
30
单位地址
zgld
字符
8
主管领导
lxdh
字符
15
联系电话
gczs
整数
3
公车总数
sczs
整数
3
私车总数
[驾驶员信息] jsy.dbf 数据表字段结构
此数据表主要用来存贮机动车驾驶员的基本数据
名称
类型
长度
标题
xm
字符
8
姓名
xb
字符
2
性别
csrq
日期
8
出生日期
xzdz
字符
30
现住地址
dwbh
字符
8
单位编号
lxdh
字符
15
联系电话
sfzh
字符
18
身份证号
qzrq
日期
8
取证日期
yxrq
日期
8
有效日期
zjcx
字符
8
准驾车型
jszh
字符
15
驾驶证号
zp
通用
4
驾驶员照片
[会员信息]hy.dbf 数据表字段结构
此数据表主要用来存贮驾驶员会员的基本数据,仅有除驾驶员数据表之外的会员信息字段
名称
类型
长度
标题
hyzh
字符
8
会员证号
jszh
字符
15
驾驶证号
mz
字符
4
民族
whcd
字符
4
文化程度
fhmc
字符
8
分会名称
hyje
整数
4
会员金额
[机动车信息]jdc.dbf 数据表字段结构
此数据表主要用来存贮备案的公有企事业单位的基本数据
名称
类型
长度
标题
cphm
字符
8
车牌号码
cpxh
字符
10
厂牌型号
cllx
字符
8
车辆类型
clys
字符
4
车辆颜色
syq
字符
2
所有权
cz
字符
30
车主
czdz
字符
30
车主地址
fzrq
日期
8
发证日期
bsrq
日期
8
报损日期
[事故记录]sg.dbf数据表字段结构
此表用来存放驾驶员的事故记录
名称
类型
长度
标题
jszh
字符
15
驾驶证号
cphm
字符
10
车牌号码
sgbh
字符
6
事故编号
sgsj
日期
8
事故时间
sgdj
字符
2
事故等级
sgjs
备注
4
事故简述
[密码表]mm.dbf数据表字段结构
此数据表存贮密码数据主要用来设置可以操作本系统的人员及权限
名称
类型
长度
标题
mm
字符
6
密码
qx
字符
1
权限
[区县代号]qxdh.dbf数据表字段结构
此数据表用来存贮各个区县的代号,是个静态数据表,主要用来方便用户输入企事业单位的基本数据
名称
类型
长度
标题
qxmc
字符
6
区县名称
qxdh
字符
2
区县代号
(二)数据库说明
本数据库共包括:企业事业单位、驾驶员信息、机动信息、事故记录、会员信息、等数据表,其间存在着多个关联。
【驾驶员】表与【企事业单位】表的单位编号使这两个表存在关联,这样可知驾驶员所在单位详细情况,或查看某个单位的驾驶情况等。
【事故记录】表通过驾驶证号与【驾驶员】表关联;通过车牌号与【机动车】表关联。这样便可找到事故所涉及机驾驶员的详细情况和机动车的详细资料等。
【会员信息】表与【驾驶员】表通过驾驶证号关联,这样便可查看会员的详细情况。
另外数据库中还设置了三个静态数据表,用于维护系统,方便使用。
第三部分 功能模块详细设计
一、 主界面设计:
为了使应用程序的主要功能得以体现,方便用户使用应用程序中的命令和工具,我根据用户所要执行的任务为系统设计了菜单,给用户提供了一个结构化的、可访问的途径。
在设计中并指定了访问键。另外,权限低的操作员对于系统设置等部分操作无操作权,则通过废止相应的菜单项来进行控制。
主界面是一个顶层表单,
init:
do 主菜单.mpr with this, .t.
二、 新增数据:
主要功能:
新增数据操作主要是将企事业单位信息、 机动车信息、驾驶员信息和事故记录, 等数据进行输入。
实现方法:
1.动态加载页面
由于数据较多故采用页框形式,这样操作员在同一表单中即可将要输入的数据全部输入. 但是在系统调试过程中发现即使操作员只想操作某一种信息,系统也要把四个页框的信息全部调入,这样浪费了时间,尤其是相当系统数据量大的候运行变慢,为了解决这个问题,我采用了动态加载页面控件,通过在将每个页面上的控件创建类, 然后当激活页面时再加载这些控件.
具体的操作如下:
² 象通常一样设计表单,在所有页面上包含所有控件.
² 将第2,3,4页的所有控件分别存为类.page2.vcx, page3.vcx, page4.vcx
² 在第2,3,4页的A ctivate事件中添加类
如:第2 页的Activate事件代码:
if this.controlcount=0
this.addobject("page2","page2")
this.page1.visible=.t.
endif
2.方便用户输入:
在输入姓名、地址等中文字段时,系统自动切换至中文输入法。
在输入界面设置了一组快捷菜单“复制、剪切、复制”,这样在输入重复的信息时直接复制即可。
3.为了确保输入数据的有效性,对于有固定信息的字段,通过下拉列表框等控制件为用户预先设定选项供用户选择,这样即保证了数据库中不存储无效数据。
4.统一界面,如蓝色标签字段为关键性字段,通过与其它字段颜色不同,提示操作员必须输入。另外有些字段的信息由系统自动产生,则该字段输入框的背景颜色为“淡蓝色”。
对操作员操作员进行提示。
(一)企事业单位信息:
1. 版面设计:
增加单位代码:根据调研发现,实际运作情况的单位编号是根据单位所在的区县、分组、分片产生的。所以我将单位代码的输入变为“区县号”、“地区号”、“分组号”和“单位号”四项分别输入,其中区县号由下拉列表框选则输入,系统可根据选则自动形成代码,四个代码输入后单位代码自动产生,这样即方便操作又不易出错。
其它信息的输入均为文本框。
2. 属性和事件
新增属性
isadd属性,用来判断企事业数据表目前是否在新增关态,目前设置为.F.,表明目前不在新增状态.
oldrecord属性,用来储存新增记录前,当前的记录编号,等放弃新增后,还返回到原来记录位置。目前设置为0
3. 操作:
本表单主要设置了四个按钮:
若要增加记录,单击“新增”按钮;此时,全部指令按钮都停用了,只有“保存”、“取消”两个按钮是启用的;另外,所有字段也全部清空等待用户输入。字段输入后单击“保存”钮结束本次新增操作。如果不想保留本次操作,还可单击“取消”钮撤消本次操作,并返回到增加之前的状态。
thisform.isadd=.t.
thisform.oldrecord=recno()
append blank
thisform.pf.jdc.cmdadd.enabled=.f.
thisform.pf.jdc.cmdexit.enabled=.f.
Thisform.pf.jdc.cmdcancel.enabled=.t.
thisform.pf.jdc.cmdsave.enabled=.t.
Thisform.pf.jdc.cbocllx.SetFocus()
Thisform.Refresh()
(二)驾驶员信息:
驾驶员信息的输入与单位信息的输入的设计思想与操作方法基本相同。不同之处是:
首先,为了使驾驶员的信息更加充分,增加了驾驶员照片字段,当用户单击鼠标右键后弹出打开文件对话框,选则照片。
其次,增加了会员输入。如果该驾驶员是会员,则单击“入会”按钮,系统弹出“会员登录信息”表单,作为“驾驶员信息”的子表单。由于会员信息的部分字段与驾驶员信息相同,故将其父表单的如“姓名、性别”、“联系电话”等信息直接继承,并将这些字段设为只读。该表单的关键性字段是“会员证号”,会员号由系统自动产生。会员信息输入完毕后,返回其父表单。
会员卡信息输入完毕后,可直接打印会员卡。然后再返回其父菜单。
(三)机动车信息:
机动车信息的输入与单位信息的输入的设计思想与操作方法基本相同。
(四)事故记录信息:
事故信息的输入与单位信息的输入的设计思想与操作方法基本相同。
三、 数据编辑
(一)修改数据:
此项操作功能是将原始数据表中的数据进行修改、删除操作。为了保证原始数据的安全,设置了“超级“操作权限,操作员应具有其操作权限才可进入修改。
数据编辑界面由页框组成,共四个页面,分别以企事业单位、驾驶员信息、机动车信息、和事故记录进行修改,每一页由表格控件显示其所对应的数据。
操作方法如下:以驾驶员数据修改为例
(二)删除数据:
要删除某个驾驶员的数据应先在表格空件中指定,即在该记录上单击,然后点“删除“按钮,系统此时提示是否真的删除这个人的信息,回答“是“则该信息从原始数据表中删除。回答“否“则撤消删除。
修改操作:先在表格控件中指定该条记录,然后单击“修改“按钮,系统弹出修改子表单,显示指定的当前记录信息,修改数据后点击“确定“返回;单击“取消“撤消刚才的修改,恢愎成原来数据。为了方便操作,在此设置了查询功能,以便快速定位到要操作的记录。
主要代码:删除操作
local n
do case
case thisform.pf.activepage=1
n=Thisform.pf.dw.grid1.column2.text1.value
case thisform.pf.activepage=2
n=Thisform.pf.jsy.grid1.column1.text1.value
case thisform.pf.activepage=3
n=Thisform.pf.jdc.grid1.column1.text1.value
case thisform.pf.activepage=4
n=Thisform.pf.sg.grid1.column1.text1.value
endcase
yn = messagebox("是否确定删除 '"+ alltrim(n)+;
"' 的信息?",4+32,"信息窗口")
if yn = 6
delete
pack
do case
case thisform.pf.activepage=1
thisform.pf.dw.grid1.recordsource="企事业单位"
case thisform.pf.activepage=2
thisform.pf.jsy.grid1.recordsource="驾驶员信息"
case thisform.pf.activepage=3
thisform.pf.jdc.grid1.recordsource="机动车信息"
case thisform.pf.activepage=4
thisform.pf.sg.grid1.recordsource="事故记录"
endcase
thisform.refresh
result = tableupdate(.f.)
if result = .t.
=messagebox("删除成功 ! ",48,"信息窗口")
else
=messagebox("删除不成功 !! ", 48,"信息窗口")
=tablerevert(.f.)
endif
endif
thisform.refresh()
修改操作:
public curent
curent=recno()
do case
case thisform.pf.activepage=1
do form dw
case thisform.pf.activepage=2
do form jsy
case thisform.pf.activepage=3
do form jdc
case thisform.pf.activepage=4
do form sg
endcase
Thisform.Refresh()
四、 查询数据
1. 事故记录的查询:
根据查询情况的不同,设置了通过驾驶证号、事故编号、车牌号码三种条件进行查询。驾驶证号查询是为了查找某个驾驶的事故记录。事故编号查询是为了查看某项事故所涉及的人员。车牌号码查询是查某辆车的事故记录。每次查询结束后系统会自重置查询条件,以备下一个查询。
在这个表单中的数据环境是“事故记录”表和“驾驶员情况”表通过驾驶证号关联。本组操作是通过建立临时查询文件来实现的,在查询过程中,通过查询条件的不同分别调用各自的查询文件,并将查询结果在表格中显示。
2. 驾驶员查询:
在这个表单里设置了两个查询条件:按单位名称查询该单位的驾驶员的基本情况,并显示驾驶员总数;第二种条件是根据驾驶员的驾驶证号进行查询。
在这个表单中的数据环境是“驾驶员情况”表和“企事业单位”表关联。其设计思想与事故查询基本相同。
五、 统计报表
在经过以上收集和组织数据后,要将数据进行打印或显示在屏幕。在本系统可将企事业单位的基本情况表;驾驶员基本情况表,各个单位的驾驶员统计,事故月报表等输出。
其中单位驾驶员统计是建立了一个一对多的分组报表,这样就可根据实际需要,分别将各个单位的驾驶员情况查询,输出。事故月报表是将事故记录根据月份进行分组输出。
六、 系统设置
1.修改静态数据:
车辆类型和车型代号这些数据,在用户输入数据时通过选项按钮组为用户提供一组预先设定的选则,这样方便用户也避免了数据库存储无效的数据。这些固定的数据也是相对而言的,一但实际操作中这些数据的定义有所改变,这些预定的数据就要随之改变来保持一致。
功能实现:为了保证原始数据的安全,设置了“超级“操作权限,操作员应具有其操作权限才可进入修改。具体到数据表数据的增加、修改和删除与其它数据表是一样的。
2.设置窗体背景
设置背景是指操作员可根据个人的喜好随时更改窗体背景以增加操作的趣味性。
功能实现:这一功能是通过GET FILE 命令调出打开图形文件对话框, 用户选择文件时并可预览要选择的文件。背景文件被选定将其全文件名作为一字符串,保存在公共变量中,以备使用。那么,其它窗体是怎样传递这一信息的呢?我在每一个可设置背景的窗体的Active事件中判别这上公共变量是否为空,如果不为空则通过命令设置窗体的Picture属性,这样窗体的背景颜色就改变了。
3.设置密码
为了保证系统的安全性,本系统设置了权限功能,首先登录时根据用户输入的密码来判断权限,如果权限不够,数据维护菜单下的数据编辑与系统维护的更改密码子菜单将不可用。
4.数据备份:
数据备份是数据维护的重要工作,备案的数据一般需要上报实现数据共享。另外在实际中随时都有可能遭到意外的甚至是人为的破坏,为了保证数据的安全,一般应定期对数据进行备份以防不测。
功能实现:在这一功能模块中要备份的数据包括数据表文件和报表文件等,并分别设置了备份到不同的位置,A:盘、C:盘、D:盘共三个出口,主要操作命令是在程序中运行操作系统”Copy”命令 ,复制结束后通过Active windows 命令再返回到本系统的主窗体,这样操作员就很方便的将数据备份了,即方便了数据流通又保证了数据安全。
七、 关于本软件
界面如下图所示(略)。本界面用来显示版本版权及其它信息。另外上移的说明文字是利用Timer控件控制Label控件在容器类控件内移动实现的。
代码如下:
thisform.container1.label1.top=thisform.container1.label1.top-1
if thisform.container1.label1.top+thisform.container1.label1.height<0
thisform.container1.label1.top=thisform.container1.height+5
endif
本界面中单击作者的Email地址,即可调用用户机上缺省的邮件处理程序来给作者发送邮件。
第四部分 结尾
一、 总结
通过各位指导老师的指点和同学之间的交流,使我完成了本系统的设计。在此对各位指导老师与同学表示感谢!!在本系统中,我力求使自己的程序功能更加强大和更便于操作。如有时通过工具栏、菜单、鼠标右键、等都可以实现相同的功能,相应的按钮和菜单的Enabled属性也控制得非常到位,以免用户的错误操作。本程序也经过了我较为大量的测试,每次发现问题后我都耐心的寻找问题所在,然后予以一一解决。然而由于我的水平有限和时间仓促,程序中肯定还存在不少的问题,有些问题我现在也没有解决,如没有实现查找后数据的修改、系统提示用户不够完善,程序代码不够精炼等,是我在下一步设计中应该解决的问题,也希望能得到各位老师和同学的更多指点。
通过本系统的设计,我学到了不少Visual Foxpro编程的技巧,更增加了我的Windows下应用程序的编程信心,尤其在数据库编程方面有了很大的进步。在今后的工作学习中,我要更加努力的学习编程知识,使自己的编程能力更上一层楼。
二、 参考文献:
1、《VFP6.0中文版入门与提高》 清华大学出版社 李加福、邸学峰著
2、《VFP6.0中文版程序员指南》 北京希望电脑公司 Microsoft Corporation
3、《VFP6.0程序设计指南》 清华大学出版社 吴迪、曲蒙著
4、《VFP6.0函数大全》 北京航空航天大学出版社 徐培忠著
三、 附录(原程序)
主表单:
Name = "Form1"
PROCEDURE Init
SET SYSMENU OFF
SET SYSMENU TO
SET TALK OFF
SET DELETE OFF
SET EXACT OFF
SET CONFIRM OFF
SET SAFETY OFF
SET STATUS BAR OFF
SET MULTILOCK ON
SET DEFA TO C:\BS
DO MAINMENU.MPR WITH THIS, .T.
ENDPROC
PROCEDURE Load
LOCAL i
WITH THIS
.ToolBars[1,1] = '表单控制项'
.ToolBars[2,1] = '表单设计工具'
.ToolBars[3,1] = '查询设计工具'
.ToolBars[4,1] = '配置方式'
.ToolBars[5,1] = '报表控制项'
.ToolBars[6,1] = '报表设计工具'
.ToolBars[7,1] = '数据库设计工具'
.ToolBars[8,1] = '数据表设计工具'
.ToolBars[9,1] = '预览打印'
.ToolBars[10,1] = '常用'
.ToolBars[11,1] = '调色板'
ENDWITH
FOR i = 1 TO 11
THIS.ToolBars[i,2] = WVISIBLE(THIS.ToolBars[i,1])
IF THIS.ToolBars[i,2]
HIDE WINDOW (THIS.ToolBars[i,1])
ENDIF
ENDFOR
ENDPROC
PROCEDURE Destroy
SET SYSMENU TO DEFAULT
SET SYSMENU ON
SET TALK ON
SET CONFIRM ON
SET SAFETY ON
SET STATUS BAR ON
MODIFY WINDOWS SCREEN
ENDPROC
PROCEDURE Unload
local i
for i=1 to 11
if this.toolbars[i,2]
show window (this.toolbars[i,1])
endif
endfor
ENDPROC
口令表单:
Name = "cmdok"
PROCEDURE Click
public i, ctlmenu,logname
I=I+1
select 密码表
p=alltrim(thisform.txtpasswd.value)
locate for mm=alltrim(thisform.txtpasswd.value)
if found()
ctlmenu=qx
isuser=.t.
logname=thisform.txtname.value
thisform.release()
set default to c:\bs
do form 主窗体.scx
else
THISFORM.LABEL3.CAPTION="DKLDSA"
IF I<3
MessageBOX("密码错误!"+CHR(13)+"请重新输入!",48,"信息窗口")
THISFORM.TXTNAME.setFOCUS()
ELSE
MessageBOX("密码错误三此!"+CHR(13)+"系统无法启动!",48,"信息窗口")
THISFORM.RELEASE()
ENDIF
ENDIF
ENDPROC
Name = "cmdcancel"
PROCEDURE Click
CLEAR EVENTS
CLOSE ALL
THISFORM.RELEASE
ENDPROC
主菜单:
mainmenu.mpr
LPARAMETERS oFormRef, getMenuName, lUniquePopups, parm4, parm5, parm6, parm7, parm8, parm9
LOCAL cMenuName, nTotPops, a_menupops, cTypeParm2, cSaveFormName
IF TYPE("m.oFormRef") # "O" OR ;
LOWER(m.oFormRef.BaseClass) # 'form' OR ;
m.oFormRef.ShowWindow # 2
MESSAGEBOX([只能从顶层表单调用该菜单。请确认您表单的 ShowWindow 属性已设为 2。阅读此菜单 MPR 文件的头部分,可以获得详细信息。])
RETURN
ENDIF
m.cTypeParm2 = TYPE("m.getMenuName")
m.cMenuName = SYS(2015)
m.cSaveFormName = m.oFormRef.Name
IF m.cTypeParm2 = "C" OR (m.cTypeParm2 = "L" AND m.getMenuName)
m.oFormRef.Name = m.cMenuName
ENDIF
IF m.cTypeParm2 = "C" AND !EMPTY(m.getMenuName)
m.cMenuName = m.getMenuName
ENDIF
DIMENSION a_menupops[4]
IF TYPE("m.lUniquePopups")="L" AND m.lUniquePopups
FOR nTotPops = 1 TO ALEN(a_menupops)
a_menupops[m.nTotPops]= SYS(2015)
ENDFOR
ELSE
a_menupops[1]="数据维护e"
a_menupops[2]="查询数据v"
a_menupops[3]="打印报表t"
a_menupops[4]="设置s"
ENDIF
DEFINE MENU (m.cMenuName) IN (m.oFormRef.Name) BAR
DEFINE PAD _04n0zaqhm OF (m.cMenuName) PROMPT "数据维护(\<E)" COLOR SCHEME 3 ;
KEY CTRL+E, "CTRL+E" ;
MESSAGE "输入、修改、删除企事业单位、机动车、驾驶员备案信息"
DEFINE PAD _04n0zaqhn OF (m.cMenuName) PROMPT "查询数据(\<V)" COLOR SCHEME 3 ;
KEY ALT+V, "ALT+V" ;
MESSAGE "查询输入企事业单位、机动车、驾驶员备案信息"
DEFINE PAD _04n0zaqho OF (m.cMenuName) PROMPT "打印报表(\<T)" COLOR SCHEME 3 ;
KEY ALT+F, "ALT+F" ;
MESSAGE "浏览打印报表"
DEFINE PAD _04n0zaqhp OF (m.cMenuName) PROMPT "设置 (\<S)" COLOR SCHEME 3 ;
KEY ALT+S, ""
DEFINE PAD _04n0zaqia OF (m.cMenuName) PROMPT "帮助(\<H)" COLOR SCHEME 3 ;
KEY ALT+H, ""
DEFINE PAD _04n0zaqib OF (m.cMenuName) PROMPT "退出(\<X)" COLOR SCHEME 3 ;
KEY ALT+X, ""
ON PAD _04n0zaqhm OF (m.cMenuName) ACTIVATE POPUP (a_menupops[1])
ON PAD _04n0zaqhn OF (m.cMenuName) ACTIVATE POPUP (a_menupops[2])
ON PAD _04n0zaqho OF (m.cMenuName) ACTIVATE POPUP (a_menupops[3])
ON PAD _04n0zaqhp OF (m.cMenuName) ACTIVATE POPUP (a_menupops[4])
ON SELECTION PAD _04n0zaqib OF (m.cMenuName) ;
DO _04n0zaqie ;
IN LOCFILE("\BS\MAINMENU" ,"MPX;MPR|FXP;PRG" ,"WHERE is MAINMENU?")
DEFINE POPUP (a_menupops[1]) MARGIN RELATIVE SHADOW COLOR SCHEME 4
DEFINE BAR 1 OF (a_menupops[1]) PROMPT " 新增数据(\<A)..." ;
KEY ALT+A, "ALT+A" ;
MESSAGE "输入企事业单位、机动车、驾驶员备案信息"
DEFINE BAR 2 OF (a_menupops[1]) PROMPT " 编辑数据(\<E)..." ;
KEY ALT+E, "ALT+E" ;
SKIP FOR ctlmenu="0" ;
MESSAGE "修改、删除企事业单位、机动车、驾驶员备案信息"
ON SELECTION BAR 1 OF (a_menupops[1]) do form 新增
ON SELECTION BAR 2 OF (a_menupops[1]) do form 编辑
DEFINE POPUP (a_menupops[2]) MARGIN RELATIVE SHADOW COLOR SCHEME 4
DEFINE BAR 1 OF (a_menupops[2]) PROMPT " 企事业单位信息(\<Q)..." ;
KEY ALT+Q, "ALT+Q" ;
MESSAGE "查询企事业单位备案信息"
DEFINE BAR 2 OF (a_menupops[2]) PROMPT " 驾驶员信息(\<J)..." ;
KEY ALT+J, "ALT+J" ;
MESSAGE "查询驾驶员备案信息"
DEFINE BAR 3 OF (a_menupops[2]) PROMPT " 机动车信息(\<C)..." ;
KEY ALT+C, "ALT+C" ;
MESSAGE "查询机动车备案信息"
DEFINE BAR 4 OF (a_menupops[2]) PROMPT " 事故信息(\<S)..." ;
KEY ALT+S, "ALT+S" ;
MESSAGE "查询事故记录"
ON SELECTION BAR 1 OF (a_menupops[2]) do form dwcx
ON SELECTION BAR 2 OF (a_menupops[2]) do form jsycx
ON SELECTION BAR 3 OF (a_menupops[2]) do form jdccx
ON SELECTION BAR 4 OF (a_menupops[2]) do form sgcx
DEFINE POPUP (a_menupops[3]) MARGIN RELATIVE SHADOW COLOR SCHEME 4
DEFINE BAR 1 OF (a_menupops[3]) PROMPT " 企事业单位清单(\<Q)..." ;
KEY ALT+Q, "ALT+Q"
DEFINE BAR 2 OF (a_menupops[3]) PROMPT " 驾驶员名册(\<J)..."
DEFINE BAR 3 OF (a_menupops[3]) PROMPT " 机动车备案清单(\<C)"
DEFINE BAR 4 OF (a_menupops[3]) PROMPT " 事故统计表(\<S)"
ON SELECTION BAR 1 OF (a_menupops[3]) report form dw noconsole preview
ON SELECTION BAR 2 OF (
展开阅读全文