资源描述
计算机1403
学生成绩管理系统 项目设计报告
作者:……………
2015/11/23
目 录
1 项目背景及需求分析 2
1。1项目背景 2
1。2需求分析 2
2 概念结构设计 3
2。1抽象出系统实体 3
2.2局部E-R图 3
2。3全局E-R图 6
3 逻辑结构设计 6
4 创建数据库及相关操作 9
4。1 创建数据库 9
4.2建立视图 10
4。3建立存储过程 12
4。4建立触发器 13
4.5查询问题及查询结果 14
5项目设计总结 17
1项目背景及需求分析
1。1项目背景
高校是教学和科研的重要基地,同时还是培养人才的重要场所。随着计算机技术的发展和互联网时代的到来,学校的教学管理受到了极大的挑战。
Internet技术持续迅猛的发展为传统的教学管理提出了新的模式。以现在计算机技术、网络技术为基础的数字化教学管理要依靠自身的人才优势,加强对信息资源的开发和利用,做好学校信息化的基础教学工作,是学校朝着信息化、网络化、现代化的目标迈进。这种新的管理模式,对于管理极为宝贵的特性,可以为新型管理模式的建构提供理想的基础。
系统由授课教师来完成成绩录入,而学生可以自行查询成绩。这样除了减轻教学管理部门人员的工作负担,还可以减少信息错误的发生,同时为其他部门甚至全校教职工提供信息服务。
开发的学生成绩管理系统则是以校园网为基础的管理系统,利用网络能快速、及时、准确的传递信息的作用,使部门的“信息孤岛”过渡到紧密相关并在全校范围内都可用的数据。通过网络可以使管理部门能够更方便的管理学生的成绩系统;也使得教师能够方便的上传、校队学生成绩;还可以使学生能够快速查询成绩.这样管理部门对信息的管理和控制方式变成双向的,不但减少管理方面的工作量,而且可以做到信息管理规范化,从而得到科学的统计和快速的查询。
1.2需求分析
针对河北工程大学的成绩管理工作量大、繁杂,人工处理非常困难。学生成绩管理系统借助于计算机强大的处理能力,大大减轻了管理人员的工作量,并提高了处理的准确性.学生成绩管理系统的开发运用,实现了学生成绩管理的自动化,不仅把广大教师从繁重的成绩管理工作中解脱出来、把学校从传统的成绩管理模式中解放出来,而且对学生成绩的判断和整理更合理、更公正,同时也给教师提供了一个准确、清晰、轻松的成绩管理环境。
2概念结构设计
2。1抽象出系统实体
课程(课程编号、课程教师编号、课程名称);
成绩(学号、课程编号、分数);
学生(班级、姓名、学号、性别、专业);
教师(教师号、姓名、所属专业、性别)。
2.2局部E—R图
课程号
课程名
任课教师号
教师号
教师号
课程
教师师
姓名
系别
性别
教师号
授课
m
n
班级
姓名
学生师
学号
性别
专业
学号
教师师
姓名
系别
教师号
性别
教授
教师号
1
n
成绩师
学号
课程编号
分数
课程号
学号
n
1
考试
学生师
专业
学号
班级
性别
姓名
课程师
课程号
课程名
任课教师号
n
m
选修
课程号
成绩
学号
学生师
专业
学号
班级
性别
姓名
2.3全局E-R图
1
拥有
选修
课程名
成绩
学号
1
n
考试
课程号
学号
学号
课程编号
分数
n
1
讲授
教师号
课程号
课程编号
任课教师号
课程名称
课程
性别
系别
姓名
教师号
教师
成绩
专业
性别
学号
姓名
班级
学生
1
n
教授
教师号
学号
1
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
char
3
否
student表的表结构
列名
数据类型
长度
小数位数
是否允许NULL值
说明
sno
char
9
否
主码
sname
char
8
是
ssex
char
2
是
取值:男或女
smajor
char
20
是
sclass
char
10
是
sc表的表结构
列名
数据类型
长度
小数位数
是否允许NULL值
说明
sno
char
10
否
组合主码,外码
degree
decimal
4
1
是
取值1—100
cno
char
5
否
组合主码,外码
teacher表的表结构
列名
数据类型
长度
小数位数
是否允许NULL值
说明
tno
char
3
否
主码
tname
varchar
8
是
tsex
char
2
是
取值:男或女
tdept
char
16
是
4 创建数据库及相关操作
4.1创建数据库
CREATE database test; /*创建test数据库*/
4。1.1创建表
CREATE TABLE course( //创建课程信息表
cno char(5) NOT NULL,
cname varchar(20) NOT NULL,
tno char(3) NOT NULL,
CONSTRAINT C1 PRIMARY KEY(cno)
);
CREATE TABLE student( //创建学生信息表
sno char(9) PRIMARY KEY,
sname char(8),
ssex char(2),
smajor char(20),
sclass char(10)
);
CREATE TABLE sc( //创建成绩表
sno char(10) NOT NULL,
degree decimal(4,1) ,
cno char(5) NOT NULL,
CONSTRAINT A1 PRIMARY KEY(sno,cno),
CONSTRAINT A2 CHECK(degree〉=0 and degree<=100)
);
CREATE TABLE teacher( //创建教师表
tno char(3) NOT NULL,
tname varchar(8),
tsex char(2),
tdept char(16),
CONSTRAINT C1 PRIMARY KEY(tno)
);
4。1.2添加记录
course表添加示例:
INSERT INTO course
VALUES(’C01’,’科学导论’,’101’);
为了简化,其余用Navicat添加
student表添加示例:
INSERT INTO student
VALUES('140210316’,'叶何斌’,'男’,’计算机科学与技术’,’计算机1403’);
为了简化,其余用Navicat添加.
sc表添加示例:
INSERT INTO sc
VALUES(’140210316','87’,'C01’);
为了简化,其余用Navicat添加
teacher表添加示例:
INSERT INTO teacher
VALUES(’140210316’,’叶何斌’,’男’,’计算机科学与技术’,'计算机1403’);
为了简化,其余用Navicat添加
4。2建立视图
4.2。1
定义视图v_student,查询所有选修科学导论的课程的学生的学号(sno),姓名(sname),成绩(degree).
代码:
CREATE VIEW v_student
AS
SELECT A。sno,sname,degree
FROM student A,course B,sc C
WHERE A.sno=C。sno AND B.cno=C。cno AND cname=’科学导论';
查询定义视图v_student
代码:
SELECT *FROM v_student;
结果:
4。2.2
利用视图向表sc中插入一条数据。view_sc是创建的视图
代码:
CREATE VIEW view_sc //创建
AS
SELECT sno,degree,cno
FROM sc;
INSERT INTO view_sc //执行
VALUES(’140210321',’88’,'C01');
SELECT sno,degree,cno //查看结果
FROM sc;
结果:
在sc表中已经正确插入。
DELETE FROM view_sc WHERE sno='140210321’;//删除
结果:
已经正确删除.
4。2。3
修改视图view_sc的代码为:ALTER VIEW view_sc AS SELECT sno,degree,cno;
删除视图view_sc的代码为:DROP VIEW view_sc;
4。3建立存储过程
4。3.1
创建一个存储过程,从student表中检索出所有班级为“计算机1403”的学生的学号,姓名。
代码:
DELIMITER // /*将MYSQL的结束符设置为//*/
CREATE PROCEDURE proc_stud()
READS SQL DATA
BEGIN
SELECT sno,sname,smajor FROM student
WHERE sclass LIKE ’%计算机1403%’ ORDER BY sno;
END //
DELIMITER ; /*将结束符恢复成分号*/
执行存储过程:CALL proc_stud;
结果:
4。3。2
创建一个num_sc的存储过程,统计一个同学的课程成绩个数。
代码:
DELIMITER // /*将MYSQL的结束符设置为//*/
CREATE PROCEDURE num_sc(IN tmp_sno char(9), OUT count_num INT)
READS SQL DATA
BEGIN
SELECT COUNT(*) INTO count_num FROM sc
WHERE sno=tmp_sno;
END //
DELIMITER ; /*将结束符恢复成分号*/
4。4建立触发器
在数据库的student表中,定义一个触发器,当一个学生被删除时,把该学生的学号和姓名添加到delstudent表中。
代码:
CREATE TABLE delstudent SELECT sno,sname FROM student WHERE 1=0; //创建一个空表用于接受删除后的数据
CREATE TRIGGER trig_student//创建student表的触发器
AFTER DELETE ON student FOR EACH R0W
INSERT INTO delstudent(sno,sname) values(old。sno, old.sname);
DELETE FROM student WHERE sname='李甜甜’; //删除一个学生,验证触发器是否触发.
select * from delstudent; //查看接受删除数据表
结果:
触发器已经触发。
4。5查询问题及查询结果
4.5。1
查询所有学生的学号、姓名、性别和专业
代码:
select sno,sname,ssex,smajor
from student;
结果:
4。5。2
计算“C01”课程的平均成绩。
代码:
SELECT AVG(degree) FROM sc
WHERE cno='C01';
结果:
4。5.3
查询选修课程名为“高等数学”的学生学号和姓名.
代码:
SELECT A。sno,sname
FROM student A INNER JOIN sc B ON A。sno=B.sno
INNER JOIN course C ON B。cno=C.cno
WHERE C。cname=’高等数学';
结果:
4。5.4
查询“C03”课程不及格的学生信息
代码:
SELECT A.sno,sname,ssex,smajor,sclass
FROM student A INNER JOIN sc B ON A.sno=B。sno
INNER JOIN course C ON B。cno=C.cno
WHERE C。cno='C03’ AND B.degree<60;
结果:
4.5.5
查询不讲授“C01"课程的教师姓名。
代码:
SELECT tname
FROM teacher
WHERE tno=ANY(SELECT tno FROM course WHERE cno!=’C01’ );
结果:
4。5。6
插入学号为“140210322”、姓名为“曾淑亮”、性别为“男”的学生信息.
代码:
INSERT INTO student (sno,sname,ssex)
VALUES (’140210322’,’曾淑亮',’男');
结果:
5项目设计总结
这次学生成绩管理系统设计,我们主要采用的是命令行,然后Navicat图形界面辅助操作的方式完成设计。通过这次程序设计,加深了对课程设计的理解。在这次课程设计中,我们回顾了很多以前的东西,也发现了很多的问题,以前都没遇见过的,收获很大。在对不同的功能代码是不一定可以完整的执行的,不过大概都是一样的.看着自己做的系统,我们自己就会又欣慰又难过,欣慰的是终于把它做出来了,虽然遇到很多困难,难过的是自己知道还有很多的不足,但是由于知识的有限,无法去完善,才知道“书到用时方恨少”。
此次成绩管理系统的设计让我们对Mysql数据库的了解更加深入,在整个是设计过程中,通过对把各个管理信息连接起来的分析,锻炼了我们对事情的分析能力,通过怎样解决过程中出现的问题,提高了我们查找文献的能力,对网络资源的利用能力和与其他同学的交流沟通能力.而且经历这次课程设计,我们也学会了自学和分工合作。
我们觉得每一次的课程设计,都是让我们对原有知识从了解表面到深入本质,从个体学习到整体把握的跳跃,更是让我们把课本的知识应用到实际中,让我们了解了我们的学习有什么用,能够解决什么样的问题,增加我们的自信和学习的动力。
总之,通过这次课程设计,我们获益匪浅.也感受到了和同学合作开发的乐趣,同时验证了一句话“团结就是力量”.最后感谢老师的悉心教导,为我们的程序开发之路打下了扎实的基础。
展开阅读全文