研讨班管理系统的设计与实现【数据库课设】

觉得好请点个赞,谢谢!笔者用ProcessOn作的图

一、绪论

       随着计算机技术的发展和数据库技术的广泛应用,各种以数据库为核心,以高级程序语言搭建用户软件的管理系统应运而生,不仅实现了自动化办公大大提高了工作效率,计算机强大的处理能力,和快速的处理速度大大提高的信息的处理能力和信息的有效利用率,经信息系统处理后得到的数据成为可供决策参考的资料,使各项工作更加科学有序的开展,各种自动化信息管理系统在21世纪这个信息爆炸的时代里独领风骚。

       本文描述了某研讨班管理系统的设计与实现,重点阐述数据库的设计思路和实现,并实现基本功能。

二、需求分析 

1  系统需求

1.1功能需求

       研讨班在每个学年开始的时候开设,然后持续一个学年。每个研讨班针对一个或几个研究方向。每个研讨班由一位或几位教师主持。在研讨班开设之后,学生可以根据主持教师的姓名和研讨班的方向来选择和参加某个研讨班。所有的学生必须且只能参加一个研讨班的学习。研讨班时常会开展活动,由教师来决定活动的时间、地点、主题和做报告的学生(的姓名)。每次活动时,由一位或多位同学围绕活动主题做学习报告,交流自己对新技术的学习心得。每个学生一次活动最多只能作一个报告,但每个学生至少会在一次活动中做一个报告。教师对每份活动中的学生报告进行一次点评和指导,提出建议和意见,并给出成绩,成绩合格者给1学分。

       主要功能(用T-SQL编程实现):

(1)实现研讨班的基本情况的录入、修改、删除等基本操作。

(2)按学生学号以学年分组查询全部参加研讨班信息。

(3)按学生学号计算每学年的报告学分。

(4)按照学生报告成绩排序。

(5)报告最高、最低成绩的学生基本信息。

(6)计算学生报告的平均分。

(7)建立用户及授权。

1.2性能需求

       实现研讨班管理自动化,提高学年信息管理事务的工作效率,减少工作中工作人员工作量;实现学生报告成绩自动统计功能,提供有效参考数据作为学生学习情况好坏的依据,实现管理信息化、自动化。

1.3可靠性、可用性需求

       系统应当有较高的可用性,操作简单,便于用户使用;

       系统要有相对较高的可靠性,这样才能保障可用性,系统的数据一定要可靠,才能保障研讨班业务的照常进行,并且可靠的统计结果才能供管理人员进行准确决策,更好地运营研讨班,提高运营效率,为学生提供一个良好、稳定的报告成绩查询系统,及时改进自己的不足。

1.4将来可能提出的需求

       进一步改善系统功能具体要求如下:

1、更好的选课系统界面,更加人性化;

2、实现信息和各种统计报表的打印功能;

3、用户之间实现更加明确的权限规则和用户分级,确保系统的安全性;

4、实现多客户端的数据共享和多客户端同时业务操作;

5、实现学生预先挑选、查看近期活动界面。

 2  业务过程示意图

                                              图2.1 研讨班管理系统结构图

3  数据字典

3.1实体信息

       需要描述的实体和从联系中抽象出的实体信息如下:

       ①Student: 学生信息

           Sno:          学生学号

           Sname:      学生姓名

           Ssex:         学生性别

           Scredit:      学生学分

           Skey:         学生密码

           Sstatus:     选课状态

           Scredit:      学生学分

       ②Teacher: 教师信息

           Tno:           教师工号

           Tname:      教师姓名

           Tsex:          教师性别

           Tkey:          教师密码

       ③Manager: 管理员信息

           Mno:          管理员账号

           Mkey:        管理员密码

       ④Seminar: 研讨班信息

           Cno:          班号

           Cname:     班名

           Ccount:     班级人数

           Ctime:       开课时间

       ⑤Activity: 活动信息

           Ano:          活动编号

           Atheme:    活动主题

           Atime:       活动时间

           Aplace:     活动地点

       ⑥Report: 报告信息

           Rno:         报告编号

           Rtitle:        报告标题

           Rgrade:     报告成绩

           Rsuggest:  意见及建议

3.2实体联系信息

①登录:学生、教师和管理员可以同时在不同计算机上登录系统,学生和教师登录人数不限,管理员只有一个。

②管理:管理员可以添加、编辑、查询、删除研讨班、学生及教师相关信息。

③主持:每个研讨班由一位或几位教师主持。教师主持开展研讨班,首先要保证管理员已在系统上添加了该研讨班信息,并且有学生报名参加,教师才可开课。

④点评:学生提交报告后,教师方可点评学生报告。点评包括给出成绩和建议意见。

⑤提交:每次活动由一位或多位同学围绕活动主题在参加完一个活动后做学习报告,然后提交报告,一学年内一位学生至少参加一次活动和提交一份报告。

⑥参加:在研讨班开设之后,学生可以根据主持教师的姓名和研讨班的方向来选择参加某个研讨班,所有的学生每学年只能参加一个研讨班的学习。

⑦开展:研讨班时常会开展活动,由教师来决定活动的时间、地点、主题和做报告的学生(的姓名)。活动可能是一个或多个。

⑧包含:每次活动都包含指定学生所做的报告,报告可能是一份或多份。

3.3细化表结构

       给出如下所示数据库表的基本结构及说明:

①学生信息表Student

                                                                                 表3.1 学生信息表Student

列名

数据类型

是否为空

说明

Sno

Char(10)

not null(主键)

学生学号

Sname

Char(10)

not null

学生姓名

Ssex

Char(2)

not null

学生性别

Scredit

Int

not null

学生学分

Skey

Char(10)

not null

学生密码

Sstatus

Char(5)

not null

选课状态

②研讨班信息表Seminar

                                                                               表3.2 研讨班信息表Seminar

列名

数据类型

是否为空

说明

Cno

Char(10)

not null(主键)

课程号

Cname

Char(20)

not null

课程名

Ccount

int

not null

学生成绩

Ctime

time

not null

开课时间

③活动信息表Activity

                                                                                 表3.3 活动信息表Activity

列名

数据类型

是否为空

说明

Ano

Char(10)

not null(主键)

活动编号

Atheme

Char(100)

not null

活动主题

Atime 

Smalldatetime

not null

活动时间

Aplace

Char(100)

not null

活动地点

④教师信息表Teacher

                                                                                 表3.4 教师信息表Teacher

列名

数据类型

是否为空

说明

Tno

Char(10)

not null(主键)

教师工号

Tname

Char(10)

not null

教师姓名

Tsex

Char(2)

not null

教师性别

Tkey

Char(10)

not null

教师密码

⑤报告信息表Report

                                                                                  表3.5 报告信息表Report

列名

数据类型

是否为空

说明

Rno

Char(10)

not null(主键)

报告编号

Rtitle

Char(50)

not null

报告标题

Rgrade

Int

null

报告成绩

Rsuggest

Char(200)

null

意见及建议

⑥管理员信息表Manager

                                                                     表3.6 管理员信息表Manager

列名

数据类型

是否为空

说明

Mno

Char(10)

not null(主键)

管理员账号

Mkey

Char(10)

not null

管理员密码

三、概要设计

        研讨班多提供给大三、大四甚至研究生、从业人员,讨论的话题多为科研和高新技术,与我们计算机系的学生息息相关,所以我们小组选择了“研讨班管理系统”这个课题。除了深入了解研讨班对现在或未来都有帮助外,这个项目还让我们对数据库有了更进一步的理解与巩固,对身边的各种管理系统有更直观的了解。

        随着高新技术的不断发展,数据的处理在我们的生活中变得尤为重要。现在我们选课以及成绩查询都是在网上进行的,这个对于学生来说更加的自主、便捷。但由于想参加研讨班的学生较多,就会带来诸多如信息管理等问题。鉴于需要将学生信息、选课信息等信息数字化以便于维护管理,我们小组便想到了利用数据库更加准确的解决此类问题。

        我们小组设计的研讨班管理系统不仅便于管理学生、教师、研讨班及活动信息,还具有对学生报告的成绩自动转为学分制的功能,淡化学习成绩几分的差距感,推崇学分制减轻了学生的竞争压力,且便于随时了解学生学习情况并给予改进。

        在充分需求分析的基础上,经过逐步抽象、概括、分析、充分研讨,可以画出如下反映图书销售管理系统数据的整体E-R图。

1  研讨班管理系统E-R图

                                                      图3.1 研讨班管理系统E-R图

2  学生实体属性图

               图3.2 学生实体属性图

3  教师实体属性图

             图3.3 教师实体属性图

4  研讨班实体属性图

        图3.4 研讨班实体属性图

5  管理员实体属性图

图3.5 管理员实体属性图

6  报告实体属性图

           图3.6 报告实体属性图

7  活动实体属性图

         图3.7 活动实体属性图

8  管理员-研讨班“管理”联系细化E-R图

 

       图3.8 管理员-研讨班“管理”联系细化E-R图

9  教师-报告“点评”联系细化E-R图

          图3.9 教师-报告“点评”联系细化E-R图

10  研讨班管理系统数据流图

                                           图3.10 研讨班管理系统数据流图

四、详细设计

1  数据库关系模式

        按照实体-联系图转化为关系模式的规则,本系统的E-R图可转化为如下有6关系模式:

        学生(学号、姓名、性别、入学年份、学分、选课状态、密码)

        教师(工号、姓名、性别、密码)

        管理员(账号、密码)

        研讨班(班号、班名、人数、开课时间)

        报告(报告编号、标题、成绩、意见及建议)

        活动(活动编号、主题、时间、地点)

2  数据库及表结构的创建

        打开SQL Servier2008,新建查询分析,根据已设计的关系模式及各模式的完整性要求,使用Transact-SQL(SQL Server中的SQL命令) 建立数据库和表结构。

(1)建立数据库

create database Seminar_Manage;

(2)选择使用

use Seminar_Manage;

(3)建立管理员信息表

create table Manager (
  Mno char(10) not null primary key,
  Mkey char(10) not null
); 

图4.1 管理员信息表

(4)建立研讨班信息表

create table Seminar (
  Cno char(10) not null primary key,
  Cname char(20) not null,  
  Ccount int not null,
  Ctime time not null,
  Mno char(10) not null,
  foreign key(Mno) references Manager(Mno)
); 

图4.2 研讨班信息表

(5)建立学生信息表

create table Student(
  Sno char(10) not null primary key,
  Sname char(10) not null, 
  Ssex char(2) not null,
  Scredit int not null,
  Skey char(10) not null,
  Sstatus char(5) not null, 
  Cno char(10),
  foreign key(Cno) references Seminar(Cno)
);

图4.3 学生信息表

(6)建立教师信息表

create table Teacher(
  Tno char(10) not null primary key,
  Tname char(10) not null,       
  Tsex char(2) not null,
  Tkey char(10) not null, 
  Cno char(10), 
  foreign key(Cno) references Seminar(Cno)
); 

图4.4 教师信息表

(7)建立活动信息表

create table Activity(
  Ano char(10) not null primary key, 
  Atheme char(100), 
  Atime smalldatetime not null, 
  Aplace char(100), 
  Cno char(10),
  foreign key(Cno) references Seminar(Cno)
); 

图4.5 活动信息表

(8)建立报告信息表

create table Report(
  Rno char(10) not null primary key, 
  Rtitle char(50), 
  Rgrade int, 
  Rsuggest char(200),
  Tno char(10), 
  Sno char(10) not null, 
  Ano char(10) not null,
  foreign key(Tno) references Teacher(Tno),
  foreign key(Sno) references Student(Sno),
  foreign key(Ano) references Activity(Ano)
);

图4.6 报告信息表

3  完整性定义

(1)参照完整性

alter table 研讨班信息表 add foreign key(Mno) references 管理员信息表(Mno)
on delete cascade
on update cascade
alter table 学生信息表 add foreign key(Cno) references 研讨班信息表(Cno)
on delete cascade
on update cascade
alter table 教师信息表 add foreign key(Cno) references 研讨班信息表(Cno)
on delete cascade
on update cascade
alter table 活动信息表 add foreign key(Cno) references 研讨班信息表(Cno)
on delete cascade
on update cascade
alter table 报告信息表 add foreign key(Tno) references 教师信息表(Tno)
alter table 报告信息表 add foreign key(Sno) references 学生信息表(Sno)
alter table 报告信息表 add foreign key(Ano) references 活动信息表(Ano)
on delete cascade
on update cascade

(2)实体完整性

实体完整性在定义表的时候直接在表中定义。

(3)索引

create unique index StuNo on Student(Sno ASC);
create unique index TeaNo on Teacher(Tno ASC);
create unique index ManNo on Manager(Mno ASC);
create unique index SemNo on Seminar(Cno ASC);
create unique index ActNo on Activity(Ano ASC);
create unique index RepNo on Report(Rno ASC);

4  视图的创建

(1)学生合格报告数视图

create view QualifiedReport as
select Sno, count(*) as Qualified from Report where Rgrade >= 60 group by Sno; 

图4.7 学生合格报告数视图

(2)学生报告平均分视图

create view AvgGrade as
select Sno, avg(Rgrade) as AvgGrade from Report group by Sno; 

 图4.8 学生报告平均分视图

5  触发器的创建

(1)学生信息表更新触发器

create trigger StudntUpDate on Student
after update as
if update(Sno)
begin
declare @oSno char(10)
declare @nSno char(10)
select @oSno = Sno from deleted
select @nSno = Sno from inserted
update Report set Sno = @nSno where Sno = @oSno
end 

(2)学生信息表删除触发器

create trigger StudntDelete on Student
after delete as 
begin
declare @oSno char(10)
select @oSno = Sno from deleted
delete from Report where Sno = @oSno 
end 

(3)教师信息表更新触发器

create trigger TeacherUpDate on Teacher
after update as
if update(Tno)
begin
declare @oTno char(10)
declare @nTno char(10)
select @oTno = Tno from deleted
select @nTno = Tno from inserted
update Report set Tno = @nTno where Tno = @oTno
end 

(4)教师信息表删除触发器

create trigger TeacherDelete on Teacher
after delete as 
begin
declare @oTno char(10)
select @oTno = Tno from deleted
update Report set Tno = null where Tno = @oTno
end

(5)活动信息表更新触发器

create trigger ActivityUpDate on Activity
after update as
if update(Ano)
begin
declare @oAno char(10)
declare @nAno char(10)
select @oAno = Ano from deleted
select @nAno = Ano from inserted
update Report set Ano = @nAno where Ano = @oAno
end

(6)活动信息表删除触发器

create trigger ActivityDelete on Activity
after delete as 
begin
declare @oAno char(10)
select @oAno = Ano from deleted
delete from Report where Ano = @oAno 
end 

(7)研讨班信息表更新触发器

create trigger SeminarUpDate on Seminar
after update as
if update(Cno)
begin
declare @oCno char(10)
declare @nCno char(10)
select @oCno = Cno from deleted
select @nCno = Cno from inserted
update Activity set Cno = @nCno where Cno = @oCno
end

(8)研讨班信息表删除触发器

create trigger SeminarDelete on Seminar
after delete as 
begin
declare @oCno char(10)
select @oCno = Cno from deleted
delete from Activity where Cno = @oCno 
end

(9)管理员信息表更新触发器

create trigger ManagerUpDate on Manager
after update as
if update(Mno)
begin
declare @oMno char(10)
declare @nMno char(10)
select @oMno = Mno from deleted
select @nMno = Mno from inserted
update Seminar set Mno = @nMno where Mno = @oMno
end

(10)管理员信息表删除触发器

create trigger ManagerDelete on Manager
after delete as 
begin
declare @oMno char(10)
select @oMno = Mno from deleted
update Seminar set Mno = null where Mno = @oMno
end

6  数据库表关系图

       数据库名称:Seminar_Manage,创建6张用户表后,表间能形成如下的关系图:

                                                            图4.9 数据库关系图

7  功能实现操作的T-SQL语句

(1)实现研讨班的基本情况的录入、修改、删除等基本操作

实现:

--录入研讨班的基本信息
create proc insertSeminar(@Cno char(10), @Cname char(20), @Ccount int, @Ctime char(4), @Mno char(10))
as begin
insert into Seminar values(@Cno, @Cname, @Ccount, @Ctime, @Mno)
end
--修改研讨班的基本信息
create proc updateSeminar(@Cno char(10), @Ccount int, @Ctime char(4))
as begin
update Seminar set Ccount=@Ccount, Ctime=@Ctime where Cno=@Cno
end
--删除研讨班的基本信息
create proc deleteSeminar(@Cno char(10))
as begin
delete from Seminar where Cno=@Cno
end

结果:

exec insertSeminar '2020001', '数据库研讨班', 20, '2020', '00001'
exec insertSeminar '2020002', '算法研讨班', 30, '2020', '00001'
exec insertSeminar '2020003', '软件设计研讨班', 20, '2021', '00001'

图4.10 录入研讨班的基本信息

exec updateSeminar '2020003', 25, '2020'

图4.11 修改研讨班的基本信息

exec deleteSeminar '2020003'

图4.12 删除研讨班的基本信息

(2)按学生学号以学年分组查询全部参加研讨班信息。

实现:

create proc find(@year char(4))
as begin
select Sno, Cno from Student, Seminar where Student.Cno in (
select Cno from Seminar where Ctime = @year)
end

结果:

exec find '2020'

图4.13 按学号以学年分组查询全部参加研讨班信息

(3)按学生学号计算每学年的报告学分。

实现:

create proc getStudentCredit(@Sno char(10))
as begin
select * from QualifiedReport where Sno=@Sno
end

结果:

exec getStudentCredit '20200002'

图4.14 按学生学号计算每学年的报告学分

(4)按照学生报告成绩排序。

实现:

create proc sortReportAsc(@useAsc bit=0)
as begin
if (@useAsc=1) begin
select * from Report order by Rgrade Asc
end
else begin
select * from Report order by Rgrade Desc
end
end

结果:

exec sortReportAsc 

图4.15 降序排序学生报告成绩

exec sortReportAsc 1

图4.16 升序排序学生报告成绩

(5)报告最高、最低成绩的学生基本信息。

实现:

--查找最高分学生
create proc findStudentWithHighGrade
as begin
select Sno, Sname, Ssex from Student where Sno in(
select sno from Report where Rgrade=(
select max(Rgrade) from Report))
end
--查找最低分学生
create proc findStudentWithLowGrade
as begin
select Sno, Sname, Ssex from Student where Sno in(
select sno from Report where Rgrade=(
select min(Rgrade) from Report))
end

结果:

exec findStudentWithHighGrade

图4.17 报告得最高成绩的学生信息

exec findStudentWithLowGrade

图4.18 报告得最低成绩的学生信息

(6)计算学生报告的平均分。

实现:

create proc getAvgGrade
as begin
select avg(Rgrade) as AvgGrade from Report
end

结果:

exec getAvgGrade

图4.19 报告的平均分

(7)建立用户及授权。

实现:

create proc newUser(@name char(10), @key char(10))
as begin
exec sp_addlogin @name, @key, 'Seminar_Manage'
exec sp_grantdbaccess @name
exec sp_addrolemember 'db_datareader', @name
end

结果:

exec newUser 'leo', '050607'

                                                                          图4.20 建立用户及授权

五、实现与探讨

1、实现本次数据库的功能时,一定要先做好需求的分析与设计,要在用户的角度考虑问题,先搭建好框架,然后再实施,不能漫无目的,想到一样是一样,最后会变得杂乱无章,无法完成。

2、在构架这个代码的过程中,思路一定要清晰,数据库这门课非常看重逻辑性,写代码的时候要注意规范与简洁明了。

3、设计和实现数据库过程中应当考虑实践应用需要,如果把多过程的功能的后续部分过程改为触发器实现,在应用时可以将大部分软件部署在服务器端,减少客户端的负担可提高软件的效率。

4、最终的软件产品一般以易操作的图形界面提交给用户,作为后台的数据库不容忽视,其好坏影响到整个软件的开发,在动手搭建数据库之前,一定要根据需求做好分析和设计,为后续工作的开展打好坚实基础。

六、设计体会与小结

        在科学飞速发展的今天,人们的视野越来越广,数据量急剧增加。过去人们把数据存放在文件柜里,现在人们借助计算机和数据库技术科学地保存和管理大量的复杂数据,以便能方便而充分地利用这些宝贵的信息资源。

        数据库技术近年来迅猛发展,对于一个国家来说,数据库的建设规模、数据库信息量的大小和使用频度已成为衡量这个国家信息化程度的重要标志。

        作为一名软件工程专业的学生,一定要把这门专业基础课学好,为今后的学习和工作打下坚实的基础,课程设计已经结束了,虽然自己的设计还存在很多不足有待改进,但是在课设过程中真的学到了很多东西,不仅使自己更加深刻地理解了平时学到的理论知识,同时也使自己的动手实践能力得到了锻炼。同时在课设过程中不断的与同学讨论,不断地向老师请教,对提高与人交往能力和团队协作能力都有帮助,真是受益良多!

       课程的结束并不等于学习的结束,通过课设发现了平时学习中很多没有注意到的问题,一定要尽快补上,同时深知还有很多关于数据库的知识要学,自己要走的路还很长,“路漫漫其修远兮,吾将上下而求索!”

七、参考文献

[1] 李晓喆. SQL Server 2000管理及应用系统开发[M]. 北京:人民邮电出版社,2004.

[2] 张莉. SQL Server数据库原理及应用教程[M]. 北京:清华大学出版社,2003.

 

发布了39 篇原创文章 · 获赞 130 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_41587612/article/details/104003617