1、 第一章 系统简介 1.1 教务管理系统简介 教务管理是学校的一项重要工作,原有的人工管理存在这着很多不足,造成不足的原因是,在校学生人数众多,并且每个学生的信息过于复杂,从而工作量非常大,给统计和查询带来了不便。因此,如何解决这些不足,使教务管理更快捷、更方便,具有更高的效率也就成了一个关键问题。 随着科学技术的迅速发展学校教务管理的自动化也越来越迫切,因此有必要开发教务学籍的软件系统来辅助学校的教学管理。这样能极大方便教务的管理,提高管理效率。 本系统是一个小型的软件系统,适合用Visual Foxpro的数据库技术和可视化编程技术来开发。按管理方式教务管理系统可分为数据浏览,数
2、据查询,修改,打印,新建,系统设置几个模块,在以下各章节中分别介绍。 1.2 Visual Foxpro 6.0 简介 Visual Foxpro 6.0 是一个功能强大的数据库管理系统(DBMS)同以前的数据库管理系统相比,它具有更快速,更有效,更灵活的突出特点。用户能迅速地建立自己的数据库,自如地使用和管理数据库。它不仅支持客户/服务器结构,而且具有与其它软件(如Excel,Word)共享和交换数据的能力。Visual Fopro 6.0 提供对象和事件的处理模式,利用面向对象(OOP)的威力使用户能够很快地建立和修改应用程序,并且对以前的版本FOXPRO提供完全兼容性,以前的应
3、用程序可不经修改直接在它的环境下运行。 1.3 Visual FoxPro 6.0 运行环境 硬件环境:486或更高级处理器(推荐使用Intel Pentium处理器)、Powerpc MPS R4xxx或Alpha AXP处理器 16M 内存(复制需要32M内存) 80M 硬盘空间 第25页 共26页 CD—ROM驱动器 软件环境:
4、Microsoft Windows NT Server3.51或更高版本Windows 95/98 1.4 Visual FoxPro 6.0的技术要点 完全的32位开发环境。 可以更好地利用ActiveX控件,更进一步加强了OLE和ActiveX 完全的事件驱动模式。 真正的面向对象程序开发环境,同时支持标准的过程程序设计式。 提供了更多的和功能更强大的向导,使得能够快速开发应用。 提供了更优越的连接性。 完全的事件驱动模型。 增加了很多新的语言元素,包括对象,对象属性,命令函数和一些系统变量等。 增强了工程和数据库管理,使得可通过Visual SourceSafe
5、等来使用源代码控制产品,也使得能在项目管理器中查看构件状态,这些都是Visual FoxPro3.0所不具备的功能。 更优秀的调试工具,在VFP6.0中文版中,你可以更容易地调试或监控你的应用程序控件。 增强的数据字典功能。 更轻松地标设计方式。 查询和可视设计功能更强大。 提供更多的和功能更强大的向导, 使得能够快速开发应用,VFP提供Application Wizard ,Oracle Upsizing Wizard.两个新的向导,并且对原有Form Wizard,PivotTable Wizard, SQL Server Upsizing Wizard,Cross-Tab Wi
6、zard等进行了功能上的扩充和优化。 对小组开发环境给与了很好的支持,它允许多个开发人员同时访问数据库对象,并且提供Visual SourceSafe 等工具协同和管理小组开发环境源代码的更新。 对其它应用的集成提供更方便地支持。 大大增强了Client/Server应用程序的开发。 利用WWW Search Page Wizard 可以快速创建Web页,允许Web页面,访问者从VFP表中检索数据。 1.5 Visual FoxPro6.0的新特点 1. 增强的网络功能 A 生成HTML文件 B Active文档 2.增强的向导 3
7、.OLE拖放技术 4.具备2000年时间兼容性 5.增强的项目管理器 6.改进的Automation服务程序 毕业设计 第二章 数据分析与数据库设计 2.1 系统数据框图 b_课程.dbf b_权限.dbf b_专业设置.dbf b_计算机应用2_课程.dbf b_工业与民用建筑1.dbf b_计算机应用2.dbf b_工业与民用建筑1_课程.dbf 数据库 系统数据库 systemdata.dbc 用户数据库
8、userdata.dbf 图2-1 系统结构框图 2.2 数据分析与设计 本系统有两个数据库统一管理全部数据。分别是:系统数据库和用户数据库。系统数据库对系统数
9、据进行访问,不允许用户使用;用户数据库为每个专业建立两个表,用以分别存放本专业的学生教务(格式为:b_“专业名”学历规格识别码,即1和2分别代表专科和本科)和该专业的课程(格式为:b_:“专业名”学历识别码_课程.dbf)。 2.2.1 系统数据库 系统数据库的库名为:systemdata.dbc.这部分的表不允许用户直接改动,删除及建立。这部分包括三个表分别是:b_权限.dbf它用于给不同级别的用户提供不同的操作界面,以实现系统的保密性。它的表结构为: 字段名 宽度 小数位 类型 功能 操作员 10 0 字符型 存放操作员类型 口令 20 0 字符型
10、 存放对应口令 数据浏览 1 0 逻辑型 存放对应权限 查询 1 0 逻辑型 存放对应权限 新建 1 0 逻辑型 存放对应权限 添加记录 1 0 逻辑型 存放对应权限 删除记录 1 0 逻辑型 存放对应权限 修改记录 1 0 逻辑型 存放对应权限 更改表结构 1 0 逻辑型 存放对应权限 打印 1 0 逻辑型 存放对应权限 添加新用户 1 0 逻辑型 存放对应权限 删除用户 1 0 逻辑型 存放对应权限 权限设置 1 0 逻辑型 存放对应权限 表2-1 b_权限.dbf表结构
11、 第二张表是b_课程.dbf 它记录了系统所涉及到的全部专业所用到的课程名。其表结构为: 字段名 宽度 小数位 类 型 功能 名称 20 0 字符型 存放可能用到的课程 表2-2 b_课程.dbf的表结构 第三张表:b_专业设置.dbf,它用于记录该数据库中的所有专业。因为在系统中,需要对多个专业的信息进行管理,它的库结构为: 字段名 宽度 小数位 类 型 功能 专业名称 20 0 字符型 存放所有专业的名称 学历规格 8 0 字符型 存放个专业的学历规格 学制 10 0 字符型 存放该专业的学制
12、 表2-3 b_专业设置.dbf的表结构 2.2.2 用户数据库 userdate.dbc是用来存放各专业的各种表的数据库。本系统为每个专业建立了两个表,分别是该专业的教务表,b_“专业名称”+专业识别码,专业课程表b_“专业代号”+专业识别码+“_课程”,b_计算机应用2的表结构为: 字段名 宽度 小数位 类型 功 能 准考证号 20 0 字符型 存放准考证号 姓名 16 0 字符型 存放学生姓名 大学语文 5 1 数值型 存放该科教务 英语 5 1 数值型 存放该科教务 计算机组成原理 5 1 数值型 存放该科教务
13、 应用文写作 5 1 数值型 存放该科教务 计算机应用基础 5 1 数值型 存放该科教务 线性代数 5 1 数值型 存放该科教务 毕业设计 5 1 数值型 存放该科教务 表2-5 b_计算机应用2.dbf 的表结构 课程表用于存放该专业的所有课程名,其表结构为: 字段名 宽度 小数位 类 型 功 能 课程名 20 0 字符型 存放该专业的所有课程 表2-6 b_计算机应用2_课程.dbf 的表结构 其它专业的教务表和课程表结构与表2-5和表2-6的结构形式相同。 毕业设计 业.db
14、f表。b_专业为用户提供可供操作的专业选择。b_权限,dbf它的功能主要是对进入系统的用户进行身份验证,为系统提供保密性,工作流程图如下 : 开 始 等待用户选择用户类型和键入对应的口令 第四次核对 口 令 口令是否正确 结 束 重输口令 进入main.scx 界 面 等待用户选择专业和选择学历规格 是
15、 N 否 否 是 图 4-3 系统初始化流程图 在这个表单的初始化(init)事件中定义了该系统中所用到的所有公共变量,公共变量c_datatabel存放
16、了当前操纵的表名;公共变量pub_zy存放了当前操纵的专业名;pub_jsq起到了一个计数器的作用,它在系统初始化时统计了用户输入口令错误的次数,已达到防止非法用户使用的目的;该表单还向用户提供了检查所要操作的专业是否存在的功能,该功能是通过检查用户选择的专业和学历规格是否在b_专业设置.dbf中存在,以此来确定用户是否能操作该表。 4.3 数据浏览 本模块主要完成用户对需要的专业的表进行浏览,并且取定将要操作的专业。其操作界面如图4-1所示。 4.4 查询 该模块包含四部分内容:按准考证号查;按姓名查;按教务查和显示全部。差序模块的工作流程如下: 开始 输入条件?
17、按条件查询 是否查到? 显示记录 结束 继续查询? 否 是 否 是 是 否
18、 图4-4 查询模块流程图 4.4. 1 按准考证号查询 按准考证号查询所的记录是唯一的,它是根据每个学生信息中准考证号是记录的唯一标识,其界面分别如下: 图4-5 按准考证号查询界面 该模块根据用户输入的准考证号对正在浏览的专业进行查询,找到满足条件的记录在表格控件中显示该记录;如果没找到则弹出系统提示对话框,提示所查记录不存在。 其部分实现代码如下: public pub_zkzh pub_zkzh=alltrim(thisform.tex
19、t1.value) if !empty(alltrim(thisform.text1.value)) then locate for 准考证号=pub_zkzh if !eof() then set filter to 准考证号=pub_zkzh release thisform else *messagebox("该准考证号不存在,"+chr(13)+"点击确定重新选择专业,"+chr(13)+"点击取消重新输入准考证号。", 257,"查询失败") if messagebox("该准考证号不存在,"+
20、chr(13)+"点击确定重新选择专业,"+chr(13)+"点击取消重新输入准考证号。", 257,"查询失败")=1 then release thisform else thisform.text1.value="" endif endif else messagebox("请输入准考证号",48,"错误信息") endif 4.4. 2 按姓名查询 按姓名查是允许让用户根据学生姓名对其信息进行查询,这是一种模糊查询,它将符合用户查询条件的所有
21、记录全部在表格控件中列出,其界面如下: 图4-6 按姓名查询界面 该模块根据用户所输入的姓名对正在浏览的表进行查询,若查到则在表单的表格控件中显示满足条件的记录,否则提示用户记录并不存在,其部分实现代码如下: public pub_xm pub_xm=alltrim(thisform.text1.value) if !empty(alltrim(thisform.text1.value)) then locate for 姓名=pub_xm if !eof() then set fi
22、lter to 姓名=pub_xm release thisform else *messagebox("该姓名不存在,"+chr(13)+"点击确定重新选择专业,"+chr(13)+"点击取消重新输入姓名。", 257,"查询失败") if messagebox("该姓名不存在,"+chr(13)+"点击确定重新选择专业,"+chr(13)+"点击取消重新输入姓名。", 257,"查询失败")=1 then release thisform else thisform.
23、text1.value="" endif endif else messagebox("请输入姓名",48,"错误信息") endif 4.4. 3 按教务查询 按教务查询也是一种模糊查询方式,它由用户自选专业所查课程及满足条件,其界面如下 : 图4-7 按教务查询界面 该模块允许用户最多按照两个条件查询记录,并且允许用户定义这两个条件之间的与或关系,运算符包括=、>、<、>=、<=,通过对这些运算符和关系运算符的灵活组合就能够完成对不同教务段的记录查询,
24、并且将符合用户条件的记录显示在表格控件中,如果没有符合条件的记录将弹出记录不存在的系统提示对话框。 其实现该功能的部分代码如下: select &c_datatabel if thisform.optiongroup2.value=1 then locate for &x if !eof() then set filter to &x release thisform else messagebox("所查记录不存在请重新选择查询条件",0,"查询失败") endif
25、 * else * messagebox("请输入所查字段的值",48,"错误信息") *endif else if !empty(alltrim(bo3.displayvalue)) then if !empty(alltrim(bo4.displayvalue)) then x=alltrim(bo1.displayvalue)+alltrim(bo2.displayvalue)+alltrim(str(thisform.spinner1.value)) y=alltrim(bo3.di
26、splayvalue)+alltrim(bo4.displayvalue)+alltrim(str(thisform.spinner2.value)) if thisform.optiongroup1.value=1 then xy=x+".and."+y else xy=x+".or."+y endif locate for &xy if !eof() then
27、 set filter to &xy release thisform else messagebox("所查记录不存在请重新选择查询条件",0,"查询失败") endif else messagebox("请选择第二个运算符",48,"错误信息") endif else messagebox("请选择第二个字段名",48,"错误信息") endif
28、 endif 4.4. 4 显示全部 该功能实现查询到所要查询的记录后,又要浏览全部教务或者进行其它方式查询之前将查询范围定义为全部记录。 4.5 新建专业 该模块允许用户添加新的专业,并向专业中添加已经定义过的课程和用户自己定义的课程;另外,还允许用户向课程库中定义一些自定义的课程。在添加新专业时,系统会检查所建专业是否存在。如果所建专业已存在,系统会自动提示用户该专业已存在,并且不允许添加该专业;如果专业不存在,系统会按用户的条件新建该专业。其流程图如下: 开始 添加新建专业的内容 添加完全? 专业是否存在 添加该专业 结束 提示专业
29、已存在 否 是 是 否 图4-8 新建专业流程图 4.6 修改 该模块包括添加记录、删除记录、修改记录、修改库结构共四个模块,完成了包括数据库结构在内的所有的修改。 4.
30、6.1 添加记录 允许用户向当前正在浏览的数据库中添加记录,其界面如图4-9所示。用户从组合框中选择字段名,然后向文本框中输入字段的值,点击加入按钮将字段名和字段的值一起添加到列表框中,当用户准确添加好个字段后点击添加按钮就将一条新记录加到了数据库的末尾。在添加字段的过程中,系统会检测准考证号字段,如果该准考证号已存在,系统会自动提示该准考证号已存在,并拒绝添加该准考证号,以此保证了准考证号的唯一性。 图4-9 添加记录界面 4.6.2 删除记录 删除记录模块允许用户按照学生的准考证号删除记录,其界
31、面如下: 图4-10 删除记录界面 该模块系统根据用户输入的准考证号查找记录。如果记录存在,系统提示用户是否真的删除,用户回答是,则系统给该记录打删除标记;用户回答否,放弃删除该记录。如果记录不存在,系统提示用户所要删除的记录并不存在。 4.6.3 修改记录 该模块允许用户按学生的准考证号修改记录,其界面如下: 图4-11 修改记录界面 该模块根据用户输入的准考证号查询记录。如果查找到,在表格控件中显示该记录,并将该表格控件的readonly属性值
32、改为假,用户更改完该记录后点击更改按钮,将更改后的记录替换原记录,并将该表格控件的readonly属性值改为真;如果没找到,系统会自动提示用户所要更改的记录不存在。 4.6.4 显示全部 该模块使现在正在浏览的表的所有记录都显示在表格控件中,使用户可以浏览全表,也为用户进行其它的操作提供前提。 4.7 打印 报表是一种用户经常用到的用来输出数据的形式,各个部门常对各种数据进行汇总,而且报表的设计也是应用程序在开发过程中的重要组成部分。本节将着重介绍报表部分。 在打印子系统中包括三个报表,分别为总报表,个人全部教务报表, 个人单科教务报表。打印设置如图所示:
33、 图4-12 打印设置图 当设置打印总报表时不允许用户填写准考证号和选择课程;当设置打印个人全部教务报表时系统要求用户输入准考证号,并根据该准考证号差找到该记录后打印该记录;当设置打印个人单科教务报表时,系统要求用户输入准考证号并且选择要打印的课程。 4.7.1 总报表 该模块是对当前正在浏览的表的全部的学生教务,在执行该功能前必须点击显示全部按钮,报表预览情况如下图: 图4-13 总报表预览图 该报表不仅打印了本专业所有学生的理论课教务,而且还包括该专业
34、的所有学生的毕业设计教务。 4.7.2 个人全部教务报表 个人全部教务报表预览图如下: 图4-14 个人全部教务报表预览图 执行该模块前必须输入要打印的学生的准考证号,系统根据准考证号查找记录。如果查到,个人全部教务报表的格式输出。如果没查到,系统会提示用户所打印的记录不存在,并拒绝打印。 4.7.3 个人单科教务报表 执行该模块前必须输入要打印的学生的准考证号和选择所要查的课程名,系统根据准考证号查找记录。如果查到,输出该记录的所选科目的教务报表。如果没查到,系统会提示用户所打印的记录不存在,并拒绝
35、打印。个人全部教务报表预览图如下: 图4-15 个人单科教务报表预览图 4.8 系统设置 该模块是唯一一个对系统数据库(systemdata.dbc)操作的模块,对这部分子模块的操作有着明确的权限定义,该模块中除了更改个人设置和关于对所有用户都能使用外,其余三个模块的操作权只有拥有较高权限的用户才能使用。 4.8.1 添加新用户 该模块使具有最高权限的用户可以向系统中添加新用户,并且设置用户权限,从而可以使多个用户使用该系统。在向系统中添加用户时,系统首先打开systemdata.dbc数据库,并且打开b_权限
36、dbf表,检查所添加的用户在数据库表中是否存在,如果存在则弹出系统提示 对话框,提示用户所添加的新用户已存在,并且禁止向库中添加;如果不存在,则想b_权限.dbf中添加新记录,从而完成向系统中添加用户。该模块的界面如图4-16所示: 图4-16 添加用户界面 4.8.2 更改权限 该模块可以对系统中用户的权限进行更改,其界面如图所示: 图4-17 更改权限界面 该模块只允许系统最高级别的用户对系统中的用户权限
37、进行更改,用户可以从组合框中的系统用户中选择一个,对其心的权限进行设置,设置好后点击确定按钮,系统自动在b_权限.dbf表中查找到被选择的用户,用新的权限代替旧的权限,从而完成更改用户权限的功能。系统用户中只有超级用户的权限是所有权限,并且权限不允许更改。 4.8.3 删除用户 该模块允许具有最高权限的用户从系统中删除不允许使用该系统的用户,其删除界面如图所示: 图4-18 删除用户界面 该模块允许超级用户删除该系统中的用户,只需从组合框中选择要删除的用户点击确定键,该用户就会从b_权限.dbf表中被删除。系
38、统中的超级用户不能被删除。 4.8.4 更改个人设置 该模块允许系统中的所有用户使用,用于更改个人的密码,以防他人以自己的名义使用系统,更改个人设置之前,必须对个人身份进行确认,确认身份界面如图所示: 图4-19 身份确认界面 只有输入的用户密码与正在操作的用户的密码一致时才允许该用户进入更改个人设置界面进行个人设置的修改,其中包括用户名和用户密码的更改,所有这些操作都是针对正在操纵系统的用户进行的。更改个人设置的界面如图所示:
39、 图4-20 个人设置更改界面 4.8.5 更改个人设置 该模块包含了系统的版本信息、版权信息和技术支持等信息,其界面如图所示: 图4-21 关于界面 4.9 一般用户对系统的使用 一般用户使用系统时只允许按准考证号查询单门课教务,起进入界面如图所示: 图4-22 一般用户进入界面 当在组合框中选定用户名为一般操作员时,该表单中的专业选择框、学历规格选择框、输入口令文本
40、框都不可用,当用户点击进入后,便进入一般用户的查询系统。其界面如图所示: 图4-23 一般用户使用界面 当选择好查询专业和查询专业的学历规格,并且输入好准考证号和所要查的课程名称后,点击查询便可查询要查询的课程。查询成功就会显示所查询的结果。其显示界面如图所示: 图4-24 一般用户查询结果 如果查询专业和查询的准考证号不存在系统会提示用户所查专业不存在或者所查记录不存在。
41、 第五章 系统测试 第五章 系统测试 测试的目的有:1)发现并排除程序中的错误; 2)确保系统或程序符合说明书所规定的功能。 前者是为了否定而去测试,后者是为了肯定而去测试。 总的来说,测试是为了发现程序中的错误而执行程序的过程。当然,测试只能查找出程序中的错误,不能证明程序中没有错误。 现将本系统的测试步骤叙述如下。 1) 正常数据测试。 ·程序能否完成系统要求的各种功能; ·写入表中的各项记录是否正确; ·显示/打印的数据、位置、标题、格式是否正确。 2) 异常数据测试。检查
42、程序能否正常运行所有的空数据。 3) 用错误的数据测试。这用来测试系统是否会将错误的数据保存,来达到保证数据正确性的目的。 在测试过程中,系统中存在找不到表、变量类型不符等错误,这些错误均在测试过程中被发现并被逐步改正。 毕业设计 结论 教务管理系统是一个小型数据库系统,它解决了以往手工管理中查询速度慢、管理混乱、易出错等缺陷,它将教务管理中的查询、删除、修改的各功能集于一身,大大的提高了教务管理的工作效率,它使教务管理工作能够准确、高效地进行。 对数据的查询是该系统中的主要模块,通过对该系统的设计使我深刻地了解了数
43、据查询设计的基本方法;通过对该系统的设计使我基本了解了Visual FoxPro 的编程方法,更加深刻地理解了面向对象的编程方法,将学到的理论知识与实践结合在一起,使我的动手能力有了很大的提高。 致谢 我很庆幸有这样学用结合的机会,通过这次设计,我学到了许多课外的东西,加深了对知识的了解,提高了应用和动手能力,这些都离不开精心指导我整个毕业设计的老师。李老师对我严格要求,认真负责,在编程思想上给我以深远的影响。在此,对李老师表示衷心的感谢。
44、 参考文献 [1]李加福,邸雪峰,桂敏文,李光辉.Visual FoxPro 6.0中文版入门与提高 清华大学出版社. 1999 [2] 沈美琴 . Foxpro应用基础 西安电子科技大学出版社. 1999 [3] Visual FoxPro 6.0 时尚编程百例 机械工业出版社. 2001 [4] 计算机工程与应用 . 华北计算技术研究所主办 .2000 [5] 计算机科学 . 国家科技部西南信息中心 .2000 [6] 东岳工作室 .Visual Foxpro 应用与提高. 人民邮电出版社 .1998






