热门搜索 :
考研考公
您的当前位置:首页正文

学生信息管理系统设计与实现

来源:东饰资讯网
学生信息管理系统设计与实现 第1章 绪 论

本章论述了学生信息管理系统设计与实现的课题意义、课题背景、研究现状,说明了本系统应该实现的基本功能,以及开发本系统的可行性分析。

1.1课题意义

学生信息管理是学校管理中异常重要的一个环节,作为学校,除了育人,就是育知,学生信息管理的计算机化是整个学校教务管理中的重要一部分,能否实现这一步关系到学校办学整体效率的高低。

运用学生信息管理系统可以减轻学院教学人员的工作量,加快查询速度,加强管理,以及加快国家各部门关于信息化的步伐,使各项管理更加规范化。还有就是缩小开支,提高工作效率与准确率。可以使学生能够合理安排时间,能够尽快的知道自己的考试成绩,投入新的课程的学习或复习这次没有考过的课程。并且学生信息管理系统的应用也为今天的高校教育在未来市场的竞争力的提高打下了坚实的基础。

随着学生规模的不断扩大,学生数量急剧增加,有关学生的各种信息量也成倍增长。面对庞大的信息量,需要有学生信息管理系统来提高学生管理工作的效率。通过这样的系统,可以做到信息的规范管理、科学统计和快速的查询,从而减少管理方面的工作量。所以,本系统对高校管理的科学化、信息化,具有重要意义。

1.2 课题背景

目前,我国各大高校为了顺应信息化发展趋势,从提升自身的管理水平和提高高校竞争力的需要角度出发,都相继采用信息技术对学生的有关信息进行管理,通过使用计算机技术等手段,将工作人员从重复而繁杂的手工处理中解脱出来,避免重复劳动,规范了教学管理行为,提高了管理效率和水平,而且降低了人工处理产生的错误,使教育基础管理迈出了一个新的台阶,从而实现了教育基础管理的信息化、科学化和现代化。

对于学生信息管理系统则是以计算机为工具,通过对学生管理所需的信息进行采集、验证、处理、运算、分析、管理和维护,把管理人员从繁琐的数据计算处理中解脱出来,使其有更多的精力从事学生管理政策的研究实施,管理方法的研究改进和管理质

1

学生信息管理系统设计与实现 量的监督检查,从而全面提高管理质量。在当前的信息化时代中,任何高校,都需要一个实用的管理系统来规范学校管理、学生管理和数据统计、分析,这将会大大提升高校的管理水平,优化资源,尽可能地降低成本,实现最大效益化。设计学生管理信息系统的目标,主要是通过建立一个学生管理信息系统来实现数据采集、验证、处理、运算、分析、管理和维护等功能,统筹学工部的各项工作。各学院利用网络,通过管理系统提供的交互式界面提交各种材料,避免了提交材料的繁琐和遗漏。系统能自动核查各学院提交材料的格式是否符合要求,内容是否完整,并对不符合要求的地方给出详细的提示,待格式完全合格了方能入库,提高了审核的效率。另外,学工部通过该系统能对收集的数据进行处理,转化成可用的信息。此外,该系统不仅让学工部内部各科室达到资源共享,如学生管理科将学生违纪情况共享给扶贫助学办公室,如果该学生申请奖、助学金,系统将自动提示其违纪行为,达到自我审核的作用,同时,该系统也与学校的其它子系统达到资源共享,如该系统将有违纪处分的学生的信息共享给教务处的学籍管理系统,招生就业处的毕业生就业系统,从而实现资源合理配置和有效利用。

1.3学生信息管理系统的研究现状

当今社会已经进入了信息时代,利用计算机进行信息管理已经延伸到了从政府管理到企事业单位生产经营的方方面面。计算机信息管理可以提高工作效率,减少人力资源的开支,提高信息管理的精确度和改变信息的及时性。这些优点在追求低成本、高效率、及时性的现在社会无疑有着巨大的优势。

学生信息管理是各大学的主要日常管理工作之一,涉及到校、系、师、生的诸多方面,随着教学体制的不断改革,尤其是学分制、选课制的展开和深入,学生成绩日常管理工作及保存管理日趋繁重、复杂。迫切需要研制开发一款功能强大,操作简单,具有人性化的学生成绩管理系统。

在国外高校,与国内不同,他们一般具有较大规模的稳定的技术队伍来提供服务与技术支持。而国内高校信息化建设相对起步较晚。在数字校园理论逐步应用的过程中,各高校一方面不断投资购建各种硬件、系统软件和网络,另一方面也不断开发实施了各类教学、科研、办公管理等应用系统,形成了一定规模的信息化建设体系。但是,由于整体信息化程度相对落后,经费短缺,理论体系不健全等原因,国内高校教务管理系统在机构设置、服务范围、服务质量及人员要求上与国外高校相比都有一定的差距。

2

学生信息管理系统设计与实现 纵观目前国内研究现状,在安全性和信息更新化方面存在有一定的不足,各现有系统资料单独建立,共享性差;在以管理者为主体的方式中,信息取舍依赖管理者对于信息的认知与喜好,较不容易掌握用户真正的需求,也因此无法完全满足用户的需求。因此,教务管理软件应充分依托校园网,实现教务信息的集中管理、分散操作、信息共享,使传统的教务管理朝数字化、无纸化、智能化、综合化的方向发展,并为进一步实现完善的计算机教务管理系统和全校信息系统打下良好的基础。

1.4 可行性研究

可行性研究的目的是用最小的代价在尽可能的时间内确定问题是否能够解决。 1.经济上可行性

由于早期学生信息管理完全采用纯人工方式完成工作,进行文档制作,且上传下递极不方便,所以耗用工时较多,且效率低下。后来设计一些简单的应用表格,能通过计算机报表,但只是人工去登记、查找、计算大量数据后,人工输入计算机,制成文档,所以也会统计差错,输入过程差错,正确率无法保证,而且还会耗费大量的人力和物力;长年累月积攒起来的材料过多,不易保存,也容易丢失和损坏。

目前,市场上“学生管理信息系统”类的软件开发出产品的已经比较多了,但真正适合本校使用且价格合理的还是比较少。一般的学校经费紧张,根无法接受这样的价格。而且一些网上出售的学生信息管理系统软件的规模太大,有些模块根本用不到,所以购进之后部分功能闲置也构成了浪费。

而本系统的开发,不但为学校节省大量开支,而且为学校的工作效率带来了一个质的飞跃,为此主要表现有以下几个方面:

第一,本系统的运行可以代替人工进行许多繁杂的劳动; 第二,本系统的运行可以节省许多资源;

第三,本系统的运行可以大大的提高学校学生管理的工作效率; 第四,本系统可以使敏感文档更加安全等。 所以,本系统在经济上是可行的。 2.技术上可行性

本系统的开发,利用Microsoft Access 2003作为本系统的数据库,它是一个支持多用户的新型数据库,适用于中小规模的数据量需求。学校校园网的建设也为新系统服

3

学生信息管理系统设计与实现 务器/客户端的结构提供了硬件的支持。

使用Visual C++ 6.0作为系统开发的开发环境,它作为一种现代的编程语言,提供完善的指令控制语句、类与对象的支持及丰富的数据类型,给开发高性能系统提供的保障为开发满足客户要求的系统,保证了代码的模块化要求,而代码模块化的提高,非常有利于以后对新系统的扩展与修改。

MFC是用来编写Windows应用程序的C++类集,该类集以层次结构组织起来,其中封装了大部分Windows API函数和Windows控件。MFC大大简化了使用C++开发基于Windows的应用程序的工作。 3.运行上可行性

本系统为一个小型的学生信息管理系统,所耗费的资源非常的小,学校的电脑无论是硬件还是软件都能够满足条件,因此,本系统在运行上是可行的。

1.5本系统要求实现的功能

该系统需要实现以下基本功能: 1.用户管理:

管理系统操作人员,设置操作人员口令和权限。在满足不同系统用户的操作需求的基础上,提高系统的安全性。

2.基础数据管理:

维护学生管理相关的一些基础数据,它主要包括学校系别设置和各个系别中专业、班级的设置。

3.学生管理

对学生的姓名、学号、性别、年龄、家庭地址等数据的管理。 4.成绩管理:

提供学生考试成绩的管理,以及考试时间、科目设置等功能。 5.数据库管理:

对本系统数据库能够得到相应的保存与恢复。对现有的数据库进行管理,包括数据备份和恢复,以方便用户对数据库的管理和维护工作,提高系统数据安全性和运行效率。

4

学生信息管理系统设计与实现 第2章 系统结构及总体设计

系统设计的优劣直接影响新系统的质量。本系统的设计是在保证实现逻辑模型的基础上,尽可能地提高系统的可变性、可靠性、工作质量、工作效率及经济性。

2.1 系统功能总体设计

模块的功能设计,本学生信息管理信息系统主要可以分为:权限验证模块、用户管理模块、基础设置模块、成绩管理模块、学生管理模块、数据库管理模块以及帮助模块,如图2.1所示。

用户登录

学生信息管理系统 权限验证 系统管理 基础设置 学生管理 成绩管理 数据库管理 学生成绩查询 帮助 用户管理 退出系统 系别设置 专业设置 班级设置 学生学籍管理 学生成绩录入 数据库备份 数据库恢复 关于

图2.1 学生管理信息系统结构框图

1.权限验证模块

权限验证模块主要是根据用户输入的用户名和密码验证用户身份并且决定其操作

5

学生信息管理系统设计与实现 权限。

2.用户管理模块

用户管理子模块负责对操作人员基本信息的建立,以及对操作人员的权限进行基本维护,不同权限的操作人员,可以使用的模块范围不一样。此模块功能只限于具有系统管理员权限的用户使用。用户管理子模块实现三个主要功能:添加新用户、修改用户口令和用户权限、删除指定的用户。

3.基础设置模块

基础数据设置模块负责维护学校学生管理相关的基础数据,主要包括:系别设置和专业划分、班级设置等数据。该模块的功能主要是对这些基础数据的浏览、添加、修改和删除等。

4.学生管理模块

学生管理模块主要管理学生的学号、姓名、性别、年龄、班级、系别等相关信息,该模块的功能主要有增加、修改、删除、查看等。

5.成绩管理模块

成绩管理模块主要实现对学生成绩的管理功能,具体包括学生成绩的录入、查询和学生总分名次的查询等。 6.数据库管理模块

数据库管理模块负责对数据库进行简单的一些管理,包括数据库备份和数据库还原工作,通过这些工作来维护数据库的安全,降低意外或人为破坏的损失。

2.2 系统开发环境及工具软件

2.2.1 软硬件坏境

处理器:Inter Pentium4 2.8GHZ或更高 内存:512MB 硬盘空间:60GB 显卡:SVGA 显示适配器

操作系统:Windows 98/ME/2000/XP

工具软件:Visual C++6.0 、Microsoft Access 2003

6

学生信息管理系统设计与实现 2.2.2 工具软件

1.Visual C++6.0简介

Visual C++是一个功能强大的可视化软件开发工具。自1993年Microsoft公司推出Visual C++1.0后,随着其新版本的不断问世,Visual C++已成为专业程序员进行软件开发的首选工具。

虽然微软公司推出了Visual C++.NET(Visual C++7.0),但它的应用的很大的局限性,只适用于Windows 2000,Windows XP和Windows NT4.0。所以实际中,更多的是以Visual C++6.0为平台。

Visual C++6.0不仅是一个C++编译器,而且是一个基于Windows操作系统的可视化集成开发环境(integrated development environment,IDE)。Visual C++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导Class Wizard等开发工具。 这些组件通过一个名为Developer Studio的组件集成为和谐的开发环境。

2. Microsoft Access 2003简介

Access的最初名称是Cirrus。它开发于Visual Basic之前,当时的窗口引

擎称作Ruby。比尔盖茨看过Ruby的原型后决定把这个基于Basic语言的组件作为一个独立的可扩展应用程序与Access联合开发。这个项目称作Thunder。这两个项目互相独立的被作为底层的窗口引擎开发并且互不兼容。 然而,在VBA出现后它们被合并在一起。

1995年末,access 95发布,这是世界上第一个32为关系型数据库管理系统,使得access的应用得到了普及和继续发展。

1997年,access 97发布。它的最大特点是在access数据库中开始支持web技术,这一技术上的发展,开拓了access数据库从桌面向网络的发展。

21世纪初,microsoft发布access2000,这是微软强大的桌面数据库管理系统的第六代产品,也是32为位access的第三个版本。至此,access在桌面关系型数据库的领域的普及已经跃上了一个新台阶。

Microsoft Access在很多地方得到广泛使用,例如小型企业,大公司的部门,和喜爱编程的开发人员专门利用它来制作处理数据的桌面系统。它也常被用来开

7

学生信息管理系统设计与实现 发简单的WEB应用程序.这些应用程序都利用ASP技术在Internet Information Services运行。比较复杂的WEB应用程序则使用PHP/MySQL或者ASP/Microsoft SQL Server。

2.3 数据库访问技术

Visual C++6.0提供了多种访问数据库的技术包括:ODBC、DAO、OLE DB、ADO。

2.3.1 各数据库访问技术简介

以下介绍了Visual C++6.0中各种数据库访问技术,通过了解与比较,最后决定本学生信息管理系统所采用的数据库访问技术。 1.ODBC

ODBC(Open Database Connectivity,开放数据库互连)是微软公司开放服务结构(WOSA,Windows Open Services Architecture)中有关数据库的一个组成部分,它建立了一组规范,并提供了一组对数据库访问的标准API(应用程序编程接口)。这些API利用SQL语句来完成其大部分任务。ODBC本身也提供了对SQL语言的支持,用户可以直接将SQL语句送给ODBC。

一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。也就是说,不论是FoxPro、Access , MYSQL还是Oracle数据库,均可用ODBC API进行访问。由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。 一个完整的ODBC由下列几个部件组成: (1) 应用程序(Application)。

(2) ODBC管理器(Administrator)。该程序位于Windows 95以上操作系统控制面板(Control Panel)的32位ODBC内,其主要任务是管理安装的ODBC驱动程序和管理数据源。

(3) 驱动程序管理器(Driver Manager)。驱动程序管理器包含在ODBC32.DLL中,对用户是透明的。其任务是管理ODBC驱动程序,是ODBC中最重要的部件。

8

学生信息管理系统设计与实现 (4) ODBC API。

(5) ODBC 驱动程序。是一些DLL,提供了ODBC和数据库之间的接口。

(6) 数据源。数据源包含了数据库位置和数据库类型等信息,实际上是一种数据连接的抽象。

应用程序要访问一个数据库,首先必须用ODBC管理器注册一个数据源,管理器根据数据源提供的数据库位置、数据库类型及ODBC驱动程序等信息,建立起ODBC与具体数据库的联系。这样,只要应用程序将数据源名提供给ODBC,ODBC就能建立起与相应数据库的连接。

在ODBC中,ODBC API不能直接访问数据库,必须通过驱动程序管理器与数据库交换信息。驱动程序管理器负责将应用程序对ODBC API的调用传递给正确的驱动程序,而驱动程序在执行完相应的操作后,将结果通过驱动程序管理器返回给应用程序。 在访问ODBC数据源时需要ODBC驱动程序的支持。用Visual C++ 6.0安装程序可以安装SQL Server、 Access、 Paradox、 dBase、 FoxPro、 Excel、 Oracle 和Microsoft Text等驱动程序.在缺省情况下,VC6.0只会安装SQL Server、 Access、 FoxPro和dBase的驱动程序.如果用户需要安装别的驱动程序,则需要重新运行VC 6.0的安装程序并选择所需的驱动程序。

ODBC 使用层次的方法来管理数据库,在数据库通信结构的每一层,对可能出现依赖数据库产品自身特性的地方,ODBC 都引入一个公共接口以解决潜在的不一致性,从而很好地解决了基于数据库系统应用程序的相对独立性,这也是ODBC 一经推出就获得巨大成功的重要原因之一。 2. DAO

DAO(Data Access Object,数据访问对象)是一种应用程序编程接口(API),存在于微软的Visual Basic中,它允许程序员请求对微软的Access数据库的访问。DAO是微软的第一个面向对象的数据库接口。DAO对象封闭了Access的Jet函数。通过Jet函数,它还可以访问其他的结构化查询语言(SQL)数据库。 3.OLE DB

9

学生信息管理系统设计与实现 OLE DB(OLEDB)是微软的战略性的通向不同的数据源的低级应用程序接口。OLE DB不仅包括微软资助的标准数据接口开放数据库连通性(ODBC)的结构化查询语言(SQL)能力,还具有面向其他非SQL数据类型的通路。作为微软的组件对象模型(COM)的一种设计,OLE DB是一组读写数据的方法(在过去可能被称为渠道)。OLD DB中的对象主要包括数据源对象、阶段对象、命令对象和行组对象。使用OLE DB的应用程序会用到如下的请求序列:初始化OLE 连接到数据源、发出命令、处理结果、释放数据源对象并停止初始化OLE。

Object Linking and Embedding,对象连接与嵌入,简称OLE技术。OLE不仅是桌面应用程序集成,而且还定义和实现了一种允许应用程序作为软件“对象”(数据集合和操作数据的函数)彼此进行“连接”的机制,这种连接机制和协议称为部件对象模型。

OLE 是一种面向对象的技术,利用这种技术可开发可重复使用的软件组件(COM)。

DB(英文全称data base,数据库)是依照某种数据模型组织起来并存放二级存储器中的数据集合。 4.ADO

ADO技术是基于OLE DB的访问接口,它继承了OLE DB技术的优点,并且ADO对OLE DB的接口作了封装,定义了ADO对象,使程序开发得到简化。AKO技术属于数据库访问的高层接口。

2.3.2本系统中Access数据库的连接

本文采用ODBC数据访问技术,配置Access数据源的具体步骤如下: 1. 在操作系统的控制面板里选择管理工具,,打开数据源(ODBC)。

2. 在弹出的ODBC数据源管理器对话框中,打开系统DNS选项卡,点击添加,双击Micorsoft Access Driver(*mdb)。

3.单击“选择”按钮,选择要配置的数据库文件(本设计中为school.mdb),并输入数据源名(本设计中为school)和说明字符串,单击确认按钮,即完成配置Access数据源的配置。

10

学生信息管理系统设计与实现 第3章 学生信息管理系统的设计实现

本章是课题的核心部分,主要包括学生信息管理系统数据库中各数据表的设计和各模块功能的设计与实现。

3.1数据表设计

首先使用向导创建一个Accsse2003库,数据表创建步骤基本一样,如下: 1.在数据库窗口的对象列表中单击“表”这一项。 2.启动表向导,双击“使用表向导创建表”。

3.在“表向导”对话框中,在“示例表”列表中选择表名,然后在表的“示例字段”字段中选择相应的字段并修改,将选中的字段组成一个新的表。

本节后面各表设计时,实现步骤基本相同。

3.1.1系统用户表

系统用户表中包括用户名、用户密码、用户类型,其中用户名和用户密码决定了使用者在启动本系统之后能否进入系统。用户类型决定了已登录用户在本系统操作中的权限。本表主键设为用户名。

表名称标识:user

数据来源:用户管理模块进行录入 见表3.1 系统用户表

表3.1 系统用户表

名 称 用 户 名 用户密码 用户类型 字段名称 user passwd isAdmin 类型 文本 文本 文本 是否主键 Yes No No 附加属性 不允许空 不允许空 不允许空 3.1.2 系别设置表

系统设置表包括系别代码、系名和说明,其中系别代码设置为本表主键,说明一项的内容可以为空。系别代码和系名为学生所在系部的代码和系部全名。

11

学生信息管理系统设计与实现 表名称标识:department

数据来源:基础数据管理设置模块进行录入 见表3.2 系别设置表

表3.2 系别设置表

名 称 系别代码 系 名 说 明 字段名称 Code Name Brief 类型 文本 文本 文本 是否主键 Yes No No 附加属性 不允许空 不允许空 允许空 3.1.3 专业设置表

专业设置表包括专业代码、专业名称、所属系别和说明,专业代码和专业名称指学生所学专业及其名称,本表中专业代码为主键,其中说明可以为空。

表名称标识:major

数据来源:基础数据管理模块进行录入 见表3.3 专业设置表

表3.3专业设置表

名 称 专业代码 专业名称 所属系别 说明 字段名称 Code Name department brief 类型 文本 文本 文本 文本 是否主键 Yes No No No 附加属性 不允许空 不允许空 不允许空 允许空 3.1.4 学生管理表

学生管理记录表包括了学生学籍管理时相关的,班级、学号、姓名、系别、专业、家庭住址等。将学生的学号设为主键,系别、班级、专业姓名不能为空。

表名称标识:student

数据来源:学生管理模块进行录入 见表3.4学生管理记录表

12

学生信息管理系统设计与实现 表3.4 学生管理记录表 名 称 学 号 所在院系 班 级 姓 名 性 别 家庭地址 出生年月 字段名称 code department class name sex address birthday 类 型 文本 文本 文本 文本 文本 文本 日期/时间 是否主键 Yes No No No No No No 附加属性 不允许空 不允许空 不允许空 不允许空 不允许空 允许空 不允许空 3.1.5学生成绩记录表

学生成绩记录表包括了学生成绩管理时相关的,班级、学号、姓名、科目、成绩等,是学生信息管理系统的核心数据表。将学生在系统中的ID设为主键,成绩、补考成绩、补考标识可以为空。

表名称标识:score

数据来源:成绩管理模块进行录入 见表3.5学生成绩记录表

13

学生信息管理系统设计与实现 表3.5 学生成绩记录表

名 称 标 识 班 级 时间段 学 号 姓 名 科 目 考试类型 成 绩 补考成绩 缺考标识 字段名称 ID class time code name subject type score makeup_score absent 类 型 自动增长 文本 文本 文本 文本 文本 文本 数字 数字 文本 是否主键 Yes No No No No No No No No No 附加属性 不允许空 不允许空 不允许空 不允许空 不允许空 不允许空 不允许空 允许空 允许空 允许空 3.2 各功能模块的实现

本节是基于系统需求分析与系统总体设计的结论来进行的,并采用Visual C++ 6.0实现各模块的功能。系统的设计和实现按照模块的划分来分别阐述。

3.2.1系统管理模块的实现

3.2.1.1.主控平台界面

系统主界面是用户进入系统后主要接触界面,由它可以进入各个功能模块,菜单由一个条形菜单和一组弹出菜单组成,采用集成技术,把模块组合在一起,形成典型的下拉式菜单,条形菜单为主菜单,弹出菜单为子菜单。

用户点击主菜单的某一项,立刻弹出对应的下拉菜单,直接在下拉菜单中进行选择,可执行相应功能。 1.主体框架

使用MFC AppWizard创建一个单文档结构的应用程序工程,建立起系统主体框架,生成应用程序类(CSchoolApp)、文档类(CSchoolDoc)、视图类(CSchoolView)和主框架类(CMainFram)。

14

学生信息管理系统设计与实现 2.菜单

根据系统总体设计中功能模块的划分,使用资源编辑器创建系统菜单。 3. 背景图

通过修改系统视图类Paint事件处理函数OnPaint()来实现加载背景图,具体代码见附录 代码一(主控平台的实现)。 3.2.1.2.用户登录模块 1.用户登录模块流程设计

根据需求分析和总体设计,此模块主要是根据用户输入的用户名和密码验证用户身份并且决定其操作权限,其程序编写流程见图3.1。

开始 输入用户信息 信息查询 信息正确否 N 提示:登陆错误 Y 获得访问权限 图3.1 用户登录模块程序流程图

2.用户登录模块的实现

根据以上流程图,通过定义CLoginDlg类来实现用户登录模块模块的功能。下面阐述CLoginDlg类的设计与实现:

(1)根据用户名和密码验证用户身份和分配权限。

(2)登录对话框创建时,需要完成的一些初始化工作,读取可以登录的用户名称,并形成列表,供用户进行选择。部分代码如下所示,具体编程见代码二(用户登录模块模块的实现)。

15

学生信息管理系统设计与实现 void CLoginDlg::OnOK() {

UpdateData();

if(m_ctrUser.IsWindowEnabled()) { //增加新用户

if(m_strUser==\"\") {

MessageBox(\"请填写用户名!\"); m_ctrUser.SetFocus(); return; } } else

{//修改用户信息

if(m_strUser==\"\") {

MessageBox(\"请选择一个用户!\"); return;} }

if(m_strPass==\"\") {

MessageBox(\"密码不能为空,请输入密码!\"); m_ctrPass.SetFocus(); return; }

3.2.1.3.用户管理模块

根据需求分析和总体设计,权限管理模块负责对操作人员基本信息的建立,以及对操作人员的权限进行基本维护,不同权限的操作人员,可以使用的模块范围不一样。此模块功能只限于具有系统管理员权限的用户使用。

用户管理模块实现三个主要功能:添加新用户、修改用户口令和用户权限、删除指定的用户。

1. 用户管理模块流程设计 具体处理过程: (1)增加新用户的处理

1)设置用户名编辑框为可用状态。

2)根据管理员输入的用户名判断用户是否存在,如果存在提示错误,并要重新输入。

16

学生信息管理系统设计与实现 3)如果用户不存在,根据管理员输入的用户名、用户口令和权限的类别,在数据库中用户表中添加新纪录。 4)提示新用户增加成功。 (2)修改用户口令和权限的处理

1)在“用户列表”中选择需要编辑的用户。 2)输入新的用户口令和权限的类别。 3)确认操作。

4)完成对数据库中系统用户表的相应操作。 (3)删除指定用户的处理

1)在“用户列表”中选择需要删除的用户。 2)删除操作。

3)完成对数据库中系统用户表的相应操作。 2. 用户管理模块的实现

根据用户管理模块的流程图,通过定义CUserDlg类来实现用户管理模块的功能。下面来阐述CUserDlg类的设计与实现。

(1)CUserDlg类使用的用户表记录集类CUserSet

此类的实现与系统用户表的绑定,可以通过ClassWizard根据数据库表结构自动创建。

(2)添加用户或编辑某用户的相关资料 处理过程:

检查当前的状态为添加或编辑,如果为添加状态,先检查用户名称是否已经存在,然后插入新的用户;如果为编辑状态,更新用户信息,更改相关组件的状态。添加用户操作的部分代码如下所示,具体代码见代码三(用户管理模块的实现)。

if(m_ctrUser.IsWindowEnabled()) { //增加新用户

//判断用户是否已经存在

if(m_recordset.GetRecordCount()!=0) { m_recordset.Close();

MessageBox(\"该用户已经存在!\"); return; }

17

学生信息管理系统设计与实现

}

m_recordset.AddNew();

m_recordset.m_user = m_strUser; m_recordset.m_passwd = m_strPass; m_recordset.m_isadmin = m_bIsAdmin; m_recordset.Update();

MessageBox(\"用户添加成功!请记住用户名和密码!\"); m_recordset.Close();

3.2.2基础设置模块的实现

根据需求分析和总体设计,基础数据设置模块负责维护学校学生管理相关的基础数据,主要包括:系别设置和专业划分等数据。该模块的功能主要是对这些基础数据的浏览、添加、修改和删除。 3.2.2.1.系别设置子模块

功能描述:系别设置信息表中读取信息并显示,同时实现对这些数据的添加、修改和删除功能。

1.系别设置子模块流程设计

输入:系别设置数据 处理:

1)系别设置对话框启动。

2)从系别设置信息表中读取数据并显示到列表中供用户浏览。 3)根据用户选择,完成系别设置数据的添加、修改和删除。 输出:更新的系别设置数据表。 2.系别设置子模块的界面设计

该子模块通过对话框提供用户操作界面。 3.系别设置子模块的的实现

根据系别设置子模块的流程图,通过定义CDepartmentDlg类来实现系别设置的数据管理功能。下面具体阐述这个类的设计与实现。

1)CDepartmentDlg类使用的记录集类CDepartmentSet。 此类可以通过ClassWizard根据数据库表结构自动创建。 2)系别设置对话框的初始化。

18

学生信息管理系统设计与实现 处理过程:首先根据界面设计创建数据列表,然后从系别设置数据表中提取数据并显示在数据列表中,最后设置各功能按钮的初始状态。具体代码添加如下所示:

BOOL CDepartmentDlg::OnInitDialog()//对话框的一些初始化操作 { CDialog::OnInitDialog();//设置数据列表

m_ctrList.InsertColumn(0,\"系别代码\"); m_ctrList.InsertColumn(1,\"系名\"); m_ctrList.InsertColumn(2,\"说明\"); m_ctrList.SetColumnWidth(0,60); m_ctrList.SetColumnWidth(1,160); m_ctrList.SetColumnWidth(2,240);

m_ctrList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);//设置按钮状态 m_bntSave.EnableWindow(FALSE); m_bntNew.EnableWindow(FALSE); m_bntDelete.EnableWindow(FALSE);

m_bntModify.EnableWindow(FALSE);//显示数据 RefreshData(); return TRUE; }

3)添加新系别信息。

处理过程:清空编辑区域的编辑框等待用户输入,然后当用户选择保存按钮是检查用户输入的数据合法性,无误后将用户输入的数据添加到系别设置数据表中,最后更新数据列表中数据显示,以及恢复各按钮的状态。具体代码见代码五(添加新系别信息)。

4)系别设置信息。

处理过程:将用户选择的需要修改记录信息显示到文本编辑框中,当用户修改完成后,检查数据的合法性,检查无误后,将修改后的数据更新到数据库中。具体代码见代码六(修改系别设置信息)。

5)系别信息的删除。

处理过程:将用户选择的需要删除的记录信息显示到文本编辑框中,当用户确认后,从数据表中删除这条记录。具体代码见代码七(系别信息的删除)。 3.2.2.2.专业设置子模块

功能描述:从专业设置信息表中读取数据并显示,同时实现对这些数据的添加、修改和删除功能。

1.专业设置子模块的流程设计

19

学生信息管理系统设计与实现 输入:专业设置数据 处理:

(1)专业设置对话框启动。

(2)从专业设置信息表中读取数据并显示到列表中供用户浏览。 (3)根据用户选择,完成专业设置数据的添加、修改和删除。 输出:更新的专业设置数据表 2. 专业设置子模块的界面设计

该子模块通过对话框提供用户操作界面。 3.专业设置子模块的实现

根据专业设置子模块的功能,通过定义CMajorDlg类来实现专业设置的数据管理功能。下面具体阐述这个类的设计与实现。

1)CMajorDlg类使用的记录集类CMajorSet。

此类可以通过ClassWizard根据数据库表结构自动创建。 2)添加新专业信息。

处理过程:清空编辑区域的编辑框等待用户输入,然后当用户选择保存按钮时检查用户输入的数据合法性,无误后将用户输入的数据添加到专业设置数据表中,最后更新数据列表中数据显示,以及恢复各按钮的状态。部分代码如下所示,具体代码见代码八。

void CMajorDlg::OnButtonSave() //保存数据时的操作

{ // TODO: Add your control notification handler code here UpdateData();//检查数据的合法性 if(m_strName==\"\")

{ AfxMessageBox(\"请输入专业名称!\"); return; }

if(m_strCode==\"\")

{ AfxMessageBox(\"请输入专业代码!\"); return; }

if(m_strDepartment==\"\")

{ AfxMessageBox(\"请输入所属系别!\"); return; }

3)修改专业设置信息。

20

学生信息管理系统设计与实现 处理过程:将用户选择的需要修改记录信息显示到文本编辑框中,当用户修改完成后,检查数据的合法性,将修改后的数据更新到数据库中。具体代码见代码九(修改专业设置信息)。

4)专业信息的删除。

处理过程:将用户选择的需要删除的记录信息显示到文本编辑框中,当用户确认后,从数据表中删除这条记录。具体代码见代码十(专业信息的删除)。

3.2.3学生管理模块的实现

根据需求分析和总体设计,学生管理模块负责维护学校学生管理相关的学生数据,主要包括:班级、学号、姓名、系别、专业、家庭住址等。该模块的功能主要是对这些学生学籍信息的浏览、添加、修改和删除。 1.学生管理模块流程设计

输入:学生学籍相关信息 处理:

1)学生管理对话框启动。

2)从学生管理信息表中读取数据并显示到列表中供用户浏览。 3)根据用户选择,完成学生学籍数据的添加、修改和删除。 输出:更新到学生管理数据表。 2. 学生管理模块的界面设计

该子模块通过对话框提供用户操作界面。 3.学生管理模块的的实现

根据学生管理模块的流程说明,通过定义CStudentDlg类来实现学生数据的管理功能。下面具体阐述这个类的设计与实现。

1)CStudentDlg类使用的记录集类CStudentSet。 此类可以通过ClassWizard根据数据库表结构自动创建。 2)学生管理对话框的初始化。

处理过程:首先根据界面设计创建数据列表,然后从学生管理数据表中提取数据并显示在数据列表中,最后设置各功能按钮的初始状态。具体代码添加见代码十一(学生管理对话框初始化)。

21

学生信息管理系统设计与实现 3)添加新学生信息。

处理过程:清空编辑区域的编辑框等待用户输入,然后当用户选择保存按钮是检查用户输入的数据合法性,无误后将用户输入的数据添加到学生管理数据表中,最后更新数据列表中数据显示,以及恢复各按钮的状态。具体代码见代码十二(添加新学生信息)。

4)学生管理信息。

处理过程:将用户选择的需要修改记录信息显示到文本编辑框中,当用户修改完成后,检查数据的合法性,检查无误后,将修改后的数据更新到数据库中。具体代码见代码十三(修改学生信息)。

5)学生信息的删除。

处理过程:将用户选择的需要删除的记录信息显示到文本编辑框中,当用户确认后,从数据表中删除这条记录。具体代码见代码十四(学生信息的删除)。

3.2.4成绩管理模块的实现

根据需求分析和总体设计,成绩管理模块主要实现对学生成绩的管理功能具体包括学生成绩的录入、查询、考试相关设置等。

成绩管理模块主要划分成三个子模块:学生成绩录入、学生成绩查询。下面按照子模块的划分来阐述本模块的设计与实现过程。 3.2.4.1.学生成绩录入子模块

功能:以班级为单位,完成对指定班级在某次考试中所有学生的成绩录入功能; 1.学生成绩录入子模块流程设计

输入:班级、考试类型、考试时间段、科目、学生成绩 处理:

(1)学生成绩录入对话框启动;

(2)根据用户指定的班级,从学生信息表中读取学生名单,并显示在列表中。 (3)当用户指定录入某学生成绩时启动成绩录入对话框。

(4)将用户输入的学生成绩、班级,保存到数据库的学生成绩信息表中。

(5)更新成绩列表显示,等待录入下一个学生的成绩。 输出:学生成绩信息表

22

学生信息管理系统设计与实现 2.学生成绩录入子模块的界面设计

该子模块通过学生成绩录入对话框提供用户操作界面。 3.学生成绩录入子模块的实现

根据学生成绩录入子模块的流程图,通过定义CScoreInputDlg类来实现某班级所有学生成绩录入的主体功能。下面具体阐述这个类的设计与实现。 (1)CScoreInputDlg类使用的记录集CScoreSet。

此类实现与学生成绩信息表得绑定,可以通过ClassWizard根据数据库表结构自动创建。

(2)创建并显示学生成绩单。

处理过程:根据用户输入班级编号,从学生信息表中读取该班级所有学生名单,并在学生成绩表中创建所有学生得成绩单记录,然后将成绩单显示到成绩列表中。部分代码如下所示,其主要代码见代码十五。

void CScoreInputDlg::OnButtonInput() {

UpdateData();

if(m_strClass.IsEmpty())//非空检查 { AfxMessageBox(\"请选择班级\"); return; }

if(m_strTime.IsEmpty())

{ AfxMessageBox(\"请选择考试时间段\"); return; }

if(m_strType.IsEmpty())

{ AfxMessageBox(\"请选择考试类型\"); return; }

if(m_strSubject.IsEmpty())

{ AfxMessageBox(\"请选择考试科目\"); return; }

(3)录入学生成绩。

处理过程:当用户双击成绩列表时,弹出成绩录入对话框,等待用户输入学生的成绩,在输入确认后,将学生成绩保存到学生成绩信息表中。其主要代码见代码十六(录入学生成绩)。

23

学生信息管理系统设计与实现 3.2.4.2.学生成绩查询子模块

功能描述:提供按班级分类查询学生成绩和按学生姓名查询成绩功能。 1.学生成绩查询子模块流程设计

输入:班级编号、学生姓名 处理:

(1)学生成绩查询对话框启动;

(2)根据用户选择的班级编号,从学生信息表中读取该班级所有学生名单。 (3)在学生列表中显示该班级所有学生名单。

(4)根据用户在学生列表中选择的学生编号,从成绩信息表中读取该学生的成绩。 (5)将该学生所有科目成绩显示在成绩列表中。

(6)根据用户名输入的学生姓名,从学生成绩信息表中读取学生的成绩。 (7)将该学生所有科目成绩显示在成绩列表中。 输出:学生成绩列表 2.学生成绩查询子模块的界面设计

该子模块通过学生成绩录入对话框提供用户操作界面。 3.学生成绩查询子模块的实现

根据学生成绩查询子模块的功能,通过定义CScoreQueryDlg类来实现学生成绩的查询功能。下面具体阐述这个类的设计与实现。 (1)CScoreQueryDlg类使用的记录集CScoreSet。

此类实现与学生成绩信息表得绑定,可以通过ClassWizard根据数据库表结构自动创建。

(2)显示学生列表。

处理过程:根据用户选择得班级编号,从学生信息表中读取该班级学生名单,然后显示到学生列表中。其主要代码见代码十七(学生成绩查询)。

(3)显示学生成绩单。其主要代码见代码十八(显示学生成绩单)。 (4)直接查询学生成绩。

处理过程:根据用户输入学生姓名查询学生成绩信息表,读取符合条件的数据并显示到成绩单列表中。其主要代码十九(直接查询学生成绩)如下:

void CScoreQueryDlg::OnButtonSearch()

24

学生信息管理系统设计与实现 {

UpdateData(TRUE);//检查是否输入学生姓名 if(m_strName.IsEmpty())

{ AfxMessageBox(\"请输入学生姓名!\"); }

CString strSQL;

strSQL.Format(\"select * from score where name like '%s'\

return;

查询并显示学生成绩单

}

RefreshData(strSQL);

3.2.5 数据库管理模块的实现

功能:数据库管理模块负责对数据库进行简单的一些管理,包括数据库备份和数据库还原工作,通过这些工作来维护数据库的安全。 1.数据库管理模块的流程设计

(1)数据库备份 输入:数据库表文件 处理:

1)提醒用户是否完成数据库备份操作。

2)如果用户确认,将数据库表文件复制到备份目录中,并更改扩展名。 3)否则取消备份操作。 输出:数据库备份文件 (2)数据库恢复 输入:数据库备份文件 处理:

1)提醒用户是否完成数据库恢复操作。

2)如果用户确认,用数据库备份文件覆盖数据库表文件。 3)否则取消恢复操作。

25

学生信息管理系统设计与实现 输出:数据库表文件 2.数据库管理模块的实现 (1)数据库备份

数据库备份主要时通过在主框架类CMainFram中实现菜单点击事件处理来实现备份功能的。其主要代码见代码二十(数据库备份的实现)。 (2)数据库恢复

数据库恢复主要时通过在主框架类CMainFram中实现菜单点击事件处理来实现恢复功能的。其主要代码见代码二十一(数据库恢复的实现)。

void CMainFrame::OnDatabaseRecover()

{ if(AfxMessageBox(\"还原数据库将覆盖原来的数据库。您确定要还原吗?\ }

{ return; }

if(CopyFile(\".\\\\backup\\\\school.bak\

AfxMessageBox(\"数据库还原成功!\");

else

AfxMessageBox(\"数据库还原失败!\");

26

学生信息管理系统设计与实现 第4章 软件测试

软件测试是软件开发阶段中的一个重要的环节。在软件开发过程中,开发者的主观认识可能有与客观事实不相符的地方,在软件生产周期的每个阶段都有可能产生误解或差错。早期的误解或差错经过后期工作的不断进行往往会被放大。所以说软件测试是软件开发的一个重要环节,软件测试是保证软件质量的重要手段。

4.1测试准备

(1)软件环境:Windows 2000/XP 、Visual C++6.0、Microsoft Access 2003

硬件环境:奔腾4 512兆内存 + 60G硬盘 + 系统集成声卡、显卡 (2)基本要求:设计的管理系统通过系统管理员进行登录,结果可以良好运行,并且结构要合理,运行效率较高,符合软件工程开发规范。

(3)测试模块:权限验证模块、用户管理模块、基础数据库管理模块、成绩管理模块和数据库管理模块。

(4)测试时间:2009年5月20日 (5)测试人员:侯勇

4.2 系统各子模块的测试

4.2.1系统管理模块

1.权限验证模块的使用测试

启动用户登录对话框,选择用户名为“管理员”,输入密码“1”,按“登录”按钮,即可进入主界面。如果输入的密码错误,则弹出提示框“密码错误,请重新输入!”。调试图如图4.1用户登录界面。 2.用户管理模块的使用测试:

1)增加新用户的处理

启动用户设置对话框,单击“新增”按钮,输入用户资料中用户名为“学生1”,密码为“1”,确认为“11”,然后按“保存”按钮,弹出提示框“两次输入的密码不一

27

学生信息管理系统设计与实现 致,请重新输入密码”。

图4.1 用户登录界面

启动用户设置对话框,单击“新增”按钮,输入用户名为“学生1”,密码为“1”,确认为“1”,然后按保存按钮,弹出提示框“用户添加成功!请记住用户名和密码”。增加新用户操作界面如图4.2。

图4.2 增加新用户

2)修改用户口令和权限的处理

启动用户设置对话框,单击用户列表中的用户名“11”,修改用户资料中密码为“22”,确认为“22”,是否为管理员框打勾,然后按保存按钮,弹出提示框“用户修改成功!请记住用户名和密码”。

3)删除指定用户的处理

28

学生信息管理系统设计与实现 启动用户设置对话框,单击用户列表中的用户名“学生1”,按“删除”按钮,用户名“学生1”从用户列表中删除成功。

4.2.2 成绩管理模块

1.学生成绩录入子模块的使用测试

启动学生成绩录入对话框,选择班级为“05102”,时间段“2008年度下学期”,考试类型“期末考试”,科目“大学英语”,单击“开始录入”按钮,则序号为“29”,学号“0510201”的学生诸葛亮的成绩显示在列表中,双击这一行,弹出对话框,输入成绩“80”,单击“确定”按钮,则列表中成绩更新为“80”,录入成功。如图4.3 学生成绩录入。

图4.3 学生成绩录入

2.学生成绩查询子模块的使用测试

启动学生成绩查询对话框,按班级查询,选择班级“05102”,单击“显示学生列表”,则学号为“0510201”的学生诸葛亮显示在学生列表中,双击这一行,在右边列表中显示该学生所有科目成绩;直接查询,输入姓名“诸葛亮”,单击“直接查询”按钮,下面列表中显示该学生所有科目成绩。查询操作成功。

29

学生信息管理系统设计与实现 4.2.3基础数据管理模块

1.系别设置子模块的使用测试

启动系别设置对话框,按“增加”按钮,设置系别代码为“01”,系名为“电气与信息工程学院”,说明为空,然后按保存按钮,所输入的信息已经显示到列表中,增加操作成功。

启动系别设置对话框,,单击列表中系别代码为“01”,系名为“电气与信息工程学院”这一行,按“修改”按钮,把系别代码中换成“02”,然后按“修改”按钮,在列表中修改成功。

启动系别设置对话框,单击列表中系别代码为“02”,系名为“电气与信息工程学院”这一行,按“删除”按钮,在列表中显示删除成功。

2.专业设置子模块的使用测试

启动专业设置对话框,按“增加”按钮,设置专业代码为“05102”,专业名为“自动化”,所属系别为“电气与信息工程学院”,说明为“空”,然后按“保存”按钮,所输入的信息已经显示到列表中,增加操作成功。

启动专业设置对话框,单击专业代码为“05102”,专业名为“自动化”这一行,把专业名称改为“自动化05”,然后按“修改”按钮,所输入的信息已经显示到列表中,修改操作成功。

启动专业设置对话框,单击专业代码为“05102,专业名为“自动化05”这一行,然后按“删除”按钮,在列表中显示删除成功。如图4.4

30

学生信息管理系统设计与实现

图4.4 专业设置

4.2.4 数据库管理模块

1.单击菜单栏“数据库管理”下的“数据库备份”,弹出对话框“您确认要备份数据库吗?”,单击“确定”按钮,显示“数据库备份成功”。

2.单击菜单栏“数据库管理”下的“数据库还原”,弹出对话框“还原数据库将覆盖原来的数据库。您确定要还原吗?”,单击“确定”按钮,显示“数据库还原成功”。如图4.5和图4.6所示:

图4.5 数据库管理 图4.6 数据库还原

4.2.5 帮助模块

单击系统主界面上的“帮助”菜单下的“关于”,弹出如下软件相关信息。如图4.7所示:

31

学生信息管理系统设计与实现

图4.7 帮助

4.3 测试结论

经测试,本系统基本达到了需求分析中提出的功能要求。系统中每个模块都有其独立性,可根据需要进行扩充;系统界面清晰整洁、通俗易懂,操作简单,用户可以轻松的完成操作过程。

32

学生信息管理系统设计与实现 结 论

本次设计的学生信息管理系统实现了以下功能1.系统主界面:2.用户管理:3.基础数据管理:4.成绩管理5.数据库管理。本系统提供了方便灵活的数据查询功能,满足多样的数据查询需求;对操作人员的技能要求比较低,操作方便;能够实现方便的扩展,满足学校发展的需要;能够保障管理数据的安全,准确。

本次设计是对大学四年来所学知识的综合运用,是对学习成果的检验。通过《学生信息管理系统》的设计制作,我对Visual C++语言有了一个全面、细致的认识,对可视化程序设计有了更深入的了解,为今后学习程序设计打下了一个良好的基础,同时对学生信息管理系统有了更深层的理解。

由于时间有限,《学生信息管理系统》还有一些不完善的地方,今后,我将不断的深入研究VC语言,提高可视化程序设计技术,逐渐扩展本系统的功能,使其不断完善。

33

学生信息管理系统设计与实现 参考文献

[1] 求是科技.数据库开发技术与工程实践 [M].北京.人民邮电出版社,2004.1:20-280

[2] Krugllnski D.VC技术内幕[M].希望图书创作室译.北京:北京希望电子出版社,2004:

12-15,210-212

[3] 揣锦华.面向对象技术与Visual C++[M].北京:清华大学出版社,2008:56

[4] 王正军. Visual C++6.0程序设计从入门到精通[M].北京:人民邮电出版社,2006:6-41,350-370 [5] 宋昆,李严.SQL Server数据库开发实例解析[M].北京:机械工业出版社,2006:3 [6] 李俊民,高春燕.Access数据库开发实例解析[M].北京:机械工业出版社,2006:5-25 [7] 辛希孟. 信息技术与信息服务国际研讨会论文集:A集[C]. 北京:中国社会科学出版社,2000 [8] 张海藩.软件工程导论[M]. 北京:清华大学出版社,2005:465

[9](美)Bjarne Stroustrup.The Design and Evolution of C++[M].北京:机械工业出版社,2004:

66-68

[10] 史济民,汤观全,张露.Visual FoxPro及其应用系统开发[M].北京:清华大学出版社,2006:1 [11] 辛长安,梅林.VC++ 编程技术与难点剖析[M]. 北京:清华大学出版社,2002:21-22

[12] 黄明,梁旭,周绍斌.Visual C++ 信息系统设计与开发实例[M].北京:机械工业出版社,2003:

325-376

[13] 明日科技.Visual C++ 管理信息系统完整项目实例剖析[M].北京:人民邮电出版社,2005:

187-234

[14] 王端,于速,张雨.Visual C++ 数据库系统开发完全手册[M].北京:人民邮电出版社,2006:

6-100

[15] Keith Bugg .Debugging Visual C++ Windows[M].USA:Miller Freeman Inc,2007:142-143

34

学生信息管理系统设计与实现 致 谢

在本次毕业设计过程中,梅英老师对该论文从选题、构思、资料收集到定稿的各个环节给予细心指引与教导,使我对基于VC的学生信息管理系统有了深刻的认识,使我得以最终完成毕业设计,在此表示衷心感谢。梅老师严谨的治学态度、丰富渊博的知识、敏锐的学术思维、精益求精的工作态度、积极进取的科研精神以及诲人不倦的师者风范是我终生学习的楷模。在四年的大学生涯里,还得到众多老师的关心支持和帮助,在此,谨向老师们致以衷心的感谢和崇高的敬意!

同时还要感谢班上的凌刚同学,他在我的论文设计过程中给予了很大的帮助,感谢他的热心交流和真诚鼓励。

在大学四年生活中,不断得到胡晓明等同学的关心与帮助,使我在学习和生活中不断得到友谊的温暖与关怀,最重要的是一种精神上的激励,让我非常感动。在此我要表示衷心的感谢!特别要感谢的是我的家人,一直给予我各方面的关怀和支持,让我茁壮成长。

最后,我要向在百忙之中抽时间对本文进行审阅、评议和参加本人论文答辩的各位师长表示感谢!

35

学生信息管理系统设计与实现 附 录:程序清单

代码一(主控平台的实现) void CSchoolView::OnPaint() {

CPaintDC* pDC=new CPaintDC(this); // 创建设备上下文 CBitmap bmp; RECT Rect; RECT RectView; POINT ptSize; CDC dcmem; BITMAP bm;

int b = bmp.LoadBitmap(IDB_BITMAP2); //将位图取出; dcmem.CreateCompatibleDC(pDC); //创建兼容设备上下文。 dcmem.SelectObject(&bmp); //用设备上下文选择位图; dcmem.SetMapMode(pDC->GetMapMode()); //设置映射方式;

GetObject(bmp.m_hObject, sizeof(BITMAP),(LPSTR)&bm);//映射位图; GetClientRect(&Rect); ptSize.x=bm.bmWidth; ptSize.y=bm.bmHeight;

pDC->DPtoLP((LPPOINT)&ptSize,1); //设备单元to逻辑单元; GetClientRect(&RectView); CRect RectBmp = RectView;

if((RectView.right - RectView.left) > bm.bmWidth) {

RectBmp.left = RectView.left + (RectView.right - RectView.left - bm.bmWidth) / 2; RectBmp.right = bm.bmWidth; }//当位图宽度容纳不下的处理 else {

RectBmp.left = RectView.left;

RectBmp.right = RectView.right - RectBmp.left; }

if((RectView.bottom - RectView.top) > bm.bmHeight) {

RectBmp.top = RectView.top + (RectView.bottom - RectView.top - bm.bmHeight) / 2; RectBmp.bottom = bm.bmHeight; }//当位图高度容纳不下的处理 else {

RectBmp.top = RectView.top;

36

学生信息管理系统设计与实现 RectBmp.bottom = RectView.bottom - RectBmp.top; }//加载视图到设备上下文中

pDC->StretchBlt(RectBmp.left, RectBmp.top, RectBmp.right,\\ RectBmp.bottom, &dcmem, 0, 0, bm.bmWidth, bm.bmHeight,\\ SRCCOPY);//删除设备上下文 dcmem.DeleteDC(); }

代码二(权限验证模块的实现)

void CUserDlg::OnOK() {

UpdateData();

if(m_ctrUser.IsWindowEnabled()) { //增加新用户

if(m_strUser==\"\") {

MessageBox(\"请填写用户名!\"); m_ctrUser.SetFocus(); return; } } else

{//修改用户信息

if(m_strUser==\"\") {

MessageBox(\"请选择一个用户!\"); return;} }

if(m_strPass==\"\") {

MessageBox(\"密码不能为空,请输入密码!\"); m_ctrPass.SetFocus(); return; }

if(m_strPass!=m_strRePass) {

MessageBox(\"两次输入地密码不一致,请重新输入密码!\"); m_ctrPass.SetFocus(); m_strPass = \"\"; m_strRePass = \"\"; UpdateData(FALSE); return; }

CString strSQL;

37

学生信息管理系统设计与实现 strSQL.Format(\"select * from user where user='%s'\ if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) {

MessageBox(\"打开数据库失败!\数据库错误\ return ; }

if(m_ctrUser.IsWindowEnabled()) { //判断用户是否已经存在

if(m_recordset.GetRecordCount()!=0) {

m_recordset.Close();

MessageBox(\"该用户已经存在!\"); return; }

m_recordset.AddNew();

m_recordset.m_user = m_strUser; m_recordset.m_passwd = m_strPass; m_recordset.m_isadmin = m_bIsAdmin; m_recordset.Update();

MessageBox(\"用户添加成功!请记住用户名和密码!\"); m_recordset.Close(); } else

{ //修改用户信息

if(m_recordset.GetRecordCount()==0) { //判断用户是否不存在 m_recordset.Close();

MessageBox(\"该用户不存在!请更新数据库\"); return; }

m_recordset.Edit();

m_recordset.m_user = m_strUser; m_recordset.m_passwd = m_strPass; m_recordset.m_isadmin = m_bIsAdmin; m_recordset.Update();

MessageBox(\"用户修改成功!请记住用户名和密码!\"); m_recordset.Close(); }

m_ctrUser.EnableWindow(FALSE); RefreshData(); }

代码三(用户管理模块的实现) void CUserDlg::OnButtonNew()

38

学生信息管理系统设计与实现 {// TODO: Add your control notification handler code here m_strUser = \"\"; m_strPass = \"\"; m_strRePass = \"\";

m_bIsAdmin = FALSE;//设置用户名编辑框为可用 m_ctrUser.EnableWindow(TRUE);

m_ctrUser.SetFocus();//更新数据到界面 UpdateData(FALSE);

}//保存添加或者修改用户信息

void CUserDlg::OnButtonDelete() {

UpdateData(TRUE); if(m_strUser==\"\")

{ MessageBox(\"请选择一个用户!\"); return; }

CString strSQL;

strSQL.Format(\"select * from user where user='%s'\if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) {

MessageBox(\"打开数据库失败!\数据库错误\ return ;

}//删除该用户

m_recordset.Delete(); m_recordset.Close();

RefreshData();//刷新用户列表 m_strUser = \"\"; m_strPass = \"\"; m_strRePass = \"\"; m_bIsAdmin = FALSE; UpdateData(FALSE); }

CString strSQL;

strSQL.Format(\"select * from user where user='%s'\ if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) { MessageBox(\"打开数据库失败!\数据库错误\ return ; }

if(m_ctrUser.IsWindowEnabled()) { //增加新用户

//判断用户是否已经存在

if(m_recordset.GetRecordCount()!=0) { m_recordset.Close();

39

学生信息管理系统设计与实现 MessageBox(\"该用户已经存在!\"); return; }

m_recordset.AddNew();

m_recordset.m_user = m_strUser; m_recordset.m_passwd = m_strPass; m_recordset.m_isadmin = m_bIsAdmin; m_recordset.Update();

MessageBox(\"用户添加成功!请记住用户名和密码!\"); m_recordset.Close(); } else

{//修改用户信息

if(m_recordset.GetRecordCount()==0) {//判断用户是否不存在 m_recordset.Close();

MessageBox(\"该用户不存在!请更新数据库\"); return; }

m_recordset.Edit();

m_recordset.m_user = m_strUser; m_recordset.m_passwd = m_strPass; m_recordset.m_isadmin = m_bIsAdmin; m_recordset.Update();

MessageBox(\"用户修改成功!请记住用户名和密码!\"); m_recordset.Close(); }

m_ctrUser.EnableWindow(FALSE); RefreshData(); }

代码四(系别设置初始化的实现)

BOOL CDepartmentDlg::OnInitDialog()//对话框的一些初始化操作 { CDialog::OnInitDialog();//设置数据列表

m_ctrList.InsertColumn(0,\"系别代码\"); m_ctrList.InsertColumn(1,\"系名\"); m_ctrList.InsertColumn(2,\"说明\"); m_ctrList.SetColumnWidth(0,60); m_ctrList.SetColumnWidth(1,160); m_ctrList.SetColumnWidth(2,240);

m_ctrList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);//设置按钮状态 m_bntSave.EnableWindow(FALSE); m_bntNew.EnableWindow(FALSE); m_bntDelete.EnableWindow(FALSE);

40

学生信息管理系统设计与实现 m_bntModify.EnableWindow(FALSE);//显示数据 RefreshData();

return TRUE; // return TRUE unless you set the focus to a control// EXCEPTION: OCX Property Pages should return FALSE }

代码五(添加新系别信息) //添加按钮选择是的操作

void CDepartmentDlg::OnButtonNew() { //清空编辑框

m_strName = \"\"; m_strCode = \"\";

m_strInfo = \"\";//设置按钮状态 m_bntSave.EnableWindow(); m_bntNew.EnableWindow(FALSE); m_bntDelete.EnableWindow(FALSE); m_bntModify.EnableWindow(FALSE); UpdateData(FALSE); }

void CDepartmentDlg::OnButtonSave()//保存数据时的操作 {

UpdateData();// 检查数据的合法性 if(m_strName==\"\")

{ AfxMessageBox(\"请输入系名!\"); return; }

if(m_strCode==\"\")

{ AfxMessageBox(\"请输入系别代码!\"); return;

}//检查是否有重复记录 CString strSQL;

strSQL.Format(\"select * from department where code='%s'\ if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) { MessageBox(\"打开数据库失败!\数据库错误\ return ; }

if( m_recordset.GetRecordCount()!=0)

{ AfxMessageBox(\"当前编码已经存在!请重新输入!\"); m_strCode = \"\"; UpdateData(FALSE); m_recordset.Close(); return;

}//添加数据到数据库中 m_recordset.AddNew();

41

学生信息管理系统设计与实现 m_recordset.m_name = m_strName ; m_recordset.m_code = m_strCode ; m_recordset.m_brief = m_strInfo ; m_recordset.Update();

m_recordset.Close();//更新界面显示 RefreshData();

代码六(修改系别设置信息) //当用户选择列表中记录时的处理

void CDepartmentDlg::OnButtonModify()//将修改的数据保存到数据库中 {

UpdateData();//判断用户是否选择记录 int i = m_ctrList.GetSelectionMark(); if(0>i)

{ MessageBox(\"请选择一条记录进行修改!\"); return;

}//检查数据的合法性 if(m_strName==\"\")

{ AfxMessageBox(\"请输入系名!\"); return; }

if(m_strCode==\"\")

{ AfxMessageBox(\"请输入系别代码!\"); return; }

CString strSQL;//打开记录集 strSQL.Format(\"select * from department where \

if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) { MessageBox(\"打开数据库失败!\数据库错误\ return ; }//修改这条记录 m_recordset.Edit();

m_recordset.m_name = m_strName ; m_recordset.m_code = m_strCode ; m_recordset.m_brief = m_strInfo ; m_recordset.Update();

m_recordset.Close();//更新界面显示 RefreshData(); }

代码七(系别信息的删除)

void CDepartmentDlg::OnButtonDelete() { // 判断用户是否选择记录

int i = m_ctrList.GetSelectionMark();

42

code= '%s'

学生信息管理系统设计与实现 if(0>i)

{ MessageBox(\"请选择一条记录进行删除!\"); return; }//打开记录集 CString strSQL;

strSQL.Format(\"select * from department where \

if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) { MessageBox(\"打开数据库失败!\数据库错误\ return ; }

m_recordset.Delete();//删除该记录 m_recordset.Close();

RefreshData();//更新用户界面 m_strName = \"\"; m_strCode = \"\"; m_strInfo = \"\";

UpdateData(FALSE); }

代码八(添加新专业信息)

void CMajorDlg::OnButtonNew() //添加按钮选择时的操作 { // 清空编辑框

m_strName = \"\"; m_strCode = \"\"; m_strDepartment = \"\"; m_strInfo = \"\";

m_bntSave.EnableWindow(); m_bntNew.EnableWindow(FALSE); m_bntDelete.EnableWindow(FALSE); m_bntModify.EnableWindow(FALSE); UpdateData(FALSE); }

void CMajorDlg::OnButtonSave() //保存数据时的操作

{ // TODO: Add your control notification handler code here UpdateData();//检查数据的合法性 if(m_strName==\"\")

{ AfxMessageBox(\"请输入专业名称!\"); return; }

if(m_strCode==\"\")

{ AfxMessageBox(\"请输入专业代码!\"); return; }

43

code= '%s'

学生信息管理系统设计与实现 if(m_strDepartment==\"\")

{ AfxMessageBox(\"请输入所属系别!\"); return; }

CString strSQL;

strSQL.Format(\"select * from major where code='%s'\ if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) { MessageBox(\"打开数据库失败!\数据库错误\ return ; }

if( m_recordset.GetRecordCount()!=0) //检查是否有重复的记录 {

AfxMessageBox(\"当前编码已经存在!请重新输入!\"); m_strCode = \"\"; UpdateData(FALSE); m_recordset.Close(); return; }

m_recordset.AddNew();//添加数据到数据库中

m_recordset.m_name = m_strName ; m_recordset.m_code = m_strCode ; m_recordset.m_department= m_strDepartment ; m_recordset.m_brief = m_strInfo ; m_recordset.Update(); m_recordset.Close(); RefreshData(); }

代码九(修改专业设置信息)

void CMajorDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) {// TODO: Add your control notification handler code here CString strSQL; UpdateData(TRUE);

int i = m_ctrList.GetSelectionMark();

strSQL.Format(\"select * from major where code='%s'\if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) { MessageBox(\"打开数据库失败!\数据库错误\ return ; }

m_strName = m_recordset.m_name; m_strCode = m_recordset.m_code;

m_strDepartment = m_recordset.m_department; m_strInfo = m_recordset.m_brief; m_recordset.Close();

44

学生信息管理系统设计与实现 UpdateData(FALSE);

m_bntSave.EnableWindow(FALSE); m_bntNew.EnableWindow(); m_bntDelete.EnableWindow();

m_bntModify.EnableWindow(); *pResult = 0; }

void CMajorDlg::OnButtonModify()

{ // TODO: Add your control notification handler code here UpdateData();

int i = m_ctrList.GetSelectionMark(); if(0>i)

{ MessageBox(\"请选择一条记录进行修改!\"); return; }

if(m_strName==\"\")

{ AfxMessageBox(\"请输入专业名称!\"); return; }

if(m_strCode==\"\")

{ AfxMessageBox(\"请输入专业代码!\"); return; }

if(m_strDepartment==\"\")

{ AfxMessageBox(\"请输入所属系别!\"); return; }

CString strSQL;

strSQL.Format(\"select * from major where code= '%s' \ if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) { MessageBox(\"打开数据库失败!\数据库错误\ return ; }

m_recordset.Edit();

m_recordset.m_name = m_strName ; m_recordset.m_code = m_strCode ; m_recordset.m_department= m_strDepartment ; m_recordset.m_brief = m_strInfo ; m_recordset.Update(); m_recordset.Close(); RefreshData(); } 代码十(专业信息的删除)

void CMajorDlg::OnButtonDelete()

45

学生信息管理系统设计与实现 { // 判断用户是否选择记录

int i = m_ctrList.GetSelectionMark(); if(0>i)

{ MessageBox(\"请选择一条记录进行删除!\"); return; }

CString strSQL; //打开记录集

strSQL.Format(\"select * from major where code= '%s' \ if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) { MessageBox(\"打开数据库失败!\数据库错误\ return ; }

m_recordset.Delete();//删除该记录 m_recordset.Close();//更新用户界面 RefreshData(); m_strName = \"\"; m_strCode = \"\"; m_strDepartment = \"\"; m_strInfo = \"\";

UpdateData(FALSE); }

代码十一(学生管理对话框初始化)。

BOOL CStudentDlg::OnInitDialog() {

CDialog::OnInitDialog();

CDepartmentSet DeptSet ; CString strSQL;

strSQL=\"select * from department\";

if(!DeptSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) {

MessageBox(\"打开数据库失败!\数据库错误\

}

while(!DeptSet.IsEOF()) {

m_ctrDepartment.AddString(DeptSet.m_name); DeptSet.MoveNext(); }

DeptSet.Close();

46

学生信息管理系统设计与实现

m_ctrList.InsertColumn(0,\"学号\"); m_ctrList.InsertColumn(1,\"姓名\"); m_ctrList.InsertColumn(2,\"曾用名\"); m_ctrList.InsertColumn(3,\"性别\"); m_ctrList.InsertColumn(4,\"出生年月\"); m_ctrList.InsertColumn(5,\"民族\"); m_ctrList.InsertColumn(6,\"政治面貌\"); m_ctrList.InsertColumn(7,\"籍贯\"); m_ctrList.InsertColumn(8,\"家庭出身\"); m_ctrList.InsertColumn(9,\"联系电话\"); m_ctrList.InsertColumn(10,\"邮政编码\"); m_ctrList.InsertColumn(11,\"家庭地址\"); m_ctrList.InsertColumn(12,\"身份证号\"); m_ctrList.InsertColumn(13,\"入学时间\"); m_ctrList.InsertColumn(14,\"毕业时间\"); m_ctrList.InsertColumn(15,\"班级\"); m_ctrList.InsertColumn(16,\"所在院系\"); m_ctrList.InsertColumn(17,\"专业\");

m_ctrList.SetColumnWidth(0,60); m_ctrList.SetColumnWidth(1,80); m_ctrList.SetColumnWidth(2,0); m_ctrList.SetColumnWidth(3,50); m_ctrList.SetColumnWidth(4,60); m_ctrList.SetColumnWidth(5,0); m_ctrList.SetColumnWidth(6,0); m_ctrList.SetColumnWidth(7,0); m_ctrList.SetColumnWidth(8,0); m_ctrList.SetColumnWidth(9,0); m_ctrList.SetColumnWidth(10,0); m_ctrList.SetColumnWidth(11,60); m_ctrList.SetColumnWidth(12,0); m_ctrList.SetColumnWidth(13,100); m_ctrList.SetColumnWidth(14,0); m_ctrList.SetColumnWidth(15,80); m_ctrList.SetColumnWidth(16,120); m_ctrList.SetColumnWidth(17,100);

m_ctrList.SetExtendedStyle(LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);

return TRUE; // return TRUE unless you set the focus to a control

47

学生信息管理系统设计与实现 // EXCEPTION: OCX Property Pages should return FALSE }

代码十二(添加新学生信息) void CStudentDlg::OnButtonNew() { // TODO: Add your control notification handler code here CStudentInfoDlg Dlg; if(IDOK==Dlg.DoModal()) {//添加新记录 if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE)) { AfxMessageBox(\"打开数据库失败!\"); return ; } m_recordset.AddNew(); m_recordset.m_class =Dlg.m_strClass m_recordset.m_department =Dlg.m_strDept ; m_recordset.m_sex =Dlg.m_strSex ; m_recordset.m_major =Dlg.m_strMajor m_recordset.m_birthday =Dlg.m_tmBirth ; m_recordset.m_enroll_date =Dlg.m_tmEnroll ; m_recordset.m_graduate_date =Dlg.m_tmGraduate m_recordset.m_address =Dlg.m_strAddress ; m_recordset.m_family_dept1 =Dlg.m_strDept1 ; m_recordset.m_family_dept2 =Dlg.m_strDept2 ; m_recordset.m_family_dept3 =Dlg.m_strDept3 ; m_recordset.m_family_duty1 =Dlg.m_strDuty1 ; m_recordset.m_family_duty2 =Dlg.m_strDuty2 ; m_recordset.m_family_dept3 =Dlg.m_strDuty3 ; m_recordset.m_edu_sys =Dlg.m_strEdusys ; m_recordset.m_family =Dlg.m_strFamily ; m_recordset.m_folk =Dlg.m_strFolk m_recordset.m_IDCard =Dlg.m_strIDCard ; m_recordset.m_family_name1 =Dlg.m_strName1 m_recordset.m_family_name2 =Dlg.m_strName2 m_recordset.m_family_name3 =Dlg.m_strName3 m_recordset.m_native =Dlg.m_strNative ; m_recordset.m_oldname =Dlg.m_strOldName ; m_recordset.m_phone =Dlg.m_strPhone m_recordset.m_honor_digiest1 =Dlg.m_strDegist1 ; m_recordset.m_honor_digiest2 =Dlg.m_strDegist2 ; m_recordset.m_honor_digiest3 =Dlg.m_strDegist3 ;

48

; ; ; ; ; ; ; ; 学生信息管理系统设计与实现 m_recordset.m_honor_digiest4 =Dlg.m_strDegist4 ;

m_recordset.m_honor_digiest5 =Dlg.m_strDegist5 ; m_recordset.m_honor_digiest6 =Dlg.m_strDegist6 ; m_recordset.m_honor_date1 =Dlg.m_strHonorDate1 ; m_recordset.m_honor_date2 =Dlg.m_strHonorDate2 ; m_recordset.m_honor_date3 =Dlg.m_strHonorDate3 ; m_recordset.m_honor_date4 =Dlg.m_strHonorDate4 ; m_recordset.m_honor_date5 =Dlg.m_strHonorDate5 ; m_recordset.m_honor_date6 =Dlg.m_strHonorDate6 ; m_recordset.m_family_phone1 =Dlg.m_strPhone1 m_recordset.m_family_phone2 =Dlg.m_strPhone2 m_recordset.m_family_phone3 =Dlg.m_strPhone3 m_recordset.m_political =Dlg.m_strPolitical ; m_recordset.m_family_political1 =Dlg.m_strPolitical1 ; m_recordset.m_family_political2 =Dlg.m_strPolitical3 ; m_recordset.m_family_political3 =Dlg.m_strPolitical2 ; m_recordset.m_postcode =Dlg.m_strPostCode m_recordset.m_family_relation1 =Dlg.m_strRelation1 ; m_recordset.m_family_relation2 =Dlg.m_strRelation2 ; m_recordset.m_family_relation3 =Dlg.m_strRelation3 ; m_recordset.m_honor_remark1 =Dlg.m_strRemark1 m_recordset.m_honor_remark2 =Dlg.m_strRemark2 m_recordset.m_honor_remark3 =Dlg.m_strRemark3 m_recordset.m_honor_remark4 =Dlg.m_strRemark4 m_recordset.m_honor_remark5 =Dlg.m_strRemark5 m_recordset.m_honor_remark6 =Dlg.m_strRemark6 m_recordset.m_term1 =Dlg.m_strScore1 m_recordset.m_term10 =Dlg.m_strScore10 ; m_recordset.m_term2 =Dlg.m_strScore2 m_recordset.m_term3 =Dlg.m_strScore3 m_recordset.m_term4 =Dlg.m_strScore4 m_recordset.m_term5 =Dlg.m_strScore5 m_recordset.m_term6 =Dlg.m_strScore6 m_recordset.m_term7 =Dlg.m_strScore7 m_recordset.m_term8 =Dlg.m_strScore8 m_recordset.m_term9 =Dlg.m_strScore9 m_recordset.m_code =Dlg.m_strCode m_recordset.m_name =Dlg.m_strName

m_recordset.Update(); m_recordset.Close();

CString strSQL = \"select * from student \"; RefreshData(strSQL);

49

;

; ;

;

; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ; ;

学生信息管理系统设计与实现 } }

代码十三(修改学生信息)

void CStudentDlg::OnButtonModify() { // TODO: Add your control notification handler code here CStudentInfoDlg Dlg; UpdateData(); int i = m_ctrList.GetSelectionMark(); if(0>i) { AfxMessageBox(\"请选择一条记录进行修改!\"); return; } Dlg.m_strCode=m_ctrList.GetItemText(i,0); if(IDOK==Dlg.DoModal()) {//修改记录 CString strSQL; strSQL.Format(\"select * from student where code = '%s'\ if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) { AfxMessageBox(\"打开数据库失败!\"); return ; } m_recordset.Edit(); m_recordset.m_class =Dlg.m_strClass ; m_recordset.m_department =Dlg.m_strDept ; m_recordset.m_sex =Dlg.m_strSex ; m_recordset.m_major =Dlg.m_strMajor ; m_recordset.m_birthday =Dlg.m_tmBirth ; m_recordset.m_enroll_date =Dlg.m_tmEnroll ; m_recordset.m_graduate_date =Dlg.m_tmGraduate ; m_recordset.m_address =Dlg.m_strAddress ; m_recordset.m_family_dept1 =Dlg.m_strDept1 ; m_recordset.m_family_dept2 =Dlg.m_strDept2 ; m_recordset.m_family_dept3 =Dlg.m_strDept3 ; m_recordset.m_family_duty1 =Dlg.m_strDuty1 ; m_recordset.m_family_duty2 =Dlg.m_strDuty2 ; m_recordset.m_family_dept3 =Dlg.m_strDuty3 ; m_recordset.m_edu_sys =Dlg.m_strEdusys ; m_recordset.m_family =Dlg.m_strFamily ; m_recordset.m_folk =Dlg.m_strFolk ;

50

学生信息管理系统设计与实现 m_recordset.m_IDCard =Dlg.m_strIDCard ;

m_recordset.m_family_name1 =Dlg.m_strName1 m_recordset.m_family_name2 =Dlg.m_strName2 m_recordset.m_family_name3 =Dlg.m_strName3 m_recordset.m_native =Dlg.m_strNative ; m_recordset.m_oldname =Dlg.m_strOldName ; m_recordset.m_phone =Dlg.m_strPhone m_recordset.m_honor_digiest1 =Dlg.m_strDegist1 ; m_recordset.m_honor_digiest2 =Dlg.m_strDegist2 ; m_recordset.m_honor_digiest3 =Dlg.m_strDegist3 ; m_recordset.m_honor_digiest4 =Dlg.m_strDegist4 ; m_recordset.m_honor_digiest5 =Dlg.m_strDegist5 ; m_recordset.m_honor_digiest6 =Dlg.m_strDegist6 ; m_recordset.m_honor_date1 =Dlg.m_strHonorDate1 ; m_recordset.m_honor_date2 =Dlg.m_strHonorDate2 ; m_recordset.m_honor_date3 =Dlg.m_strHonorDate3 ; m_recordset.m_honor_date4 =Dlg.m_strHonorDate4 ; m_recordset.m_honor_date5 =Dlg.m_strHonorDate5 ; m_recordset.m_honor_date6 =Dlg.m_strHonorDate6 ; m_recordset.m_family_phone1 =Dlg.m_strPhone1 ; m_recordset.m_family_phone2 =Dlg.m_strPhone2 ; m_recordset.m_family_phone3 =Dlg.m_strPhone3 ; m_recordset.m_political =Dlg.m_strPolitical ; m_recordset.m_family_political1 =Dlg.m_strPolitical1 ; m_recordset.m_family_political2 =Dlg.m_strPolitical3 ; m_recordset.m_family_political3 =Dlg.m_strPolitical2 ; m_recordset.m_postcode =Dlg.m_strPostCode m_recordset.m_family_relation1 =Dlg.m_strRelation1 ; m_recordset.m_family_relation2 =Dlg.m_strRelation2 ; m_recordset.m_family_relation3 =Dlg.m_strRelation3 ; m_recordset.m_honor_remark1 =Dlg.m_strRemark1 m_recordset.m_honor_remark2 =Dlg.m_strRemark2 m_recordset.m_honor_remark3 =Dlg.m_strRemark3 m_recordset.m_honor_remark4 =Dlg.m_strRemark4 m_recordset.m_honor_remark5 =Dlg.m_strRemark5 m_recordset.m_honor_remark6 =Dlg.m_strRemark6 m_recordset.m_term1 =Dlg.m_strScore1 ; m_recordset.m_term10 =Dlg.m_strScore10 ; m_recordset.m_term2 =Dlg.m_strScore2 m_recordset.m_term3 =Dlg.m_strScore3 m_recordset.m_term4 =Dlg.m_strScore4 m_recordset.m_term5 =Dlg.m_strScore5 m_recordset.m_term6 =Dlg.m_strScore6

51

;

; ;

;

;

; ; ; ; ; ;

; ; ; ; ;

学生信息管理系统设计与实现 m_recordset.m_term7 =Dlg.m_strScore7 ; m_recordset.m_term8 =Dlg.m_strScore8 ; m_recordset.m_term9 =Dlg.m_strScore9 ; m_recordset.m_code =Dlg.m_strCode ; m_recordset.m_name =Dlg.m_strName ; m_recordset.Update(); m_recordset.Close(); strSQL = \"select * from student \"; RefreshData(strSQL); } }

代码十四(学生信息的删除)

void CStudentDlg::OnButtonDelete() { // TODO: Add your control notification handler code here int i = m_ctrList.GetSelectionMark(); if(0>i) { AfxMessageBox(\"请选择一条记录进行查看!\"); return; } CString strSQL; strSQL.Format(\"select * from student where code = '%s'\ if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) { AfxMessageBox(\"打开数据库失败!\"); return ; } m_recordset.Delete(); m_recordset.Close(); strSQL = \"select * from student\"; RefreshData(strSQL); }

代码十五(创建并显示学生成绩单) //用户点击录入成绩按钮时的处理

void CScoreInputDlg::OnButtonInput() {

UpdateData();

if(m_strClass.IsEmpty())//非空检查 { AfxMessageBox(\"请选择班级\");

52

学生信息管理系统设计与实现

return; }

if(m_strTime.IsEmpty())

{ AfxMessageBox(\"请选择考试时间段\"); return; }

if(m_strType.IsEmpty())

{ AfxMessageBox(\"请选择考试类型\"); return; }

if(m_strSubject.IsEmpty())

{ AfxMessageBox(\"请选择考试科目\"); return; }

CString strSQL;

strSQL.Format(\"select * from score \\ where class = '%s' and time = '%s' \\ and type = '%s' and subject = '%s'\"

,m_strClass,m_strTime,m_strType,m_strSubject); if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) //打开记录集,获取学生名单

{ MessageBox(\"打开数据库失败!\数据库错误\ return ; }

if(m_recordset.GetRecordCount()==0) { m_recordset.Close(); CreateScoreTable(); } else

{ m_recordset.Close();}

RefreshData(strSQL); //显示学生成绩单

}

void CScoreInputDlg::CreateScoreTable() {

CString strSQL;

CStudentSet StudentSet; //构造学生信息表记录集

strSQL.Format(\"select * from student where class = '%s'\ if(!StudentSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) { MessageBox(\"打开数据库失败!\数据库错误\ return ; }

if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE))

{ MessageBox(\"打开数据库失败!\数据库错误\

53

学生信息管理系统设计与实现 return ; }

while(!StudentSet.IsEOF()) { m_recordset.AddNew();

m_recordset.m_code = StudentSet.m_code; m_recordset.m_class = m_strClass;

m_recordset.m_name = StudentSet.m_name; m_recordset.m_subject = m_strSubject; m_recordset.m_time = m_strTime; m_recordset.m_type = m_strType; m_recordset.Update(); StudentSet.MoveNext(); }

m_recordset.Close(); StudentSet.Close(); }

void CScoreInputDlg::RefreshData(CString strSQL) {

m_ctrList.DeleteAllItems(); m_ctrList.SetRedraw(FALSE); UpdateData(TRUE);

if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) { MessageBox(\"打开数据库失败!\数据库错误\ return ; } int i=0;

char buffer[20];

while(!m_recordset.IsEOF())

{ _ltoa(m_recordset.m_ID,buffer,10); m_ctrList.InsertItem(i,buffer);

m_ctrList.SetItemText(i,1,m_recordset.m_code); m_ctrList.SetItemText(i,2,m_recordset.m_name); m_ctrList.SetItemText(i,3,m_recordset.m_subject); _ltoa(m_recordset.m_score,buffer,10); m_ctrList.SetItemText(i,4,buffer);

_ltoa(m_recordset.m_makeup_score,buffer,10); m_ctrList.SetItemText(i,5,buffer);

m_ctrList.SetItemText(i,6,m_recordset.m_absent); i++;

m_recordset.MoveNext(); }

m_recordset.Close();

m_ctrList.SetRedraw(TRUE);

54

学生信息管理系统设计与实现 }

代码十六(录入学生成绩)

void CScoreInputDlg::OnDblclkList2(NMHDR* pNMHDR, LRESULT* pResult) {

CString strSQL; //保存学生成绩和报考成绩 long score=0,makeup=0;

CScoreDlg Dlg; //创建成绩录入对话框 UpdateData(TRUE);

int i = m_ctrList.GetSelectionMark(); if(i<0) return;

if(IDOK!=Dlg.DoModal()) {

return; }

if(!Dlg.m_strScore.IsEmpty()) score = atol(Dlg.m_strScore); if(!Dlg.m_strMakeup.IsEmpty())

makeup = atol(Dlg.m_strMakeup);

strSQL.Format(\"select * from score where ID=%s\ if(!m_recordset.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) {

MessageBox(\"打开数据库失败!\数据库错误\ return ; }

m_recordset.Edit(); if(Dlg.m_bAbsent)

m_recordset.m_absent = \"是\"; m_recordset.m_score = score;

m_recordset.m_makeup_score = makeup; m_recordset.Update(); char buffer[20];

_ltoa(m_recordset.m_score,buffer,10); m_ctrList.SetItemText(i,4,buffer);

_ltoa(m_recordset.m_makeup_score,buffer,10); m_ctrList.SetItemText(i,5,buffer);

m_ctrList.SetItemText(i,6,m_recordset.m_absent); m_recordset.Close(); *pResult = 0; }

代码十七(学生成绩查询)

void CScoreQueryDlg::OnButtonList() {

UpdateData();//检查用户是否选择班级

55

学生信息管理系统设计与实现 if(m_strClass.IsEmpty()) {

AfxMessageBox(\"请选择班级!\"); return; }

CString strSQL;

m_ctrStuList.DeleteAllItems();//清空学生列表 m_ctrStuList.SetRedraw(FALSE); UpdateData(TRUE);

strSQL.Format(\"select * from student where class = '%s'\ if(!m_studentSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) {

MessageBox(\"打开数据库失败!\数据库错误\ return ;

}//打开记录集获取学生名单 int i=0;

while(!m_studentSet.IsEOF()) {

m_ctrStuList.InsertItem(i,m_studentSet.m_code); m_ctrStuList.SetItemText(i,1,m_studentSet.m_name); i++;

m_studentSet.MoveNext(); }//循环显示学生名单 m_studentSet.Close();

m_ctrStuList.SetRedraw(TRUE); }

代码十八(显示学生成绩单) //单击学生列表的处理

void CScoreQueryDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult) {

CString strSQL; UpdateData(TRUE);

//获取用户选择学生的记录号

int i = m_ctrStuList.GetSelectionMark(); strSQL.Format(\"select * from score code='%s'\显示学生成绩单 RefreshData(strSQL); *pResult = 0; }

void CScoreQueryDlg::RefreshData(CString strSQL) { //清空列表

m_ctrScoreList.DeleteAllItems(); m_ctrScoreList.SetRedraw(FALSE);

56

where

学生信息管理系统设计与实现 UpdateData(TRUE);

if(!m_scoreSet.Open(AFX_DB_USE_DEFAULT_TYPE,strSQL)) { MessageBox(\"打开数据库失败!\数据库错误\ return ; } int i=0;

char buffer[20];

while(!m_scoreSet.IsEOF()) {

_ltoa(m_scoreSet.m_ID,buffer,10);

m_ctrScoreList.InsertItem(i,m_scoreSet.m_time);

m_ctrScoreList.SetItemText(i,1,m_scoreSet.m_subject); m_ctrScoreList.SetItemText(i,2,m_scoreSet.m_type); _ltoa(m_scoreSet.m_score,buffer,10); m_ctrScoreList.SetItemText(i,3,buffer); _ltoa(m_scoreSet.m_makeup_score,buffer,10); m_ctrScoreList.SetItemText(i,4,buffer); i++;

m_scoreSet.MoveNext();} m_scoreSet.Close();

m_ctrScoreList.SetRedraw(TRUE); }

代码十九(直接查询学生成绩)

void CScoreQueryDlg::OnButtonSearch() {

UpdateData(TRUE);//检查是否输入学生姓名 if(m_strName.IsEmpty())

{ AfxMessageBox(\"请输入学生姓名!\"); return; }

CString strSQL;

strSQL.Format(\"select * from score where name like '%s'\查询并显示学生成绩单

RefreshData(strSQL); }

代码二十(数据备份的实现)

void CMainFrame::OnDatabaseBackup() {

// TODO: Add your command handler code here

if(AfxMessageBox(\"您确定要备份数据库吗?\ {

return; }

57

学生信息管理系统设计与实现 if(CopyFile(\".\\\\school.mdb\ AfxMessageBox(\"数据库备份成功!\"); else

AfxMessageBox(\"数据库备份失败!\"); }

代码二十一(数据库恢复的实现)

void CMainFrame::OnDatabaseRecover()

{ if(AfxMessageBox(\"还原数据库将覆盖原来的数据库。您确定要还原吗?\ { return; }

if(CopyFile(\".\\\\backup\\\\school.bak\ AfxMessageBox(\"数据库还原成功!\"); else

AfxMessageBox(\"数据库还原失败!\"); }

58

因篇幅问题不能全部显示,请点此查看更多更全内容

Top