搜档网
当前位置:搜档网 › 高等教育自学考试计算机应用专业本科毕业论文

高等教育自学考试计算机应用专业本科毕业论文

高等教育自学考试本科毕业论文(计算机应用专业)

中学教务管理软件

考籍号

姓名

专业计算机应用

二〇〇年月

摘要

本论文主要介绍了开发的系统所要完成的功能和开发的过程。重点说明了数据库的设计思想、程序的设计思想,以及设计中的重点、难点技术和解决方案。

开发本系统时使用Microsoft Visual C++ 6.0作为开发平台,Microsoft Access2000作为数据库管理系统,使用Microsoft Data Access Objects 3.60(DAO)访问数据库。系统主要完成学生信息,老师信息,考试信息的添加、删除、查询、浏览,考试成绩的分析(及格率,优秀率等的分析),以及用户管理等功能。其中查询功能可以分为模糊查询、精确查询等功能.用户管理功能分为添加,删除用户以及用户权限的授予和撤消。其中权限设计使用了较为灵活的方法为每一个菜单设置了使用权限,保存权限时只使用了一个长整数(32位)可保存多达32种权限,并且易于管理和判断。

由于DAO不能将数据库中的表或是查询直接显出来,所以设计系统时扩展了Windows的两种基本控件----列表控件(CListCtrl)和组合框控件(CComboBox),使它与DAO记录集对象结合在一起完成数据的显示。由于列表控件是本系统的主要数据容器,所以给它加入了排序功能,用户只要点击列表表头就能对列表中任意一列进行升序/降序排列,并且编程时只使用了两个函数。同时,对记录集也作了扩展,将数据库参照完整性维护的细节交给了记录集。通过对控件和记录集进行扩展后,只要用一两个方法就能构造出一个友好、实用的界面,并且数据库的操作也大大简化了。

本系统的特点是界面友好,操作方便,权限管理灵活。设计时充分利用C++语言的继承、重载、默认参数,宏和静态成员变量等的特性,灵活地实现了系统的各种要求。

关键词:数据库,控件,记录集,教务管理,MFC ,VC++。

序言

本论文讲述了开发本系统的过程,通过联系具体的程序侧重介绍了系统的设计思想、数据库的设计思想、具体编程的细节,以及设计中的重点、难点技术和解决方案。论文中列举了大量程序,并对主要程序段的参数、各个变量和算法方法都作了详细解释。

论文分为五章:

第一章《绪论》,主要讲述了开发系统的背景、目前应用现状、系统需求。

第二章《系统开发工具》,主要介绍了系统所使用的数据库、开发工具、开发工具对所选数据库的支持。

第三章《数据库的设计》,主要介绍了数据库设计的全过程,建立了数据字典、各局部ER 模式、全局ER模式、数据库关系模式、最后导出了数据库的物理结构。

第四章《软件系统的具体设计》,主要介绍了扩展控件和记录集的思想和具体做法、主要模块的设计、具体的编程过程、画出了软件结构图,以及设计中遇到的中的重点、难点SQL 和解决方案。

第五章《结束语》。

开发系统的软件环境:

本系统使用的开发工具是VC++6.0。

数据库使用的是Microsoft Access20000。

操作系统是Windows Me。

开发系统的硬件环境:

处理器:PentiumII

内存:128M

本系统所附的软盘中有系统的可执行程序和所有源程序。软盘内容如下:

a:\Data 数据库所在目录。

a:\jwgl.exe 系统可执行程序。可以拷贝到任何目录中运行,但Data目录也要一起拷贝。

a:\源程序系统源程序,源程序可在任何目录中编译。

目录

摘要............................................................I 序言........................................................... I I 目录......................................................... III 第一章绪论. (1)

§1.1 系统开发背景 (1)

§1.2 系统需求 (1)

§1.3 系统设计思想 (1)

第二章系统开发工具 (3)

§2.1 Access 简述 (3)

§2.2 VC++6.0简介 (3)

§2.3 MFC DAO(数据访问对象)编程简介 (3)

第三章数据库的设计 (5)

§3.1 数据字典 (5)

§3.2 各局部ER模式的设计 (5)

§3.3 全局ER模式 (6)

§3.4 数据库关系模式 (9)

§3.5 数据库的物理设计 (9)

第四章软件系统的具体设计 (12)

§4.1 软件结构图 (12)

§4.2 数据库访问的组织 (13)

4.2.1三个全局DAO对象 (13)

4.2.2扩展的记录集类 (13)

§4.3 用户界面的设计 (15)

§4.4 对列表控件和组合框控件的扩展 (16)

4.4.1对列表控件的扩展 (16)

4.4.2对组合框的扩展 (21)

4.4.3一组用于简化参数的宏的设计 (23)

§4.5 用户权限管理的设计 (24)

§4.6 增加、删除、修改方面的设计 (26)

§4.7查询模块的设计 (35)

4.7.1多表查询的实例 (37)

4.7.2难点SQL及解决方案 (38)

4.7.3 判断表是否存在的解决方法 (39)

第五章结束语 (41)

致谢 (42)

参考书目 (43)

附录A 列表控件事件处理函数 (44)

附录B 系统全局函数、变量和宏的定义 (45)

Public.h文件 (45)

Public.cpp文件 (46)

第一章绪论

§1.1 系统开发背景

在中学里,学校教务资料繁多,包含很多数据的管理,随着计算机成本的不断下降,现今,有很多的中学都已经配置了计算机机房用于教学,但却未使用计算机进行数据库管理。根据调查得知,他们的管理主要方式是手工处理,对于学生成绩的统计和核实等往往采用计算器等工具进行,对学生考试资料,以及成绩管理也是手工进行,需要抄写大量文字。很显然,用手工管理大量信息容易出错、丢失、且不易查找。尽管有的学校有计算机,但是尚未用于教务管理之中,没有发挥它的效力,资源闲置比较突出,这就是开发本系统的基本前提。

基于这些问题,我认为有必要建立一个中学教务管理软件,使学校闲置的计算所被利用起来,同时也可以提高信息处理的速度和准确性,并能够及时、准确、有效的查询和修改教务档案。

§1.2 系统需求

中学教务管理现状已在“系统开发背景”一节已有介绍不再赘述。这里主要介绍中学教务管理的内容。通过深入学校与教务管理员个别交谈、查看业务记录,得出中学教务管理的内容主要包括已下几个方面:学生管理,老师管理,考试管理,课程管理,班级管理,学校基础设施的维护与管理,其中学生管理包括:学籍管理、学生考勤、卫生检查,学生信息的查询;老师管理包括:老师资料管理,老师资料的查询;考试管理包括:考试设置与安排,成绩的分析与统计(优秀率,及格率,平均分,最高分的分析与统计)、成绩的查询;课程管理包括:课程设置,课程表按排;班级管理包括:班级设置,为新生分班;学校基础设施的维护与管理包括对学校设施使用情况进行统计与分析。其中查询功能要求有模糊查询和精确查询。另外,在使用计算管理时还需要设置权限。

§1.3 系统设计思想

通过需求分析可以看出中学教务管理的内容相当的多,要开发出全部功能并不是一个版本能解决了的问题,所以准备分阶段开发,从低版本开始向上升级,开发出第一版后投入使用,在软件的整个生存周期中对其进行升级。本系统当前版本是1.0,命名为教务管理系统1.0。

当前版本主要完成学生信息,老师信息,考试信息的添加、删除、查询、浏览,考试成绩的分析(及格率,优秀率等的分析),以及用户管理等功能。其中查询功能可以分为模糊查询、精确查询等功能.用户管理功能分为添加,删除用户以及用户权限的授予和撤消。其中权限设计使用了较为灵活的方法为每一个菜单设置了使用权限,保存权限时只使用了一个长整数(32位)可保存多达32种权限,并且易于管理和判断。充分利用C++语言的继承、重载、默认参数,宏和静态成员变量等的特性,灵活地实现了系统的各种要求。

设计本系统时使用Microsoft V isual C++ 6.0作为开发平台,Microsoft Access2000作为数据库管理系统,使用Microsoft Data Access Objects 3.60(DAO)访问数据库。设计的步骤是先按照中学教务管理的需求对数据库进行设计,包括:制作数据字典、画出ER模型、关系模式、最

终得到可在ACCESS上运行的物理数据库;设计完数据库之后再对数据库进行编程、按照界面要求设计应用程序。

第二章系统开发工具

§2.1 Access 简述

Access是一个数据库管理系统。它被集成到Office中,它与其他的数据库系统相比更加简单易学,一个普通的计算机用户可以很快地掌握它。Access 2000的功能也十分强大,利用它可以方便地实现对信息保存、维护、查询、统计、打印、交流、发布。这些功能对一个普通用户来说已经足够了。作为一个办公人员,如果手头有大量的信息要处理,Access 2000将是最好的选择之一。

ACCESS2000对建立数据库表、建立查询、建立表间关系等方面提供了强有力的工具,建立及维护相当方便。在数据库完整性方面ACCESS2000还提拱了:级联更新、级联删除、主键约束、有效性文本、默认值等功能,大大简化了编程。

§2.2 VC++6.0简介

早期Windows编程只能用C语言,需要一段一段地重复调用复杂的Windows API,写冗长的消息处理Switch语句,现在大部分开发人员都使用C++进行Windows编程。很多工具开发商也将Windows API封装到一个个C++类库之中,并称之为“应用程序框架”(Application Framework)。开发人员可以利用它更高效地进行编程。 Visual C++的“应用程序框架”类库是MFC(Microsoft Foundation Class), MFC功能十分强大,提供了AppWizard(应用程序向导),ClassWizard(建类向导)等工具开发专业Windows程序。同时还提供了大量Windows 基本控件的C++类,并允许对它们进行扩展,其中一些最常用的类是:CStatic(静态文本)、CButton(按钮)、CEdit(编辑控件)、CListCtrl(列表控件)、CComboBox(组合框)。

在数据库方面,从功能简单的数据库(如Jet Engine)到复杂的大型数据库系统(如oracle),VC++6.0都提供了一些编程接口,主要有以下五种:

1.ODBC API;

2.MFC ODBC类;

3.MFC DAO类;(数据访问对象)

4.MFC的OLE/DB;

5.ActiveX数据对象(ADO)。

开发本系统时使用MFC DAO类;(数据访问对象),所以下面重点介绍它的编程方法。

§2.3 MFC DAO(数据访问对象)编程简介

DAO用于和微软的Access数据库接口。在数据库应用程序如果只需与Access数据库接口时,使用DAO编程较方便。其主要类如下。

CDaoWorkspace:CDaoWorkspace对象可以让一个用户管理从登陆到离开期间,指定的密码保护的数据库会话全过程。大多数情况下不要多个工作区也不要创建明确的工作区对象。

因为在打开数据库和记录集对象时,它们可以使用DAO缺省工作区。

CDaoDatabase:代表一个数据库连接,可用它提供的方法执行除Select以外的所有SQL。

CDaoRecordSet:用来选择记录集并操作。开发本系统时对其进行了扩展。

CDaoRecordView:记录视图类,可用来查看数据库中的记录。

CDaoException:用来表示与数据库有关的异常。

CDaoTableDef:表示基本表或附加表的定义。每个DAO数据库对象包括一个称为TableDef 的收集,包含所有存储的DAO表定义对象。CDaoTableDef对象可以用来控制表定义。

CDaoQueryDef:CDaoQueryDef对象表示了一个查询定义(querydef),用它可以执行一个查询。

MFC DAO仅用来支持Access数据库,应用范围相对固定。

第三章数据库的设计

§3.1 数据字典

通过需求分析得到了系统所要处理的数据,下面制作了一张简化了的数据字典,对数据的类型、长度、逻辑含义作了说明。

表3-1

数据项名说明类型长度取值范围及含义

学号所有学生的唯一编号,格式为

入学年份+班代号+班中序号字符10 1~4位:入学年份

第5~8位:班代号

9~10位:班中序号

满分优秀

分及格分

划分成绩等级的分数线小数由学校按考试科目数设定。课程性质分为主课,副课,普通课,其它字符 6

课程代号课程的唯一编号字符 3

考试性质分为小考,单元考试,月考,中考(期

中),终考(期末),会考。

字符 4

考试名考试的唯一标识字符30

老师编号老师的唯一编号字符 4

场地要求有些课程需要特定场地,如实验

课需要实验室,计算机课需要机

房等。记录这些信息后系统可以

为学校进行基础设施管理提供信

字符20 由学校根据本校情况设定

班号(班代号) 班的唯一编号,也是班的主要称

呼。一般称呼一个班为:年级+代

号,如:G147称呼为“高147班”

或就称“147班”

字符 5 第1位:初中/高中标记,

C=初中、G=高中

第2~5位:用户自定义

年级学校的年级划分字符 4 取值只有:初一、初二、初

三、高一、高二、高三

班别名为班取的名字,如:奥赛,体特。

一般的班就取班代号除去第一

位,例如:G147班的别名为147

字符10

§3.2 各局部ER模式的设计

通过分析学校教务管理工作所涉及的内容得到了五类实体:学生,课程,老师,班,考

试。(下划线标记的属性为主键,各属性的说明参见表3-1):

学生的实体和属性描述如下:

学生(学号,姓名,性别,民族,出生年月,家庭住址,电话)

课程的实体和属性描述如下:

课程(课程代号,课程名称,课程性质,场地要求)

老师的实体和属性描述如下:

老师(老师编号#,姓名,性别,民族,职务,职称,专业,联系电话)

班的实体和属性描述如下:

班(班号,班别名,班主任,可容纳人数,成立时间,所属年级,文/理科)

考试的实体和属性描述如下:

考试(名称,考试性质,建立时间,满分,优秀分,及格分)

各实体的ER图如图3.1所示。

实体定义完后结合需求分析对他们之间的联系进行分析得出了以下联系:

●[联系1]一个学生学习多门课程,同一门课程有多名学生学习。

●[联系2]一个学生参加多种考试,同一种考试有多名学生参加。

●[联系3]一种考试设置有多门课程,同一门课程(如:语文)可能在多次考试中

都有,例如:期中和期末考试中都设置有语文这门课程。

●[联系4]一个班由多名学生组成,一个学生只属于一个班,

●[联系5]一个班由一位老师管理,一位老师可能管理多个班

各联系的局部ER图如图3.2所示。

§3.3 全局ER模式

得到局部ER模式后就要将其合并为全局模式,合并全局模式不在于把若干局部ER模式形式上合并为一个ER模式,而在于消除冲突。通常在局部ER模式中是不允许存在冗余的,但在合并为全局ER图之后可能存在冗余。在合并过程中发现联系1和联系2存在冗余的属性――成绩。并且一个学生的成绩无法确定,因为一个学生的成绩只能是在某一次考试中某一科目的成绩,例如:李明在2000年初一期中考试中语文的成绩。而这两个联系都缺一个唯一确定成绩的关键字。所以这两个联系要合并为一个联系。实际上学生学习课程与学生参加考试都是学习过程的一部分。因而可以合并为一个名为“学习”的联系。而关系3实际上可由合并了的学习关系导出,所以可以取消。经过消除冗余属性与联系之后得到的全局ER图如图3.3所示。

图3.1各实体ER图

图3.2 实体联系图

图3.3 全局ER图

§3.4 数据库关系模式

由于概念设计的结果是与DBMS无关的ER图,在设计本系统时选用的是关系型数据库,因此有必要将数据库转化为关系模式。将ER图转化为关系模式有几点原则:

●对于实体类型,将每个实体类型转换成一个关系模式,实体的属性即为关系模式的

属性,实体的标识符即为关系模式的键。

●对于联系类型有以下原则:

◆如果联系是1:1的联系型,可以在两个实体类型转换成的两个关系模式之中的

任意一个加入另一个关系模式的键和联系类型的属性。

◆如果联系是1:N,则在N端加入1端实体关系模式的键和联系类型的属性。

◆如果联系是M:N,则将联系也转换成关系模式,其属性为两端实体的键加上联

系的属性,所组成的关系模式的键则为两端实体键的组合。

按照上面的原则和前面设计的ER图设计的教务助理系统数据库关系模式如下表(下划线标记的属性为主键):

表3-2

§3.5 数据库的物理设计

在设计该系统时选用的是Microsoft Access2000。设计的方法是,首先按照关系模式生成基本数据库表,然后根据全局ER图,建立各个表之间的联系。下面是用Microsoft Access2000设计的物理数据库:

图3.4 课程信息表结构

图3.5 班信息表结构

图3.6 考试设置信息表结构

图3..7 老师信息表结构

图3.8 学习成绩信息表结构

图3.9 学生信息表结构

图3.10 各表间联系

第四章软件系统的具体设计

§4.1 软件结构图

通过已得出的需求分析绘制的软件结构图如下:

图4.1 软件结构图

§4.2 数据库访问的组织

4.2.1三个全局DAO对象

系统设置了三个全局DAO对象,它们的命名及作用见表4-1,其中前缀g_表示是全局变量,以后系统中所有全局变量都遵循这一命名规则。

专用记录集可以执行只涉及一张表的查询以及收集查询结果。实际上,设置专用记录集最重要的原因不在此,而在于让它完成与表相关的其它任务。也就是说专用记录集已不再只是收集数据的简单对象了,设计时对它进行了扩展,具体的扩展方法在下一节中讨论。

4.2.2扩展的记录集类

数据库已经有全局记录集对象了,它可以执行所有查询,不管是涉及一张表的还是多张表的查询。但是,仍有必要为每一张表设计一个专用记录集,这是因为,表间有联系,必须维护它们之间的参照完整性,而且记录集中的数据最终要显示给用户。这些任务如果留给每一个模块自己解决,势必会增加编程量,并且在编写与业务相关的模块时还要分一部分精力来编写与显示和维护完整性有关代码。其中,由记录集维护参照完整性是指由记录集负责删除或更新有参照完整性要求的字段的细节。而在安排显示任务的时候并没有将显示的底层操作安排在记录集,因为显示的底层与记录集不相关,实际上记录集只是组织显示。这就要求记录集知道它的数据应该显示在什么地方以及显示哪些字段,并给负责显示的其它类发送显示请求完成实际的显示。显示的底层是由列表控件和组合框控件完成的,在后面的设计中也对它们进行了扩展,扩展后它们能与记录集结合在一起很方便地完成显示任务,这在后面的章节中会提到。具体扩展记录集的做法是使用C++语言的继承,从CdaoRecordset类派生专用记录集类,扩展的记录集对象的类结构如下:

其中,

据库中的字段名是英文而显示给用户的字段名要求是中文,所以必需要知道它们之间的映射关系,很显然,这个映射由记录集来维护最合适。这个方法主要是在设置列表表头时被调用。

如图4.2,学生信息列表的表头文字就是调用这个方法获得的。

图4.2 列表表头样式

系统定义了扩展的记录集共六个。它们类名与对应的数据表如表4-2所示,其中前缀Rs 表示该类是记录集,以后系统中所有记录集类都遵照该命名规则。

一发送消息即可,如上图中学生列表中的数据是由删除学生模块向rsStudent记录集发送“显示C025班学生”消息(rsStudent::ShowStudent(m_ctlStudentList,”C025”))的运行结果。同样,因为每个记录集都知道怎样维护参照完整性,所以当要删除有参照完整性要求的字段时,也只要向上面6个记录集之一发送消息即可,记录集会维护其参照完整性,例如:要删除一个班就要考虑到参照完整性,通过分析数据库关系模式可以发现在“学生表”中有一个外键----班代号,所以不能只作简单的删除,这类操作是一类特殊的删除操作,将这类删除操作设计到记录集类中可以简化编程,也易于维护,若关系发生变化只要修改一处代码而且不会影响其它模块。

对记录集进行这样扩展的好处是:很多与业务无关的细节被封装起来了,设计查询时可以将主要精力放在SQL语句的设计上,至于如何与数据库交互和如何显示查询结果以及维护参照完整性,都完全由记录集实现。同时封装还具有很强的适应性,只要不改变方法名、参数个数及类型、返回值类型,修改方法内部实现细节是不会影响到其它模块的,并且随时可以添加新的方法而不影响其它模块。

§4.3 用户界面的设计

为了方便用户输入,查询,浏览。系统为用户收集已存在的数据和系统生成周期中固定不变的数据,并将其放在组合框中供用户选择,这样做的好处还可以减少输入错误,特别是日期,它是只能是数字并且还有取值范围,如果日期格式不正确,写入数据库时程序会发生异常,虽然不会导致系统崩溃但会影响用户界面。还有一类数据,它要满足参照完整性要求。例如:在其它地方要引用老师姓名,那么这个老师姓名就必须已经以存在,如果老师姓名不存系统也会发生异常。另外,查询结果的显示、数据的浏览以及系统自动为用户收集的供参考的数据都是由列表控件完成。其中,浏览数据时用户可能还想删除或修改某一些数据。除了显示数据外,如果列表还具有单击列表表头就能对相应的列进行排序的功能,那将为界面增色不少并且更具实用价值。下图就是一个界面实例。

图4.3 界面实例

当用户在年级组合框中选择了某个年级之后,在列表框中会自动列出该年级已有的班,供用户参考,当用户输入一个新班后列表框中的内容也会变化以反应更新情况。并且组合框中的数据改变会影响到列表控件的内容,也就是说数据是动态的。实际上组合框的改变也会影响其它组合框的内容,如:班级组合框中列出的班应该只是属于某一年级的班,而不是全校所有的班(列出全校所有的班级由于班可能很多反而还不利用户操作),那么年级组合框的改变则班级组合框中的内容也要改变。另外在列表控件中可进行选择操作,并且可进行多项选择,主要是考虑到用户删除数据时的方便性。图4.4就是一个完成删除操作的对话框,其中的列表是可进行多项选择的。

相关主题