《VFP课程设计-学生成绩管理系统.doc》由会员分享,可在线阅读,更多相关《VFP课程设计-学生成绩管理系统.doc(36页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、镇江高等专科学校课程设计报告书 题 目: 学生成绩管理系统 系 部: 电子信息系 专 业: 计算机应用技术 班 级: 微机D07 姓 名: 学 号: 2008年 12 月 24 日 目录第1章 系统简介.4第2章 系统可行性分析4 2.1 技术可行性.4 2.2 实施可行性.4第3章 系统设计.4 目标设计.4 开发设计思想.5 3.3 开发和运行环境选择.5 系统结构图.5 3.5 系统模块功能介绍 .7 3.5.1 系统主界面7 3.5.2 验证界面.7 3.5.3 查询模块 .7 3.5.4 维护模块.7 3.5.5 报表模块.7 3.5.6 退出系统7 3.6 数据库设计.8 3.6.
2、1 数据库概念设计8 3.6.2 数据库逻辑设计9 3.6.3 数据库物理设计9 3.6.4 建立索引和永久关系.11 3.7 主要模块的创建12 3.7.1 开始界面设计.12 退出界面设计.13 3.7.3 验证界面设计.15 3.7.4 学生成绩查询表单17 3.7.5 浏览学生信息表单18 3.7.6 浏览课程表表单.19 3.7.7 学生查询界面20 3.7.8 维护成绩表界面.22 3.7.9 菜单设计.23 3.7.10 报表设计.24 3.7.11 主程序设计25第4章 开发中的难点与解决技巧27附录代码.28第1章 系统简介 随着社会的发展,资讯的迅速发展便得我们从过去繁重的
3、劳作中得以解脱,所以编写一个完善的学生成绩管理系统的任务就显得很必要了。学生成绩管理系统解决了过去手记成绩,现在它更快速的对学生成绩进行管理,如查询、修改、增加、删除。第2章 系统可行性分析 数据库软件作为开发工具进行开发,开发出的系统是一个数据库应用管理系统,该系统安全,可靠,稳定,完全可以满足任务要求。2.2实施可行性 该系统可以设计一系列便于操作的窗口界面,操作人员只需稍经培训就可以进入工作状态。同时,可以对目前手工记录学生成绩,查询,修改,编制报表等工作进行彻底改革,使各项工作都能够通过计算机来完成,使学生成绩管理实现自动化,极大的提高了工作效率。第3章 系统设计 目标设计本章旨在抛砖
4、引玉,通过开发一个简化的学生成绩管理系统,展示Visual FoxPro的强大功能。同时,希望有兴趣的可以在此基础上设计开发出功能更多更强大的学生成绩管理系统。3.2 开发设计思想本系统开发设计思想:u 尽量采用学校现有软硬件环境,及先进的管理系统开发方案,从而达到充分利用学校现有的资源,提高系统开发水平和应用效果的目的。u 系统应符合学校学生成绩管理的规定,满足对学校学生日常管理的需要,并达到操作过程中的直观、方便、实用、安全等要求。u 系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。u 系统应具备数据库维护功能,及时根据用户需求进行数据
5、的添加、删除、修改、备份等操作。3.3 开发和运行环境选择运行环境:Windows9x、Windows NT或Windows 2000操作系统。3.4 系统结构图采用模块化设计思想,可以大大提高设计的效率,并且可以最大限度地减少不必要的错误。其系统结构图如下所示:开始界面验证用户进入主窗口界面退出系统是否合法学生成绩管理系统报表 查询 维护退出学生表浏览课程表浏览成绩表浏览学生查询成绩查询成绩表维护菜单3.5 系统模块功能介绍本系统主要用于学校学生成绩管理,主要任务是用计算机对学生成绩进行日常管理,如查询、修改、增加、删除。针对这些要求,设计了本学生成绩管理系统。该系统主要进行学生成绩的查询、
6、浏览、维护。l 系统主界面该模块是学生成绩管理系统的主界面,是主系统的唯一入口和出口。该界面可调用各子模块。实现对学生相关信息的浏览,查询,修改和报表。l 验证界面验证界面是验证用户名,只有当使用者正确的输入用户名和密码后才能进入系统。l 查询模块本模块的目的在于快速浏览学生信息,学生的成绩和课程表。l 维护模块本模块的目的在于对系统的各个数据库进行维护,对课程表、学生表、成绩表进行增加、删除,以便及时更新数据进行查询。l 报表模块本模块的目的在于对学生表、课程表、成绩表的报表浏览,能够通过打印机将它们打印出来。l 退出系统本模块设计的目的是当用户退出系统时显示感谢词,画面停留两秒后自动退出.
7、3.6 数据库设计 数据库概念设计ER图是ER模型的图形表示法,它是直接表示概念模型的有力工具。我们用ER图来说明学生成绩管理系统的数据库概念模式,如下图所示。学生姓名性别出生年月班级学号 (a)课程课程名课程编号学分任课老师 ( b ) 成绩课程编号分数学号 ( c )成绩学习课程考试学生 ( d ) 数据库逻辑设计将以上ER转换成如下关系模式: 学生表(学号,姓名,性别,出生年月,班级)课程表(课程名,课程编号,学分,任课教师)成绩表(学号,课程编号,分数) 数据库物理设计本系统中包括三个数据表:学生表、课程表、成绩表,表结构如下图:学生表结构字段名字段类型与长度字段规则与说明默认值标题X
8、HC(8)“81991001”学号XMC(8)姓名XBC(2)“性别只能是男或女”“女”性别CSRQD“年龄在18至22岁之间”出生年月BJC(10)班级 课程表结构字段名字段类型与长度字段规则与说明默认值标题KCHC(4)课程编号KCMC(14)课程名JSC(8)任课教师XFN(3,1)“学分大于01学分 成绩表结构字段名字段类型与长度字段规则与说明默认值标题XHC(8)学号KCHC(4)课程号CJN(5,1)“成绩大于0”60成绩 建立索引和永久关系 建立索引数据表名称索引名称索引类型索引表达式学生表NO主索引XHNAME普通索引XM课程表SUB_NO主索引KCHSUB_NAME普通索引K
9、CM成绩表STUDENT主索引XH+KCH+STR(CJ,4,1)MARK普通索引CJ建立学生表与成绩表,课程表与成绩表的关联,关键字是分别是XH字段和KCH字段。3.7 主要模块的创建 开始界面设计设计该表单的主要功能是当用户启动使用“学生成绩管理系统”时,显示欢迎界面,开始界面上的欢迎词每个1秒闪烁一次。用户按下键盘上任一键时,系统自动进入下一级表单。设计该模块比较简单,利用一个表单就可实现其功能。以下是这一模块的设计步骤。首先新建一个表单,保存为“welcome”。将该表单的“Caption”属性设为“欢迎界面”,“Desktop”属性设置为“”。为了给该表单添加一张图片背景,设其“Pi
10、cture”属性为所要添加图片的地址。然后为该表单添加一个“Timer1”控件和一个“Label1”控件。修改“Timer1”控件的“Interval”的属性为“1000”,这样当每间隔一秒钟将触发一次“Timer Event”事件。“Label1”控件的相关属性的内容如下表。 “Label1”控件中主要属性属性名称属性值Caption欢迎使用学生成绩管理系统BackStyle0-TransparentFontBold.T.FontName隶书FontSize20ForeColor16711935开始界面的设计结果如下图所示。 退出界面设计当用户退出系统时显示感谢词,两面停留两秒后自动退出。这
11、一表单也比较简单,利用一个表单就可实现其功能。退出界面的设计方法同开始界面的设计方法类似。表单中所用的各控件属性如下表所示。 “Form1”表单主要属性属性名称属性值Caption退出界面Desktop.T.Picture “Label1”控件中主要属性属性名称属性值Caption欢迎使用BackStyle0-TransparentFontBold.T.FontName隶书FontSize32ForeColor “Label2”控件中主要属性属性名称属性值Caption谢谢您的支持BackStyle0-TransparentFontBold.T.FontName隶书FontSize30Font
12、Color “Timer1”控件中主要属性属性名称属性值Interval2000退出界面设计结果如下图所示。 验证界面设计 为了确保数据库的安全性设计的,只有合法的用户才可以进行登录。如果用户名或密码输入不正确,可以取消重新输入。该表单包括两个LABLE控件,两个TEXT控件,和三个COMMAND控件。表单中的各控件属性如下表所示。 “Form1”表单主要属性属性名称属性值Caption验证界面Desktop.T.Picture “Label1”控件中主要属性属性名称属性值Caption用户名BackStyle0-TransparentFontBold.T.FontName宋体FontSize
13、20 “Label2”控件中主要属性 属性名称属性值Caption密码BackStyle0-TransparentFontBold.T.FontName宋体FontSize20 Command 控件主要属性控件名称属性名称属性值Command1Caption确定Command2Caption取消Command3Caption退出验证界面设计结果如下图所示。 学生成绩查询表单这一模块实现了最基本而又很重要的功能,它让用户方便快捷、多角度地得知想要查询的情况。该模块是对学生成绩的查询,可以查询所有学生的成绩,也可以根据学号进行查询。这一模块所包含的控件属性所下表。控件名称属性属性值Form1Cap
14、tion成绩查询Lable1Caption学号FontName楷体FontBold.T.Fontsize20Backstyle0 - 透明Command 1Caption查询FontSize12ForeColor(0,0,255)FontName楷体Command2Caption退出ForeColor(0,0,255)FontName楷体FontSize12 学生成绩查询设计结果如下图所示。 浏览学生信息表单这一模块设计的目的主要是迅速的浏览学生信息。表单中包含的控件属性如下表。控件名称属性属性值Form1Caption学生信息浏览Lable1Caption学生信息表FontBold.T.Fo
15、ntName楷体FontSize25ForeColor(0,255,0)BackStyle0 - 透明 学生信息浏览表单设计结果如下图所示。 浏览课程表表单这一模块设计的目的主要是快速浏览课程表,表单中所包含的控件属性如下表。控件名称属性属性值Form1Caption学生课程浏览Lable1Caption学生课程表FontName楷体FontBold.T.Fontsize28ForeColor(255,0,128)Backstyle0 - 透明 学生查询界面本模块的目的在于快速浏览学生的基本情况。目标界面如下图所示。 表单中所包含的控件属性如下表。 控件名称属性属性值Form1Caption学
16、生查询Lable1Caption学号Fontsize16FontBold.T.Backstyle0 - 透明Command 1Caption查询Command2Caption取消 控件Lable2、Lable3、Lable4、Lable5属性设置同Lable1相同。 维护成绩表界面 本模块的目的在于对系统的各个数据库进行维护,对成绩表进行增加、删除,以便及时更新数据进行查询。表单中包含的所有控件的属性设置如下表。 控件名称属性属性取值Form1Caption成绩表维护Lable1Caption成绩表FontBold.T.Fontsize30Backstyle0 - 透明Lable2Captio
17、n学号Backstyle0 - 透明Fontsize15Command 1Caption前一条Command 2Caption下一条Command 3Caption修改Command 4Caption取消 控件Lable3、Lable4属性与Lable2属性一置。在点击“修改”命令按钮时,会出现“是否确定要修改该记录”。选择“是”会出现下面图。 这一模块设计的结果如下图。 菜单设计菜单以横向排列在主窗口顶部的标题栏之下,它方便而快捷地完成了各项工作。要做菜单先要打开菜单设计器,在菜单设计器中输入菜单名称,选择“结果”。如需要编辑子菜单,进入子菜单进行编辑菜单名称。下图是该模块的菜单设计器和该模
18、块结果设计。 报表设计报表用于在打印文档中显示或总结数据。报表的数据源定义了报表中数据的来源,通常是表、视图、查询、临时表等,报表的布局定义了报表的打印格式。这一模块是通过报表向导,选择所做报表的字段, 选择报表样式为经营式,报表布局,和排序记录为学号,最后保存为学生表。如下图。下图是学生报表的缩小图。 主程序设计系统要执行,需要有一个主程序。由主程序设置系统的环境后,打开程序主表单,等待使用者的操作。主程序将调用应用程序框架中的各个功能组件,然后由这些组件调用应用程序的其他部分。主应用程序对象必须做的第一件事就是对应用程序的环境进行初始化。在打开VFP时,默认得的VFP开发环境将建立SET命
19、令和系统变量的值。一个比较好的设计方法是将初始的环境设置保存起来,在启动代码中为程序建立特定的环境设置。此外,在一个应用程序特定的环境下,可能需要使用代码一下操作。在“项目管理器”中选择“代码”中的“程序”,点击“新建”按钮,为系统新建一个主程序。为主程序编写代码,存储为mainprg。Clear screenClear events*打开数据库Open database databasesalary*执行开始表单Do form formksjm设置系统环境配置Do setting*开始响应事件Read events*收到“clear events”命令后关闭数据库,还原系统环境配置Close
20、 databaseDo reset将mainprg.prg程序设置为主文件,如下图所示. 第四章 开发中的难点与解决技巧 报表的使用在系统设计时发现,设计好报表后,有时无论怎么预览都无法看到报表,像报表一预览就消失一样。经过几次调试才确定不是程序问题。后来发现,当该报表数据环境中的表是一个空表时就会遇到无法预览的情况。解决这个问题一个方法就是在该表中输入 几个数据,这样报表就可以预览了。 常见的代码错误当编写VFP应用程序时可能产生许多个错误,至少它会爆出许多出错信息。有些错误比较常见,而有些错误则相当神秘。许多错误与句法相关,而且往往是简单的录入错误造成的。所以我们要在编写程序时一定要注意录
21、入,避免错误。附录代码 欢迎界面计时器timer1的代码:if nTime=0 thisform.Label1.visible=.t. nTime=1else thisform.Label1.visible=.f. nTime=0endif 退出界面计时器timer1的代码:CLEAR EVENT*释放表单并停止由READ EVENT 开始的事件处理*令程序从READ EVENT的下一条程序行继验证界面 “确定”按钮的代码: sele admineruse studentdatabaseadminer*此为管理员信息数据表的(adminer)的相对路径cx=alltrim(thisform.t
22、ext1.value)cy=alltrim(thisform.text2.value)*获得文本框1、2的输入信息set order to 用户名seek cx*查找输入的信息if alltrim(adminer.用户名)!=cxcMessageTitle=设备管理系统 cMessageText=用户名错误,请重新输入 nDialogType=4+32 nAnswer=messagebox(cMessageText,nDialogType,cMessageTitle) do case case nAnswer=6 thisform.text1.value=*选择“是”时的操作 case nAn
23、swer=7 cMessageTitle=设备管理系统 cMessageText=不要乱来 messagebox(cMessageText,nDialogType,cMessageTitle) *选择“否”时的操作 endcase else if alltrim(adminer.密码)!=cy *判断输入的信息是否与密码符合 cMessageTitle=设备管理系统 cMessageText=密码错误,请重新输入 nDialogType=4+32 nanswer=messagebox(cMessageText,nDialogType,cMessageTitle) do case case nA
24、nswer=6 thisform.text2.value= 择“是”时的操作 case nAnswer=7 cMessageTitle=设备管理系统 cMessageText=不要乱来 messagebox(cMessageText,nDialogType,cMessageTitle) *选择“否”时的操作 endcase else do case case tablesc=1 do form studentformdeptstu *根据变量不同打开不同的表单 case tablesc=2 do form studentformweihu endcase endif endif“取消”按钮的代
25、码: thisform.text1.value=thisform.text2.value=*清空文本框的内容“退出”按钮的代码: *释放本表单成绩表维护界面“前一条”按钮的代码:if reccount()0skip -1if bof()go topendifif recno()=1thisform mand1.enabled=.f.thisform mand2.enabled=.t.elsethisform mand1.enabled=.t.thisform mand2.enabled=.t.endifendif“下一条”按钮的代码: ttt=1if reccount()0skipif eof
26、()go bottomttt=recn()endifif recno()=tttthisform mand1.enabled=.t.thisform mand2.enabled=.f.elsethisform mand1.enabled=.t.thisform mand2.enabled=.t.endifendif“修改”按钮的代码:set multilocks oncursorsetprop(buffering,2)tableupdate(.f.)ys=messagebox(是否确定要修改该记录,4+32,学生成绩管理系统!)if ys=6=messagebox(记录已经修改,48,通知)e
27、ndif“取消”按钮的代码:学生成绩查询界面“查询”按钮的代码:if empty(alltrim(thisform.text1.value)messagebox(请输入学生学号!,48,学生成绩管理系统)else locate for alltrim(xh)=alltrim(thisform.text1.value)if found()set filter to set filter to xh=alltrim(thisform.text1.value)else messagebox(查无此人!,48,学生成绩管理系统)endifendif“退出”按钮的代码:学生查询界面“查询”按钮的代码:i
28、f empty(alltrim(thisform.text1.value)messagebox(请输入学生学号!,48,学生成绩管理系统)else locate for alltrim(xh)=alltrim(thisform.text1.value)if found()thisform.text2.value=xhthisform.text3.value=xmthisform.text4.value=xbthisform.text5.value=bjthisform.text6.value=csrqelse messagebox(查无此人!,48,学生成绩管理系统)endifendif“取消”按钮的代码: