学生成绩管理系统数据库项目设计报告Word文件下载.docx
《学生成绩管理系统数据库项目设计报告Word文件下载.docx》由会员分享,可在线阅读,更多相关《学生成绩管理系统数据库项目设计报告Word文件下载.docx(17页珍藏版)》请在冰豆网上搜索。
课程(课程编号、课程教师编号、课程名称);
成绩(学号、课程编号、分数);
学生(班级、姓名、学号、性别、专业);
教师(教师号、姓名、所属专业、性别)。
2.2局部E-R图
课程号
课程名
任课教师号
教师号
课程
教师
师
姓名
系别
性别
授课
m
n
成绩
学号
课程编号
分数
1
考试
学生
专业
班级
选修
2.3全局E-R图
拥有
讲授
课程名称
教授
3逻辑结构设计
E-R图向关系模型转化要解决的问题是如何将实体型和实体间的联系转化为关系模式,如何确定这些关系模式的属性和码。
设计学生成绩管理数据库,包括课程(course)、学生(student)、成绩(sc)、教师(teacher)四个关系,其关系模式中对每个实体定义的属性如下:
course表:
(课程号(cno),教师号(tno),课程名(cname))
此为联系“course表”所对应的关系模式。
课程号和教师号为该关系的候选码,满足第三范式。
student表:
((学号(sno),班级(sclass),姓名(sname),性别(ssex),专业(smajor))
此为联系“student表”所对应的关系模式。
学号为该关系的候选码,满足第三范式。
sc表:
(学号(sno),课程号(cno),成绩(degree))
此为联系“sc表”所对应的关系模式。
学号和课程号为该关系的候选,满足第三范式。
teacher表:
(教师姓名(tname)、性别(tsex)、教师号(tno)、专业(tmajor))
此为联系“teacher表”所对应的关系模式。
教师号为该关系的候选码,满足第三范式。
数据库中包含4个表,即课程信息(course),学生信息(student),成绩信息(sc),教师信息(teacher)。
course表的表结构
列名
数据类型
长度
小数位数
是否允许NULL值
说明
cno
char
5
否
主码
cname
varchar
20
tno
3
student表的表结构
sno
9
sname
8
是
ssex
2
取值:
男或女
smajor
sclass
10
sc表的表结构
组合主码,外码
degree
decimal
4
取值1-100
teacher表的表结构
tname
tsex
tdept
16
4创建数据库及相关操作
4.1创建数据库
CREATEdatabasetest;
/*创建test数据库*/
4.1.1创建表
CREATETABLEcourse(//创建课程信息表
cnochar(5)NOTNULL,
cnamevarchar(20)NOTNULL,
tnochar(3)NOTNULL,
CONSTRAINTC1PRIMARYKEY(cno)
);
CREATETABLEstudent(//创建学生信息表
snochar(9)PRIMARYKEY,
snamechar(8),
ssexchar
(2),
smajorchar(20),
sclasschar(10)
CREATETABLEsc(//创建成绩表
snochar(10)NOTNULL,
degreedecimal(4,1),
cnochar(5)NOTNULL,
CONSTRAINTA1PRIMARYKEY(sno,cno),
CONSTRAINTA2CHECK(degree>
=0anddegree<
=100)
CREATETABLEteacher(//创建教师表
tnamevarchar(8),
tsexchar
(2),
tdeptchar(16),
CONSTRAINTC1PRIMARYKEY(tno)
4.1.2添加记录
course表添加示例:
INSERTINTOcourse
VALUES(’C01’,’科学导论’,’101’);
为了简化,其余用Navicat添加
student表添加示例:
INSERTINTOstudent
VALUES(’140210316’,’叶何斌’,’男’,’计算机科学与技术’,’计算机1403’);
为了简化,其余用Navicat添加。
sc表添加示例:
INSERTINTOsc
VALUES(’140210316’,’87’,’C01’);
teacher表添加示例:
INSERTINTOteacher
4.2建立视图
4.2.1
定义视图v_student,查询所有选修科学导论的课程的学生的学号(sno),姓名(sname),成绩(degree)。
代码:
CREATEVIEWv_student
AS
SELECTA.sno,sname,degree
FROMstudentA,courseB,scC
WHEREA.sno=C.snoANDB.cno=C.cnoANDcname='
科学导论'
;
查询定义视图v_student
SELECT*FROMv_student;
结果:
4.2.2
利用视图向表sc中插入一条数据。
view_sc是创建的视图
CREATEVIEWview_sc//创建
SELECTsno,degree,cno
FROMsc;
INSERTINTOview_sc//执行
VALUES('
140210321'
'
88'
C01'
SELECTsno,degree,cno//查看结果
在sc表中已经正确插入。
DELETEFROMview_scWHEREsno=’140210321’;
//删除
已经正确删除。
4.2.3
修改视图view_sc的代码为:
ALTERVIEWview_scASSELECTsno,degree,cno;
删除视图view_sc的代码为:
DROPVIEWview_sc;
4.3建立存储过程
4.3.1
创建一个存储过程,从student表中检索出所有班级为“计算机1403”的学生的学号,姓名。
DELIMITER///*将MYSQL的结束符设置为//*/
CREATEPROCEDUREproc_stud()
READSSQLDATA
BEGIN
SELECTsno,sname,smajorFROMstudent
WHEREsclassLIKE'
%计算机1403%'
ORDERBYsno;
END//
DELIMITER;
/*将结束符恢复成分号*/
执行存储过程:
CALLproc_stud;
4.3.2
创建一个num_sc的存储过程,统计一个同学的课程成绩个数。
CREATEPROCEDUREnum_sc(INtmp_snochar(9),OUTcount_numINT)
SELECTCOUNT(*)INTOcount_numFROMsc
WHEREsno=tmp_sno;
4.4建立触发器
在数据库的student表中,定义一个触发器,当一个学生被删除时,把该学生的学号和姓名添加到delstudent表中。
CREATETABLEdelstudentSELECTsno,snameFROMstudentWHERE1=0;
//创建一个空表用于接受删除后的数据
CREATETRIGGERtrig_student//创建student表的触发器
AFTERDELETEONstudentFOREACHR0W
INSERTINTOdelstudent(sno,sname)values(old.sno,old.sname);
DELETEFROMstudentWHEREsname='
李甜甜'
//删除一个学生,验证触发器是否触发。
select*fromdelstudent;
//查看接受删除数据表
触发器已经触发。
4.5查询问题及查询结果
4.5.1
查询所有学生的学号、姓名、性别和专业
selectsno,sname,ssex,smajor
fromstudent;
4.5.2
计算“C01”课程的平均成绩。
SELECTAVG(degree)FROMsc
WHEREcno='
4.5.3
查询选修课程名为“高等数学”的学生学号和姓名。
SELECTA.sno,sname
FROMstudentAINNERJOINscBONA.sno=B.sno
INNERJOINcourseCONB.cno=C.cno
WHEREC.cname='
高等数学'
4.5.4
查询“C03”课程不及格的学生信息
SELECTA.sno,sname,ssex,smajor,sclass
WHEREC.cno='
C03'
ANDB.degree<
60;
4.5.5
查询不讲授“C01”课程的教师姓名。
SELECTtname
FROMteacher
WHEREtno=ANY(SELECTtnoFROMcourseWHEREcno!
='
);
4.5.6
插入学号为“140210322”、姓名为“曾淑亮”、性别为“男”的学生信息。
INSERTINTOstudent(sno,sname,ssex)
VALUES('
140210322'
曾淑亮'
男'
5项目设计总结
这次学生成绩管理系统设计,我们主要采用的是命令行,然后Navicat图形界面辅助操作的方式完成设计。
通过这次程序设计,加深了对课程设计的理解。
在这次课程设计中,我们回顾了很多以前的东西,也发现了很多的问题,以前都没遇见过的,收获很大。
在对不同的功能代码是不一定可以完整的执行的,不过大概都是一样的。
看着自己做的系统,我们自己就会又欣慰又难过,欣慰的是终于把它做出来了,虽然遇到很多困难,难过的是自己知道还有很多的不足,但是由于知识的有限,无法去完善,才知道“书到用时方恨少”。
此次成绩管理系统的设计让我们对Mysql数据库的了解更加深入,在整个是设计过程中,通过对把各个管理信息连接起来的分析,锻炼了我们对事情的分析能力,通过怎样解决过程中出现的问题,提高了我们查找文献的能力,对网络资源的利用能力和与其他同学的交流沟通能力。
而且经历这次课程设计,我们也学会了自学和分工合作。
我们觉得每一次的课程设计,都是让我们对原有知识从了解表面到深入本质,从个体学习到整体把握的跳跃,更是让我们把课本的知识应用到实际中,让我们了解了我们的学习有什么用,能够解决什么样的问题,增加我们的自信和学习的动力。
总之,通过这次课程设计,我们获益匪浅。
也感受到了和同学合作开发的乐趣,同时验证了一句话“团结就是力量”。
最后感谢老师的悉心教导,为我们的程序开发之路打下了扎实的基础。