收藏 分销(赏)

学生成绩管理系统课程设计说明书.doc

上传人:天**** 文档编号:10595542 上传时间:2025-06-04 格式:DOC 页数:21 大小:1.48MB 下载积分:10 金币
下载 相关 举报
学生成绩管理系统课程设计说明书.doc_第1页
第1页 / 共21页
学生成绩管理系统课程设计说明书.doc_第2页
第2页 / 共21页


点击查看更多>>
资源描述
长 春 大 学 课 程 设 计 说 明 书 题目名称 学生成绩管理系统 院(系) 软件学院 班 级 软件工程09403 学生姓名 赵健 吕阳 谷雨卓 刘涛 指导教师 刘 艳 起止日期 2010.07.12—2010.07.16 目 录 一、设计题目 1 二、设计目 1 三、设计分析 1 四、概念结构设计 2 五、逻辑结构设计 3 六、数据库实现 5 七、结论 17 19 / 21 一、设计题目 学生成绩管理系统 二、设计目 运用已学过知识进行一个简单应用程序开发。 基本掌握设计课题基本步骤和方法。 掌握应用系统开发中需求分析。 基本掌握应用系统开发中设计文档编制。 三、设计分析 因为我做是学生成绩管理,所以数据库中至少有个一个表是来存储学生各科成绩。有了学生成绩,得知道这个成绩是哪个学生,所以此表中也得有学生姓名,但是学生姓名可能有重复 ,所以得必须有个标志来惟一标识一个学生,所以得给每个学生一个编号(学号),但是也得必须清楚,这个成绩是哪门课程,所以给课程定义了一个编号。之后,得想到有了学生成绩表,总得有个表来存放学生信息吧,所以又建立一个学生信息表,此表中必须字段得有学号、姓名、班级,其他字段可以根据需要来添加。然后就是得有个课程表来存放哪个教师教哪门课程信息,所以此表中至少得有课程号,课程名称和教师惟一标识(教师编号),再有一个表来存放教师信息,其中字段必须有教师编号,教师姓名和所在部门,当然也可以有教师出生日期、职称、电话号码等字段。 总之,这个学生管理系统总共包括四个表:学生信息表student、教师信息表teacher、成绩表score和课程表course。 Student表:在建表时,除了添加学号、姓名、班级必要字段,还添加一些其他字段,比如:出生日期、性别、邮箱地址和类型等。 Teacher表:在建表时,除了添加教师编号,教师姓名,部门必要字段,还可以添加一些其他字段,比如:出生日期、性别、和电话等。 Score表:此表应该包括学生学号、课程号和成绩等。 Course表:应包括课程号,对应课程名称和教此课程教师编号。 (1)建立一个数据库,然后在此数据库中建立这四个数据表。 (2)向表中添加记录。 (3)用一些查询语句来查看表中特定记录。 (4)向表中添加一些字段。如:向teacher表中添加字段 tel (5)创建一个自定义数据类型,并修改student表中某个字段为此数据类型。 (6)创建几个视图 查询某个班级学生信息 查看每门课程平均成绩 查看选修计算机课程学生信息 查看所有男教师和所有男学生信息 (7)创建几个存储过程 显示成绩表中课程号在课程表中且所任教师性别为男、计算机系成绩表。 显示某学生学号,姓名,所学课程号,课程名称和对应成绩。 在执行此存储过程时,如果没有给出参数(学生姓名),则输入全部学生学号,姓名,班级,任课教师编号及其姓名,所学课程名称和成绩,如果有,则显示此学生以上信息。 (8)创建触发器 在成绩表中建立一个触发器,当向表中添加记录时,此学生成绩都乘以1.2。 检查学生邮箱地址是否相同,如果相同,输出'inserting fail',并且回滚事务;如果不相同,则插入成功。 在成绩表建立一个触发器,在向表中插入记录时,检验插入课程号是否在课程表中课程号范围之内。 (9)创建规则,并绑定 在向成绩表中添加记录时,如果成绩degree<0,则插入不成功。 在向教师表中添加记录时,如果电话号码不是0-9数字,则插入不成功。 (10)创建自定义函数和索引。 四、概念结构设计 在此学生成绩信息中有4个表需要建立 学生信息表(student):包括学号(sno)、姓名(sname)、性别(Ssex)、班级(class)、出生日期(sbirth) 教师信息表( teacher):包括教师编号(tno)、姓名(tname)、性别(Tsex)、部门(depart)、职称(prof)、出生日期(tbirth) 成绩表(score):包括学号(sno)、课程号(cno)、成绩(degree) 课程信息表(course):包括课程号(cno)、课程名称(cname)、教师编号(tno) 四个表E-R实体模型图分析如图1所示。 图1 E-R实体模型图 在教学管理中,学校开设若干门学科,一个教师可以教授其中一门或多门课程,每个学生也需要学习其中几门课程,因此,教学管理中涉及对象(实体型)有学生、教师和课程。用E-R图描述它们之间联系。如图所示。其中,学生及课程是多对多联系,而教师及课程联系则是一对多。 这四个表总实体-关系图如图2所示。 学号 班级 学生信息表 出生日期 学号 性别 出生日期 教师姓名 成绩表 部门 成绩 教师信息表 课程名称 课程号 职称 教师编号 课程表 图2 实体-关系图 五、逻辑结构设计 主键是一个表通过一个列或多个列组合数据来唯一标识表中每一行,这个列或列组合就被称为主键,煮件可以来强制实体完整性。 主键约束有以下特征和作用: (1)主键约束通过不允许一个或多个列输入重复值来保证一个表中所有行惟一性,使所有浪都是可以区分。 (2)一个表张只能有一个主键,且组成主键列数据都不能取空值。 (3)当定义主键约束时,SQL server在主键列上建立惟一性索引,这个索引在煮件被查询时可以加快查询速度。 在teacher表中,以教师编号tno为主键,对其进行惟一性约束。 在Course表中,以课程号为主键,对其进行惟一性约束。 Student表如表1所示。 表1 Student表 sno Char(8) 不允许为空 sname Char(10) 不允许为空 Ssex Char(2) 不允许为空 sbirth Datetime(8) 允许为空 class Char(4) 不允许为空 type Char(7) 允许为空 Score表结构如表2所示。 表2 Score表 sno Char(8) 不允许为空 cno Char(5) 不允许为空 degree Float(8) 不允许为空 Course表:以课程号为主键,通过这个主键来对这个表进行唯一性约束如表3所示。 表3 Course表 cno(主键) Char(5) 不允许为空 cname varchar(10) 不允许为空 tno char(3) 不允许为空 Teacher表结构如表4。 表4 Teacher表 Tno(主键) Char(5) 不允许为空 tname varchar(10) 不允许为空 depart Varchar(8) 不允许为空 tsex Char(2) 不允许为空 tbirth datatime 允许为空 prof Char(6) 允许为空 其他对象说明: (1)外键约束(primary key):外键也是由表中一个列或多个列组成,它是和在相关表中事先定义具有惟一性列一起使用,该列一个是所在表主键。外键约束用来建立和强制两个表之间关联,即一个表一个列或列组合及另一个表 具有惟一性列或列组合相关,这个列或列组合就成为第一个表中外键外键约束限制将破坏这种关联操作。作为外键列值可以是空值,或是它所引用表中已经存在值。 在score表中,其学号sno和课程号cno都是此表外键约束,因为此表中学号sno要受学生信息表中学号约束,student表中没有学号,score表中也应该没有,如果向score表添加数据时违反此规则,则添加不成功。课程号cno也同样,受到course表中课程号cno约束。 (2)空值(null):空值意味着数据尚未如,它及0或长度为零字符串(“”)含义不同。如果表中某一列必须有值才能使记录有意义,那么可以指明该列不允许取空值。 在教师信息表teacher中其出生日期列tbirth和职称prof允许为空,但并不表示该教师没有生日,没有职称,而是目前还不知道而已。在学生信息表student中其出生日期sbirth也可为空,也是同样道理。 (3)check约束:检查约束可以用来限制列上可以接受数据值,检查约束使用逻辑表达式来限制列上可以接受数据。可以在一个列上使用多个检查约束,也可以在表上建立一个可以在多个列上使用检查约束。 比如:在学生信息表中,邮件地址semail格式必须是%@%格式。 (4)惟一性约束:使用惟一性约束作用是保证在不是主键指定惟一性列上不会出现重复数据。定义了惟一性约束列上数据可以为空值,一个表上可以定义多个惟一性约束。 六、数据库实现 创建数据库、数据表、视图、存储过程、自定义函数、触发器等语句和测试语句。 1、创建数据库: create database ssh on ( name=ssh, 'e:\老大\sql\ssh.mdf', size=1) log on ( name=ssh1, 'e:\老大\sql\ssh1.ldf', size=1) 2、创建数据表 (1)student表 use ssh create table student (sno char(8) primary key, sname char(10) not null, Ssex char(2) not null, Sbirth datetime, class char(4) not null semail varchar(20)) (2)score表 create table score (sno char(8) not null, cno char(4) not null, degree float not null) (3)course表 create table course (cno char(5) not null primary key, cname varchar(10) not null, tno char(3) not null ) (4)teacher表 create table teacher (tno char(5) not null primary key, tname varchar(10) not null, depart varchar(8) not null, Tsex char(2) not null, Tbirth datetime , prof char(6) ) 4、向表中添加记录 (1)向学生信息表中添加 insert into student values('101','生活','女','1983-09-18','11') insert into student values('102','风尘','男','1984-01-01','11') insert into student values('103','离开','男','1984-01-01','11') insert into student values('104','流浪','女','1984-11-11','11') insert into student values('105','生命','男','1984-12-05','13') insert into student values('106','无悔','女','1984-11-01','13') insert into student values('107','历史','女','1984-10-01','12') insert into student values('108','风尘','男','1985-9-08','11') insert into student values('109','活着','男','1985-12-12','12') insert into student values('110','傻瓜','女','1985-08-28','12') 查看记录 Select * from student 如图1所示。 图1 查看记录 (2)向成绩表中添加 insert into score values('101','01',88) insert into score values('101','02',85) insert into score values('102','02',80) insert into score values('101','03',88) insert into score values('102','02',85) insert into score values('102','03',80) insert into score values('103','01',83) insert into score values('103','02',85) insert into score values('103','03',90) insert into score values('104','01',60) 查看记录 Select * from score 如图2所示。 图2查看记录 (3)向教师表中添加数据 insert into course values('01','计算机','11') insert into course values('02','网络管理','12') insert into course values('03','专业英语','13') insert into course values('04','软件工程','14') 查看记录 Select * from course 如图3所示。 图3查看记录 (4)向课程表中添加数据 insertinto teacher values('11','无意','计算机系','男','1973-4-5','教授') insert into teacher values('12','生活','计算机系','女','1975-12-1','副教授') insert into teacher values('13','没有','管理系','女','1975-3-3','副教授') insert into teacher values('14','离开','英语系','男','1973-5-5','教授') 查看记录 Select * from teacher 如图4所示。 图4查看记录 5、一些查询语句 (1)查询成绩大于学号为101学生课程为02成绩所有列。 select * from score where degree>(select degree from score where sno='101' and cno='02') 如图5所示。 图5查询记录 (2)查询课程号01大于课程号02最大值、并以分数降序排序成绩表中所有列 select * from score s where o='01' and s.degree>=(select max(degree) from score y where o='02' ) order by degree desc go select max(degree) as "02max" from score where cno='02' 如图6所示。 图6查询记录 (3)查询性别为男学号,姓名,班级,课程号和成绩学生 select student.sno,student.sname,student.class,o,score.degree from student,score where student.sno=score.sno and ssex='男' 如图7所示。 图7查询记录 (4)查询成绩在60到80之间所有列 select * from score where degree between 60 and 80 如图8所示。 图8查询记录 (5)查询score表中至少有5名学生选修并以0开头课程平均分 select avg(degree) as "平均分",cno from score where cno like '0%' group by cno having count(*)>=5 如图9所示。 图9查询记录 6、创建自定义数据类型 创建一个email自定义数据类型exec sp_addtype email, 'varchar(20)' , 'null'修改student表中semail数据类型为email类型alter table student alter column semail email 7、向表中添加字段 向student表添加type,semail,,b并且邮件地址有check约束 alter table student add type char(7) alter table student add semail varchar(20) null constraint ck_sem check (semail like '%@%') alter table teacher add tel varchar(15) 8、创建视图 (1)创建所有11班学生信息视图 create view student11 as select * from student where class='11' 查看视图中记录 select * from student11 如图10所示。 图10查看视图 (2)创建视图course_degree,其中内容是选修计算机课程学生信息,包括(sno,sname,cno,cname,degree),创建时加上with check option create view course_degree(sno,sname,cno,cname,degree) as select score.sno,sname,o,cname,degree from course ,student, score where o=o and student.sno=score.sno and cname='计算机' with check option 查看视图中记录 select * from course_degree 如图11所示。 图11查看视图 (3)创建一个视图,其中内容是成绩表中每门课程 create view average as select avg(degree) as '平均分' from score group by cno 查看视图中记录 select * from average 如图12所示。 图12查看视图 (4)创建视图其中内容是所有男教师和男学生name,sex,birth create view man as select sname as name,ssex as sex,sbirth as birth from student where ssex=‘男' union select tname,tsex,tbirth from teacher where tsex='男' 查看视图中记录 select * from man 如图13所示。 图13查看视图 9、创建规则 规则作用月CHECK约束部分功能相同,在向表中某列插入或更新数据时,用它来限制输入新值取值范围。而它及CHECK约束不同是: l CHECK约束是用CREATE TABLE语句在建表时指定,而规则需要作为单独数据库对象来实现。 l 在一个列上只能使用一个规则。但可以使用多个CHECK约束。 l 规则可以应用于多个列,还可以应用于用户自定义数据类型,而CHECK约束只能应用于它定义列。 (1)创建一个degree_rule规则 create rule degree_rule as @values>0 把此规则绑定到score表中degree列 exec sp_bindrule 'degree_rule','score.degree' 在向成绩表中添加记录时,如果成绩degree<0,则插入不成功。 (2) 创建一个tel_rule规则 create rule tel_rule as @value like '[0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9]' 把此规则绑定到teacher表中tel列 exec sp_bindrule 'tel_rule','teacher.tel' 在向教师表中添加记录时,如果电话号码不是0-9数字,则插入不成功。 10、创建存储过程 存储过程是存储在服务器上例行程序及过程,在SQL SERVER只能感定义某个过程,其中记录了一系列造作,每次应用程序只需调用该过程就可完成该操作,这种SQL SERVER中定义过程就被称为存储过程。它可以完成以下功能: l 接受输入参数并返回多个输出值。 l 包含T-SQL语句用以完成特定SQL SERVER操作,其中可以有对其他存储过程调用。 l P返回一个指示成功及否及失败原因状态代码给调用它过程。 存储过程不能接用过程名返回值,也不能直接在表达式中使用。 (1)创建一个存储过程,来显示成绩表中课程号在课程表中并且所任教师性别为男、所在部门是计算机系成绩表中列 create proc student_11 as select * from score where cno in (select cno from course ,teacher where course.tno=teacher.tno and depart='计算机系' and tsex='男') 调用此存储过程 Execel student_11 如图14所示。 图14调用存储过程 (2)创建一个带输入参数存储过程,调用此存储过程时,给出一个学生名,显示出此学生学号,姓名,所学课程号,课程名称和对应成绩 create proc student_name @sname varchar(10) as select student.sno,sname,o,degree cname from student,score,course where student.sno=score.sno and o=o and sname=@sname 调用此存储过程,(此例是输出姓名为历史学生信息) exec student_name '历史' 如图15所示。 图15调用存储过程 (3)创建一个存储过程,在执行此存储过程时,如果没有给出参数(学生姓名),则输入全部学生学号,姓名,班级,任课教师编号及其姓名,所学课程名称和成绩,如果有,则显示此学生以上信息。 create proc student_teacher @sname varchar(10)=null as if @sname is null select student.sno,sname,student.class,teacher.tno,teacher.tname,degree,cname from student,score,course,teacher where student.sno=score.sno and o=o and course.tno=teacher.tno else select student.sno,sname,student.class,teacher.tno,teacher.tname,degree,cname from student,score,course,teacher where student.sno=score.sno and o=o and course.tno=teacher.tno and sname=@sname 调用此存储过程 exec student_teacher(没有实参) 如图16所示 。 图16调用存储过程 exec student_teacher '历史' (查询姓名为历史学生选课信息和成绩) 如图17所示。 图17调用存储过程 (4)创建一个存储过程,传递一个学生姓名,先判断此学生是否有邮箱,如果有,则显示此学生姓名,邮箱地址,学号,班级;如果没有话,输出此句话'the semail is empty' create proc student_email @sname varchar(10) as begin if (select semail from student where sname=@sname) is null begin print'the semail is empty' end else select sname,semail,sno,class from student where sname=@sname end 调用此存储过程 exec student_email 'super' 如图18所示。 图18调用存储过程 当给出姓名那个学生没有邮箱地址时,则会显示如下内容。 exec student_email dfdf' 如图19所示。 图19调用存储过程 11、触发器 触发器是一种特殊存储过程,它不能显式地调用,而是在往表中插入记录、更新记录或者删除记录时,被自动激活。所以,触发器可以用来对表实施复杂完整性约束,当触发器所保护数据发生改变时,触发器会自动被激活,从而防止对数据不正确修改。在触发器中卡仪查询其他表,也可以执行更复杂T-SQL语句。如果发现引起触发器执行T-SQL语句执行了一个非法操作,则可以通过回滚事务使语句不能执行,回滚后SQL SERVER会自动返回到此事务执行前状态。 SQL SERVER为每个触发器都查了两个专用表,inserted表和deleted表.这两个表结构总是及被该触发器作用表结构相同。触发器执行完成后,及该触发器相关这两个表也会被删除。 一个表中可以有多个具有不同名称各种类型触发器,每个触发器都可以完成不同功能,但每个触发器只能作用在一个表上。 (1)创建一个触发器,来检查学生邮箱地址是否相同,如果相同,输出'inserting fail',并且回滚事务;如果不相同,则插入成功。 create trigger studentinsert on student after insert as if (select semail from inserted where semail in (select semail from student)) is not null begin print 'inserting fail' rollback transaction end else print'insering succeed' 向学生信息表中插入一条记录,检验是否成功插入 insert into student values('114','lengbing','女','1985-12-12','11','','一般') (2)在成绩表中建立一个触发器,当向表中添加记录时,此学生成绩都乘以1.2 create trigger scoreupdate on score after insert as update score set degree=degree*1.2 from score where sno in (select sno from inserted ) 向表中插入一条记录,检验触发器是否有用。 insert into score values('108','01','56') (3)在成绩表建立一个触发器,在向表中插入记录时,检验插入课程号是否在课程表中课程号范围之内。如果在,则插入成功;否则,提示信息'没有这门课程',回滚事务。 create trigger course_score on score after insert as if (select cno from inserted where cno in(select cno from course)) is null begin print'没有这门课程' rollback transaction end 向表中添加一条记录,进行验证。 insert into score values('108','06','60') 12、自定义函数 函数是由一条或多条T-SQL语句组成代码段,用语实现一些常用功能,编写好函数可以重复使用。用户自定义函数可以接受零个或多个输入参数,函数返回值可以是一个数值,也可以是一个表。用户自定义函数有三种类型: 1、 返回数值用户自定义函数 2、 内联(单语句)返回表用户自定义函数 3、 多语句返回表用户自定义函数 (1)创建一个用户自定义函数,输出及指定学生同班学生个数 create function studentcount (@sno char(5)) returns int begin eclare @counter int select @counter=count(*) from student where class=(select class from student where sno=@sno) return @counter end 调用此自定义函数(本例是查找及学号102同班学生个数) declare @a int set @a=dbo.studentcount('102') print convert(char(3),@a) (2)创建一个用户自定义函数,用于输出同一个班级中学生信息 create function studentclass (@class char(5)) returns table return(select * from student where class=@class) 调用自定义函数(本例是输出12班学生信息) select * from studentclass('12') (3)创建一个自定义函数,把某一学生所学课程名称,课程号及其成绩插入一个临时表中显示出来。 create function studentscore (@sno varchar(5)) returns @student_score table (sno char(5), sname varchar(10), cno char(5), cname varchar(10), degree float) begin insert @student_score select student.sno,sname,o,cname,degree from student,score,course where student.sno=score.sno and o=o and student.sno=@sno return end 查看学号为103学生各科成绩。 select * from studentscore('103') 13、建立索引 SQL SERVER索引是一种物理结构,它能够提供一种以一列或多列值为基础迅速查找表中行能力。索引中记录了表中关键值,提供了指向表中行指针。它既可以在定义表时创建,也可以在定义表之后任何时候创建。索引可以创建在一个列或多个列组合上。 (1)在学生信息表邮箱列上创建一个惟一性非聚簇索引 create unique nonclustered index ix_semail on student(semail) (2)在学生信息表学号列上创建一个惟一性聚簇索引 create unique clustered index ix_sno on student (sno desc) (3)在教师信息表姓名列上创建一个非惟一性非聚簇索引 create nonclustered index ix_name on teacher(tname) 七、结论 总来说,是把以前老师讲知识又串了一下,又熟悉了许多,很多以前没有弄明白知识点,通过这次课程设计,差不多都掌握了,对于那些像触发器、存储过程、自定义函数、视图等等应用程序建立、使用方法和作用,我又有了更深一步了解和掌握。但是还有很多欠缺,就像我做这些东西,感觉没有一定逻辑顺序,好象之间没有多大联系似,所以还要更进一步完善,但是由于时间紧迫,没有办法完善它。做此课程设计过程中,得到老师和同学大力支持和帮助,在此特别感谢。 在这次课程设计过程中,我们体会到要想开发一个系统软件,不仅需要相当专业技术知识,还要有严谨缜密思维能力。只有思想上清晰了,编程才有意义,否则就是白费力气。同时还要善于捕获细小方面,因为那往往是这个程序致命因素。这次毕业设计培养了我细心和耐性,更树立了一种科学态度。这对我以后工作和学习也有很大帮助和指导作用。同时也深刻认识到了本身不存在很多不足之处,还需要不断地学习来充实完善自己,只有这样才能学有所成,求得更大发展。
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 学术论文 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服