《[VFP课程设计] 学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《[VFP课程设计] 学生成绩管理系统.docx(17页珍藏版)》请在三一办公上搜索。
1、VFP课程设计 学生成绩管理系统学生成绩管理系统 摘要 本文通过用VFP编写学生成绩管理系统,利用软件工程原理,采用生命周期方法学,其开发主要包括后台数据库的建立和维护以及前端应用程序的开发两个方面,实现了学生成绩数据库的创建及学生成绩的输入、浏览、维护和统计。 关键字 成绩管理 浏览 打印 维护 统计 1. 引言 每次考试结束,老师们总要统计大量的学生成绩,这些数据的归档、统计工作任务重,时间紧,统计结束后往往错误百出。长时间以后,将产生大量文件和资料,给查找、维护带来不少困难。随着学校信息化水平不断提高,不少学校开始利用计算机处理这些数据;可以用EXCLE统计数据,但是对于一些老师尤其老教
2、师总有些复杂。 学生成绩管理系统是为了更好的管理学生考试成绩而开发的数据库管理软件。根据学校实际要求,即实现学生基本信息、成绩的录入,删除,查询,维护以及成绩的统计分析等几方面功能。管理员可以通过查询,实现删除、修改学生的基本信息;可根据实际需求,自由添加、删除课程;还能打印学生成绩表。学生成绩管理系统可帮助老师们方便快捷地管理这些繁琐地数据。学生成绩管理系统具有手工管理无比优越的优点:查找方便,可靠性高,保密性好,成本低。 基于上述因素,利用软件工程原理,采用生命周期方法学,经过可行性研究,需求分析,总体设计,以及编码、测试和最后运行成功。微软公司地VISUAL FOXPROL具有强大的数据
3、库管理功能,可以方便编写出小型的信息处理系统,能够有效地存储数据,满足用户的应用需求。设计指导思想:一切为用户着想,界面美观大方,操作尽量简单明了,而且作为一个实用系统要有良好的容错性,在用户出现误操作时,及时给出警告,以便用户及时更正。下面介绍学生成绩管理系统的制作过程。 2.需求分析 需求分析简单的说就是分析用户的要求,通过调查、收集与分析,获得用户对数据库的如下要求: 2.1信息要求:指用户需要从数据库中获得信息的内容与性质。 本系统需要的输入数据:学生信息、课程信息(课程名,满分)、考生成绩;输出数据:学生成绩报表、学生信息报表、课程报表、成绩报表。 2.2处理要求:指用户要完成什么处
4、理功能。 本系统功能需求可归纳如下: 数据登记 登记功能用于把各种手填的数据及时登记系统定义表中,还能修改这些数据。 数据浏览 能浏览学生信息、课程信息、成绩。 数据打印 能打印学生信息表、课程信息表、成绩表。 数据统计 能统计各班学生总数和男女人数,统计各班学生的总分、排名,及各单课的排名。 2.3 性能要求:维护数据的安全性. 设定密码,限制非法用户的使用;还能修改密码,维护系统的安全性。 1 3.数据库设计 数据库设计的任务是确定系统所需的数据库。数据库是表的集合,通常一个系统只需一个数据库。建立本系统的数据库 数据datatest.dbc 根据需求分析画出E-R图 成绩 班级 学号 课
5、程号 m n 学生 姓名 课程名 课程 学习 性别 出生日期 名次 满分 3.1逻辑设计:确定数据库所含表及字段 学生信息表:xs(学号,姓名,班级,性别,出生日期) 课程信息表:kc(课程号,课程名,满分) 考生成绩表:cj(学号,姓名,班级,课程名,成绩,名次) 括号外字符号是表名,括号内是字段名,有下划线的字段为关联关键字 3.2物理设计 学生信息表:(dataxs.dbf) xs(xh c(7),xm c(8),bj c(10),xb c(2),csrq d) 课程信息表:(datakc.dbf) kc(kch c(5),kcm c(20),mf n ) 考生成绩表:(datacj.d
6、bf) cj(xh c(7),xm c(8),bj c(10),kcm c(20), cj n(5,1) ,mc n) 自由表: (datapass.dbf) pass(pass c(10) 4.总体设计 按功能分类是总体设计的常用方法,用层次图表示,自上而下分层 主程序 系统功能 数据维护模块 数据浏览模块 成绩管理模块 修改密码 退出 修改 搜索 删除 浏览 打印 输入 统计 分析 4.1数据维护模块 包括对学生信息表、课程信息表、考生成绩表的插入、修改、删除、搜索等。 4.2数据浏览模块 包括对学生信息表、课程信息表、考生成绩表的选择浏览、打印。 4.3成绩管理模块 包括对学生成绩的输入
7、,总分和单课的统计和排名,分析各分数段人数的分布情况。 5.初始用户界面设计 系统层对应菜单文件,子系统层对应菜单标题,功能层对应子菜单项 2 系统功能 维护 浏览 成绩管理 版本信息 修改密码 学生信息表 学生信息表 成绩输入 课程信息表 课程信息表 成绩统计 退出 考生成绩表 考生成绩表 成绩分析 6.模块设计与编码 6.1主文件(datamain.prg) 设计系统环境,调用登录表单 代码如下: SET TALK off set sysmenu off *关闭系统菜单 set cent on *年份的世纪部分用4位输出 _screen.windowstate=2 _screen.icon
8、=iconshappy.ico *系统图标 _screen.maxbutton=0 _screen.minbutton=1 _screen.closable=.f. _screen.picture=picturejjfz.jpe *系统背景画 MODIFY WINDOW SCREEN TITLE 学生成绩管理系统 今天是:+dtoc(date)+ +cdow(date) ZOOM WINDOW SCREEN MAX open database data数据test.dbc do form formspass read even *建立事件循环 quit 6.2菜单程序(mprmenu.mpr)
9、的建立 往命令窗口键入命令modi menu menu 出现菜单设计窗口 “退出”菜单项 命令 clear events *停止事件循环, 转去执行read event后的命令 调用各表单命令 如调用修改密码表单(formsxiu.scx) do form formsxiu.scx 插入分隔符 菜单名称 - 结果 菜单项# 设计快捷键 对于菜单项 在菜单命令后加(字母)如系统功能(提示选项对话框,在键标签中键入CTRL+字母(J除外)。 6.3 数据库中的数据需要以表单的形式显示,本系统需建立以下表单: a. 系统登陆表单 b.密码修改表单 c.维护学生信息表单 d.维护课程信息表单 e.维护
10、考生成绩表单 f.浏览学生信息表单 g.浏览课程信息表单 h.浏览成绩表单 i.成绩输入表单 j.总分成绩统计表单 k单课成绩统计表单 l.成绩统计表单 设计表单步骤: 在项目管理器中,文档表单新建。 设计表单属性 重要属性有 Caption AutoCenter Height Width WindowType Icon 添加各标签、文本框,设定文本框与源表中源字段的绑定 有代码的写代码 如属性InteractiveChange Event 当用鼠标或键盘修改控件的值时发生的事件 3 创建命令按钮 详细介绍: a.系统登陆表单 formspass.scx 功能:用户名和密码三次输入错误,自动退
11、出系统; 限制了非法用户的使用,维护了系统数据的安全。 构成:三个标签两个文本框 两个命令按钮 命令按钮 登录 use datapass go top if thisform.user.value=guan and thisform.pass.value=pass.pass do menumenu.mpr*若用户名和密码正确,则进入本系统。 thisform.release else #define missmatch_loc 用户或口令错,请重新登录! wait window missmatch_loc timeout 1 *系统延时 thisform.user.value= thisfor
12、m.pass.value= thisform.user.setfocus numcount=numcount+1 if numcount=4 *表单初始化事件有:public numcount numcount=0 mess =messagebox(三次口令错,将退出程序!,4+16+2,退出) clear event release thisform endif endif b.密码修改表单 功能:可以随时修改密码,维护系统安全。 构成:四个标签三个文本框 两个命令按钮 c.维护成绩表单 formscj.scx 功能:能查询到某位学生成绩,可以对它修改,删除, 还可以清空整个cj.dbf的数
13、据。 属性设计如图1 4 命令按钮 删除 use datacj excl *以独占的方式打开cj.dbf locate for xh=this.parent.text1.value .and.kcm=this.parent.text4.value delete mess=messagebox(彻底删除吗?,4+16+0,删除) *弹出信息对话框 if mess=6 pack *如果确定,则彻底删除 else recall *否则恢复 endif thisform.refresh 下一个 skip 1 if eof *如果到了末记录 =messagebox(已是末记录!,48,信息窗口) ski
14、p -1 this.enabled=.f. else this.enabled=.t. endif if !bof mand3.enabled=.t. else mand3.enabled=.f. endif thisform.refresh d.维护学生信息表单 功能:根据学号能快捷查询到某个学生,对其进行修改,删除操作, 还能添加学生记录。 构成:六个标签四个文本框 一个选项按钮 命令按钮同图1 e.维护课程信息表单 功能:根据课程号能快捷查询到某门课程,对其进行修改,删除操作, 还能添加课程记录。 构成:四个标签 四个文本框 命令按钮同图1 f.浏览学生信息表单 功能:统计出全体学生人数
15、,男女人数和各班级人数和男女人数; 打印出各班级学生信息 构成:一个页框一个退出按钮 每页一个表格 全体学生页:三个标签 三个文本框 打印按钮 5 各班学生页:四个标签 三个文本框 打印按钮 一个组合框 组合框combo1.Interactivechange 代码 set filt to bj=allt(bo1.value) count to thisform.pageframe1.page2.text1.value count for xb=男 to thisform.pageframe1.page2.text2.value count for xb=女 to thisform.pagefr
16、ame1.page2.text3.value thisform.pageframe1.page2.grid1.refresh g.浏览课程信息表单 功能:可以浏览、打印课程信息。 构成:一个标签一个组合框 两个命令按钮一个表格 h.浏览成绩表单 formsscj.scx 功能:能够根据学号,姓名,课程名,班级,浏览学生成绩;还能浏览优秀学生成绩不及格学生成绩(成绩满分*0.6) 并且能打印出选择的记录。 构成:一个含三页的页框 学号姓名查询页:两个标签 两个文本框 一个表格 四个命令按钮 班级课程查询页:一个文本框一个组合框 两个标签一个表格 三个命令按钮 高级查询页:五个命令按钮 一个表格
17、查询代码:set filter to 导出文本文件代码:copy to fieldsfor while sdf i.成绩输入表单 formsincj.scx 功能:方便的输入学生的成绩,下一个按钮 可实现学号+1;如果没选课程,学号不存在,学生该门课的成绩已存在,都会给出错误提示; 右表格显示该门课全体学生的成绩。 构成: 如下图 6 命令按钮 输入 if empty(bo1.value) mess=messagebox(课程名不能为空!,0+48+0,警告) else locate for cj.xh=allt(thisform.text2.value) ; and cj.kcm=allt(
18、bo1.value) if recnoreccount *若符合输入条件,则输入记录。 insert into datacj (xh,xm,bj,kcm,cj,mc); allt(thisform.text3.value),allt(thisform.text1.value),; allt(bo1.; value),thisform.text4.value,reccount+1) go top set filter to cj.kcm=allt(bo1.value) thisform.grid1.refresh thisform.grid1.setfocus *表格标题改变 thisform.
19、grid1.column3.header1.caption=allt(bo1.value) mand1.enabled=.f. mand3.enabled=.t. mand4.enabled=.t. else mess=messagebox(此记录已存在!,0+48+0,警告) endif endif 命令按钮 定位 mand1.enabled=.t. if empty(thisform.text2.value) mess=messagebox(学号不能为空!,48,警告) else go top locate for xs.xh=allt(thisform.text2.value) if r
20、ecnoreccount mess=messagebox(该学号不存在!,48,警告) mand1.enabled=.f. else thisform.text1.value=xs.bj thisform.text3.value=xs.xm endif endif thisform.refresh 命令按钮 下一个 thisform.text2.value=str(val(thisform.text2.value)+1) *实现学号自动加一 j.总分成绩统计表单formstscj.scx 功能:求出选择班级学生的总分,并且统计出排名 构成:三个标签组合框 文本框 一幅图像 7 六个命令按钮bo
21、1 的 InteractiveChange Event 代码 use datacj mand2.enabled=.f. mand3.enabled=.f. mand5.enabled=.f. mand6.enabled=.f. erase sort1.dbf *删除文件sort1.dbf use 命令按钮 打印 调用程序 do prgsprt.prg sprt.prg的代码在后面 命令按钮 统计总分 use use datacj set safe off *重写文件,系统不给提示信息 total to sum1 on xh fields cj for bj=bo1.value set safe
22、 on *按学号统计各班学生总分,生成文件sum1.dbf mand5.enabled=.t. t=1 ? use use sum1 this.parent.text1.value=reccount *统计各班级参加考试的人数 use 命令按钮 成绩排名 use use sum1 excl set safety off sort to sort1 on cj desc fields xh,bj,xm,cj,mc *生成排名文件sort1.dbf set safety on use erase sum1.dbf use sort1 excl repl all mc with recno *能够对
23、相同分数的考生得出相同的名次 go top do while .not.eof t=cj p=mc *定义临时变量p skip 1 if t=cj repl mc with p endif enddo use mand2.enabled=.t. mand3.enabled=.t. 8 mand6.enabled=.t. use k.单课成绩统计表单 datatdcj.scx 功能:统计出全年级、各班级学生各门课排名。 构成:三个标签 文本框 组合框选项按钮组 一幅图像 四个按钮(统计,文本文件,打印,退出) l.成绩分析表 datacjfx.scx 功能:通过输入班级、课程名和分数段值,统计出
24、各分数段的人数, 并求出最高分、最低分。 构成:11个标签一个组合框两个按钮 命令按钮 设定 m=thisform.text2.value n=thisform.text3.value p=bo1.value q=thisform.text1.value count to thisform.text4.value for cj.cj=(m-n) and cj.kcm=allt(p) and cj.bj=allt(q) *求出第一分数段的人数 count to thisform.text5.value for cj.cj=(m-2*n) and cj.kcm=allt(p) and cj.bj=
25、allt(q) *求出第二分数段的人数 count to thisform.text6.value for cj.cj=(m-3*n) and cj.kcm=allt(p) and cj.bj=allt(q) *求出第三分数段的人数 count to thisform.text7.value for cj.cj=(m-4*n) and cj.kcm=allt(p) and cj.bj=allt(q) *求出第四分数段的人数 count to thisform.text8.value forcj.cj(m-4*n) and cj.kcm=allt(p) and cj.bj=allt(q) *求出
26、第五分数段的人数 thisform.label4.caption=allt(str(m)+-+allt(str(m-n) *改变label4的标题 thisform.label5.caption=allt(str(m-n)+-+allt(str(m-2*n) thisform.label6.caption=allt(str(m-2*n)+-+allt(str(m-3*n) thisform.label7.caption=allt(str(m-3*n)+-+allt(str(m-4*n) thisform.label8.caption=+allt(str(m-4*n) go top max1=0
27、 *以下求出最高分数和最低分数 min1=m locate for cj.kcm=allt(p) and cj.bj=allt(q) do while recnomax1 max1=cj.cj endif if cj.cj30 eject &打印机输出命令 ? 学号 姓名 总分 名次 &zt lin=1 endif enddo eject set print off use sort1 set console on &打开到屏幕的输出 set safe on set talk on return 6.5学生成绩报表 frxcj.frx 创建报表 modify report cj 打开报表设计器
28、 设计标题 学生成绩表 报表表达式 date 设计页标头 学号 姓名 成绩名 成绩 班级 添加数据环境 datacj.scx 在细节中,添加域控件xh,xm,kcm,cj,bj 在页注脚中,添加页码 + ALLTRIM(STR(_PAGENO) 课程信息报表 frxkc.frx 学生信息报表 frxxs.frx 制造过程与学生成绩报表的相同 10 7.结束语 连编生成可执行程序,在windows98,visual foxfro6.0环境下,调试成功。它实现了学生基本信息的管理,成绩的输入、浏览、统计、打印和维护。它可以按班级统计学生的总分,并对其排名,还可以对单课成绩排名,通过编写总分成绩排名的程序,实现打印成绩排名表。如果能把总分成绩和单课成绩组成一个报表,就更好了。 参考文献 萨师煊 数据库系统概论 高等教育出版社 2000.02 赵茂祥 foxpro原理与程序设计 石油大学出版社 1999.06 张海藩 清华大学出版社 2001.05 11 软件工程导论