综合案例五 学生学籍系统
【实验目的与要求】
1.熟练使用VFP的操作环境
2.熟练使用项目管理器管理各种文件
3.掌握数据库的设计方法和步骤
4.熟练掌握数据库表及其表之间关系的创建与使用
5.掌握查询与视图的创建与使用
6.掌握程序设计的基本方法
7.掌握表单及其表单中各种控件的设计与使用
8.掌握菜单的创建和使用
【实验要求】
要设计一个性能良好的管理系统,明确用户的应用环境对系统的要求是首要的和基本的。本系统从以下四个方面对用户需求进行了分析:
⑴用户的信息需求:能查询班级信息、学生基本信息、课程信息、学生成绩及补考信息。
⑵用户的处理要求:要能录入班级信息、学生基本信息、学生注册登记、对专业或班级的课程设置、课程信息、学生成绩录入与修改查询、补考成绩录入修改查询等。
⑶对系统的适应性要求:要求系统能够不受未来课程设置变化的影响及班级变动的影响,仍能照常使用。
⑷对系统的安全性要求,要求进入系统必须进行口令校验。
【系统功能模块】
【功能模块说明】
1. 其功能主要分为四大类:
课程管理:用于对各学期课程的开设和修改。
成绩管理:用于对成绩的输入、修改、汇总及排名。
班级管理:用于对班级的录入与修改。
打印功能:用于打印所需数据。
本系统性能力求易于使用,具体有较高的扩展性和可维护性。
2.系统功能分析
录入功能:为一般用户提供相应的录入功能,为超级用户提供对所有信息的录入功能。
查询功能:为所有用户提供查询的功能,可查询允许范围内的所有信息。
维护功能:为一般用户提供查询及相应的修改,删除功能,为用户提供对所有信息的修改删除功能。
打印功能:能打印全校学生的信息及积各班信息,科目成绩等。
退出功能:结束并关闭系统。
【实验内容】
1.1学籍管理中所涉及到的主要实体集及其属性
1、班级﹛班级编号,班级名称,专业代码,学制,收费金额,班主任姓名,入学时间﹜;
2、班级课程﹛班级编号,学期,课程名称,讲授学时,上机学时,讲授教师﹜;
3、补考﹛学号,学期,课程名称,补考1,补考2,原因,未到原因﹜;
4、成绩信息﹛学号、学期、课程名称、成绩﹜;
5、学生基本信息﹛学号,姓名,性别,出生日期,政治面貌,身份证号,班级编号,入学时间,QQ号码、联系电话、e_mail地址、英语等级﹜
6、教学计划﹛专业代码,学期,课程编号﹜;
7、注册﹛学号、学年、注册否﹜;
8、课程信息﹛课程编号,课程名称﹜;
9、专业信息﹛专业代码、专业名称﹜
1.2、主程序
先建一个项目管理器,命名为“学籍管理.pjx”。按照前面几章系统分析及设计的结果,建立一个名称为“学籍库.dbc”的数据库并添加系统所涉及的各个表。然后根据功能模块结构设计的结果建立一个菜单,并设置相应的菜单项的单击事件。再建立一个主控程序,命名为“主程序.prg”。
主界面
主程序.prg的代码如下:
_SCREEN.WINDOWSTATE=2
_SCREEN.CAPTION='学籍管理系统'
_SCREEN.CONTROLBOX=.F.
_SCREEN.BACKCOLOR=RGB(50,100,128)
SET SYSMENU OFF
SET TALK OFF
SET SAFETY OFF
SET STATUS BAR OFF
DO FORM 封面 TO NUM
IF NUM
DO 菜单.mpx
READ EVENT
ENDIF
1.3、系统密码校验模块
1、流程图:
2、程序界面设计:
1.4、菜单设计
相关代码如下:
退出: ??CHR(7)
RE=MESSAGEBOX('是否退出学籍管理系统?',4+32+256,'信息窗口')
IF RE=6
CLEAR EVENT
ENDIF
2、相关代码如下:
(添加按钮)
THIS.CAPTION='继续'
Thisform.班级编号1.VALUE=SPACE(3)
Thisform.班级名称1.VALUE=SPACE(6)
Thisform.专业代码1.VALUE='07070'
Thisform.学制1.VALUE='3'
Thisform.收费金额1.VALUE=1800.00
Thisform.班主任名1.VALUE=SPACE(8)
Thisform.入学时间1.VALUE=CTOD('//')
Thisform.班级编号1.ENABLED=.T.
Thisform.班级名称1.ENABLED=.T.
Thisform.专业代码1.OPTION1.ENABLED=.T.
Thisform.专业代码1.OPTION2.ENABLED=.T.
Thisform.专业代码1.OPTION3.ENABLED=.T.
Thisform.专业代码1.OPTION4.ENABLED=.T.
Thisform.专业代码1.ENABLED=.T.
Thisform.收费金额1.ENABLED=.T.
Thisform.班主任名1.ENABLED=.T.
Thisform.入学时间1.ENABLED=.T.
THISFORM.班级编号1.SETFOCUS
THIS.ENABLED=.F.
THISFORM.COMMAND2.ENABLED=.T.
THISFORM.COMMAND3.ENABLED=.T.
THISFORM.COMMAND4.ENABLED=.F.
THISFORM.REFRESH
1.5、修改密码(代码)
(确认按钮)
RESTO FROM PASS1.MEM ADDI
LOCAL MM1,MM2
MM1=PASS1
MM2=THISFORM.TEXT1.VALUE
SET EXACT ON
IF ALLT(MM1)<>ALLT(MM2)
THISFORM.NO=THISFORM.NO+1
=MESSAGEBOX('原密码错误!',48+0+0,'错误')
IF THISFORM.NO=3
=MESSAGEBOX('三次密码错误,将自动退出修改!',4+16+2,'退出')
THISFORM.COMMAND2.CLICK
ENDIF
THISFORM.TEXT1.VALUE=''
THISFORM.TEXT2.VALUE=''
THISFORM.TEXT1.SETFOCUS
ELSE
PASS1=THISFORM.TEXT2.VALUE
SAVE TO PASS1.MEM ALL LIKE PASS1
=MESSAGEBOX('密码修改成功!',48+0+0,'恭喜')
THISFORM.RELEASE
ENDIF
SET EXACT OFF
1.6、学生补考查询
1、界面设计:
2、相关代码:
(开始查询按钮)
IF EMPTY(THISFORM.COMBO1.VALUE)
=MESSAGEBOX('请输入班级编号!',48+0+0,'信息窗口')
THISFORM.COMMAND2.CLICK
ELSE
IF EMPTY(THISFORM.COMBO2.VALUE)
=MESSAGEBOX('请输入学期!',48+0+0,'信息窗口')
THISFORM.COMMAND2.CLICK
ELSE
SELE 补考成绩
SET FILT TO ALLT(LEFT(学号,2)+SUBS(学号,4,1))==ALLT(BJBH).AND.ALLT(学期)==ALLT(XQ)
GO TOP
IF EOF()
=MESSAGEBOX('没有参加补考的学生信息!',48+0+0,'信息')
THISFORM.COMMAND2.CLICK
ELSE
THISFORM.GRID1.REFRESH
THISFORM.REFRESH
*IF EMPTY(THISFORM.GRID1.COLUMN4.TEXT1.VALUE)
* =MESSAGEBOX('有未录入的补考成绩!',48+0+0,'信息')
*ENDIF
THIS.ENABLED=.F.
THISFORM.COMMAND2.ENABLED=.T.
ENDIF
ENDIF
ENDIF
1.7、打印输出-学期课程表
1、界面设计:
2、相关代码:
(开始按钮)
THIS.CAPTION='继续'
THISFORM.BJBH.VALUE=''
THISFORM.BJBH.ENABLED=.T.
THISFORM.BJBH.SETFOCUS
(预览按钮)
IF EMPTY(THISFORM.BJBH.VALUE)
=MESSAGEBOX('请输入班级编号!',48+0+0,'信息')
THISFORM.COMMAND6.CLICK
ELSE
SELE 班级学期课程表
SET FILT TO 班级编号=BJBH
GO TOP
IF EOF()
=MESSAGEBOX('相关信息不存在,请先设置课程信息!',48+0+0,'信息')
ELSE
REPO FORM 班级学期课程表 PREVIEW
ENDIF
ENDIF
(打印按钮)
??CHR(7)
WAIT WIND '请安装好打印纸,然后按任意键打印!' AT 20,20
REPO FORM 班级学期课程表 TO PRIN
(退出按钮)
THISFORM.BJBH.VALUE=''
THISFORM.BJBH.ENABLED=.F.
THISFORM.RELEASE