09级电子信息科学与技术专业Word格式文档下载.docx
《09级电子信息科学与技术专业Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《09级电子信息科学与技术专业Word格式文档下载.docx(20页珍藏版)》请在冰豆网上搜索。
主控程序main.prg、启动界面(封面)face.scx、系统登录界面(口令验证窗口)pass.scx、,主菜单main_menu.mpr。
程序的调用关系如下:
主控程序main.prg中调用界面表单face.scx,封面中调用“口令验证窗口”表单pass.scx,口令正确则调用系统菜单main_menu.mpr。
各菜单项调用相对应的表单。
(一)、主控程序main.prg的代码实现为:
CLEAR&
&
清屏
CLEARALL&
从内存中释放所有的内存变量
CLOSEALL&
关闭各种类型的文件
SETESCAPEOFF&
禁止运行的程序和命令在按Esc键后被中断
SETSAFETYOFF&
指定在改写已有文件时不显示对话框
SETDELETEON&
使用范围子句处理记录的命令忽略标有删除标记的记录
SETSYSMENUOFF&
在程序执行期间废止VisualFoxPro主菜单栏
RELEASEWINDOW"
常用"
&
关闭常用工具栏
SETCENTURYON&
年份以四位显示
SETDATETOymd&
日期格式为年、月、日
SETMARKTO"
-"
指定日期分隔字符
SETHOURSTO24&
指定为24-小时时间格式
_SCREEN.Visible=.t.
_SCREEN.Caption="
09级电子信息科学与技术专业"
系统窗口标题
_SCREEN.Icon="
.\dod.ico"
系统标题栏图标
*判断显示器当前分辨率
_SCREEN.Width=SYSMETRIC
(1)
_SCREEN.Height=SYSMETRIC
(2)
*根据分辨率不同,为系统设置不同的背景图片
IFSYSMETRIC
(1)>
=1024
_SCREEN.Picture="
.\img\bj.jpg"
ELSE
ENDIF
DOFORM.\face.scx&
调用登录界面表单
OnShutDowndoOnShutdown&
退出系统时调用函数onshutdown()
READEVENTS&
建立事件循环
OnShutDown&
释放当前的OnShutDown命令
*按菜单的“关闭”按钮退出时,出现的提示框
FUNCTIONOnShutdown()
sel=MESSAGEBOX("
真的要退出吗?
"
4+32+256,"
提示"
)
IFsel=6
*SELECT0
*USE.\dbsystem\LOG
*GOBOTTOM
*REPLACE离开时间WITHDATETIME()&
退出系统时记录操作员退出时间
CLOSEALL
CLEAREVENTS&
退出事件循环
QUIT&
结束当前VisualFoxPro工作期,并将控制权返回给操作系统
ENDFUNC
(二)、在运行主程序后,系统调用登陆界面表单(图4)
主要事件代码:
FORM1的INIT事件代码:
SETBELLON
SETBELLTO'
.\MUSIC\welcome.wav'
2
?
CHR(7)
FORM1的UNLOAD事件代码:
\MUSIC\SILENT.WAV'
此两项功能分别为在打开表单时调用的音乐文件和关闭表单时调用的音乐文件。
Command1的mouseup事件代码:
LPARAMETERSnButton,nShift,nXCoord,nYCoord
releasethisform
DOFORM.\main\pass.scx
Timer1的timer事件代码:
Timer2的timer事件代码:
为了实现五角星的闪动:
IFTHISFORM.label5.visible
thisform.label5.visible=.f.
else
thisform.label5.visible=.t.
endif
Timer3的timer事件代码:
Timer4的timer事件代码:
thisform.label5.visible=.t
同时在每个五角星的颜色也做了设置。
(三)系统登陆表单设计界面
用户在文本框输入操作员及口令,若正确则调用系统主界面(菜单)。
允许输入三次,若三次均不正确刚自动退出系统。
若用户输入的操作员姓名及口令正确,要完成下列工作:
(1)设置一个全局变量operat,用于记录登陆系统的操作员姓名,系统中有3个地方要用到操作员的姓名和代号:
一是进入主界面后在标题栏显示的操作员姓名;
二是操作员在系统管理模块的口令设置中更改自己的口令,系统要知道是哪个操作员;
三是退出系统时系统日志中要记录操作员的退出时间。
(2)在系统日志表log.dbf中增加一条记录,并同时记录此操作员的登录系统的时间。
(3)从权限表menuright.dbf中读出此操作员对应各菜单项的权限,并赋值给数组。
(4)调用菜单文件,显示系统主界面。
事件代码:
Form1的init事件代码:
SETEXACTON&
精确比较
PUBLICARRAYrr[18]&
数组用于实现菜单项权限
PUBLICi&
i用于记录用户名及口令输入次数
PUBLICoperat&
operat用于保存操作员姓名
i=0
THISFORM.Text1.Setfocus
“确定”按钮(COMMAND1)CLICK事件代码:
*判断密码是否正确
i=i+1
SELECToperator
LOCATEFOR操作员姓名=ALLTRIM(THISFORM.Text1.Value)
DOCASE
CASEi<
=3ANDFOUND()ANDTHISFORM.Text2.Value=operator.口令&
输入次数未超过3次且用户名正确、口令正确
operat=THISFORM.Text1.Value
INSERTINTOlog(操作员代号,操作员姓名,登录时间)VALUES(operator.操作员代号,operator.操作员姓名,DATETIME())
_SCREEN.Caption="
09级待腻子信息科学与技术专业——南平75信息管理系统"
+SPACE(40)+DTOC(DATE())+SPACE(40)+"
操作员:
+operat
SELECT权限FROMmenurightINTOARRAYrrWHERE操作员代号=operator.操作员代号ORDERBY菜单项编号
RELEASETHISFORM
DO.\main\main_menu.mpr
=3ANDFOUND()ANDTHISFORM.Text2.Value!
=operator.口令&
输入次数未超过3次且用户名正确、口令不正确
MESSAGEBOX("
密码错误,请重输!
"
警告"
)
THISFORM.Text2.Value="
THISFORM.Text2.Setfocus
=3ANDNOTFOUND()&
输入次数未超过3次且用户名不正确
操作员姓名错误,请重输!
THISFORM.Text1.Value="
THISFORM.Text1.Setfocus
CASEi>
3&
输入次数超过3次
禁止进入系统!
THISFORM.Release
ENDCASE
退出按钮(COMMAND2)CLICK事件代码:
RELEASETHISFORM
CLEAREVENTS
(四)系统菜单设计
1、学生信息管理系统的菜单
在应用系统中,各个了模块是通过菜单组织在一起的。
通过对人事工资管理系统功能模块的设计,可以交系统划分为3大模块:
学生信息管理、学生成绩查询、系统管理,具体的菜单设计见下表:
75信息管理
75成绩管理
系统管理
75信息维护
75成绩查询
操作员管理
口令设置
75信息查询
权限管理
系统日志
数据备份
数据恢复
退出系统
2、在菜单设计器中实现权限设置
在菜单项设计器中,通过[提示选项]对话框设置菜单项的跳过条件可以实现用户权限。
每个操作员对每个菜单项有两种权限:
0或1。
“0”表示此操作员对该菜单项没有操作权,系统运行后,该菜单项为灰色。
不能打开对应的表单,“1”代表该操作员对该菜单项具有操作权,系统运行后,该菜单项可用,鼠标单击菜单项能打开对应的表单。
操作员对各菜单项的权限保存在表文件menuright.dbf中,在登录系统时读出该操作员对应各菜单项的权限,并赋值给一个数组RR。
本系统共10个菜单项,所以定义的数组也包含10个元素。
3、学生信息维护表单包换下列功能:
数据录入、修改、删除、查询、浏览、保存、打印等。
本表单左边是浏览窗口,便于用户浏览数据;
右边是编辑窗口,主要用于输入修改数据。
4、在表单数据环境中添加表:
rsb.dbf、cjb、dbf。
学生人事表和成绩表的结构请打开数据库表查看。
在表单数据环境的BRFOREOPENTABLES事件中添加代码:
this.cursor1.exclusive=.t.
5、事件代码:
THISFORM.COMMANDGROUP1.CMDTOP.ENABLED=.F.
THISFORM.COMMANDGROUP1.CMDPREV.ENABLED=.F.
THISFORM.COMMANDGROUP1.CMDNEXT.ENABLED=.T.
THISFORM.COMMANDGROUP1.CMDBOTTOM.ENABLED=.T.
THISFORM.COMMANDGROUP1.CMDADD.ENABLED=.T.
THISFORM.COMMANDGROUP1.CMDEDIT.ENABLED=.T.
THISFORM.COMMANDGROUP1.CMDDELETE.ENABLED=.T.
THISFORM.COMMANDGROUP1.CMDFIND.ENABLED=.T.
THISFORM.COMMANDGROUP1.CMDPRINT.ENABLED=.T.
THISFORM.COMMANDGROUP1.CMDEXIT.ENABLED=.T.
THISFORM.TEXT1.READONLY=.T.
THISFORM.TEXT2.READONLY=.T.
THISFORM.OPTIONGROUP1.ENABLED=.F.
THISFORM.TEXT3.READONLY=.T.
THISFORM.TEXT4.READONLY=.T.
THISFORM.TEXT5.READONLY=.T.
THISFORM.TEXT6.READONLY=.T.
THISFORM.CHECK1.READONLY=.T.
THISFORM.EDIT1.READONLY=.T.
THISFORM.GRID1.READONLY=.T.
THISFORM.COMMAND1.visible=.T.
THISFORM.LABEL11.visible=.F.
THISFORM.TEXT7.visible=.F.
FORM1的CLICK事件代码:
THISFORM.TEXT7.visible=.F.
GRID1的afterrowclochange事件代码:
LPARAMETERSnColIndex
this.setall("
dynamicbackcolor"
IIF(This.activerow<
>
recno(),rgb(255,255,255),rgb(0,255,0))"
column"
selectrsb
thisform.refresh
此代码实现不现颜色显示选中的GRID对象的行及列。
“第一个“按钮的CLICK事件代码:
gotop
mandgroup1.cmdtop.enabled=.f.
mandgroup1.cmdprev.enabled=.f.
ifnoteof()
mandgroup1.cmdnext.enabled=.t.
mandgroup1.cmdbottom.enabled=.t.
thisform.refresh
“前一个“按钮的CLICK事件代码:
skip-1
ifbof()
“下一个“按钮的CLICK事件代码:
skip
ifeof()
gobottom
mandgroup1.cmdnext.enabled=.f.
mandgroup1.cmdbottom.enabled=.f.
ifnotbof()
mandgroup1.cmdtop.enabled=.t.
mandgroup1.cmdprev.enabled=.t.
“最后一个“按钮的CLICK事件代码:
“增加“按钮的CLICK事件代码:
ifthis.caption="
增加"
this.caption="
保存"
THISFORM.COMMANDGROUP1.CMDNEXT.ENABLED=.F.
THISFORM.COMMANDGROUP1.CMDBOTTOM.ENABLED=.F.
THISFORM.COMMANDGROUP1.CMDEDIT.ENABLED=.F.
THISFORM.COMMANDGROUP1.CMDDELETE.ENABLED=.F.
THISFORM.COMMANDGROUP1.CMDFIND.ENABLED=.F.
THISFORM.COMMANDGROUP1.CMDPRINT.ENABLED=.F.
THISFORM.COMMANDGROUP1.CMDEXIT.ENABLED=.F.
THISFORM.TEXT1.READONLY=.F.
THISFORM.TEXT2.READONLY=.F.
THISFORM.OPTIONGROUP1.ENABLED=.T.
THISFORM.TEXT3.READONLY=.F.
THISFORM.TEXT4.READONLY=.F.
THISFORM.TEXT5.READONLY=.F.
THISFORM.TEXT6.READONLY=.F.
THISFORM.CHECK1.READONLY=.F.
THISFORM.EDIT1.READONLY=.F.
THISFORM.COMMAND1.VISIBLE=.F.
SELECTRSB
APPENDBLANK
GOBOTTOM
THISFORM.TEXT1.SETFOCUS()
THISFORM.REFRESH
THIS.CAPTION="
THISFORM.COMMANDGROUP1.CMDTOP.ENABLED=.t.
THISFORM.COMMANDGROUP1.CMDPREV.ENABLED=.t.
THISFORM.COMMANDGROUP1.CMDNEXT.ENABLED=.t.
THISFORM.COMMANDGROUP1.CMDBOTTOM.ENABLED=.t.
THISFORM.COMMANDGROUP1.CMDADD.ENABLED=.t.
THISFORM.COMMANDGROUP1.CMDEDIT.ENABLED=.t.
THISFORM.COMMANDGROUP1.CMDDELETE.ENABLED=.t.
THISFORM.COMMANDGROUP1.CMDFIND.ENABLED=.t.
THISFORM.COMMANDGROUP1.CMDPRINT.ENABLED=.t.
THISFORM.COMMANDGROUP1.CMDEXIT.ENABLED=.t.
THISFORM.TEXT1.READONLY=.t.
THISFORM.TEXT2.READONLY=.t.
THISFORM.OPTIONGROUP1.ENABLED=.f.
THISFORM.TEXT3.READONLY=.t.
THISFORM.TEXT4.READONLY=.t.
THISFORM.TEXT5.READONLY=.t.
THISFORM.TEXT6.READONLY=.t.
THISFORM.CHECK1.READONLY=.t.
THISFORM.EDIT1.READONLY=.t.
mand1.visible=.t.
“删除“按钮的CLICK事件代码:
XH=RSB.学号
sel=messagebox("
该记录学号为:
+XH+chr(13)+"
真的要删除吗?
ifsel=6
delete
“查找“按钮的CLICK事件代码:
thisform.label11.visible=.t.
thisform.text7.visible=.t.
thisform.text7.value="
thisform.text7.setfocus()
“打印“按钮的CLICK事件代码:
reportform.\menu1\rsb_bb1.frxpreviewforrsb.学号=alltrim(thisform.text1.value)
“退出“按钮的CLICK事件代码:
pack
thisform.release
“TEXT7”的valid事件代码为:
setfilterto学号=alltrim(thisform.text7.value)or学生姓名=alltrim(thisform.text7.value)
locatefor学号=alltrim(thisform.text7.value)or学生姓名=alltrim(thisform.text7.value)
setfilterto
6、运行界面:
(如图5)
(图5)
7、学生信息查询菜单的设计
人事信息的查询是基于RSB.dbf表,菜单提供学号,姓名,全体查询。
分别利用不同的命令代码方式实现查询打印功能。
各事件的代码如下:
*输入编号、姓名提示标签及文本框
THISFORM.Label2.Visible=.F.
THISFORM.Text1.Visible=.F.
THISFORM.Te