要求实现功能:

(1)学生、课程、教师等信息的录入和维护,一门课只由一位教师上,一位教师可上多门课

(2)学生进行选课,一学期约20学分

(3)教师在每门课结束后给出学生成绩,不及格则补考后记录补考成绩

(4)能明细查询某学生的选课情况及某课程的选修学生情况

(5)能统计查询出某学生的成绩单(总成绩、平均成绩、不及格门数等)及某门课的选课人数、最高分、最低分、平均成绩等统计信息

目录

一、引言

1.1课题背景

1.2课程设计目的

1.3课程设计任务

二、需求分析

三、统数据库设计

3.1 概念结构设计

3.1.1学生E-R图

3.1.2教师E-R图

3.1.3课程E-R图

3.1.4选课E-R图

3.1.5整体E-R图

3.2 逻辑结构设计

3.2.1 将总体概念结构E-R图转化成关系模型

3.2.2数据模型的优化

3.3 物理结构设计

四、数据库实现

4.1创建数据库

4.2数据库表的创建

4.2.1创建学生信息表

4.2.2创建教师信息表

4.2.3创建课程信息表

4.2.4创建选课信息表

4.3关系图如下

4.4插入数据

4.5数据更新

4.5.1向学生表添加一个学生信息

4.5.2修改陈畅的手机号

4.5.3删除陈畅的个人信息

4.6数据查询

4.6.1简单查询

4.6.2嵌套查询

4.6.3模糊查询

4.6.4连接查询

4.6.5分组查询

4.6.6查询的排序

4.6.7聚合函数

4.7视图

4.7.1 创建一个关于补考信息的成绩表,包含所有列

4.7.2 创建一个仅包含专业基础课的课程信息表

五、总结

一、引言

1.1课题背景

随着信息化时代的到来,计算机技术也得到了广泛应用,为高等院校的管理提供了更加先进、方便和高效的方法。针对大学教务管理的问题,开发一个学生信息管理系统已经成为一项十分重要和必要的工作。而数据库实验学生信息管理系统就是基于数据库技术开发的一种高校管理软件。

该系统的主要目的是管理学生的基本信息、课程信息、成绩信息、选课信息等。在学生信息管理系统中,可以对学生基本信息进行统一管理,如姓名、学号、性别、出生日期、籍贯、联系方式等,以及学生成绩和选课情况的管理。同时,该系统具备权限控制功能,能够有效防止信息被盗取或修改。通过该系统,可实现对学生进行全面细致的管理,大大提高了工作效率,减少了人力资源的投入。

1.2课程设计目的

(1)实践使用数据库技术:学生信息管理系统作为一个基础型数据库应用,操作基本,涉及的表和字段不多,但是很实用,让学生能够快速上手操作数据库软件,了解数据库的常见概念和基本功能。

(2)学习数据库的设计与实现:学生信息管理系统涉及多张关联表的设计,通过学习系统的设计和实现,使学生了解到数据库设计的方法和技巧,包括实体和关系建模、表的设计、属性的定义、索引的设置以及语法的使用等。

(3)培养学生信息管理能力:学生信息管理系统的功能比较全面,可以使学生通过信息的录入、查询、管理等方面,学习信息管理的基本方法和技巧,提高信息管理能力。

(4)提高学生综合应用能力:学生信息管理系统的设计和实现需要涉及到多个学科的知识,如数据结构、算法、数据库技术等,通过实践能够提高学生的综合应用能力。

1.3课程设计任务

1. 需求分析:明确学生信息管理系统的使用、功能、性能和质量等方面的需求,制定相应的产品需求规格说明书。

2. 概念设计:根据需求规格说明书,进行实体和关系的建模,设计ER图和表结构,明确数据库的存储要求。

3. 逻辑设计:设计系统的逻辑架构,包括数据库的建模、SQL语句和数据字典的编写等。

4. 物理设计:设计系统的物理架构,包括数据库、表和索引的创建、存储和管理等。

5. 实现与测试:根据设计要求,实现并测试学生信息管理系统的各项功能,包括记录的增加、修改、删除、查询以及数据的统计和报表分析等。

二、需求分析

本系统的用户是学生公寓管理人员和负责老师,他们在日常公寓管理的主要工作有:入住学生信息的查询与管理、寝室分配及调整、来访登记等。根据上述需求进行分析,本系统在实现上应该具有如下功能:

◎ 学生基本信息管理:学生基本信息添加、修改、查询、删除;

◎ 教师基本信息管理:教师基本信息添加、修改、查询、删除;

◎ 课程基本信息管理:课程基本信息添加、修改、查询、删除;

◎ 选课成绩基本信息管理:选课信息和成绩的添加、修改、查询、删除,以及补考成绩录入。

根据上述分析,可以设计出此系统的系统体系结构图

图2.1学生信息费管理系统功能模块示意图

三、统数据库设计

3.1 概念结构设计

根据需求分析抽象出信息结构,可得该系统的E-R图。

部分E-R图

3.1.1学生E-R图

图3.11学生E-R图

3.1.2教师E-R图

图3.1.2教师E-R图

3.1.3课程E-R图

图 3.1.3课程E-R图

3.1.4选课E-R图

图3.1.4选课E-R图

3.1.5整体E-R图

图3.1.5整体E-R图

3.2 逻辑结构设计

3.2.1 将总体概念结构E-R图转化成关系模型

关系模型:

学生(学号#,姓名,性别,联系方式)

教师(教师编号#,姓名,性别,联系方式)

课程(课程号#教师编号,课程名,学分)

选课(课程编号#学号#成绩类型#,成绩

3.2.2数据模型的优化

  • 确定数据依赖

1. 学生(学号#,姓名,性别,联系方式)

第三范式:学号 ->(姓名,性别,联系方式)

2. 教师(教师编号#,姓名,性别,联系方式)

第三范式:教师编号->(姓名,性别,联系方式)

3.课程(课程号#教师编号,课程名,学分)

第三范式:课程号>(教师编号,课程名,学分)

4.选课(课程编号#学号#成绩类型#,成绩

第三范式:(课程编号,学号,成绩类型)->(成绩

  • 各关系模式间数据依赖进行极小化处理,消除冗余

通过分析发现其关系中都没有数据的冗余:学生关系中学号Sno决定学生的信息;教师关系中教师编号作为主键;课程关系中课程号作为主键;选课关系中,需要用(课程编号,学号,成绩类型)共同作为主键来唯一确定一个考试成绩,因为存在补考,所以需要使用成绩类型加以区分,成绩类习惯可选为正常或补考。

3.3 物理结构设计

3.3.1学生信息表的结构

编号

字符名称

数据类型

长度

说明

1

学号

char

10

学生学号,主键

2

姓名

varchar

20

不允许空

3

性别

char

2

不允许空

check约束

4

联系方式

char

11

允许空

5

生日

Date

允许空

3.3.2教师信息表的结构

编号

字符名称

数据类型

长度

说明

1

教师编号

char

10

教师编号,主键

2

姓名

varchar

20

不允许空

3

性别

char

2

不允许空

check约束

4

联系方式

char

11

允许空

3.3.3课程信息表的结构

编号

字段名称

数据类型

长度

说明

1

课程号

char

10

主键

2

课程名

varchar

20

不允许空

3

教师编号

char

10

教师编号,外键

4

学分

tinyint

非空

Check约束

3.3.4选课成绩信息表的结构

编号

字段名称

数据类型

长度

说明

1

学号

char

10

主键,外键

2

课程号

char

10

主键,外键

3

成绩类型

char

2

主键

Check约束

4

分数

tinyint

非空

Check约束

四、数据库实现

4.1创建数据库

create database sms

on primary

(

name=sms,

filename=’D:\SQLSERVER_DB\sms.mdf’,

size=20MB,

MAXsize=unlimited,

filegrowth=10MB

)

log on

(

name=sms_log,

filename=’D:\SQLSERVER_DB\sms_log.ldf’,

size=2mb,

maxsize=10mb,

filegrowth=10%

)

4.2数据库表的创建

4.2.1创建学生信息表

create table student(

sno char(10) primary key,

[name] varchar(20) not null,

sex char(2) not null check(sex=’男’ or sex=’女’),

tel char(11)

)

4.2.2创建教师信息表

create table teacher(

sno char(10) primary key,

[name] varchar(20) not null,

sex char(2) not null check(sex=’男’ or sex=’女’),

tel char(11)

)

4.2.3创建课程信息表

create table course(

cno char(10) primary key,

[cname] varchar(20) not null,

tno char(10),

credit tinyint check(credit between 1 and 2), –学分

constraint FK_teacher_tno foreign key(tno) references teacher(tno)

)

4.2.4创建选课信息表

create table grade(

cno char(10),

sno char(10),

gtype char(2) check(gtype in (‘zc’,’bk’)), –成绩类型,zc正常,bk补考

credit tinyint check(credit between 0 and 100),–成绩分数

constraint PK_cno_tno_gtype primary key(cno,sno,gtype),–联合主键

constraint FK_course_cno foreign key(cno) references course(cno), –外键

constraint FK_student_sno foreign key(sno) references student(sno) –外键

)

4.3关系图如下

4.4插入数据

–插入学生信息

insert into student values(‘1932101101′,’赵庆’,’男’,’15170000001′,’2000-11-10′);

insert into student values(‘1932101102′,’尹遥’,’男’,’15170000002′,’2001-10-10′);

insert into student values(‘1932101103′,’余军’,’男’,’15170000003′,’2002-06-10′);

insert into student values(‘1932101104′,’辉夜’,’女’,’15170000004′,’2003-11-10′);

insert into student values(‘1932101105′,’晨晨’,’女’,’15170000005′,’2004-11-10′);

–插入教师信息

insert into teacher values(‘1000000001′,’王欣’,’女’,’19170000001′);

insert into teacher values(‘1000000002′,’邓丁’,’男’,’19170000002′);

insert into teacher values(‘1000000003′,’李涛’,’男’,’19170000003′);

–插入课程信息

insert into course values(‘zyjc000001′,’数据库原理’,’1000000001′,2);

insert into course values(‘zyjc000002′,’Java程序设计’,’1000000001′,2);

insert into course values(‘zyhx000003′,’操作系统’,’1000000002′,1);

insert into course values(‘zyhx000004′,’计算机网络’,’1000000002′,2);

insert into course values(‘zyjc000005′,’计算机组成原理’,’1000000003′,1);

insert into course values(‘zyjc000006′,’高等数学’,’1000000003′,2);

–插入选课信息

insert into grade values(‘zyjc000001′,’1932101101′,’zc’,85);

insert into grade values(‘zyjc000001′,’1932101102′,’zc’,75);

insert into grade values(‘zyjc000001′,’1932101103′,’zc’,65);

insert into grade values(‘zyjc000001′,’1932101104′,’zc’,95);

insert into grade values(‘zyjc000001′,’1932101105′,’zc’,70);

insert into grade values(‘zyjc000002′,’1932101101′,’zc’,85);

insert into grade values(‘zyjc000002′,’1932101102′,’zc’,80);

insert into grade values(‘zyjc000002′,’1932101103′,’zc’,70);

insert into grade values(‘zyhx000003′,’1932101101′,’zc’,85);

insert into grade values(‘zyhx000003′,’1932101102′,’zc’,80);

insert into grade values(‘zyhx000003′,’1932101103′,’zc’,75);

insert into grade values(‘zyhx000003′,’1932101104′,’zc’,70);

insert into grade values(‘zyhx000003′,’1932101105′,’zc’,65);

insert into grade values(‘zyhx000004′,’1932101101′,’zc’,85);

insert into grade values(‘zyhx000004′,’1932101102′,’zc’,70);

insert into grade values(‘zyhx000004′,’1932101103′,’zc’,60);

insert into grade values(‘zyhx000003′,’1932101104′,’bk’,99);

insert into grade values(‘zyhx000003′,’1932101105′,’bk’,94);

4.5数据更新

4.5.1向学生表添加一个学生信息

insert into student

values(‘1932101106′,’陈畅’,’女’,’15170000006′);

数据的插入

4.5.2修改陈畅的手机号

update student set tel=’15170000016′ where sno=’1932101106′;

数据的修改

4.5.3删除陈畅的个人信息

delete from student where sno=’1932101106′;

数据的删除

4.6数据查询

4.6.1简单查询

查询学生表信息

select * from student;

4.6.2嵌套查询

查询年龄最大的学生信息

select * from student where birth=(select min(birth) from student);

4.6.3模糊查询

查询所有姓辉的学生的信息

select * from student where sname like ‘辉%’;

4.6.4连接查询

查询课程名和教授的老师

select c.cname,t.tname

from course c,teacher t

where c.tno=t.tno;

查询学号为1932101104选课情况

select * from grade g

left join course c on c.cno=g.cno

where g.sno=’1932101104′;

4.6.5分组查询

查询每个老师教授课程数量

select COUNT(*) as count,tno from course group by tno;

查询某课程的选修学生的人数情况

select COUNT(*) as count,c.cno

from course c

left join grade g on c.cno=g.cno

group by c.cno

having c.cno=’zyhx000004′

4.6.6查询的排序

按照成绩由大到小查询课程号为zyjc000001的成绩信息

select * from grade

where cno=’zyjc000001′

order by credit desc;

4.6.7聚合函数

统计某学生的成绩单(总成绩,平均成绩,不及格门数)

select

sno,

SUM(credit) sum,

AVG(credit) avg,

COUNT(CASE WHEN credit<60 THEN 1 END) as count

from grade

where sno=’1932101104′

group by sno;

统计某门课的选课人数、最高分、最低分、平均成绩

select

c.cno,

COUNT(g.sno) count,

MAX(g.credit) max,

MIN(g.credit) min,

AVG(g.credit) avg

from course c

left join grade g on g.cno=c.cno

where c.cno=’zyhx000003′

group by c.cno;

4.7视图

4.7.1 创建一个关于补考信息的成绩表,包含所有列

create view v_grade_bk

as

select * from grade where gtype=’bk’;

select * from v_grade_bk;

4.7.2 创建一个仅包含专业基础课的课程信息表

create view v_course_zyjc

as

select * from course where cno like ‘zyjc%’;

select * from v_course_zyjc;

五、总结

本次数据库课程设计学生信息管理系统的实验,让我更加深入地了解了数据库的概念和应用。在实验过程中,我通过设计和实现一个学生信息管理系统,了解到了数据库的具体操作,并且明确了数据库的优缺点和应用场景。同时,我也发现在实验中出现了很多问题,包括数据库设计的不够合理、应用场景不够清晰等方面,需要在今后的学习和实践中继续完善。在概念设计、逻辑设计和物理设计等各个方面都有了实际操作和实践。在实验过程中,我遇到了很多困难和问题,如表的设计不够合理、索引的设置不够合理,SQL语句的编写不够熟练、索引的设计不够准确等,但是通过一步一步的解决,我最终设计实现了一个稳定、高效的学生信息管理系统。让我更加深入了解了数据库在信息管理与应用中的重要性和必要性,同时也提高了我在实际操作中的能力和技巧。在接下来的学习和实践中,我将会继续提升我的数据库技能,不断改进和挑战自己。