数据库课程设计基于VC的学生成绩管理系统.docx

上传人:b****7 文档编号:10825137 上传时间:2023-02-23 格式:DOCX 页数:21 大小:314.48KB
下载 相关 举报
数据库课程设计基于VC的学生成绩管理系统.docx_第1页
第1页 / 共21页
数据库课程设计基于VC的学生成绩管理系统.docx_第2页
第2页 / 共21页
数据库课程设计基于VC的学生成绩管理系统.docx_第3页
第3页 / 共21页
数据库课程设计基于VC的学生成绩管理系统.docx_第4页
第4页 / 共21页
数据库课程设计基于VC的学生成绩管理系统.docx_第5页
第5页 / 共21页
点击查看更多>>
下载资源
资源描述

数据库课程设计基于VC的学生成绩管理系统.docx

《数据库课程设计基于VC的学生成绩管理系统.docx》由会员分享,可在线阅读,更多相关《数据库课程设计基于VC的学生成绩管理系统.docx(21页珍藏版)》请在冰豆网上搜索。

数据库课程设计基于VC的学生成绩管理系统.docx

数据库课程设计基于VC的学生成绩管理系统

 

<学生成绩管理系统>

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

姓名:

_何祖祥_______

班级:

_计算0611_____

学号:

_2006810028______

指导老师:

__林颖贤_________

成绩:

________________

评语

计算机工程学院

2008年1月16日

 

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

[摘要]

学生成绩管理工作是学校管理工作的重要组成部分,随着学校规模的扩大、学生人数的增加,利用计算机技术和数据库技术设计开发学生成绩管理系统、实现学生成绩理工作的自动化成为学生管理部门的迫切需要。

本系统提供了学生的基本信息的查询、学生成绩的管理程教师的基本信息的管理等,主要包据了成绩的查询、录入、修改、删除和数据库的备份等功能。

好的学生成绩管理系统为管理学生成绩提供了方便,有效提高了对学生的成绩的管理。

本文介绍此次课程设计的选题背景和意义,相关的研究和设计的过程,以及设计思路和实现细节的考虑,为便于说明,文中绘制了程序结框图、数据流程图和部分界面图。

最后给出了我在本次课程设过中的体会。

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

 

 

第一章引言

 

1.1课题研究背景与意义

学生成绩管理工作是学校管理工作的重要组成部分,利用计算机技术和数据库技术设计开发学生学籍管理系统、实现学生学籍管理工作的自动化成为学生管理部门的迫切需要。

学生的成绩管理系统能大幅度地提高对成绩管理的效率,方便教师及教务处对学生成绩的管理.本系统主要完成对学生和教师的基本信息的录入、查询和删除;对学生的成绩的管理(包括成绩的查询、录入、修改、删除);以及数据库的备份等操作。

由于刚开始数据库设计的不是很好以及对VC运用的不熟练,所以有些功能想加上去,迫于水平和时间的有限,只能粗略地实现这些功能。

1.2本课题研究内容与目标

本课题研究对学生成绩管理系统要实现哪些功能才能为广大师

提供方便,应用对数据据原理的理论学习,通过上机实践的方式将理论知识与实践更好的给合起来,巩固所学的知识。

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

1.3开发环境

硬件:

PC,CPU:

AMDCoreProcessor4000+,内存:

1.00GB,硬盘:

160GB;

操作系统:

MicrosoftWindowsXP;

软件:

VisualC++6.0Server2000

1.4体系结构设计

第二章需求分析

 

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:

学生信息表

字段名称

数据类型

长度

约束

课程号

varchar

20

不为空

课程名称

varchar

20

不为空

学时

float

8

不为空

学分

float

8

不为空

任课老师

varchar

10

不为空

表2系表

字段名称

数据类型

长度

约束

系名

varchar

20

不为空

系主任

varchar

10

不为空

系人数

int

4

表3登陆表

字段名称

数据类型

长度

约束

用户类型

varchar

10

不为空

用户名

varchar

10

不为空

密码

varchar

10

不为空

表4班级表

字段名称

数据类型

长度

约束

班级

varchar

20

不为空

班主任

varchar

10

班人数

int

4

系名

varchar

20

不为空

表5教师

字段名称

数据类型

长度

约束

教师号

varchar

10

不为空

教师名

char

10

不为空

学历

varchar

20

联系方式

varchar

20

表6成绩

字段名称

数据类型

长度

约束

学号

char

10

不为空

课程号

varchar

20

不为空

学年学期

varchar

20

不为空

成绩

float

8

0~150

表7学生信息

字段名称

数据类型

长度

约束

学号

char

10

不为空

姓名

varchar

10

不为空

性别

char

2

不为空

年龄

int

4

不为空

电话

varchar

20

系名

varchar

20

不为空

班级

varchar

20

不为空

4.4视图设计

(1)打印成绩>60分的学生

createviewV_grade

as

selectA.学号,A.姓名,A.性别,B.课程号,C.课程名称,B.成绩

from学生信息A,成绩B,课程表C

whereA.学号=B.学号andB.课程号=C.课程号and成绩>60

执行:

select*fromV_grade

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

createviewV_computer

as

selectB.学年学期,A.学号,A.姓名,A.班级,C.课程名称,B.成绩

from学生信息A,成绩B,课程表C

whereA.学号=B.学号andB.课程号=C.课程号andA.系名='计算机工程学院'

执行:

select*fromV_computer

 

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

 

5.1约束关系:

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

altertable成绩

addconstraintCK_成绩check(成绩between0and150)

(2)为成绩表创建索引

createindexIX_成绩on成绩(学年学期ASC)

5.2储存过程设计

(1)根据输入的参数删除学生信息

createprocDeleteNum_proc

@numberchar(10)

as

delete学生信息

from学生信息

where学号=@number

(2)根据参数添加教师信息

createprocAddTeacher_proc

@teanumbervarchar(10),

@teanamechar(10),

@teascvarchar(20),

@teaphonevarchar(20)

as

insertinto教师

values(@teanumber,@teaname,@teasc,@teaphone)

(3)根据传入的参数删除相应的教师信息

createprocDeleteTea_proc

@teanumbervarchar(10)

as

delete教师

from教师

where教师号=@teanumber

(4)添加学生的信息

createprocAddStu_proc

@stunumchar(10),

@stunamevarchar(10),

@stusexchar

(2),

@stuyearint,

@stuphonevarchar(20),

@stuxivarchar(20),

@stuclassvarchar(20)

as

insertinto学生信息

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

5.3触发器设计

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

createtriggertri_学生信息

on学生信息fordelete

as

delete成绩from成绩A,deletedB

whereA.学号=B.学号

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

createtriggertri_教师

on教师fordelete

as

delete课程表from课程表asA,deletedasB

whereB.教师号=A.任课老师

(3)添加学生信息时,就为其添加登入信息

createtriggertri_login

on学生信息forinsert

as

declare@namevarchar

(2)

declare@passwordvarchar(10)

select@name=姓名frominserted

select@passwordfrominserted

insertinto登陆

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

(4)删除学生信息时,也删除登陆表中的信息

createtriggertri_destu

on学生信息fordelete

as

declare@namevarchar

(2)

declare@passwordvarchar(10)

select@name=姓名fromdeleted

select@password=学号fromdeleted

delete登陆from登陆

where用户名=@nameand密码=@password

5.4 模块设计

(1)模块一:

基本信息

该模块主要完成对学生及教师的查询、添加、以及删除等功能,在添加学生信息时,自动将其添加到登陆列表中,为其添加登陆的权限.先在SQL分析器中创建一个触发器,在向学生信息表中添加信息时,就会触发.建四个对话框,两个对话框用来显示学生信息和教师信息,另外两个对话框用来实现对学生和教师信息的管理.在显示基本信息对话框中,为其添加CLISTCONTRL控件,弄成报表的形式,在程序中调用建立的几个记录集.利用滚动记录的几个函数,实现向报表控件中添加数据,这样就可以把学生和老师的信息给显示出来.而在对学生和教师信息管理的对话框中,设立几个变量与对话框中的EDIT编辑框相关联.调用UpateData(),可以把输入的值传给变量,这样就可以实现所想要的功能.

(2)成绩查询模块.

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

(3)成绩管理模块

该模块实现对成绩的录入、修改、删除功能。

三个模块的功能是类似的,所以只要实现一个,其他的两个就相当容易了,在这里,我是调用SQL语句进行添加、修改和删除的。

首先把几个编辑框与几个变量进行关联,其实不用关联也是可以的,可以利用GetDlgItem(ID号)->GetWindowText(字符串变量),这样也可以把值传送给变量。

建立一个数据类对象CDatabasem_db,用这个对象打开相对应的数据库,用str.Format(“SQL语名”),对字符串进行格式化成SQL语句,这样就可以用m_db.ExecuteSQL(str),执行SQL语句,这样相写一个函数进行查询,省了很多的代码,比较简洁。

也可以调用存储过程进行实现,因为获取返回值的存储过程不会,所以这里有调用的存储过程是没有返回值的。

(4)系统管理模块和数据库管理模块

这两个模块,一个用于修改用户的密码,一个用于数据库的备份与删除。

在修改密码这个对话框中,把用户登陆名给显示出来,旧密码保存在全局变量中,用来检验用户输入的旧密码是否正确,如果正确的话,调用SQL语句的Update对数据库中的相应元组进行修改。

数据库备份这个模块,用了一个CCOMBOX控件,用来让用户选择进行哪种数据操作,有数据库完全备份,差异备份和移除设备。

这三个都是调用数据库的相应命令进行操作。

如完作备份,刚调用如下语句:

sql.Format("backupdatabasestudenttodisk='%s'",m_getpathname);此处是利用CFileDlg进行相应的操作。

不过这段内容有点缺陷,就是在退出程序后,原来保存的那个路径名会清空,所以还得再选择路径进行备份。

 

结论

在本次课程设计过程中,学到了很多知识,由于课程设计起草的比较晚,所以功能比较差些,功能也未能进行更深入的思考,自己也对VC涉足不深,所以在运用方面有所欠缺,数据库方面,整体考虑也不周到。

在课设的前一周有对课设考虑了一下,本来有考虑了好几个模块,像成绩录入模块、班级统计模块、年级统计模块。

在成绩录入模块中再分别进行录入、修改、增加、删除、查询、打印等功能。

班级统计模块又分别有学生总成绩、平均成绩、班级排名、统计班级某分数段内的学生成绩人数、各学生该科成绩、班级排名等功能(只相对于某个学期)。

还有年级统计模块,分为各年级各专业学生总成绩还有排名、各学生各科成绩年级排名,各班各分数段人数等功能。

不过在考完试之后再开始真正做课程设计,时间有些伧促,所以只是实现其中的一部分功能。

在用VC与SERVER2000进行学生成绩管理系统的设计时,开始对用ODBC连接数据库时,经过了一天的时间,本打算用ADO进行连接,不过对我来说有点眼高手低,对ADO与ODBC都是一点都不懂,最后还是决定用ODBC进行连接,相对比较容易上手。

通过本次课程设计,对在VC++中如何编写基本的ODBC数据库等有了初步的认识,还有也提高了Windows编程技术,进一步提高了VisualC++的操作能力,虽然在之前看过孙鑫的一些视频,由于很少进行操作,忘了差不多了,只记得些基本的操作。

就比如在求平均分时,就花了我一个下午的时间进行实现这个功能,主要是对属性表单的创建不知道,所以要查找资料,翻出孙鑫的视频,进行摸索,在程序中把属性表单的类建成基于对话框的类,在改过来的过程中经历了不少挫折,最后通过对比基于对话框的类和基于属性页的类,把程序给改了过来,总算是完成了这项功能,进一步回顾了这部分的知识.而对于SQL语句如何在MFC中实现,则完全不懂,所以刚开始建的那些查找之类的功能,都是用CRecordset提供的几个成员函数进行滚动查找,操作有些繁琐,代码有些冗余.在快把课程设计给初步做完时,才弄懂如何把SQL语句在MFC中运行,虽然知道的有些晚,但还是学会了如何运用,所以把之前的有些代码,弄成运用存储过程或查询、更新的那几个SQL语句进行执行.进行测试后,可以运行.在弄登陆框时,也出现了一些麻烦,比如点右上角的那个X,程序会进入主页面,通过这条路径不用输入密码,这是一大漏洞,本来以为点X时,会跟点退出是响应同一个函数的,百思不得其解,最终通过一个网友的解答,说是用DOModal()时应该加一句判断,这样就可以解决那个问题了.

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

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

 

参考文献

 

<>

<<数据库原理实验指导>>

<<数据库原理>>

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 哲学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1