城建企管-隋帅
一·系统规划说明书随着人类社会进入信息时代,计算机
越来越多地活跃在社会各个领域:管理,网络,计算,控制,多媒体等。并且在某些方面成为不可缺少的工具,尤其在管理方面,管理软件的出现使大量繁琐复杂的问题变得简单易行。
现今学校的规模不断扩大,学生数量急剧增加,有关学生的各种信息量也成倍增长。面对庞大的信息量,学校对学生信息管理的自动化与准确化的要求日益强烈,需要有专门的学生信息管理系统来提高学生管理工作的效率。通过这样的系统,可以做到信息的规范管理,科学统计和快速的查询,从而减少管理方面的工作量。
该系统组织结构图如下(图1):
学生信息管理系统 班级管理 课程管理 学习管理 成绩统计 档案管理 系统维护 班级信息查询 班级信息添加 班级信息更改 课程信息查询 课程信息添加 课程信息更改 学生资料查询 学生资料添加 学生资料更改 成绩统计 成绩查询 档案汇总 档案查询 用户权限管理 数据备份
(图1)
一、 系统说明书
(一)、系统界面中有登陆系统按钮,系统使用人员可以点击进入密码验证页,如果在一分钟
内用户没有点击此按钮,系统会自动跳到密码验证页。此程序的实现代码会在详细设计书中说明。
(二)、密码验证作为系统最基本的安全管理步骤。用户如果不输入合法的用户名和密码,系统是不能进入的。当用户输入合法的用户名和密码时,系统管理会自动判断此用户是什么级别的用户,具有什么权限,使用户的操作具有合法性。密码验证页包括操作员姓名和密码两个部分。具体的代码实现也将在详细设计书说明。
下面是密码登陆页的图示(图2):
(图2)
当操作员的名称和密码均正确的时候,系统便会进入系统使用主菜单。主菜单共分为三个分菜单项:学生信息管理,学生成绩管理,系统管理。如图(3)
在学生信息管理中分为学生信息维护和学生信息查询两个菜单项,在学生成绩管理中含有学生成绩查询打印菜单项,在系统管理中分为:操作员管理、口令设置、权限管理、系统日志、数据备份、数据恢复、 退出系统七项。
下面为本系统的使用数据流程图:
二、 详细设计说明书
根据系统规划和需要分析,把系统划分为学生信息管理,学生成绩查询,系统管理三个模块。
本系统用到的主要有以下文件:主控程序main.prg、启动界面(封面)face.scx、系统登录界面(口令验证窗口)pass.scx、,主菜单main_menu.mpr。
程序的调用关系如下:主控程序main.prg中调用界面表单face.scx,封面中调用“口令验证窗口”表单pass.scx,口令正确则调用系统菜单main_menu.mpr。各菜单项调用相对应的表单。
(一)、主控程序main.prg的代码实现为: CLEAR &&清屏
CLEAR ALL &&从内存中释放所有的内存变量 CLOSE ALL &&关闭各种类型的文件
SET ESCAPE OFF &&禁止运行的程序和命令在按 Esc 键后被中断 SET SAFETY OFF &&指定在改写已有文件时不显示对话框
SET DELETE ON &&使用范围子句处理记录的命令忽略标有删除标记的记录
SET SYSMENU OFF &&在程序执行期间废止 Visual FoxPro 主菜单栏 RELEASE WINDOW \"常用\" &&关闭常用工具栏
SET CENTURY ON &&年份以四位显示
SET DATE TO ymd &&日期格式为年、月、日 SET MARK TO \"-\" &&指定日期分隔字符
SET HOURS TO 24 &&指定为 24-小时时间格式
_SCREEN.Visible=.t.
_SCREEN.Caption=\"学生管理系统\" &&系统窗口标题 _SCREEN.Icon=\".\\dod.ico\" &&系统标题栏图标
*判断显示器当前分辨率
_SCREEN.Width=SYSMETRIC(1) _SCREEN.Height=SYSMETRIC(2)
*根据分辨率不同,为系统设置不同的背景图片 IF SYSMETRIC(1)>=1024
_SCREEN.Picture=\".\\img\\bj.jpg\" ELSE
_SCREEN.Picture=\".\\img\\bj.jpg\" ENDIF
DO FORM .\\face.scx &&调用登录界面表单
On ShutDown do OnShutdown &&退出系统时调用函数onshutdown() READ EVENTS &&建立事件循环 On ShutDown &&释放当前的On ShutDown命令
*按菜单的“关闭”按钮退出时,出现的提示框 FUNCTION OnShutdown()
sel=MESSAGEBOX(\"真的要退出吗?\提示\") IF sel=6 *SELECT 0
*USE .\\dbsystem\\LOG *GO BOTTOM
*REPLACE 离开时间 WITH DATETIME() &&退出系统时记录操作员退出时间
CLOSE ALL
CLEAR EVENTS &&退出事件循环
QUIT &&结束当前 Visual FoxPro 工作期,并将控制权返回给操作系统 ENDIF ENDFUNC
(二)、在运行主程序后,系统调用登陆界面表单(图4)
(图4)
主要事件代码:
FORM1的INIT事件代码:SET BELL ON SET BELL TO '.\\MUSIC\\welcome.wav',2 CHR(7)
FORM1的UNLOAD事件代码:SET BELL TO '\\MUSIC\\SILENT.WAV',2 CHR(7)
此两项功能分别为在打开表单时调用的音乐文件和关闭表单时调用的音乐文件。
Command1的mouseup事件代码:
LPARAMETERS nButton, nShift, nXCoord, nYCoord
release thisform
DO FORM .\\main\\pass.scx
Timer1的timer事件代码: release thisform
DO FORM .\\main\\pass.scx
Timer2的timer事件代码: 为了实现五角星的闪动: IF THISFORM.label5.visible thisform.label5.visible=.f. else
thisform.label5.visible=.t. endif
Timer3的timer事件代码: 为了实现五角星的闪动: IF THISFORM.label5.visible thisform.label5.visible=.t. else
thisform.label5.visible=.t. endif
Timer4的timer事件代码: 为了实现五角星的闪动: IF THISFORM.label5.visible thisform.label5.visible=.t else
thisform.label5.visible=.t. endif
同时在每个五角星的颜色也做了设置。
(三)系统登陆表单设计界面
用户在文本框输入操作员及口令,若正确则调用系统主界面(菜单)。允许输入三次,若三次均不正确刚自动退出系统。
若用户输入的操作员姓名及口令正确,要完成下列工作:
(1) 设置一个全局变量operat,用于记录登陆系统的操作员姓名,系统中有3个地方要用到操作员的姓名和代号:一是进入主界面后在标题栏显示的操作员姓名;二是操作员在系统管理模块的口令设置中更改自己的口令,系统要知道是哪个操作员;三是退出系统时系统日志中要记录操作员的退出时间。 (2) 在系统日志表log.dbf中增加一条记录,并同时记录此操作员的登录系统的时间。
(3) 从权限表menuright.dbf中读出此操作员对应各菜单项的权限,并赋值给数组。 (4) 调用菜单文件,显示系统主界面。
事件代码:
Form1的init事件代码:
SET EXACT ON &&精确比较
PUBLIC ARRAY rr[18] &&数组用于实现菜单项权限
PUBLIC i &&i用于记录用户名及口令输入次数 PUBLIC operat &&operat用于保存操作员姓名 i=0
THISFORM.Text1.Setfocus
“确定”按钮(COMMAND1)CLICK事件代码: *判断密码是否正确 i=i+1
SELECT operator
LOCATE FOR 操作员姓名=ALLTRIM(THISFORM.Text1.Value) DO CASE
CASE i<=3 AND FOUND() AND THISFORM.Text2.Value=operator.口令 &&输入次数未超过3次且用户名正确、口令正确 operat=THISFORM.Text1.Value
INSERT INTO log(操作员代号,操作员姓名,登录时间) VALUES(operator.操作员代号,operator.操作员姓名,DATETIME()) _SCREEN.Caption=”学生管理系统\"+SPACE(40)+DTOC(DATE())+SPACE(40)+\"操作员:\"+operat
SELECT 权限 FROM menuright INTO ARRAY rr WHERE 操作员代号=operator.操作员代号 ORDER BY 菜单项编号 RELEASE THISFORM DO .\\main\\main_menu.mpr
CASE i<=3 AND FOUND() AND THISFORM.Text2.Value!=operator.口令 &&输入次数未超过3次且用户名正确、口令不正确 MESSAGEBOX(\"密码错误,请重输!\警告\") THISFORM.Text2.Value=\"\" THISFORM.Text2.Setfocus
CASE i<=3 AND NOT FOUND() &&输入次数未超过3次且用户名不正确 MESSAGEBOX(\"操作员姓名错误,请重输!\警告\") THISFORM.Text1.Value=\"\" THISFORM.Text2.Value=\"\" THISFORM.Text1.Setfocus
CASE i>3 &&输入次数超过3次 MESSAGEBOX(\"禁止进入系统!\警告\") THISFORM.Release ENDCASE
退出按钮(COMMAND2)CLICK事件代码: RELEASE THISFORM
CLEAR EVENTS
(四)系统菜单设计
1、学生信息管理系统的菜单 在应用系统中,各个了模块是通过菜单组织在一起的。通过对人事工资管理系统功能模块的设计,可以交系统划分为3大模块:学生信息管理、学生成绩查询、系统管理,具体的菜单设计见下表: 学生信息管理 学生成绩管理 系统管理 学生信息维护 学生信息查询 学生成绩查询 操作员管理 口令设置 权限管理 系统日志 数据备份 数据恢复 退出系统 2、在菜单设计器中实现权限设置
在菜单项设计器中,通过[提示选项]对话框设置菜单项的跳过条件可以实现用户权限。每个操作员对每个菜单项有两种权限:0或1。“0”表示此操作员对该菜单项没有操作权,系统运行后,该菜单项为灰色。不能打开对应的表单,“1”代表该操作员对该菜单项具有操作权,系统运行后,该菜单项可用,鼠标单击菜单项能打开对应的表单。
操作员对各菜单项的权限保存在表文件menuright.dbf中,在登录系统时读出该操作员对应各菜单项的权限,并赋值给一个数组RR。本系统共10个菜单项,所以定义的数组也包含10个元素。
3、学生信息维护表单包换下列功能:数据录入、修改、删除、查询、浏览、保存、打印等。本表单左边是浏览窗口,便于用户浏览数据;右边是编辑窗口,主要用于输入修改数据。
4、在表单数据环境中添加表:rsb.dbf、cjb、dbf。 学生人事表和成绩表的结构请打开数据库表查看。
在表单数据环境的BRFOREOPENTABLES事件中添加代码: this.cursor1.exclusive=.t.
5、事件代码:
FORM1的INIT事件代码:
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.LABEL11.visible=.F. THISFORM.TEXT7.visible=.F.
GRID1的afterrowclochange事件代码: LPARAMETERS nColIndex
this.setall(\"dynamicbackcolor\255,0))\
select rsb
thisform.refresh
此代码实现不现颜色显示选中的GRID对象的行及列。
“第一个“按钮的CLICK事件代码: select rsb go top
thisform.commandgroup1.cmdtop.enabled=.f. thisform.commandgroup1.cmdprev.enabled=.f.
if not eof()
thisform.commandgroup1.cmdnext.enabled=.t. thisform.commandgroup1.cmdbottom.enabled=.t. endif
thisform.refresh
“前一个“按钮的CLICK事件代码: select rsb skip -1 if bof() go top
thisform.commandgroup1.cmdtop.enabled=.f. thisform.commandgroup1.cmdprev.enabled=.f. endif
if not eof()
thisform.commandgroup1.cmdnext.enabled=.t. thisform.commandgroup1.cmdbottom.enabled=.t. endif
thisform.refresh
“下一个“按钮的CLICK事件代码: select rsb skip if eof() go bottom
thisform.commandgroup1.cmdnext.enabled=.f. thisform.commandgroup1.cmdbottom.enabled=.f. endif
if not bof()
thisform.commandgroup1.cmdtop.enabled=.t. thisform.commandgroup1.cmdprev.enabled=.t. endif
thisform.refresh
“最后一个“按钮的CLICK事件代码: select rsb
go bottom
thisform.commandgroup1.cmdnext.enabled=.f. thisform.commandgroup1.cmdbottom.enabled=.f.
if not bof()
thisform.commandgroup1.cmdtop.enabled=.t. thisform.commandgroup1.cmdprev.enabled=.t.
endif
thisform.refresh
“增加“按钮的CLICK事件代码: if this.caption=\"增加\" this.caption=\"保存\"
THISFORM.COMMANDGROUP1.CMDTOP.ENABLED=.F. THISFORM.COMMANDGROUP1.CMDPREV.ENABLED=.F. THISFORM.COMMANDGROUP1.CMDNEXT.ENABLED=.F. THISFORM.COMMANDGROUP1.CMDBOTTOM.ENABLED=.F. THISFORM.COMMANDGROUP1.CMDADD.ENABLED=.T. 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.
SELECT RSB APPEND BLANK GO BOTTOM
THISFORM.TEXT1.SETFOCUS() THISFORM.REFRESH
ELSE
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.
thisform.command1.visible=.t. endif
“删除“按钮的CLICK事件代码: SELECT RSB XH=RSB.学号
sel=messagebox(\"该记录学号为:\"+XH+chr(13)+\"真的要删除吗?\提示\")
if sel=6 delete endif
“查找“按钮的CLICK事件代码: thisform.label11.visible=.t. thisform.text7.visible=.t. thisform.text7.value=\"\" thisform.text7.setfocus()
“打印“按钮的CLICK事件代码:
report form .\\menu1\\rsb_bb1.frx preview for rsb.学号=alltrim(thisform.text1.value)
“退出“按钮的CLICK事件代码: select rsb pack
thisform.release
“TEXT7”的valid事件代码为: select rsb
set filter to 学号=alltrim(thisform.text7.value) or 学生姓名
=alltrim(thisform.text7.value)
locate for 学号=alltrim(thisform.text7.value) =alltrim(thisform.text7.value) thisform.refresh set filter to
6、运行界面:(如图5)
or 学生姓名
(图5)
7、学生信息查询菜单的设计
学生人事信息的查询是基于RSB.dbf表,菜单提供学号,姓名,全体查询。分别利用不同的命令代码方式实现查询打印功能。功能是便于指导员和老师,学生用户的检索查询。
各事件的代码如下:
FORM1的INIT事件代码:
*输入编号、姓名提示标签及文本框 THISFORM.Label2.Visible=.F. THISFORM.Text1.Visible=.F. THISFORM.Text1.Setfocus()
*输入起始日期、截止日期提示标签及文本框不可见
THISFORM.Label4.Visible=.F. THISFORM.Label5.Visible=.F. THISFORM.Text2.Visible=.F. THISFORM.Text3.Visible=.F.
THISFORM.Command4.Visible=.F.
*表格数据不可修改
THISFORM.Grid1.Readonly=.T.
Optiongroup1的CLICK事件代码:
*选定查询类别后,设置各控件是否可见 DO CASE
CASE THIS.Value=1 &&按学号查询 THISFORM.Label2.Visible=.T. THISFORM.Text1.Visible=.T. THISFORM.Label4.Visible=.F. THISFORM.Label5.Visible=.F. THISFORM.Text2.Visible=.F. THISFORM.Text3.Visible=.F.
THISFORM.Command4.Visible=.F.
THISFORM.Label2.Caption=\"请输入要查询的学号:\" THISFORM.Text1.Value=\"\" THISFORM.Text1.Setfocus
CASE THIS.Value=2 &&按姓名查询 THISFORM.Label2.Visible=.T. THISFORM.Text1.Visible=.T. THISFORM.Label4.Visible=.F. THISFORM.Label5.Visible=.F. THISFORM.Text2.Visible=.F. THISFORM.Text3.Visible=.F.
THISFORM.Command4.Visible=.F.
THISFORM.Label2.Caption=\"请输入学生姓名:\" THISFORM.Text1.Value=\"\" THISFORM.Text1.Setfocus()
CASE THIS.Value=3 &&按出生日期查询 THISFORM.Label2.Visible=.F. THISFORM.Text1.Visible=.F. THISFORM.Label4.Visible=.T. THISFORM.Label5.Visible=.T. THISFORM.Text2.Visible=.T. THISFORM.Text3.Visible=.T.
THISFORM.Command4.Visible=.T. THISFORM.Text2.Setfocus
CASE THIS.Value=4 &&显示全体记录 THISFORM.Label2.Visible=.F. THISFORM.Text1.Visible=.F. THISFORM.Label4.Visible=.F. THISFORM.Label5.Visible=.F. THISFORM.Text2.Visible=.F. THISFORM.Text3.Visible=.F.
THISFORM.Command4.Visible=.F. SET FILTER TO GO TOP
THISFORM.Grid1.Refresh ENDCASE
GRID1的数据连接连接RSB表。一一对应该对应的数据项,
COMMAND4(查询)的CLICK事件代码: *按输入的日期条件在表格中显示查询的记录 SELECT rsb
PUBLIC qsrq,jzrq
qsrq=THISFORM.Text2.Value jzrq=THISFORM.Text3.Value DO CASE
CASE NOT EMPTY(qsrq) AND EMPTY(jzrq) SET FILTER TO 出生日期>=qsrq
CASE EMPTY(qsrq) AND NOT EMPTY(jzrq) SET FILTER TO 出生日期<=jzrq
CASE NOT EMPTY(qsrq) AND NOT EMPTY(jzrq)
SET FILTER TO 出生日期>=qsrq AND 出生日期<=jzrq OTHERWISE
MESSAGEBOX(\"未输入查询时间!\提示\") ENDCASE
THISFORM.Grid1.Refresh
COMMAND1的CLICK事件代码:
REPORT FORM .\\menu1\\rsb_bb1.frx PREVIEW
实现调用.\\menu1\\rsb_bb1.frx报表实现打印的功能。
该表单的运行图示如下(图6)
8、学生成绩查询菜单的设计 首先,学生成绩查询菜单的设计与学生信息查询菜单的设计比较类似。菜单调用 的是cjcx.scx表单。各事件代码均类似于学生信息查询的事件代码。 其打印预览按钮的CLICK的事件代码为: DO CASE
CASE THISFORM.Optiongroup1.Option1.Value=1
SET FILTER TO 学号=ALLTRIM(THISFORM.Text1.Value) CASE THISFORM.Optiongroup1.Option2.Value=1
SET FILTER TO 学生姓名=ALLTRIM(THISFORM.Text1.Value)
CASE THISFORM.Optiongroup1.Option4.Value=1 ENDCASE
REPORT FORM .\\cjb_pri.frx PREVIEW
菜单运行的界面如下:(图7)
(图7)
9、系统菜单的设计
系统菜单的设计主要分为操作员管理、口令设置、权限管理、系统日志、数据备份、数据恢复、 退出系统七项。各项调用相应的表单。在操作员管理项可实现操作员的添加,删除,编辑等功能,口令设置实现口令修改的功能,权限管理实现该操作员相应的操作权限功能的设置,系统日志用来记录每个操作员的登陆动作,便于系统的安全管理,数据备份和数据恢复主要是为数据库的数据安全管理设置的。退出系统菜单功能实现退出到操作系统界面,把内存归还给操作系统。系统菜单的各项设计类似于前几项菜单的设计,代码也基本类似于学生信息管理菜单的设计,在此不再详细给出。操作员管理的菜单运行如下:(图8)
因篇幅问题不能全部显示,请点此查看更多更全内容