1、计算机 1403 学生成绩管理系统 项目设计报告 作者:作者:2015-11-23目 录1 项目背景及需求分析.21.1 项目背景.21.2 需求分析.22 概念结构设计.32.1 抽象出系统实体.32.2 局部 E-R 图.32.3 全局 E-R 图.63 逻辑结构设计.64 创建数据库及相关操作.94.1 创建数据库.94.2 建立视图.104.3 建立存储过程.124.4 建立触发器.134.5 查询问题及查询结果.145 项目设计总结.17 1 项目背景及需求分析项目背景及需求分析1.1 项目背景项目背景高校是教学和科研的重要基地,同时还是培养人才的重要场所。随着计算机技术的发展和互联
2、网时代的到来,学校的教学管理受到了极大的挑战。Internet 技术持续迅猛的发展为传统的教学管理提出了新的模式。以现在计算机技术、网络技术为基础的数字化教学管理要依靠自身的人才优势,加强对信息资源的开发和利用,做好学校信息化的基础教学工作,是学校朝着信息化、网络化、现代化的目标迈进。这种新的管理模式,对于管理极为宝贵的特性,可以为新型管理模式的建构提供理想的基础。系统由授课教师来完成成绩录入,而学生可以自行查询成绩。这样除了减轻教学管理部门人员的工作负担,还可以减少信息错误的发生,同时为其他部门甚至全校教职工提供信息服务。开发的学生成绩管理系统则是以校园网为基础的管理系统,利用网络能快速、及
3、时、准确的传递信息的作用,使部门的“信息孤岛”过渡到紧密相关并在全校范围内都可用的数据。通过网络可以使管理部门能够更方便的管理学生的成绩系统;也使得教师能够方便的上传、校队学生成绩;还可以使学生能够快速查询成绩。这样管理部门对信息的管理和控制方式变成双向的,不但减少管理方面的工作量,而且可以做到信息管理规范化,从而得到科学的统计和快速的查询。1.2 需求分析需求分析针对河北工程大学的成绩管理工作量大、繁杂,人工处理非常困难。学生成绩管理系统借助于计算机强大的处理能力,大大减轻了管理人员的工作量,并提高了处理的准确性。学生成绩管理系统的开发运用,实现了学生成绩管理的自动化,不仅把广大教师从繁重的
4、成绩管理工作中解脱出来、把学校从传统的成绩管理模式中解放出来,而且对学生成绩的判断和整理更合理、更公正,同时也给教师提供了一个准确、清晰、轻松的成绩管理环境。2 概念结构设计概念结构设计2.1 抽象出系统实体抽象出系统实体课程(课程编号、课程教师编号、课程名称);成绩(学号、课程编号、分数);学生(班级、姓名、学号、性别、专业);教师(教师号、姓名、所属专业、性别)。2.2 局部局部 E-E-R 图图课程号课程名任课教师号教师号教师号课程教师师姓名系别性别教师号授课mn班级姓名学生师学号性别专业学号教师师姓名系别教师号性别教授教师号1n成绩师学号课程编号分数课程号学号n1考试学生师专业学号班级
5、性别姓名课程师课程号课程名任课教师号nm选修课程号成绩学号学生师专业学号班级性别姓名2.3 全局全局 E-R 图图1拥有选修课程名成绩学号1n考试课程号学号学号课程编号分数n1讲授教师号课程号课程编号任课教师号课程名称课程性别系别姓名教师号教师成绩专业性别学号姓名班级学生1n教授教师号学号13 逻辑结构设计逻辑结构设计E-R 图向关系模型转化要解决的问题是如何将实体型和实体间的联系转化为关系模式,如何确定这些关系模式的属性和码。设计学生成绩管理数据库,包括课程(course)、学生(student)、成绩(sc)、教师(teacher)四个关系,其关系模式中对每个实体定义的属性如下:cours
6、e 表:(课程号(cno),教师号(tno),课程名(cname))此为联系“course 表”所对应的关系模式。课程号和教师号为该关系的候选码,满足第三范式。student 表:(学号(sno),班级(sclass),姓名(sname),性别(ssex),专业(smajor))此为联系“student 表”所对应的关系模式。学号为该关系的候选码,满足第三范式。sc 表:(学号(sno),课程号(cno),成绩(degree)此为联系“sc 表”所对应的关系模式。学号和课程号为该关系的候选,满足第三范式。teacher 表:(教师姓名(tname)、性别(tsex)、教师号(tno)、专业(t
7、major)此为联系“teacher 表”所对应的关系模式。教师号为该关系的候选码,满足第三范式。数据库中包含 4 个表,即课程信息(course),学生信息(student),成绩信息(sc),教师信息(teacher)。course 表的表结构列名数据类型长度小数位数是否允许 NULL值说明cnochar5否主码cnamevarchar20否tnochar3否student 表的表结构列名数据类型长度小数位数是否允许 NULL值说明snochar9否主码snamechar8是ssexchar2是取值:男或女smajorchar20是sclasschar10是sc 表的表结构列名数据类型长度
8、小数位数是否允许 NULL值说明snochar10否组合主码,外码degreedecimal41是取值 1-100cnochar5否组合主码,外码teacher 表的表结构列名数据类型长度小数位数是否允许 NULL值说明tnochar3否主码tnamevarchar8是tsexchar2是取值:男或女tdeptchar16是4 创建数据库及相关操作创建数据库及相关操作4.1 创建数据库创建数据库CREATE database test;/*创建 test 数据库*/4.1.1 创建表创建表CREATE TABLE course(/创建课程信息表cno char(5)NOT NULL,cname
9、 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)
10、,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 courseVALUES(C01,科学导论,101);为了简化,其余用 Navicat 添加student 表添加示例:INSERT INTO studentVALUES(14021
11、0316,叶何斌,男,计算机科学与技术,计算机 1403);为了简化,其余用 Navicat 添加。sc 表添加示例:INSERT INTO scVALUES(140210316,87,C01);为了简化,其余用 Navicat 添加teacher 表添加示例:INSERT INTO teacherVALUES(140210316,叶何斌,男,计算机科学与技术,计算机 1403);为了简化,其余用 Navicat 添加4.2 建立视图建立视图4.2.1定义视图 v_student,查询所有选修科学导论的课程的学生的学号(sno),姓名(sname),成绩(degree)。代码:CREATE V
12、IEW v_studentASSELECT A.sno,sname,degreeFROM student A,course B,sc CWHERE 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/创建ASSELECT sno,degree,cnoFROM sc;INSERT INTO view_sc/执行VALUES(140210321,88,C01)
13、;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
14、的结束符设置为/*/CREATE PROCEDURE proc_stud()READS SQL DATABEGINSELECT sno,sname,smajor FROM studentWHERE 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
15、 count_num INT)READS SQL DATABEGINSELECT COUNT(*)INTO count_num FROM scWHERE sno=tmp_sno;END/DELIMITER;/*将结束符恢复成分号*/4.4 建立触发器建立触发器在数据库的 student 表中,定义一个触发器,当一个学生被删除时,把该学生的学号和姓名添加到 delstudent 表中。代码:CREATE TABLE delstudent SELECT sno,sname FROM student WHERE 1=0;/创建一个空表用于接受删除后的数据CREATE TRIGGER trig_stu
16、dent/创建 student 表的触发器AFTER DELETE ON student FOR EACH R0WINSERT 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 stud
17、ent;结果:4.5.2计算“C01”课程的平均成绩。代码:SELECT AVG(degree)FROM sc WHERE cno=C01;结果:4.5.3查询选修课程名为“高等数学”的学生学号和姓名。代码:SELECT A.sno,snameFROM student A INNER JOIN sc B ON A.sno=B.snoINNER JOIN course C ON B.cno=C.cnoWHERE C.cname=高等数学;结果:4.5.4查询“C03”课程不及格的学生信息代码:SELECT A.sno,sname,ssex,smajor,sclassFROM student A
18、INNER JOIN sc B ON A.sno=B.snoINNER JOIN course C ON B.cno=C.cnoWHERE C.cno=C03 AND B.degree60;结果:4.5.5查询不讲授“C01”课程的教师姓名。代码:SELECT tnameFROM teacherWHERE tno=ANY(SELECT tno FROM course WHERE cno!=C01);结果:4.5.6插入学号为“140210322”、姓名为“曾淑亮”、性别为“男”的学生信息。代码:INSERT INTO student(sno,sname,ssex)VALUES(14021032
19、2,曾淑亮,男);结果:5 项目设计总结项目设计总结 这次学生成绩管理系统设计,我们主要采用的是命令行,然后 Navicat 图形界面辅助操作的方式完成设计。通过这次程序设计,加深了对课程设计的理解。在这次课程设计中,我们回顾了很多以前的东西,也发现了很多的问题,以前都没遇见过的,收获很大。在对不同的功能代码是不一定可以完整的执行的,不过大概都是一样的。看着自己做的系统,我们自己就会又欣慰又难过,欣慰的是终于把它做出来了,虽然遇到很多困难,难过的是自己知道还有很多的不足,但是由于知识的有限,无法去完善,才知道“书到用时方恨少”。此次成绩管理系统的设计让我们对 Mysql 数据库的了解更加深入,
20、在整个是设计过程中,通过对把各个管理信息连接起来的分析,锻炼了我们对事情的分析能力,通过怎样解决过程中出现的问题,提高了我们查找文献的能力,对网络资源的利用能力和与其他同学的交流沟通能力。而且经历这次课程设计,我们也学会了自学和分工合作。我们觉得每一次的课程设计,都是让我们对原有知识从了解表面到深入本质,从个体学习到整体把握的跳跃,更是让我们把课本的知识应用到实际中,让我们了解了我们的学习有什么用,能够解决什么样的问题,增加我们的自信和学习的动力。总之,通过这次课程设计,我们获益匪浅。也感受到了和同学合作开发的乐趣,同时验证了一句话“团结就是力量”。最后感谢老师的悉心教导,为我们的程序开发之路打下了扎实的基础。