数据库课程设计报告-学生学籍管理信息系统

 

1.概述

1.1 项目背景

随着我国教育体制改革的深入进行,教育系统得到了前所未有的发展。学生管理正在逐步迈向管理信息现代化。但是我国的学生管理信息化水平还处在初级阶段,主要表现在对学生的学籍信息管理还是采用原有的人工管理方式。学校的规模不断扩大,学生数量急剧增加,有关学生的各种信息量也成倍增长。由于大学生类别和专业的设置的多样化,大学生的学籍管理历来是非常繁琐和复杂的的工作。面对庞大的信息量, 这时的人工管理几乎无法实现,在这种情况下用数据库进行管理变的尤为必要,这可以发挥计算机的优势来提高学生管理工作的效率。通过这样的系统,可以做到信息的规范管理,科学统计和快速的查询,从而减少管理方面的工作量和人为错误。

 

1.2 编写目的

学生学籍管理系统是应对学生人数增多、信息量增大的问题,实现管理的现代化、化,逐步摆脱当前学生成绩管理的人工管理方式,提高成绩管理效率而开发的。望该开发程序能够解决学生信息存储、学生各种信息查询等一系列功能。

 

1.3 软件定义

学生信息管理系统是针对学校人事处的大量业务处理工作而开发的管理软件,主要用于学校学生信息管理,总体任务是实现学生信息关系的系统化、科学化、规范化和自动化,其主要任务是用计算机对学生各种信息进行日常管理,如查询、修改、增加、删除,另外还考虑到学生选课,针对这些要求设计了学生信息管理系统。

 

1.4 开发环境

开发环境:Windows XP、VC6.0

辅助工具:PowerDesigner 15

数据库管理系统:SQL Server 2000

运行环境:Windows 2000/XP/2003

 

2.需求分析

2.1 问题陈述

进行数据库设计首先必须准确了解用户需求,目的是为学籍管理数据库系统的设计打下牢牢的基础,是数据库开发的重要文件依据,主要为数据库设计人员使用,是用户和系统分析员的项目依据文件。需求分析是否做得充分与准确,它决定了在其上构建数据库大厦的速度和质量。

 

2.2 系统主要功能

(1)学生档案的管理,即录入、修改、查询、输出学生档案信息,这些信息包括学生基本情况、学生简历情况、学生奖励情况、学生处分情况、学生家庭信息、学生体检情况。

(2)学生学籍管理,录入、修改、查询、输出学生学籍信息,这些信息包括学生奖贷学金情况、学生注册、学生异动情况、学生军训情况、学生毕业情况。

(3)学生成绩管理,录入修改、查询、输出学生入校成绩,各学期、各门课程的成绩信息,并支持按年级、班级等条件的统计、查询、报表输出。

 

简要分析:

 (1)学生简历情况和学生基本情况可以合为一张学生信息表

 (2)学生奖励情况和处分情况可以合为一张表,增加一项用于表示“奖励”或“处罚”

 (3)学生军训情况可以作为一门课程,放入课程表中,无需单独设一张表

 (4)学生毕业信息可以在学生表中增加一项简单表示,无需单设一张表

 经过分析,为了表示要求的信息,本学生学籍信息管理系统可以抽象出8个主要实体:学生、奖励或处罚、家庭、体检、贷款、注册、异动、课程。

 

3. 数据库概念结构设计

 

3.1 系统E-R图

数据库课程设计报告-学生学籍管理信息系统_第1张图片

 

下面是用PowerDesingner 15 设计出的系统CDM图,既概念模型图:

数据库课程设计报告-学生学籍管理信息系统_第2张图片

 

下面是用PowerDesingner 15 从CDM图直接导出的PDM图,即物理结构图:

 数据库课程设计报告-学生学籍管理信息系统_第3张图片

 

4. 数据库逻辑结构设计

 

逻辑结构设计就是把概念结构设计阶段设计好的基本E-R图转换为与选用DBMS产品所支持的数据模型相符合的逻辑结构。

4.1 关系表

通过上一步画出的E-R图即可得到对应的关系表,我们采用PowerDesigner直接得出对应的PDM图,双击PDM图中某个实体,在Preview中可以得到对应的Sql语句,在Sql Server 2000中打开查询分析器即可用相应的Sql语句即可得到初步的关系表。

 

学生基本信息表(Student)

序号

字段

描述

数据类型

数据长度

1

StuNo

学号

char

20

Y

2

StuName

姓名

char

20

N

3

StuSex

性别

char

2

N

4

StuBirthTime

出生日期

Date

 

N

5

StuProvince

籍贯

char

10

N

6

StuNation

民族

char

10

N

7

StuFace

政治面貌

char

20

N

8

StuFromWhere

来源地区

char

30

N

9

StuBirthPlace

出生地

char

30

N

10

StuCollege

学院

char

20

N

11

StuMajor

专业

char

30

N

12

StuClass

行政班级

char

30

N

13

StuStudyTime

学制

Short int

2

N

14

StuSchoolTime

入学时间

Date

8

N

15

StuCurrentClass

当前年级

int

4

N

16

StuDormitory

宿舍

char

20

N

17

StuEMail

邮件地址

char

30

N

18

StuPhone

联系电话

char

20

N

19

StuPost

邮编

char

10

N

20

StuID

身份证号

char

25

N

21

StuIsGraduate

是否毕业

char

2

N

22

StuGraduateDate

毕业日期

Date

8

N

 

学生注册信息表(StuRegister)

序号

字段

描述

数据类型

数据长度

1

StuRegisterID

注册编号

char

20

Y

2

StuNo

学号

char

20

N

3

StuRegisterYear

注册学年

char

10

N

4

StuRegisterTerm

注册学期

char

1

N

5

StuIsRegister

是否注册

char

2

N

 

学生异动信息表(StuChange)

序号

字段

描述

数据类型

数据长度

1

StuChangeID

异动编号

char

10

Y

2

StuNo

学号

char

20

N

3

StuChangeKind

异动类型

char

10

N

4

StuChangeDate

异动时间

Date

 

N

5

StuChangeDetail

异动描述

char

60

N

 

学生贷款信息表(StuLoan)

序号

字段

描述

数据类型

数据长度

1

StuLoanID

贷款编号

char

20

Y

2

StuNo

学号

char

20

N

3

StuLoanDate

贷款日期

Date

 

N

4

StuLoanR

贷款原因

char

60

N

5

StuLoanNum

贷款数目

int

 

N

6

StuLoanBackNum

已还数目

int

 

 

7

StuLoanIsBack

是否还清

char

2

 

 

学生奖励或处罚信息表(StuRewardPunish)

序号

字段

描述

数据类型

数据长度

1

StuLoanID

奖励或处罚编号

char

20

Y

2

StuNo

学号

char

20

N

3

StuNo

奖励或处罚类型

char

30

N

4

StuLoanDate

奖励或处罚日期

Date

 

N

5

StuLoanR

奖励或处罚原因

char

60

N

6

StuLoanNum

奖励或处罚标记

char

4

N

 

学生课程信息表(StuCourse)

序号

字段

描述

数据类型

数据长度

1

StuCourseNo

课程编号

char

20

Y

2

StuNo

学号

char

20

Y

3

StuCourseYear

开课学年

char

10

N

4

StuCourseTerm

开课学期

char

1

N

5

StuCourseName

课程名

char

40

N

6

StuCourseScore

课程分数

int

 

N

7

StuCourseCredit

课程学分

float

 

N

8

StuCourseJiDian

课程绩点

float

 

N

9

StuCourseKind

课程性质

char

10

N

10

StuReStudyFlag

重修标记

char

2

N

11

StuReStudyScore

重修成绩

Int

 

N

12

StuReTestFlag

补考标记

char

2

N

13

StuReTestScore

补考成绩

int

 

N

14

StuCourseGS

课程归属

char

30

N

15

StuFXFlag

辅修标记

char

2

N

 

学生家庭信息表(StuFamily)

序号

字段

描述

数据类型

数据长度

1

StuFamilyID

家庭编号

char

20

Y

2

StuNo

学号

char

20

N

3

StuFamilyAddress

家庭地址

char

40

N

4

StuFatherName

父亲姓名

char

20

N

5

StuFatherWP

父亲工作单位

char

40

N

6

StuFatherWPPost

父亲单位邮编

char

10

N

7

StuFatherPhone

父亲电话

char

20

N

8

StuMotherName

母亲姓名

char

20

N

9

StuMotherWP

母亲工作单位

char

40

N

10

StuMotherWPPost

母亲单位邮编

char

10

N

11

StuMotherPhone

母亲电话

char

20

N

 

学生体检信息表(StudentHealthCheck)

序号

字段

描述

数据类型

数据长度

1

StuCheckID

体检编号

char

20

Y

2

StuNo

学号

char

20

N

3

StuCheckYear

体检学年

char

10

N

4

StuCheckTerm

体检学期

char

1

N

5

StuHeight

身高

int

 

N

6

StuWeight

体重

float

 

N

7

StuEye

视力

float

 

N

8

StuLungC

肺活量

int

 

N

9

StuBloodP

血压

int

 

N

10

StuLiver

肝功能

char

20

N

11

StuBlood

血常规

char

40

N

12

StuHeartLung

心肺功能

char

20

N

13

StuDiseaseItem

异常项目

char

40

N

14

CheckConclusion

体检结果

char

40

N

 

4.2 定义视图

 

   在设计表时,考虑到数据冗余,本系统只保留“学号”作为表间的连接。为了方便用户使用,可以把这些详细的信息用视图来表示,并且不会产生冗余,从而方便了用户的查询;由于本系统信息对管理员和学生都不是什么保密信息,所以无需考虑系统安全性而为不同级别用户再定义相应的视图;此外,为了符合用户习惯,我们在视图中使用中文别名。

 

(1)学生基本信息视图:

USE Student

GO

CREATE VIEW StudentInfo

AS

  SELECT  StuNo 学号,StuName  姓名,StuSex  性别,StuBirthTime 出生日期,

          StuProvince  籍贯,StuNation 民族,StuFace 政治面貌,

          StuFromWhere 来源地区,StuBirthPlace 出生地,StuCollege 学院,

          StuMajor 专业,StuClass 行政班级,StuStudyTime 学制,

          StuSchoolTime 入学时间,StuCurrentClass 当前所在年级,

          StuDormitory 宿舍,StuEMail 电子邮件,StuPhone 联系电话,

          StuPost 邮编,StuID 身份证号,StuIsGraduate 是否毕业,

          StuGraduateDate 毕业日期    

  FROM student

 

(2)学生异动信息视图:

USE Student

GO

CREATE VIEW StuChangeInfo

AS

  SELECT  StuChangeID 异动记录号,StuChange.StuNo 学号,StuName 姓名,

          StuCollege 学院,StuClass 班级,StuMajor 专业,StuChangeKind

         异动类型,StuChangeDate 异动日期,StuChangeDetail 异动详细描述

  FROM Student,StuChange

  where Student.StuNo=StuChange.StuNo

 

(3)学生课程信息视图:

USE Student

GO

CREATE VIEW  StuCourseInfo

AS

  SELECT  StuCourseNo 课程编号,StuCourse.StuNo 学号,StuName 姓名,

          StuCollege 学院,StuClass 班级,StuMajor 专业,

          StuCourseYear 学年,StuCourseTerm 学期,

          StuCourseName 课程名,StuCourseScore 分数,

          StuCredit 已获学分,StuCourseJiDian 已获绩点,

          StuCourseKind 课程性质,StuReStudyFlag 重修标记,

          StuReStudyScore 重修分数,StuReTestFlag 补考标记,

          StuReTestScore 补考分数,StuCourseGS 课程归属,

          StuFXFlag 辅修标记          

  FROM Student,StuCourse

  where Student.StuNo=StuCourse.StuNo

 

(4)学生体检信息视图:

USE Student

GO

CREATE VIEW  StuHealthCheckInfo

AS

  SELECT  StuCheckID 体检编号,Student.StuNo 学号,StuName 姓名,

          StuSex 性别,StuCollege 学院,StuClass 班级,StuMajor 专业,

          StuPhone 联系电话,StuCheckYear 体检学年,StuCheckTerm

          体检学期,StuHeight 身高,StuWeight 体重,StuEye 视力,

          StuLungC 肺活量,StuBloodP 血压,StuLiver 肝功能,

          StuBlood 血常规,StuHeartLung 心肺功能,StuDiseaseItem

          异常项目,CheckConclusion 体检结果            

  FROM Student,StudentHealthCheck

  where Student.StuNo=StudentHealthCheck.StuNo

 

(5)学生家庭信息视图:

USE Student

GO

CREATE VIEW  StuFamilyInfo

AS

  SELECT  StuFamilyID 家庭编号,Student.StuNo 学号,StuName 姓名,

          StuCollege 学院,StuClass 班级,StuMajor 专业,

          StuFamilyAddress 家庭地址,StuFatherName 父亲姓名,

          StuFatherWP 父亲工作单位,StuFatherWPPost 父亲单位邮编,

          StuFatherPhone 父亲电话,StuMotherName 母亲姓名,

          StuMotherWP 母亲工作单位,StuMotherWPPost 母亲单位邮编,

          StuMotherPhone 母亲电话

  FROM Student,StuFamily

  where Student.StuNo=StuFamily.StuNo

 

(6)学生贷款信息视图:

USE Student

GO

CREATE VIEW  StuLoanInfo

AS

  SELECT  StuLoanID 贷款编号,Student.StuNo 学号,StuName 姓名,

          StuCollege 学院,StuClass 班级,StuMajor 专业,

          StuLoanDate 贷款日期,StuLoanR 贷款原因,

          StuLoanNum 贷款数目,StuLoanBackNum 已还贷款数目,

          StuLoanIsBack 是否还清

  FROM Student,StuLoan

  where Student.StuNo=StuLoan.StuNo

 

(7)学生注册信息视图:

USE Student

GO

CREATE VIEW  StuRegisterInfo

AS

  SELECT  StuRegisterID 注册编号,Student.StuNo 学号,StuName 姓名,

          StuCollege 学院,StuClass 班级,StuMajor 专业,

          StuCurrentClass 当前所在年级,StuRegisterYear 注册学年,

          StuRegisterTerm 注册学期,StuIsRegister 是否注册    

  FROM Student,StuRegister

  where Student.StuNo=StuRegister.StuNo

 

(8)学生奖励或处罚视图:

USE Student

GO

CREATE VIEW  StuRewardPunishInfo

AS

  SELECT  StuRPID 奖励或处罚记录号,Student.StuNo 学号,StuName 姓名,

          StuCollege 学院,StuClass 班级,StuMajor 专业,StuFace

          政治面貌,StuRPKind 奖励或处罚类型,StuRPDate 奖励或处罚日期,

          StuRPR 奖励或处罚原因,StuRP 奖励或处罚标记

  FROM Student,StuRewardPunish

  where Student.StuNo=StuRewardPunish.StuNo

 

4.3 定义索引

(1)所有表中的主键自动被设为索引项

(2)由于属性“学号”经常在连接操作中出现,所以在每张表中建立“学号”的索引

(3)课程表中的“分数”经常作为最大最小值被查询,可以建立相应索引

   create index StuCourseScoreIndex on StuCourse(StuCourseScore)

 

4.4 定义权限

(1)当前用户为dbo,是系统管理员,可以通过sql语句赋予dbo对数据库Student中

   表student的所有特权,不过这是默认的,例如:

   grant all privileges

   on Student

   to dbo

   with grant option

(2)先在管理器中建立一个登录用户,再在Student数据库中建立一个用户sh,假设他

   是一名学生,则可以赋予他对所有表的select权限。

  

grant select on StuChange to sh;

grant select on StuCourse to sh;

grant select on Student to sh;

grant select on StudentHealthCheck to sh;

grant select on StuFamily to sh;

grant select on StuLoan to sh;

grant select on StuRegister to sh;

grant select on StuRewardPunish to sh;

 

4.5 定义触发器

 各表之间只用“学号”作为连接,并已经用管理器建立了关系,无需再建立“学号”上的触发器,即无论在哪里修改“学号”,都会因为这种主键与外键的关系而失败,学生表中的“学号”总是与其他表中的“学号”保持一致的。

 

(1)课程表StuCourse

   表中的重修、补考标记可能会与重修分数、补考分数不一致,即重修标记为“否”,

   但分数却有值,这是check约束无法约束的;同时,如果分数>=60,则重修和补考

   标记都应为“否”。

 

CREATE trigger CourseReStudyTestFlag

on StuCourse

after insert,update

as

   if exists(select StuNo,StuCourseNo from StuCourse where

     StuReStudyFlag='否' or StuReTestFlag='否' or StuCourseScore>=60)

     begin

       update StuCourse set StuReStudyScore=null

       where StuReStudyFlag='否'

       update StuCourse set StuReTestScore=null

       where StuReTestFlag='否'

 

       update StuCourse set StuReTestFlag='否'

       where StuCourseScore>=60

       update StuCourse set StuReStudyFlag='否'

       where StuCourseScore>=60

     end

 

(2)学生表Student

如果学生没有毕业,“毕业日期”一项应为空

 

CREATE trigger StuGraduate

on Student

for insert,update

as

   if  exists (select StuNo from Student where StuIsGraduate='否' )

      begin

        update Student set StuGraduateDate=null

        where StuIsGraduate='否'

      End

 

(3)学生贷款表StuLoan

   如果已还贷款数目=贷款数目,“是否还清”一项应为“是”

create trigger StuLoanBack

on StuLoan

for insert,update

as

   if (select StuLoanBackNum from StuLoan)=

      (select StuLoanNum from StuLoan)

      begin

        update StuLoan set StuLoanIsBack='是'

      End

 

4.6 定义存储过程

(1)查询学生档案信息,包括学生基本情况、学生奖励情况、学生处分情况、学生家庭信息、学生体检情况。

 

create procedure SelectDangAn

(@xuehao char(20))

As

   Begin

      select *

      from Student,StuRewardPunish,StuFamily,StudentHealthCheck

      where Student.StuNo=StuRewardPunish.StuNo and

      StuRewardPunish.StuNo=StuFamily.StuNo and

      StuFamily.StuNo=StudentHealthCheck.StuNo and

      StudentHealthCheck.StuNo=@xuehao

   End

Go

exec SelectDangAn @xuehao='20091602310073'

 

(2)查询学生学籍信息,包括学生贷款情况、学生注册情况、学生异动情况、学生毕业情况。

 

create procedure SelectXueJi

(@xuehao char(20))

as

   begin

      select *

      from Student,StuLoan,StuRegister,StuChange

      where Student.StuNo=StuLoan.StuNo and

      StuLoan.StuNo=StuRegister.StuNo and

      StuRegister.StuNo=StuChange.StuNo and

      StuChange.StuNo=@xuehao

   end

go

exec SelectXueJi @xuehao='20091602310073'

 

(3)查询学生各门课成绩,支持按年级和班级条件查询。

create procedure SelectChengJi1

(@xuehao char(20))

as

   begin

      select *

      from Student,StuCourse

      where Student.StuNo=StuCourse.StuNo and

      StuCourse.StuNo=@xuehao

   end

go

exec SelectChengJi @xuehao='20091602310073'

 

create procedure SelectChengJi2

(@class char(30))

as

   begin

      select *

      from Student,StuCourse

      where Student.StuNo=StuCourse.StuNo and

      Student.StuClass=@class

   end

go

exec SelectChengJi2 @class='计算机科学与技术0903班'

 

5.  数据流图及程序结构框图

 

数据流图:

顶级数据流图:

 数据库课程设计报告-学生学籍管理信息系统_第4张图片

 

一级数据流图:

数据库课程设计报告-学生学籍管理信息系统_第5张图片

 

二级数据流图:

数据库课程设计报告-学生学籍管理信息系统_第6张图片

程序结构框图:

数据库课程设计报告-学生学籍管理信息系统_第7张图片

 

6.  程序源代码及其说明

 

(1)引入ADO组件类型库,初始化组件

直接在Stdafx.h文件中加入下面语句来实现引入:

#import "C:\Program Files\Common Files\System\ado\msado15.dll"no_namespace rename("EOF","adoEOF")

 

语句no_namespace说明ADO对象不使用命名空间,rename ("EOF", "adoEOF")说明将ADO中结束标志EOF改为adoEOF,以避免和其它库中命名相冲突。

 

建立工作区Student,在CStudentApp类中的InitInstance()中初始化COM,如下:

CoInitialize(NULL);

在类CStudentApp中新建虚函数virtual int ExitInstance()用于关闭COM,如下:

int CStudentApp::ExitInstance()

{

    CoUninitialize();

    return CWinApp::ExitInstance();

}

接着就可以直接使用Ado提供的指针m_pConnection,m_pRecordset操作数据库了

 

(2)初始化界面

 学生管理信息系统的程序结构中主要有三大组成部分:档案管理、学籍管理、成绩管

 理,其中每个模块都要实现相同的功能:录入、修改、查询、删除、输出,而“用户

 管理”模块可以忽略,故主要选择其中“档案管理”的“学生基本信息管理”来介绍

 代码部分。

 

主界面——学生档案管理界面:

数据库课程设计报告-学生学籍管理信息系统_第8张图片 

学生基本信息界面:

数据库课程设计报告-学生学籍管理信息系统_第9张图片

说明:在主界面中,可以看到学生的整体档案信息,但必须是基本信息、奖励或处罚信息、家庭信息、体检信息都有才能显示;通过主界面的下面四个按钮可以将学生档案信息分开管理。

 

先在“学生基本信息”类中添加如下代码:

_RecordsetPtr m_pRecordset; //创建记录集对象

_ConnectionPtr m_pConnection;

 

初始化“学生基本信息”界面中List控件函数Refresh()如下:

 

View Code
  1 void CStuBasicInfo::Refresh()
  2 {
  3     //连接数据库,ADO方法
  4     //假设m_pConnection是我们已经建立好的连接,我们使用_RecordsetPtr接口的Open方法打开表的记录集
  5 
  6     _variant_t value;
  7     CString da;
  8     da="select * from StudentInfo";
  9     try
 10     {
 11         CoInitialize(NULL);
 12         m_pConnection.CreateInstance(_uuidof(Connection));
 13         m_pRecordset.CreateInstance(_uuidof(Recordset));
 14 
 15         m_pConnection->Open((_bstr_t)scon,"","",adModeUnknown);
 16         m_pRecordset->Open((_bstr_t)da,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
 17     }
 18     catch (_com_error e)
 19     {
 20         MessageBox(e.ErrorMessage());
 21     }
 22 
 23     //在list控件中初始化档案信息
 24     try
 25     {
 26         if(!m_pRecordset->BOF)
 27             m_pRecordset->MoveFirst();//记录指针移到第一行(第一条记录)
 28         else
 29         {
 30             AfxMessageBox("数据库中没有数据!");
 31             return ;
 32         }
 33         
 34         int count=0;//记录列数
 35         
 36         //在listctrl中添加数据
 37         //如果没有遇到表结束标志adoEOF,则用GetCollect(字段名)来获取当前记录
 38         //指针所指的字段值,然后再用MoveNext()方法移动到下一条记录位置
 39         while(!m_pRecordset->adoEOF)
 40         {
 41             value = m_pRecordset->GetCollect("学号");
 42             m_list.InsertItem(count,(LPCSTR)(_bstr_t)value);
 43 
 44             value = m_pRecordset->GetCollect("姓名");
 45             m_list.SetItemText(count,1,(LPCSTR)(_bstr_t)value);
 46 
 47             value = m_pRecordset->GetCollect("性别");
 48             m_list.SetItemText(count,2,(LPCSTR)(_bstr_t)value);
 49 
 50             value = m_pRecordset->GetCollect("出生日期");
 51             m_list.SetItemText(count,3,(LPCSTR)(_bstr_t)value);
 52 
 53             value = m_pRecordset->GetCollect("籍贯");
 54             m_list.SetItemText(count,4,(LPCSTR)(_bstr_t)value);
 55 
 56             value = m_pRecordset->GetCollect("民族");
 57             m_list.SetItemText(count,5,(LPCSTR)(_bstr_t)value);
 58 
 59             value = m_pRecordset->GetCollect("政治面貌");
 60             m_list.SetItemText(count,6,(LPCSTR)(_bstr_t)value);
 61 
 62             value = m_pRecordset->GetCollect("来源地区");
 63             m_list.SetItemText(count,7,(LPCSTR)(_bstr_t)value);
 64 
 65             value = m_pRecordset->GetCollect("出生地");
 66             m_list.SetItemText(count,8,(LPCSTR)(_bstr_t)value);
 67 
 68             value = m_pRecordset->GetCollect("学院");
 69             m_list.SetItemText(count,9,(LPCSTR)(_bstr_t)value);
 70 
 71             value = m_pRecordset->GetCollect("专业");
 72             m_list.SetItemText(count,10,(LPCSTR)(_bstr_t)value);
 73 
 74             value = m_pRecordset->GetCollect("行政班级");
 75             m_list.SetItemText(count,11,(LPCSTR)(_bstr_t)value);
 76 
 77             value = m_pRecordset->GetCollect("学制");
 78             m_list.SetItemText(count,12,(LPCSTR)(_bstr_t)value);
 79 
 80             value = m_pRecordset->GetCollect("入学时间");
 81             m_list.SetItemText(count,13,(LPCSTR)(_bstr_t)value);
 82 
 83             value = m_pRecordset->GetCollect("当前年级");
 84             m_list.SetItemText(count,14,(LPCSTR)(_bstr_t)value);
 85 
 86             value = m_pRecordset->GetCollect("宿舍");
 87             m_list.SetItemText(count,15,(LPCSTR)(_bstr_t)value);
 88 
 89             value = m_pRecordset->GetCollect("电子邮件");
 90             if(value.vt==VT_NULL)
 91                 m_list.SetItemText(count,16,"");
 92             else
 93                  m_list.SetItemText(count,16,(LPCSTR)(_bstr_t)value);
 94 
 95             value = m_pRecordset->GetCollect("联系电话");
 96             if(value.vt==VT_NULL)
 97                 m_list.SetItemText(count,17,"");
 98             else
 99                 m_list.SetItemText(count,17,(LPCSTR)(_bstr_t)value);
100 
101             value = m_pRecordset->GetCollect("邮编");
102             if(value.vt==VT_NULL)
103                 m_list.SetItemText(count,18,"");
104             else
105                 m_list.SetItemText(count,18,(LPCSTR)(_bstr_t)value);
106 
107             value = m_pRecordset->GetCollect("身份证号");
108             m_list.SetItemText(count,19,(LPCSTR)(_bstr_t)value);
109 
110             value = m_pRecordset->GetCollect("是否毕业");
111             m_list.SetItemText(count,20,(LPCSTR)(_bstr_t)value);
112 
113             value = m_pRecordset->GetCollect("毕业日期");
114             if(value.vt==VT_NULL)
115                 m_list.SetItemText(count,21,"");
116             else
117                 m_list.SetItemText(count,21,(LPCSTR)(_bstr_t)value);            
118 
119             count++;
120             m_pRecordset->MoveNext();
121         }
122     }
123     catch (_com_error e)
124     {
125         AfxMessageBox(e.ErrorMessage());
126     }
127 
128 }

 

(3)添加新纪录

 

View Code
 1 void CStuBasicInfo::OnBUTTONAdd() 
 2 {
 3     // TODO: Add your control notification handler code here
 4 
 5     //连接数据库,ADO方法
 6     //假设m_pConnection是我们已经建立好的连接,我们使用_RecordsetPtr接口的Open方法打开表的记录集
 7 
 8     _variant_t value;
 9     CString da;
10     da="select * from StudentInfo";
11     try
12     {
13         CoInitialize(NULL);
14         m_pConnection.CreateInstance(_uuidof(Connection));
15         m_pRecordset.CreateInstance(_uuidof(Recordset));
16 
17         m_pConnection->Open((_bstr_t)scon,"","",adModeUnknown);
18         m_pRecordset->Open((_bstr_t)da,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
19     }
20     catch (_com_error e)
21     {
22         MessageBox(e.ErrorMessage());
23     }
24 
25     //写入数据
26     try
27     {
28             UpdateData(true);
29             m_pRecordset->MoveLast();
30             m_pRecordset->AddNew();
31 
32             _variant_t b;
33             b.vt=NULL;//空指针,用于向数据库中插入
34     
35             m_pRecordset->PutCollect("学号",(_variant_t)m_1);     
36             m_pRecordset->PutCollect("姓名",(_variant_t)m_2);    
37             m_pRecordset->PutCollect("性别",(_variant_t)m_3);    
38             m_pRecordset->PutCollect("出生日期",(_variant_t)m_4);    
39             m_pRecordset->PutCollect("籍贯",(_variant_t)m_5);    
40             m_pRecordset->PutCollect("民族",(_variant_t)m_6);            
41             m_pRecordset->PutCollect("政治面貌",(_variant_t)m_7);     
42             m_pRecordset->PutCollect("来源地区",(_variant_t)m_8);    
43             m_pRecordset->PutCollect("出生地",(_variant_t)m_9);    
44             m_pRecordset->PutCollect("学院",(_variant_t)m_10);    
45             m_pRecordset->PutCollect("专业",(_variant_t)m_11);    
46             m_pRecordset->PutCollect("行政班级",(_variant_t)m_12);        
47             m_pRecordset->PutCollect("学制",(_variant_t)m_13); 
48             m_pRecordset->PutCollect("入学时间",(_variant_t)m_14);
49             m_pRecordset->PutCollect("当前年级",(_variant_t)m_15);    
50             m_pRecordset->PutCollect("宿舍",(_variant_t)m_16);
51             
52             if(m_17 == "")
53                 m_pRecordset->PutCollect("电子邮件",b);
54             else
55                 m_pRecordset->PutCollect("电子邮件",(_variant_t)m_17);
56 
57             if(m_18 == "")
58                 m_pRecordset->PutCollect("联系电话",b);
59             else
60                 m_pRecordset->PutCollect("联系电话",(_variant_t)m_18);
61 
62             if(m_19 == "")
63                 m_pRecordset->PutCollect("邮编",b);
64             else    
65                 m_pRecordset->PutCollect("邮编",(_variant_t)m_19);    
66 
67             m_pRecordset->PutCollect("身份证号",(_variant_t)m_20);
68             m_pRecordset->PutCollect("是否毕业",(_variant_t)m_21);
69                  
70             if(m_22 == "")
71                 m_pRecordset->PutCollect("毕业日期",b);
72             else
73                 m_pRecordset->PutCollect("毕业日期",(_variant_t)m_22);
74 
75 
76             m_pRecordset->Update();
77 
78         
79     }
80     catch (_com_error e)
81     {
82         AfxMessageBox(e.ErrorMessage());
83     }
84     m_list.DeleteAllItems();
85     Refresh();
86 
87     
88 }

 

(4)修改记录部分

 

View Code
  1 int selRow;
  2 void CStuBasicInfo::OnBUTTONModify() 
  3 {
  4     // TODO: Add your control notification handler code here
  5 
  6     int nItemSelected=m_list.GetSelectedCount();//所选表项数
  7     if(nItemSelected<1)
  8     {
  9         MessageBox("请先选择你要修改的项目");
 10         return;
 11     }
 12     if(nItemSelected>1)
 13     {
 14         MessageBox("只能同时修改一项");
 15         return;
 16     }
 17     selRow = m_list.GetNextItem(-1,LVNI_ALL|LVNI_SELECTED);//当前选取行号
 18 
 19     m_1 = m_list.GetItemText(selRow,0);
 20     m_2 = m_list.GetItemText(selRow,1);
 21     m_3 = m_list.GetItemText(selRow,2);
 22     m_4 = m_list.GetItemText(selRow,3);
 23     m_5 = m_list.GetItemText(selRow,4);
 24     m_6 = m_list.GetItemText(selRow,5);
 25     m_7 = m_list.GetItemText(selRow,6);
 26     m_8 = m_list.GetItemText(selRow,7);
 27     m_9 = m_list.GetItemText(selRow,8);
 28     m_10 = m_list.GetItemText(selRow,9);
 29     m_11 = m_list.GetItemText(selRow,10);
 30     m_12 = m_list.GetItemText(selRow,11);
 31     m_13 = m_list.GetItemText(selRow,12);
 32     m_14 = m_list.GetItemText(selRow,13);
 33     m_15 = m_list.GetItemText(selRow,14);
 34     m_16 = m_list.GetItemText(selRow,15);
 35     m_17 = m_list.GetItemText(selRow,16);
 36     m_18 = m_list.GetItemText(selRow,17);
 37     m_19 = m_list.GetItemText(selRow,18);
 38     m_20 = m_list.GetItemText(selRow,19);
 39     m_21 = m_list.GetItemText(selRow,20);
 40     m_22 = m_list.GetItemText(selRow,21);
 41 
 42     UpdateData(false);
 43 
 44     m_modifyOK.EnableWindow(true);
 45 
 46     
 47 }
 48 
 49 void CStuBasicInfo::OnBUTTONModifyOK() 
 50 {
 51     // TODO: Add your control notification handler code here
 52 
 53     // TODO: Add your control notification handler code here
 54     //连接数据库,ADO方法
 55     //假设m_pConnection是我们已经建立好的连接,我们使用_RecordsetPtr接口的Open方法打开表的记录集
 56 
 57     _variant_t value;
 58     CString da;
 59     da="select * from StudentInfo";
 60     try
 61     {
 62         CoInitialize(NULL);
 63         m_pConnection.CreateInstance(_uuidof(Connection));
 64         m_pRecordset.CreateInstance(_uuidof(Recordset));
 65 
 66         m_pConnection->Open((_bstr_t)scon,"","",adModeUnknown);
 67         m_pRecordset->Open((_bstr_t)da,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
 68     }
 69     catch (_com_error e)
 70     {
 71         MessageBox(e.ErrorMessage());
 72     }
 73 
 74 
 75     //写入数据
 76     try
 77     {
 78             UpdateData(true);
 79             m_pRecordset->Move(selRow);
 80 
 81             _variant_t b;
 82             b.vt=NULL;//空指针,用于向数据库中插入
 83     
 84             m_pRecordset->PutCollect("学号",(_variant_t)m_1);     
 85             m_pRecordset->PutCollect("姓名",(_variant_t)m_2);    
 86             m_pRecordset->PutCollect("性别",(_variant_t)m_3);    
 87             m_pRecordset->PutCollect("出生日期",(_variant_t)m_4);    
 88             m_pRecordset->PutCollect("籍贯",(_variant_t)m_5);    
 89             m_pRecordset->PutCollect("民族",(_variant_t)m_6);            
 90             m_pRecordset->PutCollect("政治面貌",(_variant_t)m_7);     
 91             m_pRecordset->PutCollect("来源地区",(_variant_t)m_8);    
 92             m_pRecordset->PutCollect("出生地",(_variant_t)m_9);    
 93             m_pRecordset->PutCollect("学院",(_variant_t)m_10);    
 94             m_pRecordset->PutCollect("专业",(_variant_t)m_11);    
 95             m_pRecordset->PutCollect("行政班级",(_variant_t)m_12);        
 96             m_pRecordset->PutCollect("学制",(_variant_t)m_13); 
 97             m_pRecordset->PutCollect("入学时间",(_variant_t)m_14);
 98             m_pRecordset->PutCollect("当前年级",(_variant_t)m_15);    
 99             m_pRecordset->PutCollect("宿舍",(_variant_t)m_16);
100             
101             if(m_17 == "")
102                 m_pRecordset->PutCollect("电子邮件",b);
103             else
104                 m_pRecordset->PutCollect("电子邮件",(_variant_t)m_17);
105 
106             if(m_18 == "")
107                 m_pRecordset->PutCollect("联系电话",b);
108             else
109                 m_pRecordset->PutCollect("联系电话",(_variant_t)m_18);
110 
111             if(m_19 == "")
112                 m_pRecordset->PutCollect("邮编",b);
113             else    
114                 m_pRecordset->PutCollect("邮编",(_variant_t)m_19);    
115 
116             m_pRecordset->PutCollect("身份证号",(_variant_t)m_20);
117             m_pRecordset->PutCollect("是否毕业",(_variant_t)m_21);
118                  
119             if(m_22 == "")
120                 m_pRecordset->PutCollect("毕业日期",b);
121             else
122                 m_pRecordset->PutCollect("毕业日期",(_variant_t)m_22);
123 
124 
125             m_pRecordset->Update();
126 
127         
128     }
129     catch (_com_error e)
130     {
131         AfxMessageBox(e.ErrorMessage());
132     }
133 
134     m_list.DeleteAllItems();
135     Refresh();
136     OnBUTTONClear();
137     m_modifyOK.EnableWindow(false);
138 
139     
140 }

 

(5)删除部分

 

View Code
 1 void CStuBasicInfo::OnBUTTONDel() 
 2 {
 3     // TODO: Add your control notification handler code here
 4     //连接数据库,ADO方法
 5     //假设m_pConnection是我们已经建立好的连接,我们使用_RecordsetPtr接口的Open方法打开表的记录集
 6 
 7     _variant_t value;
 8     CString da;
 9     da="select * from StudentInfo";
10     try
11     {
12         CoInitialize(NULL);
13         m_pConnection.CreateInstance(_uuidof(Connection));
14         m_pRecordset.CreateInstance(_uuidof(Recordset));
15 
16         m_pConnection->Open((_bstr_t)scon,"","",adModeUnknown);
17         m_pRecordset->Open((_bstr_t)da,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
18     }
19     catch (_com_error e)
20     {
21         MessageBox(e.ErrorMessage());
22     }
23 
24     
25    int i,iState;
26    int nItemSelected=m_list.GetSelectedCount();//所选表项数
27    int nItemCount=m_list.GetItemCount();//表项总数
28 
29    if(nItemSelected<1)
30        return;
31    for(i=nItemCount-1;i>=0;i--)
32    {
33       iState=m_list.GetItemState(i,LVIS_SELECTED);
34       if(iState!=0) 
35       {
36         try
37         {
38             m_pRecordset->Move(i);
39             m_pRecordset->Delete(adAffectCurrent);
40             m_pRecordset->Update();
41         }
42         catch(_com_error *e)
43         {
44              AfxMessageBox(e->ErrorMessage());
45         }
46 
47       }
48       
49    }
50    m_list.DeleteAllItems();
51    Refresh();
52 
53     
54 }

 

(6)查询部分

 

View Code
 1 void CStuBasicInfo::OnBUTTONSearch() 
 2 {
 3     // TODO: Add your control notification handler code here
 4 
 5     UpdateData(true);
 6     if(m_1=="")
 7     {
 8         MessageBox("请输入学号进行查询");
 9         return;
10     }
11     else
12     {
13         int nn=m_list.GetItemCount();
14         CString str;
15         for(int i=0;i)
16         {
17             str=m_list.GetItemText(i,0);
18             str.Replace(" ","");
19             m_1.Replace(" ","");
20             if(m_1==str)
21             {    
22             m_1 = m_list.GetItemText(i,0);
23             m_2 = m_list.GetItemText(i,1);
24             m_3 = m_list.GetItemText(i,2);
25             m_4 = m_list.GetItemText(i,3);
26             m_5 = m_list.GetItemText(i,4);
27             m_6 = m_list.GetItemText(i,5);
28             m_7 = m_list.GetItemText(i,6);
29             m_8 = m_list.GetItemText(i,7);
30             m_9 = m_list.GetItemText(i,8);
31             m_10 = m_list.GetItemText(i,9);
32             m_11 = m_list.GetItemText(i,10);
33             m_12 = m_list.GetItemText(i,11);
34             m_13 = m_list.GetItemText(i,12);
35             m_14 = m_list.GetItemText(i,13);
36             m_15 = m_list.GetItemText(i,14);
37             m_16 = m_list.GetItemText(i,15);
38             m_17 = m_list.GetItemText(i,16);
39             m_18 = m_list.GetItemText(i,17);
40             m_19 = m_list.GetItemText(i,18);
41             m_20 = m_list.GetItemText(i,19);
42             m_21 = m_list.GetItemText(i,20);
43             m_22 = m_list.GetItemText(i,21);
44 
45             UpdateData(false);
46             return;
47             }
48 
49         }
50         MessageBox("找不到记录!");
51         OnBUTTONClear();
52     }
53 }

 

总结

 

  本次课程设计历时两周,现在很高兴完成了,真的学到了不少。完成之后,才发现数据库设计部分,从抽象实体到寻找关系,从学习PowerDesigner到优化触发器才是最难的部分。对于编程,其实核心代码很少,就用到Ado中的两个指针而已,但是通过编程现在终于会连接数据库了,以后可能还会学习ODBC,JDBC,DAO等,同时学习了一下VC的控件使用方法。总之,此次数据库课程设计算是对本学期实验的一次综合实践吧,不过的确花了我们很多的时间,毕竟时间有限,所以前台系统也只是粗略完成了部分功能,数据表项也许还存在不足之处有待完善。同时在此感谢老师一学期的悉心教诲,谢谢。

  

参考文献

 

[1] 王珊,萨师煊.《数据库系统概论》.高等教育出版社.2010

[2] 刘刀桂,孟繁晶.《Visual C++实践与提高 数据库篇》.中国铁道出版社.2001

[3] 启明工作室.《Visual C++ + SQLServer数据库应用系统开发与实例》.人民邮电出版社.2004

 

学生管理信息系统源码(VC6)

 

转载于:https://www.cnblogs.com/shihui142857/archive/2012/12/19/2824809.html

你可能感兴趣的:(数据库课程设计报告-学生学籍管理信息系统)