资源描述
综合性数据库设计方案班务管理系统
综合性、设计性实验报告
实验课程名称数据库系统原理课程设计
专业计算机科学技术班级07级3班
学号 08001319 姓名 王 健
指导教师及职称段华斌 讲师
开课学期 至 第 二 学期
设计时间 12月20日~ 12月24日
湖南科技学院教务处编印
设计题目
班务信息管理系统
1. 实验目的:
(1>巩固数据库理论知识,熟悉一种具体的数据库管理系统<例如:SQL Server)的使用方法。
(2>掌握针对特定应用环境数据库的设计。
(3>综合使用SQL Server中数据库、表、视图、索引、触发器、存储过程的创立使用方法。
(4>体会运用软件工程的设计思想进行软件系统开发的过程与方法。
(5>经过对班级有关用户的系统调研,经过需求分析,数据库概念设计、逻辑设计到上机编程、调试和应用等全过程完成班级信息管理系统的后台数据库设计。
2. 软硬件环境:
硬件环境:AMD althlon 2.20GCPU+1G内存计算机一台。
软件环境: windows xp操作系统,sql server 数据库系统。
3. 实验设计简述:
本系统主要提供班干部及辅导员对班级的管理。
其中包括学生个人基本信息,教师个人基本信息,学生成绩信息,课程信息,学生留言信息,班费信息,班干部及辅导员个人信息,贫困生基本信息。
学生,任课教师,辅导员能够修改个人基本信息数据。
任课教师能够修改所教课程的学生成绩信息。学生能够添加留言信息。
辅导员能够修改学生基本信息。
班干部,辅导员能够修改课程信息。班干部能够修改班费信息。
辅导员,班干部能够修改贫困生基本信息。
学生能够查询有关个人需要的信息,而辅导员,班干部能够完成对班级有关信息与事务的管理。
辅导员为系统管理员。
4.系统需求分析与功能设计(根据课题的要求进行简单的需求分析,设计相应的数据流图,得出相应的系统功能需要, 系统数据流图>
一 背景材料与用户需求
本系统用户分为五类,分别为普通学生,班干部,任课教师,辅导员,系统管理员。几种用户对系统功能要求如下。
(1) 学生对系统功能需求
l 查询个人基本学籍信息,查看个人课表,查询个人成绩,查看到班级公告,交作业,考试安排等信息。查询班费支出详细账单。查询个人获奖信息。
l 修改个人基本信息,给班级提意见和留言。
(2) 班干部对系统功能需求
l 具有学生的全部权限,还需要修改班级课表,能够发表班级公告。修改班费支出与交纳信息。
(3) 任课教师对系统功能需求
l 需要查看和修改个基本信息,需要查看其所授课程的所有学生的成绩及其平均成绩,最高分。
l 能为所有学生录入成绩,修改学生的成绩。
(4) 辅导员对系统功能需求
l 需要查看所有学生的基本信息,查看学生成绩,选课情况。查看,修改班费信息。
(5) 系统管理员需要管理系统所有用户。
二 系统总体功能设计与功能模块划分
班务管理系统
基本信息模块
学生成绩管理模块
课表管理模块
留言板模块
系统管理模块
班费管理模块
贫困生信息管理模块
系统总共分五个模块。
系统总体功能有。
(1) 学生基本信息查询,学生基本信息的插入,修改,删除,而这些都必须只有系统管理员才能操作。
(2) 学生成绩的查询。学生成绩的录入,修改,删除,这些只有相应的任课老师才能够操作。
(3) 学生能够查询个人的课表。课程表的录入,修改,删除能够是班干部,辅导员,系统管理员完成。
(4) 学生能够发表留言。而班干部,辅导员,任课教师,系统管理员能够查看留言。
(5) 系统管理员拥有超级管理权限。能够修改所有的数据。
(6) 班费管理模块用于确定交班费金额以及学生上交班费。
(7) 贫困生管理模块用于管理贫困生库信息。
三 数据字典
(1) 数据项
字段名
字段类型
字段长度
说明与备注
学号(sno>
varchar
15
主键<学生学号)
姓名(sname>
varchar
20
学生姓名 not null
性别(ssex>
char
2
<男,女)检查约束,默认为男
出生日期(sborn>
datetime
Not null格式:YYYY-MM-DD
身份证号(ID>
varchar
20
Not null
专业名(deptname>
varchar
20
Not null
专业方向(fangxiang>
varchar
10
软件方向或网络方向Not null
专业编号(deptno>
int
4
Not null
联系电话(telephoneNumber>
varchar
20
入学日期(getCarDay>
datetime
Not null格式:YYYY-MM-DD
照片(photo>
image
民族(nation>
varchar
10
Not null
家庭出身(jiatin>
varchar
6
政治面貌(zhenzhi>
varchar
6
Not null
籍贯(jiguan>>
varchar
30
Not null
家庭详细地址(address>
varchar
45
Not null
邮政编码(post>
varchar
8
Not null 家中邮政编码
学生信息备注
varchar
50
有关学生备注信息
课程号(cno>
int
4
主键
课程名(cname>
varchar
36
Not null
先行课(preno>
int
4
课程的先行课
学分(xuefen>
int
4
Not null
教师号(teano>
int
4
主键
教师名(teaname>
varchar
20
not null
教师年龄(teaage>
int
4
工龄(teayear>
int
4
2>数据流
班务管理系统
用户
用户登陆验证
用户类型,用户名,密码
验证错误
验证经过
学生
班干部
任课教师
辅导员(管理员>
学生操作数据流图
查询
查询
查询
发表
查询
学生
学生基本信息
查询,修改
成绩基本信息
留言
班费开支
公告
课程表
综合测评信息
查询
班干部操作数据流图
发布
查询修改
查询
查看
查询
班干部
学生基本信息
查询,修改
成绩基本信息
留言
班费开支
公告
课程表
综合测评信息
查询与修改
班干部个人信息
查询修改
贫困生信息
查询
任课教师操作数据流图
查看
任课教师
教师个人信息
查询,修改
学生基本信息
查询
学生成绩
查询,修改
公告
留言
课程表
查看
查询,修改
班费交纳与支出数据流图
存档
辅导员
财务计划
学生干部
班会讨论
学生
班费规
审批
讨论
辅导员
班干部
学生
批准
班主任
下达学生
批准
经过
班干部
申请班费
讨论
审批
辅导员
领取班费
存档
5.概念模型设计 (按数据库设计方法和规范化理论,从实践概括抽象出ER模型>
……
m
1
1
m
m
n
学生
课程
辅导员
班干部
教师
教授
必修
留言
发表
班费
管理
学号
性别
分数
姓名
年龄
联系电话
留言ID
发表者
日期
留言对象
留言内容
课程号
课程名
学分
任课教师
……
姓名
性别
……
年龄
教师编号
姓名
年龄
……
联系电话
reason
经手人
金额
原因
日期
交纳或支出
贫困生
ID
address
sno
shouru
6.逻辑模型设计(按数据库设计方法和规范化理论得出符合3NF的逻辑模型,,ER图转化为相应的关系模式,设计数据库的逻辑模型>
由E—R图转化为关系模型
实体转化为关系表
学生实体转化为student表 student(sno,sname,ssex,sage,
Sborn,ID,deptname,fangxiang,telephoneNumber,getcarday,photo,nation,jiatin,zhenzhi,jiguan,address,post,beizhu>
课程实体转化为course表 course(cno,cname,cpno,xuefen,teano
>
教师实体转化为teacher表 teacher(teano,tname,teaage,teayear>
班干部实体转化为bangan表 bangan(bno,bname,zhiwu,bsex,sno
>
辅导员实体fudao表 fudao(fno,fname,fsex,fage,fphonenum>
留言实体liuyin表 liuyin(ID,sno,duixiang,content,riqi>
班费收缴支出实体banfei表 banfei(ID,leixin,sno,number,date1,
Reason,jinshou,guanli>
贫困生表penkun表 penkun(sno,reason,address,shouru>。
必修课程联系转化为表sc表 sc(sno,cno,grade,time1>其中sno,cno也是外键。
以上有下划线的为主键,有波线的为外键。
7.物理模型设计<存储记录结构设计,物理文件的安排和建立索引)
1.存储记录结构设计
Student表
列名
类型
长度
约束
备注
Sno
Varchar
20
Primary key
学号
Sname
varchar
20
Not null
姓名
Ssex
varchar
2
Check(男,女>
性别
sborn
Datetime
not null
出生日期
ID
varchar
18
Not null
身份证号
deptname
Varchar
30
专业名
Fangxiang
Varchar
6
Check(软件,网络>
专业方向
telephone
Varchar
15
手机号
Getcarday
Datetime
Not null
入学日期
Nation
Varchar
8
Not null
民族
Jiatin
Varchar
10
家庭出身
zhenzhi
Varchar
8
政治面貌
Jiguan
Varchar
30
Not null
籍贯
address
Varchar
50
Not null
地址
Post
Varchar
10
邮政编码
Beizhu
Varchar
30
备注
课程表course
列名
类型
长度
约束
备注
Cno
Varchar
10
Primary key
课程号
cname
varchar
20
Not null
课程名
Cpno
varchar
10
先修课号
Xuefen
Int
not null
学分
Teano
varchar
6
Not null
教师编号
增加课程表class
列名
类型
长度
约束
备注
ID
Int
主键
Cno
Varchar
10
外键
课程号
fanxiang
Varchar
15
课程性质
address
Varchar
30
Not null
上课地点
Time1
Varchar
20
Not null
上课时间
教师表teacher
列名
类型
长度
约束
备注
Teano
Varchar
6
主键
教师编号
Tname
Varchar
15
姓名
Teaage
Int
年龄
Teayear
Int
教书年数
zhichen
Varchar
6
职称
班干部表bangan
列名
类型
长度
约束
备注
Bno
Int
主键
班干部标识
Bname
Varchar
20
sno
Varchar
20
外键
学号
Zhiwu
Varchar
10
Not null
职务
telphone
Varchar
20
Not null
联系电话
辅导员实体fudao表
列名
类型
长度
约束
备注
Fno
Int
主键
Fsex
varchar
2
Check(男,女>
性别
Fname
Varchar
20
Not null
姓名
Fage
Int
Not null
年龄
fphonenum
Varchar
20
联系电话
Liuyin表
列名
类型
长度
约束
备注
ID
Int
主键
留言标识
sno
Varchar
20
外键
学号
Duixiang
Varchar
10
Not null
对象
Content
text
Not null
内容
riqi
Datetime
Not null
日期
班费表banfei表
列名
类型
长度
约束
备注
ID
Int
主键
Leixin
Varchar
6
Not null
类型(交纳或支出>
Sno
Varchar
20
外键
学号
Number
Int
Not null
金额
Date1
datetime
Not null
日期
Reason
varchar
10
<支出)原因
Jinshou
varchar
10
Not null
经手人姓名
贫困生表penkun表
列名
类型
长度
约束
备注
Sno
Varchar
20
主键(外键>
学号
Reason
text
Not null
贫困原因
Address
Varchar
30
Not null
家庭住址
shouru
float
Not null
家月人均收入
Sc表
列名
类型
长度
约束
备注
Sno
Varchar
20
主键(外键>
学号
Cno
varchar
10
主键 外键
课程号
Grade
float
Not null
分数
Time1
Varchar
20
Not null
开课学期
2 为了增加查询的效率建立如下索引
(1> student(sname>
(2> course(cno>
(3> class(cno>
(4> teacher(teano>
(5> bangan(bname>
(6> liuyin(duixiang>
(7> banfei(leixin>
(8> sc(cno,sno>
8.实现<数据库结构设计的程序代码,基本操作的程序代码)
实现该设计的环境为Windows xp Perfessinal+MSSQLServer
8.1创立数据库和表
建立数据库classadmin
Create database classadmin --创立数据库。
On primary
(
Name=class_data, --数据文件逻辑名
Filename='D:\class_data.mdf', --数据文件物理文件名.
Size=10, --数据文件的大小
Maxsize=unlimited, --最大无限制
Filegrowth=10% --文件大小增长
>
Log on
(
Name=class_log, --日志文件逻辑文件名
Filename='C:\class_log.ldf', --日志文件物理文件名
Size=5MB, --初使大小。
Maxsize=100MB, --最大大小
Filegrowth=3MB --文件增长
>
1. 建立student表
Use classadmin --使用classadmin数据库
Go
Create table student --创造表.
(
Sno varchar(20>, --学号(主键>
Sname varchar(20> not null, --姓名不为空
Ssex varchar(2> not null, --性别,不为空
Sborn datetime not null, --出生日期 不为空
ID varchar(18> not null, --身份证号 不为空
Deptname varchar(30>, --专业名
Fangxiang varchar(6>, --专业方向
Telephone varchar(15>, --手机号
Getcarday datetime not null, --入学日期
Nation varchar(8> not null, --民族
Jiatin varchar(10>, --家庭背景
Zhenzhi varchar(8>, --政治面貌
Jiguan varchar(30> not null, --籍贯
Address varchar(50> not null, --地址
Post varchar(30>, --备注
Constraint PK_sno primary key(sno>, --主键约束
Constraint CK_FX check(fangxiang in('软件','网络'>>, --方向检查约束
Constraint ck_sex check(ssex in('男','女'>> --性别检查约束
>
2 创立 course 表
Create table course --创立表
(
Cno varchar(10>, --课程号
Cname varchar(20> not null, --课程名
Cpno varchar(10>, --先修课号
Xuefen int not null, --学分
Teano varchar(6> not null, --教师编号
Constraint PK_cno primary key(cno>, --课程主键约束
Constraint Fk_CP foreign key(cpno> references course(cno> --外键约束
>
3创立class表
Create table class --创立class 表
(
ID int, --课表ID
Cno varchar(10>, --课程号
Fanxiang varchar(15>, --课程性质
Address varchar(30> not null, --上课地点
Timel varchar(20> not null, --上课时间
Constraint PK_ID primary key(ID>, --主键约束
Constraint FK_cno foreign key(cno> references course(cno> --外键约束
>
Teacher表
Create table teacher --创立教师表
(
Teano varchar(6>, --教师编号
Tname varchar(15>,--姓名
Teaage int, --年龄
Teayear int, --教书年数
Zhichen varchar(6>, --职称
Constraint PK_tno primary key(Teano>, --主键约束
>
班干部表bangan
Create table bangan --创立班干表
(
Bno int, --班干部标识号
Bname varchar(20>, --姓名
Sno varchar(20>, --学号
Zhiwu varchar(10> not null, --职务
Telephone varchar(20> not null, --联系电话
Constraint PK_bno primary key(Bno>, --主键约束
Constraint FK_sno foreign key(sno> references student(sno> --外键
>
辅导员fudao表
Create table fudao
(
Fno int, --标识号
Fsex varchar(2>, --性别
Fname varchar(20> not null, --姓名
Fage int not null, --年龄
Fphonenum varchar(20>, --联系电话
Constraint PK_fno primary key(fno>, --主键约束
Constraint CK_sex1 check(fsex in('男','女'>> --性别
>
留言表liuyin表
Create table liuyin --留言表
(
ID int, --标识
Sno varchar(20>, --学号
Douxiang varchar(10> not null, --对象
Content text not null, --内容
Riqi datetime not null --日期
Constraint pK_id1 primary key(ID>, --主键标识
Constraint FK_sno1 foreign key(sno> references student(sno> --外键
>
班费表banfei表
Create table banfei --创立班费表
(
ID int, --主键标识
Leixin varchar(6>, --类型<交纳或支出)
Sno varchar(20>, --事务办理学生学号
Number int not null, --金额
Date1 datetime not null, --日期
Reason varchar(10>, --支出原因
Jinshou varchar(10> not null, --经手人姓名
Constraint PK_id2 primary key(ID>, --主键
Constraint FK_sno2 foreign key(sno> references student(sno> --外键约束
>
贫困生表penkun
Create table penkun
(
Sno varchar(20> primary key, --贫困生学号
Reason text not null, --贫困原因
Address varchar(30> not null, --家庭住址
Shouru float not null, --家中月人均收入
Constraint FK_sno3 foreign key(sno> references student(sno> --外键约束
>
Sc表
Create table sc --创立sc 表
(
Sno varchar(20>, --学号
Cno varchar(10>, --课程号
Grade float not null, --分数
Time1 varchar(20> not null, --开课学期
Constraint PK_SC primary key(sno,cno>, --主键
Constraint FK_sno4 foreign key(sno> references student(sno>,--外键
Constraint FK_cno4 foreign key(cno> references course(cno> --外键
>
8.2创立索引
Create index stusname on student(sname> --建立student表上sname索引
Create unique index coucno on course(cno> --建立course表上cno索引
Create index clacno on class(cno> --建立class表上cno索引
Create index teateano on teacher(teano> --teacher 表上建立teano索引
Create index banname on bangan(bname> --bangan表上建立bname索引
Create index liudui on liuyin(douxiang> --liuyin表上建立duixiang索引
Create index banxin on banfei(leixin> --banfei上建立leixin索引
Create index scno on sc (cno asc,sno desc> --sc上建立cno,sno索引.
8.3创立视图
------------------------创立视图---------------------------------------
--(1>方向为软件的同学的视图
create view stusoft
as
select * from
student where
fangxiang='软件'
--(2>方向为网络的同学的视图
create view stunet
as
select * from
student where
fangxiang='网络'
----------------------------------------------------------------------
--------------------------触发器设计-----------------------------------
1.Student 表上的出发器触发器:对于学生基本信息表,
当学生信息修改时,其它表中若有对应的该信息时,应该对其进行修改;
当学生信息删除时,对应的如SC表中的对应学生成绩信息也应该自动修改:
--1>supdate
create trigger supdate on student
for update
as
update sc
set sno=(select sno from inserted>
where sc.sno=(select sno from deleted>
update liuyin
set sno=(select sno from inserted>
where liuyin.sno=(select sno from deleted>
update banfei
set sno=(select sno from inserted>
where banfei.sno=(select sno from deleted>
update penkun
set sno=(select sno from inserted>
where penkun.sno=(select sno from deleted>
--2>sdelete
create trigger sdelete on student
for delete
as
delete
from sc
where sc.sno=(select sno from deleted>
delete
from liuyin
where liuyin.sno=(select sno from deleted>
delete
from banfei
where banfei.sno=(select sno from deleted>
delete
from penkun
where penkun.sno=(select sno from deleted>
--3>scorecheck
create trigger scoreCheck
on sc
for insert,update
as
if update(grade>
print 'AFTER触发器开始执行……'
begin
declare @ScoreValue real
select @ScoreValue=(select grade from inserted>
if @ScoreValue>100 or @ScoreValue<0
print '输入的分数有误,请确认输入的考试分数!'
delete from sc where grade=(select grade from inserted>
end
结果:命令成功完成
------------------------------------------------------------------------
----------------------------------创立存储过程---------------------------
1.插入学生基本信息的存储过程:
create procedure TnsertStudent
@sno varchar(20>, @sname varchar(20>,
@ssex varchar(2>, @sborn datatime(8>, @ID varchar(18>,
@deptname varchar(30>, @fangxiang varchar(6>, @telephone varchar(15>,
@getcarday varchar(8>, @nation varchar(8>, @jiatin varchar(10>,
@zhenzhi varchar(8>, @jiguan varchar(30>, @address varchar(50>,@post varchar(10>,
@beizhu varchar(30>
as
insert into student values(@sno,@sname,@ssex,@sborn,@ID,@deptname,@fangxiang,@telephone,@getcarday
,@nation,@jiatin,@zhenzhi,@jiguan,@address,@post,@beizhu>
GO
结果:命令已成功完成。
2.Update 学生成绩信息的存储过程:
CREATE PROCEDURE UpdateSC
@sno varchar(20>,
@cno varchar(10>,
@grade float
AS
update SC
set grade=@grade
where sno=@sno and cno=@cno
GO
3. 对不及格科目的所有学生的信息查询的存储过程
CREATE PROCEDURE selectstuendt_1
AS
SELECT Sc.sno,sname,cname,o,grade
FROM Student, SC,Course
Where grade <60 And Student.sno=SC.sno And SC.cno=Co
GO
结果:
命令已成功完成。
4.查询一门课程最高分学生的信息
create procedure selectstumaxgrade
@cname varchar(20>
as
select distinct student.sno,sname,o,cname,grade
from student,sc,course
where student.sno=sc.sno and o=o and o=(select cno from course where cname=@cname>
and
grade>=(select max(grade> from sc where cno=
(select cno from course where cname=@cname>
>
drop procedure selectstumaxgrade
结果: 命令已成功完成。
--根据学号查询学生的信息
create procedure selectofsno
@sno varchar(20>
as
select * from student where sno=@sno
--查询某门课的平均分
create procedure selectavg
@cno varchar
展开阅读全文