




已阅读5页,还剩18页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
前 言在21世纪的今天,随着社会经济和计算机技术的发展,社会的信息化程度越来越高,计算机的应用已经深入到社会生活的各个领域,尤其是办公系统的自动化更是计算机在社会化普及过程中的一个重要方面。在大学教务管理中,有许多方面需要计算机的介入,本系统利用Visual FoxPro 6.0程序设计语言编程实现了教务管理中的学生选课与成绩的自动化管理,对学生自由选课与学生成绩进行统一管理。可以方便地实现课程选择、选课查询、指定任课教师、查询任课教师、成绩录入、成绩查询、输出报表、毕业审核等等。极大地方便教务管理,提高工作效率和办公自动化水平。学生选课成绩管理系统是一个小型的数据库应用系统程序,功能比较简单,但用户可以从该系统的整个设计过程中领会有关数据库应用系统的一般方法,为以后开发大中型的应用系统打好基础。学生每年都要有必修课和选修课,成绩登记,查询都比较麻烦,而每年都需要学校花费很多时间来管理学生的选课成绩,造成了很多不方便。开发这个系统是为了更方便的查询,修改,添加学生选课的各种数据,便于统一管理。同时也有利于节省时间和人力,方便学校管理。23第一章 学生选课成绩管理系统概述系统开发的最先步骤是功能分析。学生选课成绩管理系统主要管理学生的选课情况和学生成绩,该系统完成的功能模块共有:查询、添加、修改、统计和打印。其中每一项又有几个具体的小功能。第1节 数据库的概念数据库于20世纪60年代末诞生,几十年来,不断得到迅速的发展,几乎已经渗透到计算机应用的每一个领域。数据库技术的发展大致经过三个阶段:人工管理阶段、文件系统阶段和数据库系统阶段。数据库系统是采用数据库技术构建的复杂计算机系统。它不是单纯的数据库或数据库管理系统,而是一种综合了计算机硬件、软件、数据集合和数据库管理人员,遵循数据库规则,向用户和应用程序提供信息服务的集成系统1。因此,数据库,软件系统,硬件系统,数据库管理人员被称为数据库系统的四要素。数据库系统的四个要素构成有机的整体,它们之间互相紧密配合和依靠,为各类用户提供信息服务。数据库是按一定结构组织的,各种应用相关的所有数据的集合。它包含了数据库管理系统处理的全部数据。其内容主要分为两个部分:一是物理数据库,记载了所有数据;二是数据字典,描述了不同数据之间的关系和数据组织的结构。数据库设计大概可分为五个步骤:系统分析、概念结构设计、逻辑结构设计、物理结构设计和数据库的实现和维护。首先是系统分析。在这里要设计出一个有效的数据库必须要用系统工程的观点考虑问题。这一阶段计算机人员和用户双方共同收集数据库所需要的信息内容、用户对处理的需求、系统安全性和完整性等,作为系统分析的基础。其次是概念结构设计。概念设计是数据库设计的关键,概念设计也称模式设计。概念设计所用到的数据是独立于硬件和软件系统的,它的目标是以用户可以理解的形式来表达信息,以便和不熟悉计算机的用户交换意见。这个阶段得到的概念结构要能充分地反映现实世界中各种事物之间的联系。同时,系统结构必须易扩充、易修改2。再次是逻辑结构设计。逻辑结构设计的任务是把概念结构转换成数据库管理系统能处理的数据模型,建立用户需要的数据库,如关系模型。在把概念模型转换成关系模型时,要把实体类型和联系类型分别转换成一个个关系模式,可用的方法很多,必须从中选择一个良好的关系模式集作为关系数据库的模式。接下来是对物理结构进行设计。它是对给定的基本数据模型选择一个最适合应用环境的物理结构的过程。其中数据库的物理结构是指数据库存储的记录格式,存储记录安排和存取方法,这些都依赖于具体所使用的数据库系统以及相应的操作系统。最后是数据库的实现和维护。数据库实现是根据物理设计的结构产生一个具体的数据库和它的应用程序,并把原始数据装入数据库。一般的Visual FoxPro 开发都是从事这一方面的工作3。数据库的维护是在实现系统之后,有效地处理数据库的故障和修复数据库,根据新的要求对数据库进行修改升级的工作第2节 系统的需求分析用户需求分析阶段的首要任务就是要明确数据库应用系统的开发目的。如一般的应用系统一样,数据库应用系统的目的一般首先由用户提出,也可以由数据库应用系统开发者拟定。学生选课成绩管理系统的目标是建立一个选课成绩计算机管理系统,以取代人工管理的大部分事务,开发的目的如下4:1、能对学生选课成绩的有关数据进行输入、修改、查询;2、可以向数据库里添加新的学生、教师等信息;3、对每名学生的成绩进行统计;4、打印学生、教师等表信息。学生选课成绩管理的要求主要是:能够更快地、系统地知道学生选课成绩情况,包括学生基本信息、老师基本信息、课程基本信息等。我们通过对这些数据需求的分析,应该找出需要用信息数据来表达的内容及其方式,还要找出相互之间的关系,在这种复杂的关系中进行有关主题的提炼,用这些既独立又相互关联的主题以及每一个主题所表达的,有单一信息价值内涵的数据项集合及其处理方式,来构造一个数据库系统框架结构。通过数据需求的调研应归纳出与系统相关的数据。对这些数据进行分析、归纳,从中找出“规律”,提炼主题并排除冗余数据5。改进完善业务流程图,分析用户需要系统完成哪些任务,逐层分解,画出功能层次图。功能分析是要在设计过程中明确完成设计后的“学生选课成绩管理系统”所能具备的功能。学生选课成绩管理系统的功能模块划分如图1.1所示。图1.1 功能模块所有子功能的作用:1、添加模块。可以更新“学生”、“课程”、“成绩”、“教师”、“班级表”五个表的基本信息。2、修改模块。可以修改“学生”、“课程”、“成绩”、三个表的信息。3、查询模块。查询“学生”、“课程”、“成绩”、“教师”、“班级表”五个表的基本信息。4、统计模块。统计每名学生的成绩。包括每个学生的单科最高分和最低分等。5、打印模块。实现“学生”、“课程”、“成绩”、“教师”、“班级表”五个表的基本信息打印。6、退出系统模块:退出系统返回WIDNOWS界面。整个应用系统文件包括数据库、表、表单、视图、查询、程序等各种VFP文件。“学生选课成绩管理系统”项目的数据源由“学生选课成绩数据库”和其下各个数据库表组成,图1.2为数据库与表的关系图。图1.2 数据库与表的关系第3节 系统数据库设计经过以上的分析后需要建立学生选课成绩数据库。现在按照系统开发步骤和系统需求,设计“学生选课成绩管理系统”应用程序。在“学生选课成绩管理系统”项目管理器中切换到“数据”选项卡,选中“数据库”,单击【新建】按钮,弹出一个“新建数据库”对话框,单击【新建数据库】按钮。弹出“创建”对话框,在“数据库名”右方的文本框中输入要创建的数据库的名称“学生选课成绩数据库”,单击【保存】按钮,建立“学生选课成绩”数据库。如图1.3所示。图1.3 “学生选课成绩”数据库“学生选课成绩”数据库建立完成后,接下来在数据库中建立学生表、课程表、成绩表等表。添加学生表:学生表用于存储有关学生的基本信息,包括学号、姓名、性别、出生日期等基本信息。学生表结构如表1-1所示。其中:学号建立升序的主索引。班级编号建立升序的普通索引。表1-1 学生表字段名字段类型字段长度是否为空备注学号字符型6否主索引姓名字符型8否普通索引性别字符型2否出生日期日期型8否班级编号字符型4否添加课程表:课程表用于存储有关课程的基本信息,包括课程代码、课程名称、类别等基本信息。“课程”表结构如表1-2所示。其中:课程代码建立升序的主索引;教师代码和课程名称建立升序的普通索引。表1-2 课程表字段名字段类型字段长度是否为空备注课程代码 字符型5否主索引课程名称字符型14否普通索引类别字符型4否教师代码字符型4否普通索引添加成绩表:成绩表用于存储选课成绩的基本信息,包括学号、课程代码、成绩等基本信息。成绩表结构如表1-3所示。其中:学号+课程代码建立升序的主索引。表1-3 成绩表字段名字段类型字段长度是否为空备注学号 字符型6否索引课程代码字符型5否索引成绩数值型4否添加教师表:教师表用于存储有关教师的基本信息,包括教师代码、姓名、性别、出生日期等基本信息。教师表结构如表1-4所示。其中:教师代码建立升序的主索引。表1-4 教师表字段名字段类型字段长度是否为空备注教师代码字符型4否主索引姓名字符型8否性别字符型2否出生日期日期型8否籍贯字符型6否技术职务字符型10否备注备注型4否添加班级表:班级表用于存储有关班级的基本信息,包括班级编号、年级、专业等基本信息。班级表结构如表1-5所示。其中:班级编号建立升序的主索引。表1-5 班级表字段名字段类型字段长度是否为空备注班级编号字符型4否主索引年级字符型2否专业字符型10否系代码字符型1否学制字符型1否类型字符型4否表建立好后,就要往各个表中录入数据。当数据录入完成后,整个数据库也就建立完成。第二章 学生选课成绩管理系统开发学生选课成绩管理系统是面向用户的,其界面主要包括6:查询:可以查询学生和教师的基本情况、学生成绩和课程情况。添加:可以向学生表、教师表等表中录入信息。修改:可以按照记录号修改课程表等信息。统计:可以统计学生的各科成绩。打印:可以打印学生表、教师表等表中信息。退出:用来退出系统程序。第1节 主程序和界面的设计主程序即系统的引导程序,通过它可以关闭主窗口中与该系统有关的内容,可以设置系统标题、主窗口背景、定义系统的公用参数、打开数据库等。下面是学生选课成绩管理系统的主程序main.prg。SET TALK OFFSET SYSMENU OFFSET DEFAULT TO D:学生选课成绩管理系统_SCREEN.AUTOCENTER=.T.MODIFY WINDOW SCREEN TITLE 学生选课成绩管理系统CLEAR ALLDO 主菜单.MPRDO FORM 主界面.SCXREAD EVENTS在主界面中首先看到的是主菜单。主菜单位于窗口顶部,利用主菜单界面随时可以打开相应的界面。在项目管理器中创建菜单并保存为“主菜单.mpr”。主菜单设计好后,接下来对主界面进行设计,主界面可以不用添加数据环境。最后的运行效果如图2.1所示。图2.1 运行效果当用户点击图2.1中相应的按钮,则激发各自按钮的Click事件,其代码如下所示。Form1的Command1的Click事件代码:do form 查询thisform.release Form1的Command2至Command5的Click事件代码Form1的Command6的Click事件代码:a=messagebox(是否退出本系统?,4+32+256,cyc!)If a=6 thisform.release Close all Clear events Set sysmenu to defaultendif 第2节 查询模块的设计查询模块主要是用来查询学生的情况和成绩、浏览学生选课和教师的信息。新建一个空表单,在上面创建一个含五个页面的页框、一个命令按钮组(含有5个命令按钮)以及一个命令按钮。其中页框的第一页为学生情况,第二页为全局浏览,第三页为学生年龄,第四页为课程浏览,第五页为多项查询,系统运行如图2.2所示。图2.2 查询模块从图中可以看出,五个页框结构基本相同,在此只提供第一页框的具体设计方法。在表单数据环境中添加“学生”表、“课程”表、“教师”表、“班级”表和分数表、在页框处于编辑状态时利用数据环境设计器中的“学生”表往第一页框中添加表中所有字段标签和字段控件。添加一个含四个命令按钮的命令组合框,一个标签和一组合框控件(Combo1),用于控制及浏览“学生”表记录。执行该表单,选择“学生情况”页,可以显示“学生”表首记录的内容。单击【上一个】、【下一个】按钮可以浏览当前记录的上下记录;单击【删除】按钮可以删除当前记录;单击下拉组合框可跳到指定记录。当选择组合控件Combo1时将激活InteractiveChange事件,代码如下所示。bo2.value=loca for student.学号=this.valueIf found ()thisform.refreshendif当浏览记录时,将发生Commandgroup1的Click事件,代码如下。sele studentDo case Case this.value=1 Go top设置command1至command4是否可用Case this.value=2 设置command3至command4是否可用 If not bof () Skip-1 Else 设置command1至command2是否可用 endif Case this.value=3设置command1至command2是否可用 If not eof () Skip Else设置command3至command4是否可用 endif Case this.value=4 Go bottom设置command1至command4是否可用 endcasethisform.refresh第3节 添加模块的设计该模块主要是在学生表、教师表、班级表、课程表和成绩表添加各类新的信息。系统运行后的效果如图2.3所示。下面仅对学生表作为介绍,其它表的添加与其类似。图2.3 添加模块单击【添加】按钮将发生Command1的Click事件,代码如下所示。n1=alltrim (this.parent.parent.text1.value)n2=alltrim (this.parent.parent.text2.value)n3=alltrim (bo1.value)n4=alltrim (dtoc (this.parent.parent.text4.value)n5=alltrim (this.parent.parent.text5.value)n6=alltrim (bo2.value)n7=alltrim (this.parent.parent.edit1.value)Set exact onDo case Case n1= messagebox(教师代码不能为空值!,48,注意) this.parent.parent.text1.setfocus Case n2= messagebox(姓名不能为空值!,48,注意) this.parent.parent.text2.setfocus Case n3= messagebox(性别不能为空值!,48,注意) bo1.setfocus Case n4= messagebox(不能输入空值!,48,注意) this.parent.parent.text4.setfocus Case n5= messagebox(籍贯不能为空值!,48,注意) this.parent.parent.text5.setfocus Case n6= messagebox(技术职务不能为空值!,48,注意) bo2.setfocusOtherwise a=messagebox(确认添加新记录到教师表!,1+64+0,提示) If a=1 sele teacher Go bottom Insert into teacher values (n1,n2,n3,ctod(n4),n5,n6,n7) b=messagebox(新记录添加成功!,64,提示信息) If b=1 this.parent.parent.text1.value= this.parent.parent.text2.value= bo1.value= this.parent.parent.text4.value= this.parent.parent.text5.value= bo2.value= this.parent.parent.edit1.value= this.parent.parent.text1.setfocus endif endifendcase当单击【重写】按钮时将发生Command2的Click事件,代码如下所示。this.parent.parent.text1.value=this.parent.parent.text2.value=bo1.readonly=.F.bo1.value=this.parent.parent.text4.value= this.parent.parent.text5.value=bo2.readonly=.F.bo2.value=this.parent.parent.edit1.value=this.parent.parent.text1.setfocus第4节 修改模块的设计修改模块主要通过记录号修改课程表、成绩表和学生表的信息。修改表单从课程表、成绩表、学生表中选取相应的字段,将对应的字段罗列在列表框中供修改相应的内容。在修改之前要输入记录号,否则系统无法查找相应的记录。单击确定后,完成修改内容。运行后如图2.4所示。图2.4 修改模块当用户输入记录号后,再选择相应的表将发生InteractiveChange事件,其代码如下所示。jlh=Val(thisform.text5.value)Do case Case this.value=1 Sele course Do case Case jlh=0 thisform.text5.value= thisform.text5.setfocus messagebox(记录号不能为0!) this.value=0 Case jlhrecc () messagebox(记录超出范围!) jlh = recc() thisform.text5.value= thisform.text5.setfocus this.value=0 Otherwise Go jlh thisform.text1.value=课程代码 thisform.text2.value=课程名称 thisform.text3.value=类别 thisform.text4.value=教师代码 thisform.text2.width=104 thisform.text1.visible=.T. thisform.text2.visible=.T. thisform.text3.visible=.T. thisform.label1.visible=.T. thisform.label2.visible=.T. thisform.label3.visible=.T. thisform.label4.visible=.T. thisform.text4.visible=.T. thisform.label8.visible=.F. thisform.text6.visible=.F. thisform.text1.readonly=.F. thisform.text2.readonly=.F. thisform.label1.caption=课程代码 thisform.label2.caption=课程名称 thisform.label3.caption=类别 thisform.label4.caption=教师代码 thisform.text3.alignment=3 thisform.text3.inputmask= thisform.text3.setfocus mand1.visible=.T. endcase Case this.value=2至Case this.value=3endcase当修改完成后单击【确定】按钮,将发生Command1的Click事件。Set exact onDo case Case thisform.optiongroup1.value=1 a=alltrim (thisform.text3.value) b=alltrim (thisform.text4.value) c=alltrim (thisform.text1.value) d=alltrim (thisform.text2.value) Set exact on Do case Case a= messagebox(类别不能为空白值!,58) thisform.text3.setfocusCase b=至Case d= Otherwise m=messagebox(确定修改课程记录!,1+64+0,信息) If m=1 sele course replace 课程代码 with c replace 课程名称 with d replace 类别 with a replace 教师代码 with b messagebox(记录修改成功!) thisform.text5.value= thisform.text5.setfocus thisform.optiongroup1.value=0 endif endcase Case thisform.optiongroup1.value=2至Case thisform.optiongroup1.value=3endcase第5节 统计模块的设计统计模块可以用来统计学生的各科成绩。当以个人成绩或单科成绩为标准进行统计时,可以显示学生的最高分、最低分、平均分以及科目总数。其运行效果如图2.5所示。图2.5 统计模块选择个人成绩或者单科成绩时,将触发Optiongroup1的Interactive事件,其代码为:Do case Case this.value=0 thisform.list1.rowsource= Case this.value=1 thisform.list1.rowsource=student.姓名 Case this.value=2 thisform.list1.rowsource=course.课程名称endcase当在列表框中选择学生的姓名时,将触发List1的Interactive事件,其代码为:Do case Case thisform.optiongroup1.value=1 xm = alltrim(this.value) sele student locate for 姓名=xm xh=学号 sele score calculate max(成绩),min(成绩),avg(成绩),cnt(成绩) for 学号=xh to a1,a2,a3,a4 thisform.label6.caption=alltrim (STR (a1) thisform.label7.caption=alltrim (STR (a2) thisform.label8.caption=alltrim (STR (a3) thisform.label9.caption=alltrim (STR (a4) Case thisform.optiongroup1.value=2 Mch = alltrim (this.value) sele course locate for 课程名称=mch dm=课程代码 sele score calculate max(成绩),min(成绩),avg(成绩),cnt(成绩) for 课程代码=dm to b1,b2,b3,b4 thisform.label6.caption=alltrim (STR (b1) thisform.label7.caption=alltrim (STR (b2) thisform.label8.caption=alltrim (STR (b3) thisform.label9.caption=alltrim (STR (b4)endcase第6节 打印模块的设计打印模块可以打印学生表、教师表、班级表、课程表以及成绩表等表中信息。其运行效果如图2.6所示。图2.6 打印模块当选择选项按钮组控件中的学生表或者其他表时,单击【报表输出】按钮,将触发Command1的Click事件,其代码为:b=messagebox(是否已准备好打印机?,4+32+256,注意)Do case Case b=6 Do case Case thisform.optiongroup1.value=1 sele student Go top do form 打印结果显示 List rest to printer Case thisform.optiongroup1.value=2至 Case thisform.optiongroup1.value=5 endcase Case b=7 messagebox(请先准备好打印机!,0+64,信息)endcase第三章 应用程序开发第1节 连编应用程序一个项目创建完毕,必须连编为.EXE程序,才能脱离Visual FoxPro 6.0运行环境在其他环境下应用。其步骤如下7。第一步:单击“项目管理器”的【连编】按钮。在“连编选项”对话框中的“选项”中选择要连编的选项。第二步:选择“Win32 可执行程序/COM服务程序(exe)”,“重新编译全部文件”,“显示错误”和“重新生成组件ID”选项,单击【确定】按钮。第三步:在弹出的【另存】对话框中,选择文件将要保存的目录,单击【保存】按钮。如果在连编的过程中出现错误,则根据编译完成后显示的错误信息修改程序。当完成修改后再重新执行第一步,直到最后连编项目没有错误,可开始连编应用程序,生成.EXE可执行文件。即完成对项目的连编过程。直得注意的是在运行.EXE文件前必须将应用程序要使用的所有文件(包括数据库文件和自由表文件)复制到.EXE文件所在目录下,否则会失败。利用Visual FoxPro 6.0 创建的应用程序,被编译可执行程序后,若要使其脱离Visual FoxPro 6.0 环境独立运行,在应用程序目录中需包含“VFR9R.DLL、VFR9RENU.DLL”这二个动态链接库文件。这二个文件在“WindowsSystem32”目录下,可直接复制到自己的应用程序目录中,最后再编译形成可执行程序8。第2节 发布应用程序一个应用程序在开发完成并经过测试之后,就可以准备发布,即将运行应用程序所需要的所有文件打包,创建发布磁盘后,交给用户使用。软件发布的过程就是将提供给用户的程序、数据进行压缩,整理成能装在几张盘(或其他介质)中的过程。在Visual FoxPro 6.0中可使用安装向导进行软件发布,创建发布磁盘以及应用程序的安装例程,使得用户可以很容易地把应用系统程序安装到自己的微机上。具体步骤:1、在“安装向导”的“步骤1定位文件”对话框中,指定发布树目录。2、在“步骤2指定组件”对话框中,选择需要的运行组件。3、在“步骤3磁盘映像”对话框中,指定磁盘映像目录或安装磁盘类型。4、在“步骤4安装选项”对话框中,定制要发布的安装对话框,包括对话框标题、版权信息及执行的程序名称。5、在“步骤5默认目标目录”对话框中,指定安装程序需要创建的目录名和程序名称。6、在“步骤6改变文件位置”对话框中,可以修改文件的目标目录,更改程序组的属性等。7、在“步骤7” 完成对话框中单击“完成”按钮,开始执行压缩整理程序,生成磁盘映像文件。执行完成之后,在Windows资源管理器下浏览磁盘映像目录,可以看到该产品被分
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年新能源商用车辆市场潜力与应用场景成本效益分析报告
- 地下车库工程现场协调配合措施
- 零部件物资管理及保障措施
- 颌面部损伤病人的护理
- 护理学健康科普
- 2025至2030全球及中国药物设计工具行业深度研究及发展前景投资评估分析
- 2025至2030全球及中国用于IoV的OTA行业发展研究与产业战略规划分析评估报告
- 金融贷款行业培训
- 2025至2030全球及中国洗衣设施和干洗服务行业发展研究与产业战略规划分析评估报告
- 2025至2030全球及中国汽车悬架控制臂行业发展研究与产业战略规划分析评估报告
- GB/T 34652-2017全断面隧道掘进机敞开式岩石隧道掘进机
- GB/T 21872-2008铸造自硬呋喃树脂用磺酸固化剂
- 中国铂族金属供需发展趋势
- 风电施工合同模板
- GA/T 1567-2019城市道路交通隔离栏设置指南
- 先进制造技术 第2版 教学课件 ppt 作者 王隆太 第1章
- 氧化还原反应的类型
- 小学英语素材-1-5年级英语牛津词汇表(带音标) 牛津上海版
- DB11-T1836-2021 城市桥梁工程施工技术规程高清最新版
- 2023年唐山市开平区社区工作者招聘考试笔试题库及答案解析
- 用章申请表模板
评论
0/150
提交评论