最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 正文

学生成绩管理系统数据库设计文档 - (全)

来源:动视网 责编:小OO 时间:2025-10-01 18:40:01
文档

学生成绩管理系统数据库设计文档 - (全)

“学生成绩管理”数据库设计文档0、前言(一些必要的说明。)0.1数据库说明数据库名:PXSCJ逻辑名称:学生成绩数据库数据文件:PXSCJ.mdf日志文件:PXSCJ_Log登录名:admin,密码:1234560.2表命名说明Cjb:成绩表,保存选课信息Cxb:查询表,记录boolean值对应信息,1代表男,0代表女。Kcb:课程表。Tjb:统计表,统计成绩段分布。Xsb:学生表。Yhb:用户表,保存系统用户信息。Jsb:教师表。Skb:授课表,记录授课信息。0.3系统功能模块图1、需求分析
推荐度:
导读“学生成绩管理”数据库设计文档0、前言(一些必要的说明。)0.1数据库说明数据库名:PXSCJ逻辑名称:学生成绩数据库数据文件:PXSCJ.mdf日志文件:PXSCJ_Log登录名:admin,密码:1234560.2表命名说明Cjb:成绩表,保存选课信息Cxb:查询表,记录boolean值对应信息,1代表男,0代表女。Kcb:课程表。Tjb:统计表,统计成绩段分布。Xsb:学生表。Yhb:用户表,保存系统用户信息。Jsb:教师表。Skb:授课表,记录授课信息。0.3系统功能模块图1、需求分析
“学生成绩管理”数据库设计文档

0、前言(一些必要的说明。)

0.1 数据库说明

数据库名:PXSCJ 

逻辑名称:学生成绩数据库

数据文件:PXSCJ.mdf

日志文件:PXSCJ_Log

登录名:admin,密码:123456

0.2表命名说明

Cjb:成绩表,保存选课信息

Cxb:查询表,记录boolean值对应信息,1代表男,0代表女。

Kcb:课程表。

Tjb:统计表,统计成绩段分布。

Xsb:学生表。

Yhb:用户表,保存系统用户信息。

Jsb: 教师表。

Skb:授课表,记录授课信息。

0.3 系统功能模块图

1、需求分析阶段

说明:学生成绩管理系统需要实现以下功能:一个学生可以选修多门课程,一门课程可以由多个学生选修,学生选修一门课会有一个成绩。一个教师可以教授多个班级,一个教师也可以教授多门课程,一个班级有多个学生,一门课程也可以由多个老师来上,一个老师给一个班级上一门课有确定的时间和地点。不同的用户根据身份不同拥有不同的权限。

(1)数据流图

老师----成绩管理,学生信息管理,权限管理---学生成绩管理系统—成绩查询--学生

(要求:用visio实现第一层数据流图,第二层数据流图,第三层数据流图)p121

第一层数据流图

第二层数据流图

第三层数据流图(略)

(2)数据字典

(每个实体的详细说明)

数据库编号:pxscj

基表编号:f1

基表英文名称:yhb

基表中文名称:用户表
字段编号英文字段名中文字段名字段类型备注
1Yhbh

用户编号Char(6)

2yhm用户名Char(8)

3sf身份Varcha(20)

4mm密码Char(6)

5bz备注Varcha(50)

说明: 

数据库编号:pxscj

基表编号:f2

基表英文名称:cjb

基表中文名称:成绩表
字段编号英文字段名中文字段名字段类型备注
1Xh

学号Char(6)

2Kch

课程号Char(3)

3Cj

成绩Int

说明:xh参照学生表的xh;kch参照课程表的kch;cj介于0-100之间。

数据库编号:pxscj

基表编号:f3

基表英文名称:kcb

基表中文名称:课程表
字段编号英文字段名中文字段名字段类型备注
1Xh

学号Char(6)

2XM姓名Char(8)

3XB性别Bit

4CSSJ出生时间Datetime

5Bj

班级Varchar(50)

6Zy

专业Char(12)

7ZXH总学分Int

8Lxfs

联系方式Varchar(50)

9zp照片Varbinary(MAX)

10BZVarchar(500)

说明:xh参照学生表的xh;kch参照课程表的kch;cj介于0-100之间。xb参照查询表的xb

数据库编号:pxscj

基表编号:f4

基表英文名称:jsb

基表中文名称:教师表
字段编号英文字段名中文字段名字段类型备注
1Jsbh

教师编号Char(6)

2Jsxm

教师姓名Char(8)

3zy专业Varchar(30)

4Fy

分院Varchar(30)

5Zc

职称Varchar(20)

6Zc

职务Varchar(20)

7Bz

Varchar(50)

说明:xh参照学生表的xh;kch参照课程表的kch;cj介于0-100之间。

数据库编号:pxscj

基表编号:f5

基表英文名称:kcb

基表中文名称:课程表
字段编号英文字段名中文字段名字段类型备注
1KCH课程号Char(3)

2KCM课程名Char(16)

3Cj

成绩Int

说明:xh参照学生表的xh;kch参照课程表的kch;cj介于0-100之间。

数据库编号:pxscj

基表编号:f6

基表英文名称:cjb

基表中文名称:课程表
字段编号英文字段名中文字段名字段类型备注
1Xh

学号Char(6)

2Kch

课程号Char(3)

3KKXQTinyint

4XS学生tinyint
5XF学分tinyint
说明:xh参照学生表的xh;kch参照课程表的kch; 

数据库编号:pxscj

基表编号:f7

基表英文名称:skb

基表中文名称: 授课表

字段编号英文字段名中文字段名字段类型备注
1Jsbh

教师编号Char(6)

2Kch

课程号Char(3)

3Bj

班级Varchar(50)

4Sj

时间Varchar(50)

5dd地点Varchar(50)

说明: jsbh参照教师表的jsbh;kch参照课程表的kch;

数据库编号:pxscj

基表编号:f8

基表英文名称:CXB

基表中文名称: 查询表

字段编号英文字段名中文字段名字段类型备注
1XB性别Bit

2XBM性别名Char(4)

说明: 

2、概念设计阶段

(1)分ER图

(两个分ER图,1)学生和课程,2)教师,课程,班级)

(2)总ER图

(由分ER图画出总ER图)

3、逻辑设计阶段

(1)表关系图

(看是否可以画出)

(2)表结构图

Xsb结构

Kcb结构

Cjb结构

Yhb结构

Jsb结构

Skb结构

Tjb结构

Cxb结构

(3)表优化(判断每个关系是否达到3NF要求,如果没有达到,则继续规范)

按照(1nf->2nf->3nf进行判断和优化)

Cjb(xh,kch,cj)

码:(xh,kch)

非主属性:cj

因为cj完全依赖于(xh,kch),所以属于2NF

因为不存在传递函数依赖,所以属于3NF

Cxb(xb,xbm)

码:(xbm)

非主属性:xb

因为xb完全依赖于(kch),所以属于2NF

因为不存在传递函数依赖,所以属于3NF

Jsb(jsbh,jsxm,zy,fy,zc,zw,bz)

码:(jsbh)

非主属性:jsxm,zy,fy,zc,zw,bz

因为jsxm,zy,fy,zc,zw,bz完全依赖于(kch),所以属于2NF

因为不存在传递函数依赖,所以属于3NF

Kcb(kch,kcm,kkxq,xs,xf)

码:(kch)

非主属性:kcm,kkxq,xs,xf

因为kcm,kkxq,xs,xf完全依赖于(kch),所以属于2NF

因为不存在传递函数依赖,所以属于3NF

Skb(jsbh,kch,bj,sj,dd)

码:(jsbh,kch,bj)

非主属性:sj,dd

因为sj,dd完全依赖于(jsbh,kch,bj),所以属于2NF

因为不存在传递函数依赖,所以属于3NF

Tjb(kch,rs1,rs2,rs3,rs4,rs5)

码:(kch)

非主属性:rs1,rs2,rs3,rs4,rs5

因为rs1,rs2,rs3,rs4,rs5完全依赖于(kch),所以属于2NF

因为不存在传递函数依赖,所以属于3NF

Xsb(xh,xm,xb,cssj,bj,zy,zxf,bz,lxfs,zp)

码:(xh)

非主属性:xm,xb,cssj,bj,zy,zxf,bz,lxfs,zp

因为xm,xb,cssj,bj,zy,zxf,bz,lxfs,zp完全依赖于(xh),所以属于2NF

因为不存在传递函数依赖,所以属于3NF

Yhb(yhbh,yhm,mm,bz)

码:(yhbh)

非主属性:yhm,mm,bz

因为yhm,mm,bz完全依赖于(yhbh),所以属于2NF

因为不存在传递函数依赖,所以属于3NF

4、物理设计 

 选择合适的DBMS(要求用sql server 2008)

5、实施(把sql语句贴在下面)

(1)创建数据库

(把sql语句贴在下面)

create database pxscj1

on

(

 name='pxscj1_data',

 filename='f:\\pxscj1_data.mdf',

 size=3mb,

 filegrowth=10%

)

log on

(

 name='pxscj1_log',

 filename='f:\\pxscj1_log.ldf',

 size=4mb,

 maxsize=6mb,

 filegrowth=1mb

)

(2)创建表

 (把sql语句贴在下面)

create table xsb(

xh char(6) not null primary key,

xm char(8) not null,

xb bit,

cssj datetime,

bj varchar(50) not null,

zy char(12),

zxf int,

bz varchar(500),

lxfs varchar(50),

zp varbinary(max)

)

create table kcb (

kch char(3) not null primary key,

kcm char(16) not null,

kkxq tinyint,

xs tinyint,

xf tinyint

)

create table cjb(

xh char(6),

kch char(6),

cj int,

constraint c1 primary key(xh,kch)

)

create table yhb(

yhbh char(6) primary key not null,

yhm char(8),

sf varchar(20),

mm char(6),

bz varchar(5)

)

create table jsb(

jsbh char(6) not null primary key,

jsxm char(8),

zy varchar(30),

fy varchar(30),

zc varchar(20),

zw varchar(20),

bz varchar(50)

)

create table skb(

jsbh char(6) not null,

kch char(3) not null,

bj varchar(50) not null,

sj varchar(20),

dd varchar(50),

constraint c2 primary key(jsbh,kch,bj)

)

create table tjb(

kch char(3) primary key not null,

rs1 int,

rs2 int,

rs3 int,

rs4 int,

rs5 int

create table cxb(

xb bit not null,

xbm char(4) not null primary key

)

(3)数据库完整性

2)视图

学生选课情况视图(学号,姓名,课程号,课程名,成绩,学分,总学分,教师)

create view xs_xk_view 

as

select xsb.XH,XM,kcb.KCH,kcm,CJ,xf,zxf,jsb.jsbh,jsxm

from xsb,KCB,CJB,jsb,skb

where xsb.XH=cjb.XH and kcb.KCH=cjb.KCH 

and cjb.KCH=skb.kch and skb.jsbh=jsb.jsbh

select * from xs_xk_view

3)自定义数据库类型

学号,课程号可以考虑用自定义的数据类型。

sp_addtype 'xh','char(6)'

sP_addtype 'kch','char(3)'

4)默认值对象

Xsb:性别默认为1,总学分默认为0。

Kcb:学生人数默认为40,学分默认为2。

Jsb:zy计算机,fy信息,zc讲师,zw无。

Yhb:mm’123456’

Xsb:性别默认为1, 

alter table xsb add constraint b1 DEFAULT 1 for xb

总学分默认为0。

 alter table xsb add constraint b2 DEFAULT 0 for zxf

Kcb:学生人数默认为40,

alter table kcb add constraint b3 DEFAULT 40 for xs

学分默认为2。

alter table kcb add constraint b4 DEFAULT 2 for xf

Jsb:zy计算机,

alter table jsb add constraint b5 DEFAULT '计算机' for zy

fy信息,

alter table jsb add constraint b6 DEFAULT '信息' for fy

zc讲师,

alter table jsb add constraint b7 DEFAULT '讲师' for zc

zw无。

alter table jsb add constraint b8 DEFAULT '无' for zw

Yhb:mm’123456’

alter table yhb add constraint b9 DEFAULT '123456' for mm

5)规则和check约束

Xsb:zxf范围在0-160之间。

Kcb:kkxq范围在1-8之间,xf在1-15之间

Cjb:cj范围在0-100之间

Xsb:zxf在0-160之间。

alter table xsb

add constraint pk_1 check (zxf between 0 and 160)

Kcb:kkxq在1-8之间,xf在1-15之间

alter table kcb

add constraint pk_2 check (kkxq between 1 and 8)

alter table kcb

add constraint pk_3 check (xf between 1 and 15)

Cjb:cj在0-100之间

alter table cjb

add constraint pk_4 check (cj between 0 and 100)

6)参照关系

cjb(xh)参照xsb(xh)

cjb(kch)参照kcb(kch)

yhb(yhbh)参照xsb(xh)和jsb(jsbh) –必须用触发器实现

skb(jsbh)参照jsb(jsbh)

skb(bj)参照xsb(bj)

skb(kch)参照kcb(kch)

cjb(xh)—xsb(xh)

alter table cjb  

add constraint fk_1 foreign key (xh) references xsb (xh)

cjb(kch)—kcb(kch)

alter table cjb  

add constraint fk_2 foreign key (kch) references kcb (kch)

skb(jsbh)—jsb(jsbh)

alter table skb  

add constraint fk_4 foreign key (jsbh) references jsb (jsbh)

skb(kch)—kcb(kch)

alter table skb  

add constraint fk_6 foreign key (kch) references kcb (kch)

skb(bj)—xsb(bj) --用触发器实现

create trigger t1 on skb

for insert

as

begin

 if not exists(select * from xsb where bj=(select bj from inserted))

   begin

   print '插入的班级不存在!'

   rollback transaction

   end 

end

yhb(yhbh)—xsb(xh)和jsb(jsbh) --必须用触发器实现

alter trigger  t2 on yhb 

for insert

as

begin

  if  not exists(select * from xsb where xh=(select yhbh from inserted))

    begin 

     if not exists(select * from jsb where jsbh=(select yhbh from inserted))

      begin

       print '插入的编号出错!'

       rollback transaction

      end 

    end

  end

(4)用户自定义函数

(把sql语句贴在下面)

(5)用户自定义存储过程

1)根据学号查询学生的选课情况

(把sql语句贴在下面)

CREATE PROCEDURE xhcxxs @xh char(6) 

as

begin

 if exists(select * from cjb where xh=@xh)

    select * from cjb where xh=@xh

 else

    print '无此学生选课信息'

end

2)根据课程号查询课程的选修情况

(把sql语句贴在下面)

CREATE PROCEDURE kchcxxk @kch char(3) 

as

begin

 if exists(select * from cjb where kch=@kch)

    select * from cjb where kch=@kch

 else

    print '无此课程选课信息'

end

根据教师编号查询授课情况

(把sql语句贴在下面)

CREATE PROCEDURE jsbhcxsk @jsbh char(6) 

as

begin

 if exists(select * from skb where jsbh=@jsbh)

    select * from skb where jsbh=@jsbh

 else

    print '无此教师授课信息'

end

3)根据班级查询该班级的授课情况

(把sql语句贴在下面)

CREATE PROCEDURE bjcxsk @bj varchar(50) 

as

begin

 if exists(select * from skb where bj=@bj)

    select * from skb where bj=@bj

 else

    print '无此班级授课信息'

end

4)根据课程号号查看授课情况

(把sql语句贴在下面)

CREATE PROCEDURE kchcxsk @kch char(3) 

as

begin

 if exists(select * from skb where kch=@kch)

    select * from skb where kch=@kch

 else

    print '无此课程授课信息'

end

5)课程成绩分布统计。存储过程名称TJ_CJ。参数:课程号(@kch)。实现功能:把成绩表(CJB)中指定课程按照分数段人数进行统计,放入统计表(TJB)中。

编写思路:(1)清空TJB表,插入一行所有分数段的人数都为0的所要查找的课程的记录。(2)判断所查的课程号在CJB表中是否有记录,若有则查找出各个分数段的人数并且更新到TJB表中。

方法一:

create PROCEDURE [dbo].[TJ_CJ](@kch char(3))

as

truncate table TJB

insert into TJB values(@kch,0,0,0,0,0)

if exists (select * from CJB where KCH=@kch)

begin

    update TJB set RS1=(select count(*) from CJB where CJ>=0 and CJ<60 and KCH=@kch)

    update TJB set RS2=(select count(*) from CJB where CJ>=60 and CJ<70 and KCH=@kch)

    update TJB set RS3=(select count(*) from CJB where CJ>=70 and CJ<80 and KCH=@kch)

    update TJB set RS4=(select count(*) from CJB where CJ>=80 and CJ<90 and KCH=@kch)

    update TJB set RS5=(select count(*) from CJB where CJ>=90 and CJ<=100 and KCH=@kch)

end

exec TJ_CJ '101'

方法二:

如果选择统计的课程在成绩表(CJB)已经存在,可以采用下列代码完成统计功能,并且代码效率较高。但CJB表中没有所选择的课程记录,执行的结果是各个分数段的人数为null。

create procedure[dbo].[TJ_CJ] (@KCH varchar(3)) 

as

begin

    delete from TJB

    insert into TJB(KCH,RS1,RS2,RS3,RS4,RS5) 

    select    @KCH,

        sum(case when CJ < 60 then 1 else 0 end), 

        sum(case when CJ >= 60 and CJ <= 69 then 1 else 0 end), 

        sum(case when CJ >= 70 and CJ <= 79 then 1 else 0 end), 

        sum(case when CJ >= 80 and CJ <=  then 1 else 0 end), 

        sum(case when CJ >= 90 and CJ <= 100 then 1 else 0 end)

        from CJB where KCH = @KCH

end

(6)触发器

1)实现yhb(yhbh)—xsb(xh)和jsb(jsbh)参照关系 –必须用触发器实现

(把sql语句贴在下面)

create trigger  t2 on yhb 

for insert

as

begin

  if  not exists(select * from xsb where xh=(select yhbh from inserted))

    begin 

     if not exists(select * from jsb where jsbh=(select yhbh from inserted))

      begin

       print '插入的编号出错!'

       rollback transaction

      end 

    end

  end

2)实现更新学生信息和老师信息的时候用户表中的信息可以实现级联修改。

(把sql语句贴在下面)

create trigger  xsb_tigger on xsb 

for update

as

if update(xh) 

begin

  declare @new_num varchar(6),@old_num varchar(6)

  select @new_num=xh from inserted

  select @old_num=xh from deleted     

  update yhb

  set yhbh=@new_num

  where yhbh=@old_num

 end

create trigger  jsb_tigger on jsb for update

as

if update(jsbh) 

begin

  declare @new_num varchar(6),@old_num varchar(6)

  select @new_num=jsbh from inserted

  select @old_num=jsbh from deleted     

  update yhb

  set yhbh=@new_num

  where yhbh=@old_num

 end

3)当删除学生信息的时候选课记录同时删除,同时用户表的记录也删除。

(把sql语句贴在下面)

create trigger  xsb_d1 on xsb 

for delete

as

begin

  declare @xh varchar(6)

  select @xh=xh from deleted     

  delete from cjb  where xh=@xh

  delete from yhb  where yhbh=@xh

 end

4)当删除老师信息的时候授课记录也同时删除,同时用户表中的记录也删除。

(把sql语句贴在下面)

create trigger  jsb_deletigger on jsb 

for delete

as

begin

  declare @jsbh varchar(6)

  select @jsbh=jsbh from deleted     

  delete from skb  where jsbh=@jsbh 

  delete from yhb  where yhbh=@jsbh

 end

5)增加成绩时成绩大于60应该给学生总学分加上这门课的学分。删除成绩的时候,如果成绩小于60分,应该把学生的总学分去掉这门课的学分。

(把sql语句贴在下面)

create trigger  cjb_insetigger on cjb for insert

as

begin

  declare @xh varchar(6)

  declare @cj int

  declare @xf int

  declare @kch char(3)

  select @xh=xh,@cj=cj,@kch=kch from inserted 

  select @xf=xf from kcb where kch=@kch    

  if(@cj>=60)

   begin

    update xsb 

    set zxf=zxf+@xf

    where xh=@xh

   end  

end

create trigger  cjb_deletigger on cjb for delete

as

begin

  declare @xh varchar(6)

  declare @cj int

  declare @xf int

  declare @kch char(3)

  select @xh=xh,@cj=cj,@kch=kch from deleted 

  select @xf=xf from kcb where kch=@kch    

  if(@cj>=60)

   begin

    update xsb 

    set zxf=zxf-@xf

    where xh=@xh

   end  

 end

6)通过instead of触发器实现对学生选课情况视图(学号,姓名,课程号,课程名,成绩,学分,总学分,教师)的插入数据操作、更新数据操作、删除数据操作。

(把sql语句贴在下面)

create view v1 

as

select cjb.xh,xm,xsb.bj,cjb.kch,kcm,CJ,xf,zxf,jsb.jsbh,jsxm

from XSB,KCB,CJB,jsb,skb

where xsb.XH=CJB.XH and kcb.KCH=cjb.KCH and jsb.jsbh=skb.jsbh and skb.kch=CJB.KCH

create trigger v1_t –有问题,待完善

on v1

instead of insert

as

begin

declare @xh char(6),@xm char(8),@kch char(3),@kcm char(16),@cj int,@jsbh char(6),@jsxm char(8),@bj varchar(50)

set @xh=(select xh from inserted)

set @xm=(select XM from inserted)

set @kch=(select kch from inserted)

set @kcm=(select kcm from inserted)

set @cj=(select CJ from inserted)

set @jsbh=(select jsbh from inserted)

set @jsxm=(select jsxm from inserted)

set @bj=(select bj from inserted)

if not exists(select * from XSB where xh=@xh)

    begin

    insert into XSB(XH,XM,bj)

    values(@xh,@xm,@bj)

    end

if not exists(select * from KCB where KCH=@kch)

    begin

    insert into KCB(KCH,KCM)

    values(@kch,@kcm)

    end

if not exists(select * from CJB where XH=@xh and KCH=@kch)

    begin

    insert into CJB(XH,KCH,CJ)

    values(@xh,@kch,@cj)

    end

if not exists(select * from jsb where jsbh=@jsbh)

    begin

    insert into jsb(jsbh,jsxm)

    values(@jsbh,@jsxm)

    end

if not exists(select * from skb where jsbh=@jsbh and kch=@kch and bj=@bj)

    begin

    insert into skb(jsbh,kch,bj)

    values(@jsbh,@kch,@bj)

    end

End

6、运行与维护

 用java和sql server 2008把系统功能实现。

文档

学生成绩管理系统数据库设计文档 - (全)

“学生成绩管理”数据库设计文档0、前言(一些必要的说明。)0.1数据库说明数据库名:PXSCJ逻辑名称:学生成绩数据库数据文件:PXSCJ.mdf日志文件:PXSCJ_Log登录名:admin,密码:1234560.2表命名说明Cjb:成绩表,保存选课信息Cxb:查询表,记录boolean值对应信息,1代表男,0代表女。Kcb:课程表。Tjb:统计表,统计成绩段分布。Xsb:学生表。Yhb:用户表,保存系统用户信息。Jsb:教师表。Skb:授课表,记录授课信息。0.3系统功能模块图1、需求分析
推荐度:
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top