VFP课程设计_学生成绩管理系统.docx
镇江方等专科学接课程设计报告书题目:学生成绩管理系统系部:电子信息系专业:计算机应用技术班级:微机D07姓爸学号:2008年12月24日目录第1章系统简介4第2章系统可行性分析42.1 技术可行性42.2 实施可行性4第3章系统设计4目标设计4开发设计思想53.3开发和运行环境选择5系统结构图53.5系统模块功能介绍73.5.1 系统主界面73.5.2 验证界面73.5.3 查询模块73.5.4 维护模块7块73.5.6退出系统73.6数据库设计83.6.1数据库概念设计83.6.2 数据库逻辑设计93.6.3 数据库物理设计93.6.4 建立索引和永久关系113.7 主要模块的创立3.7.112开 始 界 面 设退出界面设计133.7.3 验证界面设计153.7.4 学生成绩查询表单173.7.5 浏览学生信息表单18单193.7.7 学生查询界面203.7.8 维护成绩表界面223.7.9 菜单设计233.7.10 报表设计243.7.11 主程序设计25第4章开发中的难点与解决技巧27附录代码28第1章系统简介随着社会的开展,资讯的迅速开展便得我们从过去繁重的劳作中得以解脱,所以编写一个完善的学生成绩管理系统的任务就显得很必要了。学生成绩管理系统解决了过去手记成绩,现在它更快速的对学生成绩进行管理,如查询、修改、增加、删除。第2章系统可行性分析数据库软件作为开发工具进行开发,开发出的系统是一个数据库应用管理系统,该系统平安,可靠,稳定,完全可以满足任务要求。2.2实施可行性该系统可以设计一系列便于操作的窗口界面,操作人员只需稍经培训就可以进入工作状态。同时,可以对目前手工记录学生成绩,查询,修改,编制报表等工作进行彻底改革,使各项工作都能够通过计算机来完成,使学生成绩管理实现自动化,极大的提高了工作效率。第3章系统设计目标设计本章旨在抛砖引玉,通过开发一个简化的学生成绩管理系统,展示VisualFoxPro的强大功能。同时,希望有兴趣的可以在此根底上设计开发出功能更多更强大的学生成绩管理系统。本系统开发设计思想: 尽量采用学校现有软硬件环境,及先进的管理系统开发方案,从而到达充分利用学校现有的资源,提高系统开发水平和应用效果的目的。 系统应符合学校学生成绩管理的规定,满足对学校学生日常管理的需要,并到达操作过程中的直观、方便、实用、平安等要求。 系统采用模块化程序设计方法,既便于系统功能的各种组合和修改,又便于未参与开发的技术维护人员补充、维护。 系统应具备数据库维护功能,及时根据用户需求进行数据的添加、删除、修改、备份等操作。3.3 开发和运行环境选择运行环境:Windows9xWindoWSNT或WindoWS2000操作系统。3.4 系统结构图采用模块化设计思想,可以大大提高设计的效率,并且可以最大限度地减少不必要的错误。其系统结构图如下所示:退出成绩表维护成绩查询学生查询报表退出系统学生成绩管理系统开始界面验证用户进入主窗口界面3.5 系统模块功能介绍本系统主要用于学校学生成绩管理,主要任务是用计算机对学生成绩进行日常管理,如查询、修改、增加、删除。针对这些要求,设计了本学生成绩管理系统。该系统主要进行学生成绩的查询、浏览、维护。,系统主界面该模块是学生成绩管理系统的主界面,是主系统的唯一入口和出口。该界面可调用各子模块。实现对学生相关信息的浏览,查询,修改和报表。,验证界面验证界面是验证用户名,只有当使用者正确的输入用户名和密码后才能进入系统。1.查询模块本模块的目的在于快速浏览学生信息,学生的成绩和课程表。'维护模块本模块的目的在于对系统的各个数据库进行维护,对课程表、学生表、成绩表进行增加、删除,以便及时更新数据进行查询。,报表模块本模块的目的在于对学生表、课程表、成绩表的报表浏览,能够通过打印机将它们打印出来。,退出系统本模块设计的目的是当用户退出系统时显示感谢词,画面停留两秒后自动退出.3.6 数据库设计令数据库概念设计E-R图是E-R模型的图形表示法,它是直接表示概念模型的有力工具。我们用E-R图来说明学生成绩管理系统的数据库概念模式,如以下图所示。(b)(d)令数据库逻辑设计将以上E-R转换成如下关系模式:学生表(学号,姓名,性别,出生年月,班级)课程表1课程名,课程编号,学分,任课教师)成绩表(学号,课程编号,分数)令数据库物理设计本系统中包括三个数据表:学生表、课程表、成绩表,表结构如以下图:学生表结构字段名字段类型与长度字段规那么与说明默认值标题XHC8199100学号XMC姓名XBC“性别只能是男或女“女性别CSRQD“年龄在18至22岁之间出生年月BJC(10)班级课程表结构字段名字段类型与长度字段规那么与说明默认值标题KCHC(4)课程编号KCMC(M)课程名JSC(8)任课教师XFN(3,l)“学分大于0"1学分成绩表结构字段字段类型字段规那么与默认值标题名与长度说明XHC(8)学号KCHC(4)课程号CJN(5,l)“成绩大于(F60成绩令建立索引和永久关系建立索引数据表索引名称索引类型索引表达式名称学NO主索引XH生表NAME普通索引XM课SUB_NO主索引KCH程表SUB_NAME普通索引KCM成绩STUDENT主索引XH+KCH+STR(CJ,4J)表MARK普通索引CJ建立学生表与成绩表,课程表与成绩表的关联,关键字是分别是XH字段和KCH字段。3.7 主要模块的创立开始界面设计设计该表单的主要功能是当用户启动使用“学生成绩管理系统时,显示欢迎界面,开始界面上的欢迎词每个1秒闪烁一次。用户按下键盘上任一键时,系统自动进入下一级表单。设计该模块比较简单,利用一个表单就可实现其功能。以下是这一模块的设计步骤。首先新建一个表单,保存为“welcome。将该表单的“Caption”属性设为“欢迎界面,“Desktop”属性设置为。为了给该表单添加一张图片背景,设其“Picture”属性为所要添加图片的地址。然后为该表单添加一个"Timer,控件和一个"Label/控件。修改“Timed"控件的"Interval”的属性为"1000,这样当每间隔一秒钟将触发一次''TimerEvenJ事件。“Labell控件的相关属性的内容如下表。“Label/控件中主要属性属性名称属性值Caption欢迎使用学生成绩管理系统BackStyleO-TransparentFontBold.T.FontName隶书FontSize20ForeColor16711935开始界面的设计结果如以下图所示。退出界面设计当用户退出系统时显示感谢词,两面停留两秒后自动退出。这一表单也比较简单,利用一个表单就可实现其功能。退出界面的设计方法同开始界面的设计方法类似。表单中所用的各控件属性如下表所示。"Formz表单主要属性属性名称属性值Caption退出界面Desktop.T.Picture"Labellv控件中主要属性属性名称属性值Caption欢迎使用BackStyleO-TransparentFontBold.T.FontName隶书FontSize32ForeColor“Label2控件中主要属性属性名称属性值Caption谢谢您的支持BackStyleO-TransparentFontBoId.T.FontName隶书FontSize30FontColor“Timerl”控件中主要属性属性名称属性值Interval2000退出界面设计结果如以下图所示。验证界面设计为了确保数据库的平安性设计的,只有合法的用户才可以进行登录。如果用户名或密码输入不正确,可以取消重新输入。该表单包括两个LABLE控件,两个TEXT控件,和三个CoMMAND控件。表单中的各控件属性如下表所示。"Forml表单主要属性属性名称属性值Caption验证界面Desktop.T.Picture“Label/控件中主要属性属性名称属性值Caption用户名BackStyleO-TransparentFontBold.T.FontName宋体FontSize20“Label2控件中主要属性属性名称属性值Caption密码BackStyleO-TransparentFontBold.T.FontName宋体FontSize20Command控件主要属性控件名称属性名称属性值Command1Caption确定Command2Caption取消Command3Caption退出验证界面设计结果如以下图所示。学生成绩查询表单这一模块实现了最根本而又很重要的功能,它让用户方便快捷、多角度地得知想要查询的情况。该模块是对学生成绩的查询,可以查询所有学生的成绩,也可以根据学号进行查询。这一模块所包含的控件属性所下表。控件名称属性属性值FormlCaption成绩查询LablelCaption学号FontName楷体FontBold.T.Fontsize20Backstyle0-透明Command1Caption查询FontSize12ForeColor(0,0,255)FontName楷体Command2Caption退出ForeColor(0,0,255)FontName楷体FontSize12学生成绩查询设计结果如以下图所示。浏览学生信息表单这一模块设计的目的主要是迅速的浏览学生信息。表单中包含的控件属性如下表。控件名称属性属性值FormlCaption学生信息浏览LablelCaption学生信息表FontBold.T.FontName楷体FontSize25ForeColor(0,255,0)BackStyle0-透明13回区学生信息浏览表单设计结果如以下图所示。学生慢息表I蜉姓名小小性别女出生年月08/09/89班级微机81991002王力宏男02/05/90微机81991003小猪男02/23/88微机81991004罗志祥男09/13/87电气81991005仔仔男05/25/88电气81991006范玮旗女11/30/89电气81991007周渝民男12/25/87电子81991008陈林女11/25/90电子81991009程东萍女08/08/88电子481991010张三男01/01/90信息I81991011李四女10/05/87信息104/12/87信息一:/学生信息冽览浏览课程表表单这一模块设计的目的主要是快速浏览课程表,表单中所包含的控件属性如下表。控件名称属性属性值FormlCaption学生课程浏览LablelCaption学生课程表FontName楷体FontBold.T.Fontsize28ForeColor(255,0,128)Backstyle0-透明学生查询界面本模块的目的在于快速浏览学生的根本情况。目标界面如以下图所示。表单中所包含的控件属性如下表。控件名称属性属性值FormlCaption学生查询LablelCaption学号Fontsize16FontBold.T.Backstyle0-透明Command1Caption查询Command2Caption取消控件LabIe2、Lable3、Lable4、Lable5属性设置同LabIeI相同。维护成绩表界面本模块的目的在于对系统的各个数据库进行维护,对成绩表进行增加、删除,以便及时更新数据进行查询。表单中包含的所有控件的属性设置如下表。控件名称属性属性取值FormlCaption成绩表维护LablelCaption成绩表FontBold.T.Fontsize30Backstyle0-透明Lable2Caption学号Backstyle0-透明Fontsize15Command1Caption前一条Command2Caption下一条Command3Caption修改Command4Caption取消控件Lable3、Lable4属性与LabIe2属性一置。在点击“修改命令按钮时,会出现“是否确定要修改该记录。选择“是会出现下面图。这一模块设计的结果如以下图。菜单设计菜单以横向排列在主窗口顶部的标题栏之下,它方便而快捷地完成了各项工作。要做菜单先要翻开菜单设计器,在菜单设计器中输入菜单名称,选择“结果。如需要编辑子菜单,进入子菜单进行编辑菜单名称。以下图是该模块的菜单设计器和该模块结果设计。Hicrosoaf*tVisualFoxPro维护征)浏览查询(b)报表退出1)项目13叵区§菜单设计器-xiaohui. BnX报表设计报表用于在打印文档中显示或总结数据。报表的数据源定义了报表中数据的来源,通常是表、视图、查询、临时表等,报表的布局定义了报表的打印格式。这一模块是通过报表向导,选择所做报表的字段,选择报表样式为经营式,报表布局,和排序记录为学号,最后保存为学生表。用标头I XHIXM1 |XB_| ICSRQIBJ二细节组注脚I XH页注脚以下图是学生报表的缩小图。q学生表侬M手号堆名性胃出生年月班中816100181991002文DartJa00有机王力宏81刈003男QZiTEjQ徐481891004男UlfZiGB卷丸81891005男Oanw电,8*006男O6E0B楙展81的1007113l9电,周渝艮81991008男12CS7电r陈林819910女11SflD电子程东拜81刖ClIo文KrtKB电亍5fc三81的1。11男nj修?李四IQefie7传3主程序设计系统要执行,需要有一个主程序。由主程序设置系统的环境后,翻开程序主表单,等待使用者的操作。主程序将调用应用程序框架中的各个功能组件,然后由这些组件调用应用程序的其他局部。主应用程序对象必须做的第一件事就是对应用程序的环境进行初始化。在翻开VFP时,默认得的VFP开发环境将建立SET命令和系统变量的值。一个比较好的设计方法是将初始的环境设置保存起来,在启动代码中为程序建立特定的环境设置。止匕外,在一个应用程序特定的环境下,可能需要使用代码一下操作。在“工程管理器中选择“代码中的“程序,点击“新建按钮,为系统新建一个主程序。为主程序编写代码,存储为mainprgoClearscreenClearevents* 翻开数据库Opendatabasedatabasesalary* 执行开始表单Doformformksjm设置系统环境配置Dosetting* 开始响应事件Readevents* 收到“clearevents”命令后关闭数据库,复原系统环境配置ClosedatabaseDoreset将mainprg.prg程序设置为主文件,如以下图所示.第四章开发中的难点与解决技巧/报表的使用在系统设计时发现,设计好报表后,有时无论怎么预览都无法看到报表,像报表一预览就消失一样。经过几次调试才确定不是程序问题。后来发现,当该报表数据环境中的表是一个空表时就会遇到无法预览的情况。解决这个问题一个方法就是在该表中输入几个数据,这样报表就可以预览了。/常见的代码错误当编写VFP应用程序时可能产生许多个错误,至少它会爆出许多出错信息。有些错误比较常见,而有些错误那么相当神秘。许多错误与句法相关,而且往往是简单的录入错误造成的。所以我们要在编写程序时一定要注意录入,防止错误。附录代码欢迎界面计时器timerl的代码:ifnTime=Othisform.Labell.visible=.t.nTime=lelsethisform.Labell.visible=.f.nTime=0endif退出界面计时器timerl的代码:CLEAREVENT*释放表单并停止由READEVENT开始的事件处理*令程序从READEVENT的下一条程序行继验证界面“确定按钮的代码:seleadminerusestudentdatabaseadminer*此为管理员信息数据表的(adminer)的相对路径cx=alltrim(thisfbrm.textl.value)cy=alltrim(thisform.text2.value)* 获得文本框1、2的输入信息setorderto用户名seekex* 查找输入的信息ifa11trim(adminer.用户名)!=cxCMeSSageTitle='设备管理系统,CMeSSageText=,用户名错误,请重新输入nDialogType=4+32nAnswer=messagebox(cMessageText,nDialogType,CMessageTitle)docasecasenAnswer=6thisform.textl.value="* 选择“是时的操作casenAnswer=7CMeSSageTitle='设备管理系统,CMeSSageTeXt=,不要乱来,messagebox(cMessageText,nDialogType,CMessageTitle)选择“否时的操作endcaseelseifalltrim(adminer.密码)!二cy*判断输入的信息是否与密码符合CMeSSageTitle='设备管理系统,CMeSSageTeXt='密码错误,请重新输入nDialogType=4+32nanswer=messagebox(cMessageText,nDialogType,CMessageTitle)docasecasenAnswer=6thisfbrm.text2.value="择”是时的操作casenAnswer=7CMeSSageTitIe='设备管理系统,CMeSSageTeXt='不要乱来,messagebox(cMessageText,nDialogType,CMessageTitle)*选择“否时的操作endcaseelsedocasecasetablesc=ldoformstudentformdeptstu* 根据变量不同翻开不同的表单casetablesc=2doformstudentfbrmweihuendcaseendifendif“取消按钮的代码:thisfbrm.textl.value-1thisfrm.text2.value="* 清空文本框的内容“退出按钮的代码:* 释放本表单成绩表维护界面“前一条按钮的代码:ifreccount()>0skip-1ifbof()gotopendififrecno()=lthisfbrmmand1.enabled=.f.thisfbrmmand2.enabled=.t.elsethisfbrmmand1.enabled=.t.thisfbrmmand2.enabled=.t.endifendif“下一条按钮的代码:ttt=lifreccount()>0skipifeof()gobottomttt=recn()endififrecno()=tttthisformmand1.enabled=1.thisformmand2.enabled=.f.elsethisformmand1.enabled=.t.thisformmand2.enabled=.t.endifendif“修改按钮的代码:setmultilocksonCursorsetpropCbufferingn,2)tableupdate(.f.)ys=messagebox("是否确定要修改该记录”,4+32,”学生成绩管理系统!”)ifys=6=messagebox("记录已经修改”,48,“通知”)endif“取消按钮的代码:学生成绩查询界面“查询按钮的代码:ifempty(alltrim(thisform.textl.value)messagebox(”请输入学生学号!”,48,”学生成绩管理系统”)elselocateforalltrim(xh)=alltrim(thisfbrm.textl.value)iffound()setfiltertosetfiltertoxh=alltrim(thisfbrm.textLvalue)elsemessagebox("查无此人!”,48,”学生成绩管理系统”)endifendif“退出按钮的代码:学生查询界面“查询按钮的代码:ifempty(alltrim(thisform.textLvalue)messagebox(”请输入学生学号!”,48,”学生成绩管理系统”)elselocateforalltrim(xh)=alltrim(thisform.textLvalue)iffound()thisform.text2.value=xhthisform.text3.value=xmthisform.text4.value=xbthisform.text5.value=bjthisform.text6.value=csrqelsemessagebox("查无此人!”,48,”学生成绩管理系统”)endifendif“取消按钮的代码: