admin管理员组

文章数量:1530518

2024年7月21日发(作者:)

管理信息系统课程设计

——

教学成绩管理系统的设计与实现

摘要:

当前各高校教学成绩的管理,在传统的手工处理模式下,每年学生课程的选择以及成绩

的管理都要耗费学生和教师的很多精力,而且效率差、错误率高。

本文就这个问题,通过教学成绩管理系统的设计,提供了一套基于数据库应用系统的解

决方案,并进行了系统的设计与实现。在分析设计阶段我们用到了E-R模型(实体—联系

模型)、关系模型等方法,在实施阶段,我们采取SQLServer6.0作为开发工具,得到了教

学成绩管理系统的数据库。其中由丁俊文设计“专业”“班级”的分E-R图并编写《数据库

信息文档》和后期视图的设计;由刘志琼设计“系部”“教研室”的分E-R图及整合各分E

-R图;由张玉设计“课程”“学院”的分E-R图;由于艳青设计“学生”“教师”的分E-R

图和成绩管理数据库的创建。

关键词:数据库,系统设计,SQL Server

一 功能需求分析

学校各分院正常教务管理系统包括教学计划、师资、教材、教室、学籍、考试、排课、

次、评估管理等,其中最重要的仍然是成绩管理,本次实训做的是《成绩管理系统》,包括

学院、系部、教研室、专业、教师、学生、课程、等信息管理和课程设置、教学成绩信息管

理等方面的,本系统开发任务是实现某学院教学成绩信息管理规范化和自动化,系统的用户

有学院领导、成绩管理人员、班主任、教师及学生等。

⑴ 教师:在校园网(局域网)或互联网录入与查询所代课程成绩数据,查询学院、系

部、教研室、专业、教师、学生、课程信息等数据。

1

⑵ 班主任:在校园网或互联网录入与查询所负责班级的学生档案信息,查询学院、系

部、教研室、专业、教师、学生、课程信息和所管学生成绩等数据。

⑶ 学生:在校园网或互联网查询学生个人档案信息和成绩信息,查询学院、系部、教

研室、专业公共信息和所在班的课程设置等数据。

⑷ 领导:在校园网或互联网查询本系统所有信息。

⑸ 成绩管理人员:在校园网或互联网查询本系统所有信息,在校园网维护所有数据。

二 功能设计(图)

系统目标的实现是通过系统的各功能模块来达到的。由于每个系统功能又可以划分为若

干个具体的功能模块,因此,从目标开始层层分解,知道每个子功能模块只执行一个具体的

任务。子功能模块是独立的,有明显的输入与输出信息。通常我们将按功能关系画成的图成

为功能结构图,功能结构图如下:

教学成绩管理系统

系统设置公共信息师资管理学籍管理课程设置成绩管理

学生信息录入按学号查询按姓名查询

按班级查询组合查询

成绩管理系统的功能结构图

三 概念结构设计(E-R图)

⑴ 学生E-R图

2

学生

⑵ 课程E-R图

课程

考试类型类别学分学时院系编号名称编号

⑶ 系部E-R图

编号

名称

系部

主任

书记

⑷ 教师E-R图

教师

编号

登陆名

姓名性别密码教研室编号出生日期工作日期

职务

学历学位工资照片

⑸ 班级E-R图

3

班级

⑹ 教研室E-R图

编号

教研室名称

主任

⑺ 学院E-R图

编号

名称

简称

学院

院长

书记

⑻ 总E-R图

4

学号

编号名称院系编号学时学分类别考试类型

姓名

密码

性别

课程

出生日期

民族

籍贯

m

家庭地址

学号

邮政编码

编号

学生

n

教学成绩课程编号

联系电话

名称

系部

主任

身份证号

分数

1

书记

政治面貌

编号

属于

班级编号

名称

编号

1

简称

入学日期

学院

1

拥有

n

p

院长

专业

系部编号

书记

备注

1

名称

简历分配

照片

1

编号

编号

班级

名称

n

管理

1

教师

n

任职

1

教研室名称

年级主任

专业编号

人数

学制

班主任编号登陆名姓名性别密码教研室编号出生日期工作日期

职务

职务

学历学位工资照片

班长

书记

修改意见:本节(1)-(8)不要括弧

四 逻辑结构设计(定义表结构)

学生(学号,姓名,性别,年龄)

课程(编号,名称,学分,学时,类别,考试类型,院系编号)

教师(编号,姓名,性别,年龄,职称,职务)

教学成绩(学号,课程.编号,教师.编号,学年学期,成绩,分数,考试类别,考试考

查类型,考试日期,录入日期)

教研室(编号,名称,主任)

学院信息表(编号,名称,简称,院长,书记)

系部信息表(编号,名称,主任,书记)

专业信息表(编号,系部编号,名称)

班级课程设置表(班级编号,教师编号,课程编号,学年学期,学时)

班级信息表(编号,名称,年级,专业编号,人数)

5

五 物理结构设计(SQL实现)

用SQL Server6.0数据库管理系统来设计数据库和建表及视图。通过查询分析器用SQL

语句来设计,具体T-SQL代码如下:

1. 建成绩管理系统数据库

格式修改要求:1-4.9二级标题用黑体、小三号,以下自己改!

Create database 成绩管理系统

On

(name = 成绩管理系统mdf,

Filename = ‘h:vb成绩管理系统.mdf’,

Size = 1,

Filegrowth = 10%)

Log on

( name = 成绩管理系统_log,

Filename = ‘h:vb成绩管理系统_’,

Size = 5,

Filenamegrowth = 10%)

-- 2.1 学院信息表

-- 函数:is中文字符串

-- 功能:判断自变量是否是纯中文字符串,返回:是/否

create function is中文字符串(@字符串 nchar(255))

returns nchar(1) as

begin

declare @I tinyint, @J tinyint

set @I=len(@字符串)

set @J=1

while (@J<=@I)

begin

if (unicode(substring(@字符串,@J,1))<256) return '否'

set @J=@J+1

end

return '是'

end

go

-- 学院信息表 -- 代码:编号 2 位

create table 学院信息表

( 编号 char(2) primary key ,

名称 nchar(20) unique check(中文字符串(名称) = '是'),

简称 nchar(10) not null unique check(中文字符串(简称) = '是'),

6

院长 nchar(4) null ,

书记 nchar(4) null

)

go

学院信息表中,利用is中文字符串函数,实现名称和简称两个字段的完成性约束,保

证这两个字段只能输入中文字符。

提示:以下表凡是带check短语的仿照此例加上说明

-- 2.2 系部信息表

-- 函数:is学院信息表编号

-- 功能:判断自变量是否是学院信息表编号,返回:是/否

create function is学院信息表编号(@字符串 char(4))

returns nchar(1) as

begin

if exists(select * from 学院信息表 where 编号=left(@字符串,2)) return '是'

return '否'

end

go

-- 系部信息表-- 代码:编号 前两位 为所在学院的编号

create table 系部信息表

( 编号 char( 4) primary key check(学院信息表编号(编号)='是'),

名称 nchar(20) check(中文字符串(名称)='是') unique,

主任 nchar( 4) null,

书记 nchar( 4) null,

)

go

-- 2.3 教研室信息表

-- 函数:is系部信息表编号

-- 功能:判断自变量是否是系部信息表编号,返回:是/否

create function is系部信息表编号(@字符串 char(6))

returns nchar(1) as

begin

if exists(select * from 系部信息表 where 编号=left(@字符串,4)) return '是'

return '否'

end

go

-- 教研室信息表 -- 代码:编号 前4位 为所在系部的编号

create table 教研室信息表

( 编号 char( 6) primary key check(系部信息表编号(编号)='是'),

名称 nchar(20) unique check(中文字符串(名称)='是'),

7

主任 nchar( 4) null

)

go

-- 2.4 专业信息表

create table 专业信息表

( 编号 char( 6) primary key,

院系编号 char( 4) foreign key references 系部信息表(编号) on update cascade,

名称 char(40) unique,

)

go

-- 2.5 课程信息表

create table 课程信息表

( 编号 char(6) primary key ,

名称 varchar(50) not null ,

院系编号 char(4) foreign key references 系部信息表(编号) on update cascade not null ,

学时 numeric(10, 1) check(学时 between 20 and 300 or 学时 = 0) ,

学分 numeric(10, 1) ,

类别 nchar(5) check(rtrim(类别) in ('公共基础课', '选修课', '专业基础课', '专业课')) ,

考试类型 nchar(2) check(考试类型 in ('考查','考试'))

)

go

-- 2.6. 班级信息表

create table 班级信息表

( 编号 char(8) primary key ,

名称 varchar (15) unique ,

年级 char(4) not null ,

专业编号 char(6) foreign key references 专业信息表(编号) on update cascade not null ,

人数 int null ,

学制 int null ,

班主任 nchar(4) null ,

班长 nchar(4) null ,

书记 nchar(4) null

)

go

2.7 教师信息表

create table 教师信息表 (

编号 char(6) not null primary key ,

登录名 char(10)not null unique,

姓名 nchar(4) not null check(中文字符串([姓名]) = '是'),

密码 char(6),

性别 nchar(1) check(性别 in ('女', '男')) not null ,

8

教研室编号 char(6) references 教研室信息表(编号) on update cascade not null ,

出生日期 datetime null ,

工作日期 datetime null ,

职称 nvarchar(5) check(rtrim(职称) in ('助教', '讲师', '副教授', '教授')) null ,

职务 nchar(12) null ,

学历 nchar(12) null ,

学位 nchar(2) check(学位 in ('双学士', '博士', '硕士', '学士')) null ,

工资 money null ,

照片 image null

)

-- 2.8 学生信息表

create table 学生信息表

( 学号 char(6) primary key not null ,

姓名 nchar(4) check(中文字符串(姓名)='是') not null ,

密码 char(6),

性别 nchar(1) check(性别 in ('男','女')) not null ,

出生日期 datetime null ,

民族 nchar(8) default '汉族' null ,

籍贯 nchar(20) default '山西省' null ,

家庭地址 nchar(20) null ,

邮政编码 char(6) null ,

联系电话 char(20) null ,

身份证号 char(18) null ,

政治面貌 nchar(5) check(rtrim(政治面貌) in ('其他','群众','共青团员', '中共党员')) null ,

班级编号 char(8) foreign key REFERENCES 班级信息表(编号) on update cascade null ,

入学日期 datetime null ,

备注 varchar(80) null ,

简历 ntext null ,

照片 image null

)

go

2.9 学年学期表

create table 学年学期表

( 学年学期 char(11) primary key check(学年学期 like '200[0-9]-200[0-9].[1-2]') not null

)

2.10 班级课程设置表

create table 班级课程设置表

( id int identity (1, 1) primary key not null ,

班级编号 char(8) REFERENCES 班级信息表(编号) not null ,

教师编号 char(6) REFERENCES 教师信息表(编号) not null ,

课程编号 char(6) REFERENCES 课程信息表(编号) not null ,

9

学年学期 char(11) REFERENCES 学年学期表(学年学期) not null ,

学时 int check(学时 > 20 and 学时 < 200) null

ConSTRAINT IX_班级课程设置表 unique (班级编号,学年学期,教师编号,课程编号)

)

go

2.11 教学成绩表

CREATE TABLE 教学成绩表

( ID int IDENTITY(1, 1) PRIMARY KEY NOT NULL ,

学号 char(6) NOT NULL REFERENCES 学生信息表(学号) ON UPDATE CASCADE,

课程编号 char(6) NOT NULL REFERENCES 课程信息表 (编号) ,

教师编号 char(6) NULL REFERENCES 教师信息表 (编号) ON UPDATE CASCADE,

学年学期 char(11) NOT NULL REFERENCES 学年学期表(学年学期),

成绩 char(10) NOT NULL check(rtrim([成绩]) in ('优', '良', '中', '及格', '合格', '不及格', '补

考及格', '缓考', '缺考', '缺课', '免修', '未修', '重修', '作弊') or rtrim([成绩]) like '[1-9][0-9]' or [成

绩] like '[0-9]' or rtrim([成绩]) like '[1-9][0-9].[0-9]' or rtrim([成绩]) like '[0-9].[0-9]' or rtrim([成

绩]) = '100'),

分数 numeric(5, 1) NULL CHECK (分数 >= (-1) and 分数 <= 100) DEFAULT 0,

考试类别 nchar(4) NOT NULL CHECK (考试类别 in ('期末考试', '期初补考', '高挂补考

' ,'回校补考')),

考试考查类型 nchar(2) NOT NULL CHECK (考试考查类型 in ('考试', '考查')),

考试日期 datetime NOT NULL ,

录入日期 datetime NOT NULL

)

GO

2.12 管理员信息表

create table 管理员信息表

( 登录名 nchar(10) not null primary key,

姓名 nchar(4) not null ,

密码 char(6) null ,

用户身份 nchar (3) not null check (用户身份 in ('班主任', '管理员' , '领导'))

)

2.13 系统参数表

create table 系统参数表

( [类别] [nchar] (6) not null ,

[名称] [nchar] (12) null ,

[数值] [real] null

)

3.1 删除/修改 学院信息表编号

create trigger T删除学院信息表编号

on 学院信息表

for delete

as

begin

set nocount off

10

declare @编号 char(2)

select @编号=编号 from deleted

if exists(select * from 系部信息表 where @编号=left(编号,2))

begin

RAisERROR ( '系部编号正在使用, 不可删除!', 16, 1)

ROLLBACK TRANSACTIon

end

end

go

create trigger T修改学院信息表编号

on 学院信息表

after update

as

if update(编号)

begin

set nocount off

declare @编号 char(2), @编号_ char(2)

select @编号=编号 from deleted

select @编号_=编号 from inserted

update 系部信息表 set 编号=@编号_+substring(编号,3,2) where @编号=left(编号,2)

update 专业信息表 set 院系编号=@编号_+substring(院系编号,3,2) where @编号=left(院

系编号,2)

update 课程信息表 set 院系编号=@编号_+substring(院系编号,3,2) where @编号=left(院

系编号,2)

update 教研室信息表 set 编号=@编号_+substring(编号,3,4) where @编号=left(编号,2)

update 教师信息表 set 教研室编号=@编号_+substring(编号,3,4) where @编号=left(教研

室编号,2)

end

go

此触发器的建立目的是,一旦学院信息表的编号字段发生的改变,则触发系部信息表、专业

信息表、课程信息表、教研室信息表、教师信息表的编号中的部分字符串要作相应的改变。

提示:下面的触发器仿照此例加上说明。

-- 3.2 删除/修改 系部信息表编号

create trigger T删除系部信息表编号

on 系部信息表

for delete

as

begin

set nocount off

declare @编号 char(4)

select @编号=编号 from deleted

if exists(select * from 教研室信息表 where @编号=left(编号,4)) or

exists(select * from 专业信息表 where 院系编号=@编号) or

11

exists(select * from 课程信息表 where 院系编号=@编号) or

exists(select * from 教师信息表 where left(教研室编号,4)=@编号)

begin

RAISERROR ( '系部编号正在使用, 不可删除!', 16, 1)

ROLLBACK TRANSACTION

end

end

go

create trigger T修改系部信息表编号

on 系部信息表

after update

as

if update(编号)

begin

set nocount off

declare @编号 char(4), @编号_ char(4)

select @编号=编号 from deleted

select @编号_=编号 from inserted

if exists(select * from 学院信息表 where 编号=left(@编号_,2))

begin

update 专业信息表 set 院系编号=@编号_ where @编号=院系编号

update 课程信息表 set 院系编号=@编号_ where @编号=院系编号

update 教研室信息表 set 编号=@编号_+substring(编号,5,2) where @编号=left(编

号,4)

update 教师信息表 set 教研室编号=@编号_+substring(编号,5,2) where @编号

=left(教研室编号,4)

end

else

begin

RAISERROR ( '非法编号, 不可修改除!', 16, 1)

ROLLBACK TRANSACTION

end

end

go

 4.1 系部信息表视图

 为简化对表的操作,屏幕部分数据特建如下视图。

create view 系部信息表视图

as

select 系部信息表.编号, 系部信息表.名称, 学院信息表.简称 as 学院简称,

系部信息表.主任, 系部信息表.书记

from 系部信息表 left outer join

12

学院信息表 on left(系部信息表.编号, 2) = 学院信息表.编号

go

-- 4.2 教研室信息表视图

create view 教研室信息表视图

as

select 教研室信息表.编号, 系部信息表视图.名称 as 系部,

系部信息表视图.学院简称 as 学院, 教研室信息表.名称,

教研室信息表.主任

from 教研室信息表 inner join

系部信息表视图 on left(教研室信息表.编号, 4) = 系部信息表视图.编号

go

-- 4.3 专业信息表视图

create view 专业信息表视图

as

select top 100 percent 专业信息表.编号, 专业信息表.名称,

系部信息表视图.学院简称, 专业信息表.院系编号,

系部信息表视图.名称 as 系部

from 专业信息表 left outer join

系部信息表视图 on

专业信息表.院系编号 = 系部信息表视图.编号

ORDER BY 专业信息表.院系编号, 专业信息表.编号

go

-- 4.4 班级信息表视图

create view 班级信息表视图

as

select 班级信息表.编号, 班级信息表.名称, 班级信息表.年级,

系部信息表视图.学院简称 as 学院, 系部信息表视图.名称 as 系部,

班级信息表.专业编号, 专业信息表.名称 as 专业, 班级信息表.学制,

班级信息表.班主任, 班级信息表.班长, 班级信息表.书记,

班级信息表.人数, 系部信息表视图.编号 as 系部编号

from 系部信息表视图 inner join

专业信息表 on

系部信息表视图.编号 = 专业信息表.院系编号 right outer join

班级信息表 on 专业信息表.编号 = 班级信息表.专业编号

go

-- 4.5 课程信息表视图

create view 课程信息表视图

as

select 课程信息表.编号, 课程信息表.名称, 课程信息表.院系编号,

系部信息表视图.学院简称, 系部信息表视图.名称 as 系部名称,

13

课程信息表.学时, 课程信息表.学分, 课程信息表.类别,

课程信息表.考试类型

from 课程信息表 left outer join

系部信息表视图 on 课程信息表.院系编号 = 系部信息表视图.编号

go

-- 4.6 教师信息表视图

create view 教师信息表视图

as

select 教师信息表.编号, 教师信息表.姓名, 教师信息表.性别,

系部信息表视图.学院简称 as 学院, 系部信息表视图.名称 as 系部,

datename(yyyy, 教师信息表.出生日期) + '年' + datename(mm,

教师信息表.出生日期) + '月' + datename(dd, 教师信息表.出生日期)

+ '日' as 出生日期_, 教研室信息表.名称 as 教研室, datename(yyyy,

教师信息表.工作日期) + '年' + datename(mm, 教师信息表.工作日期)

+ '月' + datename(dd, 教师信息表.工作日期) + '日' as 工作日期_,

教师信息表.职称, 教师信息表.职务, 教师信息表.学历,

教师信息表.学位, 教师信息表.工资, 教师信息表.照片,

教师信息表.教研室编号, 教师信息表.出生日期, 教师信息表.工作日期,

系部信息表视图.编号 as 系部编号, DATEDIFF(year, 教师信息表.出生日期,

GETDATE()) as 年龄

from 系部信息表视图 right outer join

教研室信息表 on 系部信息表视图.编号 = left(教研室信息表.编号, 4)

right outer join

教师信息表 on 教研室信息表.编号 = 教师信息表.教研室编号

go

create view 教师登录信息表

as

select 编号, 登录名, 姓名, 密码, left(教研室编号, 4) as 系部编号

from 教师信息表

go

-- 4.7 学生信息表视图

create view 学生信息表视图

as

select 学生信息表.学号, 学生信息表.姓名, 学生信息表.性别,

datename(yyyy, 学生信息表.出生日期) + '年' + datename(mm,

学生信息表.出生日期) + '月' as 出生年月, 学生信息表.出生日期,

专业信息表.名称 as 专业, 学生信息表.班级编号,

班级信息表.名称 as 班级, 班级信息表.年级, 学生信息表.身份证号,

学生信息表.民族, 学生信息表.籍贯, 学生信息表.家庭地址,

学生信息表.邮政编码, 学生信息表.联系电话, 学生信息表.政治面貌,

学生信息表.备注, 班级信息表.专业编号, 专业信息表.院系编号,

14

学生信息表.入学日期, 学生信息表.简历, 学生信息表.照片,

系部信息表视图.名称 as 系部, 系部信息表视图.学院简称 as 学院,

学生信息表.密码

from 专业信息表 inner join

班级信息表 on 专业信息表.编号 = 班级信息表.专业编号 inner join

系部信息表视图 on

专业信息表.院系编号 = 系部信息表视图.编号 right outer join

学生信息表 on 班级信息表.编号 = 学生信息表.班级编号

go

create view 学生登录信息表

as

select 学号, 姓名, 年级, 专业编号, 院系编号, 密码

from 学生信息表视图

go

-- 4.9 班级课程设置表视图

create view 班级课程设置表视图

as

select 班级课程设置表.id, 专业信息表.院系编号, 班级课程设置表.班级编号,

[系部信息表视图_1].学院简称, [系部信息表视图_1].名称 as 系部名称,

专业信息表.名称 as 专业名称, 班级信息表.名称 as 班级名称,

班级课程设置表.教师编号, 教师信息表.姓名 as 教师姓名,

班级课程设置表.课程编号, 课程信息表.名称 as 课程名称,

班级课程设置表.学年学期, 班级课程设置表.学时, 班级信息表.年级,

课程信息表.考试类型, 班级信息表.专业编号, 班级信息表.人数

from 专业信息表 inner join

班级信息表 on 专业信息表.编号 = 班级信息表.专业编号 inner join

系部信息表视图 [系部信息表视图_1] on

专业信息表.院系编号 = [系部信息表视图_1].编号 right outer join

班级课程设置表 left outer join

课程信息表 on 班级课程设置表.课程编号 = 课程信息表.编号 on

班级信息表.编号 = 班级课程设置表.班级编号 left outer join

学年学期表 on 班级课程设置表.学年学期 = 学年学期表.学年学期 AND

班级课程设置表.学年学期 = 学年学期表.学年学期 left outer join

教师信息表 on 班级课程设置表.教师编号 = 教师信息表.编号

go

-- 4.9 教学成绩表视图

create view 教学成绩表视图

as

select 教学成绩表.学号, 学生信息表视图.姓名, 教学成绩表.教师编号,

教师信息表.姓名 as 教师姓名, 教学成绩表.课程编号,

课程信息表.名称 as 课程名称, 教学成绩表.考试日期,

15

教学成绩表.学年学期, 教学成绩表.考试类别, 教学成绩表.成绩,

教学成绩表.分数, 课程信息表.考试类型 as 考试考查,

教学成绩表.考试考查类型, 教学成绩表.录入日期, 学生信息表视图.专业,

学生信息表视图.班级, 学生信息表视图.年级, 学生信息表视图.班级编号,

学生信息表视图.专业编号, 学生信息表视图.院系编号,

课程信息表.院系编号 as Expr1, 学生信息表视图.学院,

学生信息表视图.系部

from 教学成绩表 left outer join

学生信息表视图 on

教学成绩表.学号 = 学生信息表视图.学号 left outer join

教师信息表 on

教学成绩表.教师编号 = 教师信息表.编号 left outer join

课程信息表 on 教学成绩表.课程编号 = 课程信息表.编号

六 数据库系统的实施

1.数据库实现

数据库实现即数据库物理设计与实现。

2.系统编程

① 编程语言

Visual Basic

② 功能菜单 :用VB设计

③ 输入界面 :用VB设计

④ 输出界面 :用VB设计

⑤ 数据处理

3. 运行和维护

① 维护数据库的安全性与完整性。

② 监测并改善数据库的运行性能。

③ 及时发现并改正运行中的系统错误和不足。

七 结束语

本次实训综合运用SOL SERVER数据库和VB程序设计,简单建立了“教学成绩管理

系统的前台部分界面”。并且本次重点在于利用SOL SERVER数据库建立教学成绩管理系

统的后台数据库。此数据库建立过程分为:功能需求分析主要完成系统的实际需求分析; 功

能设计主要完成系统总的组织结构图的绘制; 概念结构设计主要完成E-R图的绘制;逻辑结

构设计主要完成表结构的设计; 物理结构设计主要在SOL SERVER中完成数据库和各种数

据库对象的实际实现; 数据库系统的实施主要完成数据库系统的运行和维护。

本次实训能够成功的完成,多亏了组长的成功组织和各个成员的协同工作,同时也很感

谢实训老师的指导。

参考文献

1.《数据库系统概论》 萨师煊、王珊 主编.高等教育出版社.2000年2月第三版。

16

2.《管理信息系统》 黄梯云 主编.高等教育出版社. 2002年

3.《SQLServer数据库管理与开发教程与实训》杜兆将等 北京大学出版社 2006年1月第一版

2008年9月3日

17

本文标签: 信息编号数据库