数据库课程设计

更新时间:2023-08-12 17:13:01 阅读量: 初中教育 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

<学生成绩管理系统>

-----数据库原理课程设计

姓 名: _何祖祥_______ 班 级: _计算0611_____ 学 号: _2006810028______ 指导老师: __林颖贤_________ 成 绩: ________________

评 语

计算机工程学院

2008年1月16日

基于VC的学生成绩管理系统

[摘要]

学生成绩管理工作是学校管理工作的重要组成部分,随着学校规模的扩大、学生人数的增加,利用计算机技术和数据库技术设计开发学生成绩管理系统、实现学生成绩理工作的自动化成为学生管理部门的迫切需要。本系统提供了学生的基本信息的查询、学生成绩的管理程教师的基本信息的管理等,主要包据了成绩的查询、录入、修改、删除和数据库的备份等功能。好的学生成绩管理系统为管理学生成绩提供了方便,有效提高了对学生的成绩的管理。本文介绍此次课程设计的选题背景和意义,相关的研究和设计的过程,以及设计思路和实现细节的考虑,为便于说明,文中绘制了程序结框图、数据流程图和部分界面图。最后给出了我在本次课程设过中的体会。

[关键词] VC++ SQL语言 ODBC 数据库 存储过程 触发器 视图

目录

第一章 引言 ............................................. 错误!未定义书签。

1.1 课题研究背景与意义 ............................... 错误!未定义书签。 1.2 本课题研究内容与目标 ............................. 错误!未定义书签。 1.3 开发环境 ........................................ 错误!未定义书签。 1.4体系结构设计 ..................................... 错误!未定义书签。 第二章 需求分析 ......................................... 错误!未定义书签。

2.1 信息要求 ......................................... 错误!未定义书签。 2.2 处理要求. ........................................ 错误!未定义书签。 2.3 安全性与完整性要求. .............................. 错误!未定义书签。 第三章 概念结构设计 ..................................... 错误!未定义书签。

3.1 分ER图 ......................................... 错误!未定义书签。 3.2 总ER图 ......................................... 错误!未定义书签。 第四章 逻辑结构设计 ..................................... 错误!未定义书签。

4.1 关系模型 ........................................ 错误!未定义书签。 4.2 数据模型优化 .................................... 错误!未定义书签。 4.3数据字典 ........................................ 错误!未定义书签。 4.4视图设计 ................................................................................. 错误!未定义书签。 第五章 数据库的实施和维护 ................................ 错误!未定义书签。

5.1 储存过程设计 ..................................... 错误!未定义书签。 5.2 触发器设计 ....................................... 错误!未定义书签。 5.3 模块设计 ........................................ 错误!未定义书签。 结论 ...................................................................... 6 参考文献 ................................................. 错误!未定义书签。

第一章引言

1.1课题研究背景与意义

学生成绩管理工作是学校管理工作的重要组成部分,利用计算机技术和数据库技术设

计开发学生学籍管理系统、实现学生学籍管理工作的自动化成为学生管理部门的迫切需要。

学生的成绩管理系统能大幅度地提高对成绩管理的效率,方便教师及教务处对学生成绩的管理.本系统主要完成对学生和教师的基本信息的录入、查询和删除;对学生的成绩的管理(包括成绩的查询、录入、修改、删除);以及数据库的备份等操作。由于刚开始数据库设计的不是很好以及对VC运用的不熟练,所以有些功能想加上去,迫于水平和时间的有限,只能粗略地实现这些功能。

1.2本课题研究内容与目标

本课题研究对学生成绩管理系统要实现哪些功能才能为广大师 提供方便,应用对数据据原理的理论学习,通过上机实践的方式将理论知识与实践更好的给合起来,巩固所学的知识。

实践和巩固在课堂教学中学习的关于数据库原理的有关知识和数据库系统的建立方法,熟练掌握对于给定实际问题,为了建立一个学生成绩管理系统,必须得经过系统调研、需求分析、概念设计、逻辑设计、物理设计、系统调试、维护以及系统评价的一般过程,为毕业设计打下基础。

1.3 开发环境

硬件:PC,CPU:AMD Core Processor 4000+,内存:1.00GB,硬盘:160GB; 操作系统:Microsoft WindowsXP; 软件:Visual C++ 6.0 Server 2000

1.4体系结构设计

2009 年 1 月

集美大学计算机工程学院数据库课程设计

5

陆界面

输入用户名和密码

用户名和密码 正确?

N Y 执行主菜单 退出

基本信息查看学生 信息

成绩查询

成绩管理

系统管理

数据库管理

作者信息

学号查询

添加成绩

修改密 码

数据库完 全备份 Author

查看教师 信息

班级查询 数据库差 修改成绩

退出

异备份

学生信息 管理

系查询

教师信息 管理

显示全部 删除成绩 平均分 个人平均分

删除数据 库

班级平均分

第二章 需求分析

2.1 信息要求

(1)学生成绩管理系统包含学生和教师的基本信息的处理,学生成绩的管理,数据库的管理,登陆用户的管理。

(2)学生信息包括学号、姓名、性别、年龄、电话、系名、班级;通过学号可查找相应学生的各科成绩。

(3)课程表包括课程号、课程名称、学时、学分、任课老师号。 (4)系包括系名、系主任、系人数。

(5)班级包括班级名、班主任、班级人数、系名。 (6)教师表包括教师号、教师名、学历、联系方式。

0层数据流图:

1层数据流图:

2.2 处理要求

能对学生和教师的信息进行查询、录入、修改、删除;能够查询学生的各科成绩、平均分,

并能对其进行修改、删除等操作。

2.3 安全性与完整性要求

安全性:

(1) 管理员能够方便的对信息进行添加、修改、删除、查询、汇总、统计等操作。 (2)教师可以在自己的权限内,对学生的成绩进行录入、修改、删除操作。 (3) 学生可以在自己的权限内对信息进行访问,查询相关信息。 完整性:

(1) 能够防止合法用户使用数据库向数据库中添加不合语义的数据。 (2) 通过各个表之间的联系来实现数据完整性约束。

第三章 概念结构设计

3.1 分ER图

登陆表E-R图 主键:用户名,用户类型

学生信息表E-R图 主键:学号 外键:系名,班级

系表E-R图 主键:系名

成绩表E-R图 主键:学号,课程号 外键:学号,课程号

班级表E-R图 主键:班级 外键:系名

课程表E-R图 主键:课程号 外键:任课老师

教师表E-R图 主键:教师号

3.2 总ER图

合并E-R图

第四章 逻辑结构设计

4.1 关系模型

将总体概念结构E-R图转化成关系模型 登陆(用户类型,用户名,密码)

学生信息(学号,姓名,性别,年龄,电话,系名,班级) 系(系名,系主任,系人数)

成绩(学号,课程号,学年学期,成绩) 班级(班级,班主任,班人数,系名)

课程表(课程号,课程名称,学时,学分,任课老师) 教师(教师号,教师名,学历,联系方式)

4.2 数据模型优化

将转化的关系模型进行优化,最终达到第三范式 (1) 确定数据依赖

登陆(用户类型,用户名,密码) (用户类型,用户名)->密码

学生信息(学号,姓名,性别,年龄,电话,系名,班级)

学号->姓名,学号->性别,学号->年龄,学号->电话,学号->系名,学号->班级,(学号,姓名)->性别,班级->系名, 系(系名,系主任,系人数) 系名->系主任,系名->系人数 成绩(学号,课程号,学年学期,成绩)

(学号,课程号)->学年学期,(学号,课程号)->成绩, 班级(班级,班主任,班人数,系名)

班级->班主任,班级->班人数,班级->系名,(班级,班主任)->班人数 课程表(课程号,课程名称,学时,学分,任课老师)

课程号->课程名称,课程号->学时,课程号->学分,课程号->任课老师 教师(教师号,教师名,学历,联系方式)

教师号->教师名,教师号->学历,教师号->联系方式

(2) 这些关系都符合要求,属于第三范式,所以不用再对这些模式进行分解了.

4.3数据字典

表1:学生信息表

2009 年 1 月

集美大学计算机工程学院数据库课程设计

11

字段名称 系名 系主任 系人数 字段名称 用户类型 用户名 密码 字段名称 班级 班主任 班人数 系名 字段名称 教师号 教师名 学历 联系方式 字段名称 学号 课程号 学年学期 成绩 字段名称 学号 姓名 性别 年龄 电话 系名 班级

数据类型 varchar varchar int 数据类型 varchar varchar varchar 数据类型 varchar varchar int varchar 数据类型 varchar char varchar varchar 数据类型 char varchar varchar float 数据类型 char varchar char int varchar varchar varchar

长度 20 10 4表 3 登陆表

约束 不为空 不为空

长度 10 10 10表 4 班级表

约束 不为空 不为空 不为空 约束 不为空

长度 20 10 4 20表 5 教师

不为空 约束 不为空 不为空

长度 10 10 20 20表 6 成绩

长度 10 20 20 8表 7 学生信息

约束 不为空 不为空 不为空 0~150 约束 不为空 不为空 不为空 不为空 不为空 不为空

长度 10 10 2 4 20 20 20

4.4 视图设计

(1)打印成绩>60分的学生 create view V_grade as

select A.学号,A.姓名,A.性别,B.课程号,C.课程名称,B.成绩 from 学生信息 A,成绩 B,课程表 C

where A.学号=B.学号 and B.课程号=C.课程号 and 成绩>60 执行

:select * from V_grade

(2) 查看计算机工程学院的考试情况 create view V_computer as

select B.学年学期,A.学号,A.姓名,A.班级,C.课程名称,B.成绩 from 学生信息 A,成绩 B,课程表 C

where A.学号=B.学号 and B.课程号=C.课程号 and A.系名='计算机工程学院' 执行

: select * from V_computer

第五章 数据库的实施和维护

5.1约束关系:

(1)为成绩表添加约束 成绩只能在0~150之内 alter table 成绩

add constraint CK_成绩 check (成绩 between 0 and 150) (2)为成绩表创建索引

create index IX_成绩 on 成绩(学年学期 ASC)

5.2 储存过程设计

(1)根据输入的参数删除学生信息 create proc DeleteNum_proc @number char(10) as

delete 学生信息 from 学生信息 where 学号=@number (2) 根据参数添加教师信息 create proc AddTeacher_proc @teanumber varchar(10),

@teaname char(10), @teasc varchar(20), @teaphone varchar(20) as

insert into 教师

values(@teanumber,@teaname,@teasc,@teaphone) (3) 根据传入的参数删除相应的教师信息 create proc DeleteTea_proc @teanumber varchar(10) as

delete 教师 from 教师

where 教师号=@teanumber (4)添加学生的信息 create proc AddStu_proc @stunum char(10), @stuname varchar(10), @stusex char(2), @stuyear int,

@stuphone varchar(20), @stuxi varchar(20), @stuclass varchar(20) as

insert into 学生信息

values(@stunum,@stuname,@stusex,@stuyear,@stuphone,@stuxi,@stuclass)

5.3 触发器设计

(1) 为学生信息表创建触发器,当删除学生信息时,删除相应的成绩表中的内容。 create trigger tri_学生信息 on 学生信息 for delete as

delete 成绩 from 成绩 A,deleted B where A.学号=B.学号

(2)当教师退休后,删除其资料,并将其从课程表中删除,所以创建一个触发器 create trigger tri_教师 on 教师 for delete as

delete 课程表 from 课程表 as A,deleted as B where B.教师号=A.任课老师

(3) 添加学生信息时,就为其添加登入信息 create trigger tri_login on 学生信息 for insert as

declare @name varchar(2) declare @password varchar(10) select @name=姓名 from inserted select @password from inserted insert into 登陆

values('学生',@name,@password)

(4)删除学生信息时,也删除登陆表中的信息 create trigger tri_destu on 学生信息 for delete as

declare @name varchar(2) declare @password varchar(10) select @name=姓名 from deleted select @password=学号 from deleted delete 登陆 from 登陆

where 用户名=@name and 密码=@password

5.4 模块设计

(1)模块一:基本信息

将其添加到登陆列表中,为其添加登陆的权限.先在SQL分析器中创建一个触发器,在向学生

信息表中添加信息时,就会触发.建四个对话框,两个对话框用来显示学生信息和教师信息,另外两个对话框用来实现对学生和教师信息的管理.在显示基本信息对话框中,为其添加CLIST CONTRL控件,弄成报表的形式,在程序中调用建立的几个记录集.利用滚动记录的几个函数,实现向报表控件中添加数据,这样就可以把学生和老师的信息给显示出来.而在对学生和教师信息管理的对话框中,设立几个变量与对话框中的EDIT编辑框相关联.调用UpateData(),可以把输入的值传给变量,这样就可以实现所想要的功能. (2)成绩查询模块

.

信息.按班级查询,可以获得该班级学生的考试信息,不分学期.按系查询,可以获得某系的全部考试信息.另外两个对话框实现查询个人平均分和班级成绩情况的查询.前两个对话框就不再叙述了,原理与前面的一样,在求平均分时,根据输入的学年学期和学号,可以查询该学生在这个学年的考试平均分,考试门数程不及格的门数.在实现求平均分过程中,本想用存储过程进行实现的,但由于在MFC中不知道如何调用有返回值的存储过程,所以用一个个比较过去,记录总和和考试课程数.这样就可以求出相应的平均分.不及格数也呼之欲出.求班级成绩也同理可得。 (3) 成绩管理模块

现一个,其他的两个就相当容易了,在这里,我是调用SQL语句进行添加、修改和删除的。首先把几个编辑框与几个变量进行关联,其实不用关联也是可以的,可以利用GetDlgItem(ID号)->GetWindowText(字符串变量),这样也可以把值传送给变量。建立一个数据类对象CDatabase m_db,用这个对象打开相对应的数据库,用str.Format(“SQL语名”),对字符串进行格式化成SQL语句,这样就可以用m_db.ExecuteSQL(str),执行SQL语句,这样相写一个函数进行查询,省了很多的代码,比较简洁。也可以调用存储过程进行实现,因为获取返回值的存储过程不会,所以这里有调用的存储过程是没有返回值的。 (4) 系统管理模块和数据库管理模块

这个对话框中,把用户登陆名给显示出来,旧密码保存在全局变量中,用来检验用户输入的旧密码是否正确,如果正确的话,调用SQL语句的Update对数据库中的相应元组进行修改。数据库备份这个模块,用了一个CCOMBOX控件,用来让用户选择进行哪种数据操作,有数据库完全备份,差异备份和移除设备。这三个都是调用数据库的相应命令进行操作。如完作备份,刚调用如下语句:sql.Format("backup database student to disk='%s'",m_getpathname);此处是利用CFileDlg进行相应的操作。不过这段内容有点缺陷,就是在退出程序后,原来保存的那个路径名会清空,所以还得再选择路径进行备份。

结论

在本次课程设计过程中,学到了很多知识,由于课程设计起草的比较晚,所以功能比较差些,功能也未能进行更深入的思考,自己也对VC涉足不深,所以在运用方面有所欠缺,数据库方面,整体考虑也不周到。在课设的前一周有对课设考虑了一下,本来有考虑了好几个模块,像成绩录入模块、班级统计模块、年级统计模块。在成绩录入模块中再分别进行录入、修改、增加、删除、查询、打印等功能。班级统计模块又分别有学生总成绩、平均成绩、班级排名、统计班级某分数段内的学生成绩人数、各学生该科成绩、班级排名等功能(只相对于某个学期)。还有年级统计模块,分为各年级各专业学生总成绩还有排名、各学生各科成绩年级排名,各班各分数段人数等功能。不过在考完试之后再开始真正做课程设计,时间有些伧促,所以只是实现其中的一部分功能。在用VC与SERVER 2000进行学生成绩管理系统的设计时,开始对用ODBC连接数据库时,经过了一天的时间,本打算用ADO进行连接,不过对我来说有点眼高手低,对ADO与ODBC都是一点都不懂,最后还是决定用ODBC进行连接,相对比较容易上手。通过本次课程设计,对在VC++中如何编写基本的ODBC数据库等有了初步的认识,还有也提高了Windows编程技术,进一步提高了Visual C++的操作能力,虽然在之前看过孙鑫的一些视频,由于很少进行操作,忘了差不多了,只记得些基本的操作。就比如在求平均分时,就花了我一个下午的时间进行实现这个功能,主要是对属性表单的创建不知道,所以要查找资料,翻出孙鑫的视频,进行摸索,在程序中把属性表单的类建成基于对话框的类,在改过来的过程中经历了不少挫折,最后通过对比基于对话框的类和基于属性页的类,把程序给改了过来,总算是完成了这项功能,进一步回顾了这部分的知识.而对于SQL语句如何在MFC中实现,则完全不懂,所以刚开始建的那些查找之类的功能,都是用CRecordset提供的几个成员函数进行滚动查找,操作有些繁琐,代码有些冗余.在快把课程设计给初步做完时,才弄懂如何把SQL语句在MFC中运行,虽然知道的有些晚,但还是学会了如何运用,所以把之前的有些代码,弄成运用存储过程或查询、更新的那几个SQL语句进行执行.进行测试后,可以运行.在弄登陆框时,也出现了一些麻烦,比如点右上角的那个X,程序会进入主页面,通过这条路径不用输入密码,这是一大漏洞,本来以为点X时,会跟点退出是响应同一个函数的,百思不得其解,最终通过一个网友的解答,说是用DOModal()时应该加一句判断,这样就可以解决那个问题了.

现在讲讲数据库设计方向的一些感言,经过几天的不眠不休的备斗,不过数据库还是设计的不好.像数据库的对象命名,我就没按标准来对对象进行命名,用了汉字,这样在程序中建立数据集时,就出现了一大堆m_column的字样,这些表示属性,给写程序带来了不便,不过相信以后我不会再犯这个错误了.建表时,那些主外键也未考虑周到,导致在添加数据过程中老是出现些问题,像触发器的建立,由于主外键没设计好,导致内部错误,这样花费了我很多时间查找错误原,都是由于前期工作没做好,正所谓”磨刀不误砍柴工”,这下我完全体会到了这句话的深义.在做好数据库设计之前,首先得对数据库中各种概念有所理解,然后在实施过程中,对数据库管理软件创建的各个部分有个整体的认识.

通过本次课程设计,学到了很多知识,不仅是数据库方面的,还有对软件设计过程中应该注意哪些问题也有了初步的认识,相信在以后的设计过程中,我会做得更好.

参考文献

<<Visual C++数据库编程技术与实例>> <<数据库原理实验指导>> <<数据库原理>>

本文来源:https://www.bwwdw.com/article/gnjj.html

Top