vf课程设计

一.需求规格说明书

随着计算机科学技术的不断发展,计算机对学生信息进行管理有着手工无法比拟的优点。例如:检索迅速、查找方便、可靠性高、存储容量的、保密性好、寿命长、成本低等。这些优点都能极大地提高学生信息管理的效率,方便系统管理员实现对学生的信息管理,同时也方便学生对自己信息的查询。

学生信息管理系统是一个简单实用的系统,它是学校进行学生管理的好帮手。此软件功能齐全,设计合理,使用方便,适合各种学校对繁杂的学生信息进行统筹管理,具有严格的系统使用权限管理,具有完善的管理功能,强大的查询功能。它可以融入学校的信息管理系统中,不仅方便了学生信息各方面的管理,同时也为教师的管理带来了极大地便利。

我们进行本次课程设计的主要目的是通过上机实践操作,熟练掌握数据库的设计、表单的设计、表单与数据库的连接、SQL语言的使用和了解它的功能:数据定义、数据操纵、数据控制,以及简单VF程序的编写。基本实现学生信息的管理,包括系统的登录、学生信息的录入、学生信息的浏览、学生信息的查询、学生信息的修改和学生信息的删除以及系统管理等功能,并对Visual FoxPro6.0的各种功能有进一步的了解,为我们更进一步深入的学习奠定基础,并在实践中提高我们的实际应用能力,为我们以后的学习和工作提供方便,使我们更容易融入当今社会,顺应知识经济发展的趋势 。

二.概要设计说明书

学生信息管理系统是基于FOXPRO 6.0中文版开发。FOXPRO在数据库开发方面具有方面,实用,简单,直接等优点。同时其也具有一定的局限性。

本系统主要面向系统管理员和学生开发使用,因此主要侧重于系统的使用性和方便性。同时在安全性方面也十分重视。特别是操作员级别的划分等密码管理,都做了仔细的分析研究。

(一)、系统登录界面的设计,主要是本着实用简便的原则设计制作。在系统界面被打开时,会播放一段欢迎曲。系统运行的首界面如图1。具体实现代码见目录。

图1

系统界面中有登陆系统按钮,系统使用人员可以点击进入密码验证页,如果在一分钟内用户没有点击此按钮,系统会自动跳到密码验证页。此程序的实现代码会在详细设计书中说明。

(二)、密码验证作为系统最基本的安全管理步骤。用户如果不输入合法的用户名和密码,系统是不能进入的。用户在文本框输入操作员及口令,若正确则调用系统主界面(菜单)。允许输入三次,若三次均不正确刚自动退出系统。当用户输入合法的用户名和密码时,系统管理会自动判断此用户是什么级别的用户,具有什么权限,使用户的操作具有合法性。密码验证页包括操作员姓名和密码两个部分。程序运行如图2。具体的代码实现也将在详细设计书说明。

图2

当操作员的名称和密码均正确的时候,系统便会进入系统使用主菜单。主菜单共分为三个分菜单项:学生信息管理,学生成绩管理,系统管理。运行界面见图3。具体代码实现见附件。

图3

(三)、学生信息管理系统菜单设计。在应用系统中,各个子模块是通过菜单组织在一起的。通过对学生信息管理系统功能模块的设计,可以将系统划分为3大模块:学生信息管理、学生成绩查询、系统管理,具体的菜单设计见下表:

在菜单设计器中实现权限设置

在菜单项设计器中,通过[提示选项]对话框设置菜单项的跳过条件可以实现用户权限。每个操作员对每个菜单项有两种权限:0或1。“0”表示此操作员对该菜单项没有操作权,系统运行后,该菜单项为灰色。不能打开对应的表单,“1”代表该操作员对该菜单项具有操作权,系统运行后,该菜单项可用,鼠标单击菜单项能打开对应的表单。

(四)、学生信息管理菜单设计。

(1)、学生信息维护子菜单。学生信息维护表单包换下列功能:数据录入、修改、删除、查询、浏览、保存、打印等。本表单左边是浏览窗口,便于用户浏览数据;右边是编辑窗口,主要用于输入修改数据。在表单数据环境中添加表:rsb.dbf、cjb、dbf。程序运行如图4,打印的运行窗口如图5。具体代码实现见附件。

图4

   
图5

    (2)学生信息查询子菜单。学生信息管理系统的查询是基于RSB.dbf表,菜单提供学号,姓名,全体查询。分别利用不同的命令代码方式实现查询打印功能。功能是便于指导员和老师,学生用户的检索查询。程序运行窗口见图6。打印窗口与学生信息维护窗口类似,不予赘述。具体实现代码见附件。

图6

(五)、学生成绩管理菜单。该菜单仅包含一个子菜单即成绩查询。成绩查询菜单的设计与学生信息查询菜单的设计比较类似。菜单调用的是cjcx.scx表单。各事件代码均与学生信息查询类似。程序运行界面见图7。具体代码实现见附件。

图7

(五)、系统管理菜单设计。

(1)、操作员管理子菜单。该模块可实现操作员的浏览、添加,删除,编辑、打印等功能 。程序运行如图8。具体代码实现见附件。

图8

(2) 口令设置子系统。可以实现对用户密码的更改功能。通过对用户原口令以及两次输入口令的一致性实现对用户口令的修改。程序运行窗口见图9。具体代码实现见附件。

图9

(3)、权限设置子系统。该模块通过对操作原代号对相应菜单的控制权限实现对操作的限制。其中“1”为只读。“0”为可写。具体代码实现见附件。运行截图见图10。

图10

(4)系统日志子菜单。该模块实现对用户使用该系统的记载。记载用户登录时间以及离开是的时间。程序运行如图11,代码实现见附件。

图11

(5)数据备份。该功能将系统中名为dbsystem的文件加的内容复制到一个一系统日期为名的文件夹中,实现对系统部分内容的备份,以防数据丢失。运行见图12。

图12

(6)、退出子系统。实现系统的退出。

三、数据库设计说明书

该系统由三大菜单紧密结合联系,共分为两个数据库,第一个数据库包括学生管理维护表和成绩查询表,第二个数据库包括系统管理表。如下图所示(图1)

四.用户使用说明

    用户使用流程图:

五.心的体会

在本系统的开发过程中,由于是初次开发软件,在知识、经验方面都存在着不足。另外,在整个开发的过程中,时间也比较仓促。因此,该系统必然会存在一些缺陷和不足。因为对学生信息管理的整个流程不够熟悉,在需求分析时未能做到完全满足用户的需求。虽然网络在学生管理系统中的应用不是很多,但是未来的发展方向,在本次开发过程由于硬件的限制,未能实现网络功能,因此在以后的系统更新过程中可能会造成一些不必要的数据损失。

尽管本管理系统存在着很多不足,但其功能全面、易于日后程序更新、数据库管理容易、界面友好、操作方便、效率高、安全性好等优点是本管理系统所必需的。相信本学生管理系统是一套学校在日常管理中必不可少的管理软件,通过开发这个系统,我掌握了的项本过程,了解了的基本知识巩固了我对Visual   Basic 6.0的学习,但在这次毕业设计中的最大收获并不是掌握这几门开发工具的应用,而是学会了设计系统的思维方法。   

在两周的实习过程中,通过对遇到的问题反复不断的尝试新的方法,锻炼了我的意志力和对系统的整体感知能力,相信在以后会做出更好的系统。

六.分析所用方法的优、缺点

缺点:在程序中有好多类似的控件,比如按钮。可以用类实现简易操作。本系统中每个控件都是单独生成,如果在程序开始的时候就设计出类,将会节省开发的时间,使操作变的简单。

在实现备份的时候不能选择性的备份其中的某个文件而是备份了整个文件夹的文件,使系统缺少灵活性。而且没有设计出文件还原系统,是文件的还原只能通过人工操作,降低了系统的简易力。

在学生信息维护模块中,在对照片的添加功能上没能实现对添加照片大小的限制。使有时候加入的照片过大而影响美管。

优点:整个系统的运行过程简单,易于操作。界面友好。基本实现了对学生信息的管理。

七、附录

程序运行主要源代码:

u  主控程序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("真的要退出吗?",4+32+256,"提示")

IF sel=6 

  SELECT 0

  USE .\dbsystem\LOG    

  GO BOTTOM

  REPLACE 离开时间 WITH DATETIME()  &&退出系统时记录操作员退出时间

  CLOSE ALL

  CLEAR EVENTS    &&退出事件循环

  QUIT            &&结束当前 Visual FoxPro 工作期,并将控制权返回给操作系统

ENDIF

ENDFUNC

u  登录界面pass的主要代码:

登录按钮的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(25)+DTOC(DATE())+SPACE(25)+"操作员:"+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   

u  chaxun窗口

查询打印的click事件代码:

*输入编号、姓名提示标签及文本框

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.

查询按钮的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

u  数据备份窗口

“开始备份”按钮 的click事件:

  M_ML="dbsystem\"+DTOC(DATE(),1)

IF !DIRE(M_ML)         &&判别以今天日期为名称的目录是否存在,如果不存在,建立一个

   MD &M_ML  

ELSE

   IF MESSAGEBOX("今天已经备份过数据了,"+chr(13)+;             &&判断是否今天已经备份过数据

                "您是否要重新备份一次?",4+32+256,"备份提示")#6

      RETURN

   ENDIF

ENDIF  

SET SAFE OFF

DELE FILE BACKUP\*.*

CLOS TABLE ALL        &&备份数据时必须关闭所有打开的数据库及表

CLOS ALL

M_CHAR="备份开始,请稍侯..."               

WAIT WINDOW M_CHAR NOCLEAR NOWAIT        &&显示备份开始信息

for i=1 to 296

    for j=1 to 200

        this.parent.shape5.width=i

    endfor

endfor   

DELE FILE DATA\*.BAK           &&删除所有BAK文件

DELE FILE DATA\*.TBK           &&删除所有TBK文件

M_ML1=M_ML+"\*.*"

COPY FILE dbsystem\*.* TO &M_ML1    &&开始备份

WAIT CLEA

=MESSAGEBOX("祝贺您,数据已成功备份!",0+48,"备份成功")       &&提示备份成功

THISFORM.SHAPE5.WIDTH=0

RELE M_ML,M_CHAR,M_ML1

u  口令设这窗口modifypasswd的主要代码

“确定”按钮的click事件

select operator

locate for operator.操作员姓名=alltrim(operat)

if alltrim(thisform.text1.value)=alltrim(operator.口令)

  if thisform.text2.value=thisform.text3.value

    replace operator.口令 with thisform.text2.value

    release thisform

  else

    messagebox("口令不一致!")

    thisform.text2.setfocus()

  endif

else

  messagebox("原口令错误!")

  thisform.text1.setfocus()

endif  

u  信息维护模块的代码

(1)、“第一个”按钮的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

(2)、“下一个”按钮的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
(3)、“最后一个”按钮的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

(4)、“增加”按钮的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

(5)“编辑”按钮的click事件

if this.caption="编辑"

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=.F.

THISFORM.COMMANDGROUP1.CMDEDIT.ENABLED=.T.

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.

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.

ENDIF

(6)、“删除“按钮的click事件

SELECT RSB

XH=RSB.学号

sel=messagebox("该记录学号为:"+XH+chr(13)+"真的要删除吗?",4+32+256,"提示")

if sel=6

delete

endif

(7)“查询“按钮的click事件

thisform.label11.visible=.t.

thisform.text7.visible=.t.

thisform.text7.value=""

thisform.text7.setfocus()

(8)“打印“按钮的click事件

report form .\menu1\rsb_bb1.frx preview for rsb.学号=alltrim(thisform.text1.value)

八.参考文献

Visual FoxPro 及其应用系统开发(第二版) 史济民 主编 汤观全 张露 编著

相关推荐