资源描述
数据库课程设计报告
<学生学籍管理系统>
专业
班级
小组成员
指导老师
开始时间
完成时间
目录
数据库课程设计报告 1
1. 问题描述 3
1.1 背景 3
1.2 需求分析 3
2. 数据字典 4
2.1 建表清单 4
2.2 管理员表(A) 4
2.3 学生信息表(S) 4
2.4 课程表(C) 5
3. 概念结构设计 7
3.1 功能图 7
3.2 数据流图 8
3.3 E-R图 9
4. 逻辑结构设计 12
4.1 E-R图转换 12
6. 程序实现 15
6.2 程序代码 15
6.2 功能实现结果 25
7. 结 论 28
课题名称:学生学籍管理系统
1. 问题描述
1.1 背景
随着信息技术在管理上越来越深入而广泛应用,管理信息系统实施在技术上已逐步成熟。任何一个单位需要高效率地把内部活动有机地组织起来并迅速发展,就必须建立及自身特点相适应管理系统。对于我们学校而言,毫无疑问,在实现学校信息化过程中,实现学生学籍管理信息化就显得尤为重要。
学生学籍管理系统主要用于学校学生学籍管理,总体任务是实现学生信息关系系统化、科学化、规范化和自动化,其主要任务是用计算机对学生学籍进行日常管理,如查询、修改、增加、删除,另外还考虑到学生选课,针对这些要求来设计学生学籍管理系统。
在本次实验中,我们需要学习并掌握数据库设计流程和基本方法。在这基础上完成对学生学籍系统数据库设计和相应文档编写工作,从而更加深入地掌握数据库系统分析及设计基本概念和基本方法,提高从事数据库系统建设和管理工作基本技能和能力。
1.2 需求分析
根据用户需求,学生学籍管理系统将满足一下需求:
A)学生个人基本信息
1) 实现学生基本情况录入、修改、删除等基本操作。
2) 对学生基本信息提供灵活查询方式。
3)
B)选课功能
1) 完成一个班级学期选课功能。
2)
C)成绩管理
1) 实现学生成绩录入、修改、删除等基本操作。
2) 能方便对学生个学期成绩进行查询。
3) 具有成绩统计、排名等功能。
4)
2. 数据字典
2.1 建表清单
A
管理员表
S
学生信息表
C
课程表
B
班级表
P
专业表
D
院系表
CS
选课表
T
老师表
J
授课表
2.2 管理员表(A)
是否主键
字段名
字段描述
数据类型
长度
可空
约束
缺省值
备注
是
A_ID
管理员编号
CHAR(4)
4
A_USER
用户名
VARCHAR(10)
10
A_PW
用户密码
VARCHAR(20)
20
A_PERM
用户权限
INT
不同用户拥有不同权限
2.3 学生信息表(S)
是否主键
字段名
字段描述
数据类型
长度
可空
约束
缺省值
备注
是
S_NO
学号
CHAR(10)
10
S_NAME
姓名
VARCHAR(10)
10
是
S_SEX
性别
CHAR(2)
2
是
男
女
S_BIRT
出生日期
VARCHAR(10)
10
是
S_NAFA
民族
VARCHAR(8)
8
是
汉
S_BIPL
籍贯
VARCHAR(10)
10
是
S_ADDR
地址
VARCHAR(50)
50
是
S_POST
邮编
CHAR(6)
6
是
S_TEL
电话
VARCHAR(20)
20
是
S_ID
身份证号
CHAR(18)
18
是
S_POLA
政治面貌
VARCHAR(10)
10
是
其他
群众
共青团
中共党员
S_YEAR
入学年份
VARCHAR(10)
10
是
S_DEPA
院系
CHAR(4)
是
S_PROF
专业
CHAR4)
是
S_CLAS
班级
CHAR(4)
是
S_NOTE
备注
VARCHAR(1000)
1000
是
2.4 课程表(C)
是否主键
字段名
字段描述
数据类型
长度
可空
约束
缺省值
备注
是
C_ID
课程编号
CHAR(4)
4
C_NAME
课程名
VARCHAR(20)
20
是
C_PRNO
先行课
CHAR(4)
4
是
C_CREDIT
学分
INT
C_NOTE
课程简介
VARCHAR(200)
200
是
2.5 班级表(B)
是否主键
字段名
字段描述
数据类型
长度
可空
约束
缺省值
备注
是
B_ID
班级编号
CHAR(4)
4
B_NAME
班级名
VARCHAR(40)
40
是
B_NUM
班级人数
SMALLINT
是
B_MASTER
班主任名
VARCHAR(4)
是
P_ID
专业编号
CHAR(4)
2.6 专业表(P)
是否主键
字段名
字段描述
数据类型
长度
可空
约束
缺省值
备注
是
P_ID
专业编号
CHAR(4)
4
P_NAME
专业名
VARCHAR(40)
40
是
P_NUM
专业人数
INT
是
D_ID
学院编号
CHAR(4)
4
2.7 院系表(D)
是否主键
字段名
字段描述
数据类型
长度
可空
约束
缺省值
备注
是
D_ID
学院编号
CHAR(4)
4
D_NAME
学院名
VARCHAR(40)
40
是
D_NUM
学院人数
INT
是
D_MASTER
院长名
VARCHAR(4)
4
是
2.8 选课表(CS)
是否主键
字段名
字段描述
数据类型
长度
可空
约束
缺省值
备注
是
T_ID
学院编号
CHAR(4)
20
是
C_ID
课程编号
CHAR(4)
4
CS_RESULT
成绩
FLOAT
是
2.9 教师表(T)
是否主键
字段名
字段描述
数据类型
长度
可空
约束
缺省值
备注
是
T_ID
教师编号
CHAR(4)
4
T_NAME
教师名
VARCHAR(4)
4
是
T_COR
所授课程
VARCHAR(20)
20
是
T_TEL
手机号码
CHAR(11)
11
是
2.10 授课表(J)
是否主键
字段名
字段描述
数据类型
长度
可空
约束
缺省值
备注
是
T_ ID
教师编号
CHAR(4)
4
是
C_ID
课程编号
CHAR(4)
4
J_TIME
授课时间
VARCHAR(20)
是
3. 概念结构设计
3.1 功能图
3.2 数据流图
数据流图是用图形方式完成系统中信息传递,先构建系统抽象模型,既顶层数据流图为图(1):
学生
选课/退选
学生
选课、成绩表
系管理员
系管理员
学籍管理系统
学生、课程、班级及专业信息表,留级、休学处理表
录如/更新学生、系、专业、课程及成绩信息
图(2):学籍管理系统信息流图
班级描述信息
由上图知,学生进入系统只完成选课及退选。而系管理员进入系统后录入/更新信息抱括:专业、班级、学生。对学生选课进一步分解可得图(2):
学生描述信息
专业信息
班级信息
学生信息
专业描述信息
选课申请
选课不成功
已选课程
选课成功
选课信息记录
课程信息
课程描述信息
通过申请
验证不通过
选课处理
图(3):学生选课分解子图
学生
身份验证
图中专业、学生、班级信息以及学生选课程都又系管理员录入。学生通过身份验证后进入系统,选择自己必修和选修课,并能对已选课进行撤消。学生选完课提交后,将结果保存。
3.3 E-R图
4. 逻辑结构设计
4.1 逻辑结构设计步骤
(1)将概念结构转换为一般关系、网状、层次模型。
(2)将转换来关系、网状、层次模型向特定DBMS支持下数据模型转换。
(3)对数据模型进行优化。
4.2 E-R图转换
管理员表
学生表
班级表
专业表
学院表
课程表
选课表
教师表
授课表
5. 物理结构设计
5.1 物理关系模型
6. 程序实现
6.2 程序代码
建立数据库:
CREATE DATABASE STUDENT
ON
( NAME=STUDENT_Data,
='C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\STUDENT.mdf',
SIZE=10MB,
MAXSIZE=50MB,
=10%
)
LOG ON
( NAME='lbr_Log',
= 'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Data\STUDENT_Log.ldf',
SIZE=2MB,
MAXSIZE=5MB,
=1MB
)
GO
USE STUDENT
建表:
create table A --管理员表
(
A_ID CHAR(4) ,
A_USER varchar(10) not null,
A_PW varchar(20) not null,
A_PERM int not null,
constraint pk_A primary key (A_ID)
)
go
create table D --院系表
(
D_ID CHAR(4) not null,
D_NAME varchar(40) ,
D_NUM int,
D_MASTER varchar(4),
constraint pk_D primary key (D_ID),
)
go
create table P --专业表
(
P_ID CHAR(4) not null,
P_NAME varchar(40),
P_NUM int,
D_ID CHAR(4) not null,
constraint pk_P primary key (P_ID),
constraint fk_P_D foreign key (D_ID) references D(D_ID)
on delete cascade
on update cascade,
)
go
create table B --班级表
(
B_ID CHAR(4) not null,
B_NAME varchar(40),
B_MASTER varchar(4),
B_NUM smallint,
P_ID CHAR(4) not null,--专业编号
constraint pk_B primary key (B_ID),
constraint fk_B_P foreign key (P_ID) references P(P_ID)
on delete cascade
on update cascade,
)
go
create table S --学生表
(
S_NO char(10) not null,
S_NAME varchar(10),
S_SEX char(2) check(S_SEX in('男','女')),
S_BIRT varchar(10),
S_NAFA varchar(8),
S_BIPL varchar(10) ,
S_ADDR varchar(50),
S_POST char(6), --邮政编码
S_TEL varchar(20),
S_ID char(18),--返回不带前导空格(LTrim)、后续空格(RTrim) 或前导及后续空格(Trim) 字符串副本。
S_POLA varchar(10) check( rtrim(S_POLA) in ('其他', '群众','共青团','中共党员')),
S_YEAR varchar(10),--入学时间
S_DEPA CHAR(4), --院系
S_PROF CHAR(4), --专业
S_CLAS CHAR(4), --班级
S_NOTE varchar(1000),
constraint pk_S primary key(S_NO),
constraint fk_S_CLAS foreign key (S_CLAS) references B (B_ID)
on delete cascade
on update cascade,
)
go
create table C --课程表
(
C_ID CHAR(4) not null,
C_NAME varchar(20),
C_PRNO CHAR(4) ,
C_CREDIT int not null,
C_NOTE varchar(200),
constraint pk_C primary key (C_ID),
constraint fk_C foreign key (C_PRNO) references C(C_ID)
)
go
create table CS --选课表
(
S_No char(10) not null,
C_ID CHAR(4) not null,
CS_RESULT FLOAT,
constraint pk_C_S primary key(S_No,C_ID),
constraint fk_C_S_S foreign key(S_No) references S(S_No),
constraint fk_C_S_C foreign key(C_ID) references C(C_ID)
)
go
create table T --教师表
(
T_ID CHAR(4) not null,
T_NAME varchar(4),
T_COR varchar(20) ,
T_TEL char(11),
constraint pk_T primary key (T_ID)
)
go
create table J --授课表表
(
T_ID char(4) not null,
C_ID CHAR(4) not null,
J_TIME varchar(20),
constraint pk_T_C primary key(C_ID,T_ID),
constraint fkJ_C foreign key(C_ID) references C(C_ID),
constraint fkJ_T foreign key(T_ID) references T(T_ID)
)
go
插入数据:
insert A(A_ID,A_PERM,A_PW,A_USER)
values ('0001','1','password1','张六')
go
insert A(A_ID,A_PERM,A_PW,A_USER)
values ('0002','2','password2','张齐')
go
insert D (D_ID,D_Name,D_NUM,D_MASTER)
values ('0001','信息技术学院',5000,'张五')
go
insert P (P_ID,D_ID,P_NAME,P_NUM)
values ('0001','0001','数字媒体技术',120)
go
insert P (P_ID,D_ID,P_NAME,P_NUM)
values ('0002','0001','软件工程',120)
go
insert B (B_ID,P_ID,B_NAME,B_NUM,B_MASTER)
values ('0001','0001','1班',120,'李丽')
go
insert B (B_ID,P_ID,B_NAME,B_NUM,B_MASTER)
values ('0002','0002','1班',120,'王宏')
go
insert S
values('1001010018','苏希','女','1989-7-10','汉族','广东省','北京师范大学珠海分校','519078','158********','4450627','中共党员','2007-9-1','0001','0001','0001','无')
go
insert S
values('1001010764','张妮','女','1990-8-10','汉族','贵州省','北京师范大学珠海分校','519078','158********','4450628','中共党员','2007-9-1','0001','0001','0001','无')
go
insert S
values('1001010056','王帅','男','1989-7-10','汉族','广东省','北京师范大学珠海分校','519078','158********','4450629','中共党员','2007-9-1','0001','0002','0002','无')
go
insert S
values('1001010065','李思','男','1989-7-10','汉族','广东省','北京师范大学珠海分校','519078','158********','4450626','中共党员','2007-9-1','0001','0002','0002','无')
go
insert S
values('1001010034','邵明','男','1989-7-10','汉族','广东省','北京师范大学珠海分校','519078','158********','4455627','中共党员','2007-9-1','0001','0001','0001','无')
go
insert C(C_ID,C_NAME,C_CREDIT,C_NOTE)
values('0001','数据库原理','3','无')
go
insert C(C_ID,C_NAME,C_CREDIT,C_PRNO,C_NOTE)
values('0002','VB','3','0001','无')
go
insert C(C_ID,C_NAME,C_CREDIT,C_PRNO,C_NOTE)
values('0003','C++','3','0001','无')
go
insert C(C_ID,C_NAME,C_CREDIT,C_NOTE)
values('0001','数据库原理','3','无')
go
insert T(T_ID,T_NAME,T_TEL,T_COR)
values('0001','周鹏','136********','数据库原理')
go
insert T(T_ID,T_NAME,T_TEL,T_COR)
values('0002','黄静','136********','VB')
go
insert T(T_ID,T_NAME,T_TEL,T_COR)
values('0003','何辉','136********','C++')
go
insert J(T_ID,C_ID,J_TIME)
values('0001','0001','周三节')
go
insert J(T_ID,C_ID,J_TIME)
values('0002','0002','周一节')
go
insert J(T_ID,C_ID,J_TIME)
values('0003','0003','周二节')
go
insert CS(S_No,C_ID,CS_RESULT)
values('1001010018','0001','90')
go
insert CS(S_No,C_ID,CS_RESULT)
values('1001010764','0002','80')
go
insert CS(S_No,C_ID,CS_RESULT)
values('1001010056','0003','88')
go
insert CS(S_No,C_ID,CS_RESULT)
values('1001010065','0001','78')
go
insert CS(S_No,C_ID,CS_RESULT)
values('1001010065','0002','78')
go
insert CS(S_No,C_ID,CS_RESULT)
values('1001010065','0003','89')
go
insert CS(S_No,C_ID,CS_RESULT)
values('1001010034','0003','93')
go
功能实现代码:
/*********学生专业课程视图************************/
create view IS_S_Cour(S_NO,S_NAME,S_PROF,S_COURSE) as
select S.S_NO,S.S_Name,S.S_CLAS,C.C_NAME
from S,C,CS
where S.S_NO=CS.S_No and C.C_ID=CS.C_ID
go
/***********************************************/
/****************学生成绩视图*******************/
create view RESULT_S(S_NO,S_NAME,C_ID,C_NAME,CS_RESULT) as
select S.S_NO,S.S_Name,CS.C_ID,C.C_NAME,CS.CS_RESULT
from S,C,CS
where S.S_NO=CS.S_No and C.C_ID=CS.C_ID
go
/**********************************************/
/*********对学生基本信息提供灵活查询方式。**********/
CREATE PROCEDURE student
@学号CHAR(10),
@姓名VARCHAR(10) OUTPUT,
@性别CHAR(2)OUTPUT,
@生日VARCHAR(10) OUTPUT
AS SELECT @姓名=S_NAME,@性别=S_SEX,@生日=S_BIRT
FROM S
WHERE S_NO=@学号
DECLARE @姓名VARCHAR(10) ,
@性别CHAR(2),
@生日VARCHAR(10)
EXEC student 1001010764,@姓名OUTPUT,@性别OUTPUT,@生日OUTPUT
SELECT @姓名,@性别,@生日
/********************************************************/
/***************对学生成绩进行查询。****************/
CREATE PROCEDURE RESULT(S_NAME,C_NAME,CS_RESULT)
@学号CHAR(10),
@姓名VARCHAR(10) OUTPUT,
@课程名CHAR(20)OUTPUT,
@成绩FLOAT OUTPUT
AS SELECT @姓名=S_NAME,@课程名=C_NAME,@成绩=CS_RESULT
FROM S,C,CS
WHERE S.S_NO=@学号
DECLARE @姓名VARCHAR(10) ,
@课程名CHAR(20),
@成绩FLOAT
EXEC RESULT 1001010764,@姓名OUTPUT,@课程名OUTPUT,@成绩OUTPUT
SELECT @姓名,@课程名,@成绩
/********************************************************/
/****************二班选课情况*******************************/
create view SELECTC(S_CLAS,S_NO,S_NAME,C_NAME) as
select S.S_CLAS,S.S_NO,S.S_Name,C.C_NAME
from S,C,CS
where S.S_NO=CS.S_No and C.C_ID=CS.C_ID AND S.S_CLAS = '0002'
go
/**********************************************************/
/***************C++课成绩平均分***************************/
create view AVGRESULT(C_NAME,ARGRESULT) as
select C_NAME,AVG(CS_RESULT)
from CS,C
where C.C_ID=CS.C_ID AND C.C_ID = '0003'
GROUP BY C_NAME
go
/**********************************************************/
/***************C++课成绩平均分排序***************************/
select S.S_NO,S_NAME,C_NAME,CS_RESULT
from CS,C,S
where S.S_NO=CS.S_No and C.C_ID=CS.C_ID AND C.C_ID = '0003'
ORDER BY CS_RESULT DESC;
go
/**********************************************************/
/*******更新学号为电话*************************/
UPDATE S
SET S_TEL = '136********'
WHERE S_NO = '1001010018'
GO
/**********************************************************/
/******************删除学号为记录******************/
DELETE
FROM S
WHERE S_NO = '1001010056'
/**********************************************************/
/******************学生表民族默认值为汉族*********************/
ALTER TABLE S
ADD CONSTRAINT MINZU
DEFAULT '汉族' FOR S_NAFA
/**********************************************************/
6.2 功能实现结果
完成各种功能截图:
学生专业课程视图
学生成绩视图
对学生成绩进行查询(存储过程)
二班选课情况(视图)
C++课成绩平均分(视图)
C++课成绩平均分排序
对学生基本信息提供灵活查询方式(存储过程)
7. 结 论
通过以上设计方案基本上可以得出一个简单学籍管理系统数据库,其中包含了学生基本信息、课程信息、学生选课情况、教师信息、教师授课情况、班级、院系等。而且能够对其中各项信息进行比较灵活查询。尽管建立表不多,设计得也不算复杂,但是我们在实验中涉及到了诸多数据库知识,除了基本建表、更新和查询操作外,还有视图、存储过程等等。尽管设计到知识点并不多,比如存储过程操作,我们小组研究了很久才能勉强完成功能,本想附加些触发器内容,但是因为诸多原因,还是没有加上。总说来,该系统数据库设计虽然很简单,但也包含了学籍管理系统部分要求,能够完成一定数据管理功能。
经过这段时间学习、实践,我们获得了许多课堂外知识,并深刻体会到实践是检验真理唯一标准,只有理论及实践相结合,才能更加掌握书本知识,同时学到了更多知识。首先我们要感谢学校给我们安排了致辞数据库系统设计机会,然后要感谢周鹏老师对我们热心指导和帮助,是他教会了我们解决问题方法,这样才使得我们能够顺利完成本次课程设计。同时我们还要感谢许多同学给予帮助,有了大家帮助让我们有更多信心。
38 / 38
展开阅读全文