学生成绩管理系统 数据库课程设计报告.docx

上传人:b****8 文档编号:30141046 上传时间:2023-08-05 格式:DOCX 页数:16 大小:203.08KB
下载 相关 举报
学生成绩管理系统 数据库课程设计报告.docx_第1页
第1页 / 共16页
学生成绩管理系统 数据库课程设计报告.docx_第2页
第2页 / 共16页
学生成绩管理系统 数据库课程设计报告.docx_第3页
第3页 / 共16页
学生成绩管理系统 数据库课程设计报告.docx_第4页
第4页 / 共16页
学生成绩管理系统 数据库课程设计报告.docx_第5页
第5页 / 共16页
点击查看更多>>
下载资源
资源描述

学生成绩管理系统 数据库课程设计报告.docx

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

学生成绩管理系统 数据库课程设计报告.docx

学生成绩管理系统数据库课程设计报告

学生成绩管理系统

数据库课程设计报告

1需求分析

1.1用户需求概述

本系统为学生成绩管理系统,该系统开发的主要目的是使得学生的成绩管理工作更加清晰、条理化、自动化,实现对学生成绩的集中统一的管理。

具体完成通过用户名和密码登录系统,查询课程基本资料,学生所选课程成绩,修改用户密码等功能。

本系统主要实现对学生成绩的管理,需要完成的主要功能有:

(1)通过用户名和密码登录系统,查询课程基本资料,学生所选课程成绩,修改用户密码等功能,容易地完成学生信息的查询操作。

(2)设计人机友好界面,功能安排合理,操作使用方便,并且进一步考虑系统在安全性,完整性,并发控制,备份和恢复等方面的功能要求。

1.2数据需求

Student表:

sno

Char(8)

不允许为空

sname

Char(10)

不允许为空

Ssex

Char

(2)

不允许为空

sbirth

Datetime(8)

允许为空

class

Char(4)

不允许为空

type

Char(7)

允许为空

score表结构:

sno

Char(8)

不允许为空

cno

Char(5)

不允许为空

degree

Float(8)

不允许为空

Course表:

cno(主键)

Char(5)

不允许为空

cname

varchar(10)

不允许为空

tno

char(3)

不允许为空

Teacher表

tno

char(5)

不允许为空

tname

varchar(10)

不允许为空

depart

varchar(8)

不允许为空

Tsex

char

(2)

不允许为空

Tbirth

datetime,

允许为空

prof

char(6)

允许为空

 

2概念设计内容

2.1概念设计综述

由需求分析的结果可知,本系统设计的实体包括:

(1)学生基本信息:

学号,姓名,性别,地址,年龄,专业。

(2)课程基本信息:

课程名,课程号,分数,学时,学分。

这些实体间的联系包括:

(1)学生(学号,姓名,性别,年龄,地址,系别),其主关键字为学号;

(2)课程(课程名,课程号,学时,学分),其中主关键字为课程号;

(3)成绩(课程号,学号,分数)其中主关键字为学号和课程号。

可以与学生关系模式合并为:

学生(学号,姓名,性别,年龄,地址,系别,成绩,课程号)。

2.2E-R模型如下:

3规范化设计

1.范式的判断条件:

第一范式:

如果一个关系模式R的所有属性域都是原子的,我们称关系模式R属于第一范式;

第二范式:

若关系模式R满足第一范式,且每一个非主属性完全函数依赖于码,则关系模式R满足第二范式;

BC范式:

对于R中所有的函数依赖,下面至少有一个成立(α—>β是平凡的,α是模式R的一个超码);

第三范式:

在BC范式的判断条件上加多一个条件:

β-α中每个属性A都包含在R的一个候选码中。

2.本关系模型的判断:

A、对于我设计的关系模式中所有实体集和关系集,每一个属性的属性域都是不可再分的,都具有原子性,因此由该关系模式转换而来的关系模型符合第一范式的要求。

B、对于由关系模式中的联系集转换而来的关系模型,因为它们的属性都是参加关系的实体集的主码,都完全依赖于对应关系集的主码且都是非平凡的函数依赖,因此这些关系模型满足2NF,3NF,BCNF;

4数据库逻辑设计

4.1关系模型

与设计的关系模式相对应的SQL语句如下:

4.2.1创建数据库:

createdatabasessh

on

(name=ssh,

filename='e:

\database\ssh.mdf’,

size=1)

logon

(name=ssh1,

filename='e:

\database\ssh1.ldf',

size=1)

4.2.2创建数据表

(1)student表

usessh

createtablestudent

(snochar(8)primarykey,

snamechar(10)notnull,

Ssexchar

(2)notnull,

Sbirthdatetime,

classchar(4)notnull

semailvarchar(20))

(2)score表

createtablescore

(snochar(8)notnull,

cnochar(4)notnull,

degreefloatnotnull)

(3)course表

createtablecourse

(cnochar(5)notnullprimarykey,

cnamevarchar(10)notnull,

tnochar(3)notnull)

(4)teacher表

createtableteacher

(tnochar(5)notnullprimarykey,

tnamevarchar(10)notnull,

departvarchar(8)notnull,

Tsexchar

(2)notnull,

Tbirthdatetime,

profchar(6))

 

4.2编程性结构

4.2.1创建存储过程

(1)创建一个存储过程。

用来显示成绩表中的课程号在课程表中并且所任教师性别为男、所在部门是计算机系的成绩表中的列

createprocstudent_11

as

select*fromscorewherecnoin(selectcnofromcourse,teacherwherecourse.tno=teacher.tnoanddepart='计算机系'andtsex='男')

调用此存储过程

Exec student_11

(2)创建一个带输入参数的存储过程。

调用此存储过程时,给出一个学生名,显示出此学生的学号,姓名,所学课程号,课程名称和对应的成绩

createprocstudent_name

@snamevarchar(10)

as

selectstudent.sno,sname,o,degreecnamefromstudent,score,course

wherestudent.sno=score.snoando=oandsname=@sname

调用此存储过程,(此例是输出姓名为历史的学生的信息)

execstudent_name'历史'

(3)创建一个存储过程,传递一个学生姓名。

先判断此学生是否有邮箱,如果有,则显示此学生的姓名,邮箱地址,学号,班级;如果没有的话,输出此句话'thesemailisempty'

createprocstudent_email

@snamevarchar(10)

as

begin

if(selectsemailfromstudentwheresname=@sname)isnull

begin

print'thesemailisempty'

end

else

selectsname,semail,sno,classfromstudentwheresname=@sname

end

调用此存储过程

execstudent_email'super'

当给出姓名的那个学生没有邮箱地址时,则会显示如下内容。

execstudent_emaildfdf'

4.2.2触发器

(1)创建一个触发器。

来检查学生的邮箱地址是否相同,如果相同,输出'insertingfail',并且回滚事务;如果不相同,则插入成功。

createtriggerstudentinsert

onstudent

afterinsert

as

if(selectsemailfrominsertedwheresemailin(selectsemailfromstudent))isnotnull

begin

print'insertingfail'

rollbacktransaction

end

else

print'inseringsucceed'

向学生信息表中插入一条记录,检验是否成功插入

insertintostudentvalues('114','lengbing','女','1985-12-12','11','********************','一般')

(2)在成绩表中建立一个触发器,

当向表中添加记录时,此学生的成绩都乘以1.2

createtriggerscoreupdateonscore

afterinsert

as

updatescoresetdegree=degree*1.2fromscorewheresnoin(selectsnofrominserted)

向表中插入一条记录,检验触发器是否有用。

insertintoscorevalues('108','01','56')

4.2.3自定义函数

(1)创建一个用户自定义函数,输出与指定的学生同班的学生个数

createfunctionstudentcount(@snochar(5))returnsint

begin

declare@counterint

select@counter=count(*)fromstudentwhereclass=(selectclassfromstudentwheresno=@sno)

return@counter

end

调用此自定义函数(本例是查找与学号102同班的学生个数)

declare@aint

set@a=dbo.studentcount('102')

printconvert(char(3),@a)

(2)创建一个用户自定义函数,用于输出同一个班级中的学生信息

createfunctionstudentclass

(@classchar(5))

returnstable

return(select*fromstudentwhereclass=@class)

调用自定义函数(本例是输出12班的学生信息)

select*fromstudentclass('12')

4.3数据操作

4.3.1插入

(1)向学生表插入信息

insertintostudentvalues('101','生活','女','1983-09-18','11')

insertintostudentvalues('102','风尘','男','1984-01-01','11')

insertintostudentvalues('103','离开','男','1984-01-01','11')

insertintostudentvalues('104','流浪','女','1984-11-11','11')

insertintostudentvalues('105','生命','男','1984-12-05','13')

insertintostudentvalues('106','无悔','女','1984-11-01','13')

insertintostudentvalues('107','历史','女','1984-10-01','12')

insertintostudentvalues('108','风尘','男','1985-9-08','11')

insertintostudentvalues('109','活着','男','1985-12-12','12')

insertintostudentvalues('110','傻瓜','女','1985-08-28','12')

查看记录

Select*fromstudent

(2)向成绩表中添加

insertintoscorevalues('101','01',88)

insertintoscorevalues('101','02',85)

insertintoscorevalues('102','02',80)

insertintoscorevalues('101','03',88)

insertintoscorevalues('102','02',85)

insertintoscorevalues('102','03',80)

insertintoscorevalues('103','01',83)

insertintoscorevalues('103','02',85)

insertintoscorevalues('103','03',90)

insertintoscorevalues('104','01',60)

查看记录

Select*fromscore

(3)向教师表中添加数据

insertintocoursevalues('01','计算机','11')

insertintocoursevalues('02','网络管理','12')

insertintocoursevalues('03','专业英语','13')

insertintocoursevalues('04','软件工程','14')

查看记录

Select*fromcourse

(4)向课程表中添加数据

insertintoteachervalues('11','无意','计算机系','男','1973-4-5','教授')

insertintoteachervalues('12','生活','计算机系','女','1975-12-1','副教授')

insertintoteachervalues('13','没有','管理系','女','1975-3-3','副教授')

insertintoteachervalues('14','离开','英语系','男','1973-5-5','教授')

查看记录

Select*fromteacher

4.3.2查询

(1)查询成绩大于学号为101的学生的课程为02的成绩的所有列。

select*fromscorewheredegree>(selectdegreefromscorewheresno='101'andcno='02')

(2)查询课程号01大于课程号02的最大值、并以分数降序排序的成绩表中所有列

select*fromscoreswhereo='01'ands.degree>=(selectmax(degree)fromscoreywhereo='02')orderbydegreedesc

go

selectmax(degree)as"02max"fromscorewherecno='02'

(3)查询性别为男的学号,姓名,班级,课程号和成绩的学生

selectstudent.sno,student.sname,student.class,o,score.degreefromstudent,scorewherestudent.sno=score.snoandssex='男'

(4)查询成绩在60到80之间的所有列

select*fromscorewheredegreebetween60and80

(5)查询score表中至少有5名学生选修的并以0开头的课程的平均分

selectavg(degree)as"平均分",cnofromscorewherecnolike'0%'groupbycnohavingcount(*)>=5

4.3.3创建数据类型

创建一个email自定义数据类型

execsp_addtypeemail,'varchar(20)','null'

修改student表中的semail数据类型为email类型

altertablestudentaltercolumnsemailemail

4.3.4向表中添加字段

向student表添加type,semail,,b并且邮件地址有check约束

altertablestudentaddtypechar(7)

altertablestudentaddsemailvarchar(20)nullconstraintck_semcheck(semaillike'%@%')

altertableteacheraddtelvarchar(15)

4.3.5创建视图

(1)创建所有11班的学生信息的视图

createviewstudent11

as

select*fromstudentwhereclass='11'

查看视图中的记录

select*fromstudent11

(2)创建视图course_degree

其中的内容是选修计算机课程的学生信息,包括(sno,sname,cno,cname,degree),创建时加上withcheckoption

createviewcourse_degree(sno,sname,cno,cname,degree)

as

selectscore.sno,sname,o,cname,degreefromcourse,student,score

whereo=oandstudent.sno=score.snoandcname='计算机'

withcheckoption

查看视图中的记录

select*fromcourse_degree

(3)创建一个视图,其中的内容是成绩表中每门课程的

createviewaverage

as

selectavg(degree)as'平均分'fromscoregroupbycno

查看视图中的记录

select*fromaverage

(4)创建视图其中的内容是所有男教师和男学生的name,sex,birth

createviewman

as

selectsnameasname,ssexassex,sbirthasbirthfromstudentwheressex='男'

unionselecttname,tsex,tbirthfromteacherwheretsex='男'

查看视图中的记录

select*fromman

5实验总结与感想。

通过这次的课程设计,使我了解了更多数据库系统概念这门课程,对以前不太理解和熟悉的内容有更多的掌握。

在我设计的学生成绩管理系统中,虽然一开始我对这个系统怎样设计完完全全没有概念,但是如果仔细的想一下,还是可以找到出发点的。

首先要建立一个完整的管理系统,就必须明白这个系统所包含的基本内容、处理一些怎样的信息等。

最主要的是画出他们的E—R图,便可直观的看出他们关系。

在设计的时候,有时候也会感到没有思路了,或许是只有一点点的头绪,可经过对图的分析和认真观察他们的关系后,便有了新的思路和闪光点。

最后根据自己的整理资料将每一步都运用SQL语言执行出来,并且看以下是否符合结果要求。

我想经过这次课程设计可以更好的将所学知识运用到实际中去,也让我加深了对数据库知识的认识和了解。

在这次实践设计过程中,我懂得了如何将所学的理论知识运用到实际中去,使得所学的知识能够融会贯通。

同时,在课程设计过程中,我懂得了许多知识,增加了我对数据库的兴趣,今后一定努力的学习,在实践中增加自己的学习乐趣,让自己更加充实。

最后,感谢老师一学期来对我们的辛勤教导。

 

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

当前位置:首页 > 表格模板 > 合同协议

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

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