本篇文章实现了一个简易的数据库管理系统,水平有限,没有用户界面。。

开发环境为SQL Server 2008.

 

1  需求分析

系统描述:本题目主要功能是实现学校社团的信息化管理。本系统设计要求随着大学生校园文化的不断丰富,各种学生社团应运而生,对所有学生社团进行统一管理。

2功能描述:

         学生信息存储 学号,姓名,性别,班级 权限等

         社团信息存储  名称 时间 编号 活动等

3有何安全性与完整性方面的要求(参照所给出的语义规则),对不同的用户有何不同的系统使用权限等。


一般用户可以对社团信息进行查询、浏览;管理员可以对社团信息进行录入和维护,可以对社团成员进行增加、修改和删除,可以进行社团以及成员信息进行查询、统计和生成报表等。

查询:可以对学生所在的社团进行查询,管理员可以增加社团,如果社员不再参加社团可以选择删除,从而从数据库中删除其有关记录。学生不能增加社团,不能删除一个社团

 

数据事实


学号

姓名

性别

年龄

社团编号

权限

电话


001

小明

女

18

01

管理员

178639


002

小华

男

20

02

成员

1782569


003

小呆

男

19

03

成员

1783159


004

小丽

女

19

04

管理员

1784674


005

小君

男

18

05

成员

1784527


006

小美

女

20

06

成员

1788534


007

小天

女

18

07

成员

1788216


008

小鹰

男

18

08

成员

1786314


编号

名称

建立时间

主要活动


01

数学建模

2007-3-5

数学比赛


02

ACM协会

2009-5-15

 浪潮杯大赛


03

摄影协会

2012-5-12

摄影比赛


04

轮滑社团

2013-2-25

轮滑比赛


05

计算机

2010-10-25

    网页设计大赛


06

跆拳道

2014-11-3

跆拳道比赛


07

  健美操

2012-4-25

健美操比赛

 

主要用户视图



概念结构设计

1 局部ER图



2.2 全局ER图



逻辑结构设计


模式设计:按系统整体E-R模型,写出关系模式;并利用数据字典加以描述。(如每个关系模式有何属性、属性的类型、属性值的长度、是否可取空值、是否为主码、有何约束条件等信息)

    学生:学号 性别 年龄 姓名 部门 权限 电话

    社团 :编号 名称 创建时间 主要活动

学生表



社团表



4  物理结构设计


为了提高在表中搜索元组的速度,在实际实现的时候应该基于某些属性建立索引。给出所建立的索引。(包括按哪些表中哪些属性按升序还是降序来创建索引及相应的T-SQL的创建语句)。

学生建立索引,按学号升序建唯一索引。

社团建立索引,按编号升序建唯一索引。

5  主要功能详细设计

数据的修改

UPDATe student

SET sno = '009' where sname = '小鹰'

数据的查询

单表:

查询学号为003号学生的学生姓名

SELECT sname from student WHERE ssno = '003'



查询性别为男年龄为18岁的学生的姓名

SELECT sname from student WHERE ssex = '男' and sage = 18



连接:

查询学号为008的参加社团的创建时间

SELECT association.atime from student,association

where student.sno = '008' and student.ssect = association.ano

操作结果集:

查询学号008和学号009号同学共同选的社团名称

SELECT ssect from student where sno = '008' 

Intersect

SELECT ssect from student where sno = '009'



修改数据 

修改小鹰同学的学号为019

UPDATe student

SET sno = '019' where sname = '小鹰'



删除数据

删除04号社团

delete from association

where ano = '04'

创建索引

CREATE index student_sno ON student(sno ASC)

CREATE index association_ano ON association(ano ASC)

创建函数参数为社团名称输出学生学号,姓名,社团创建时间

CREATE function st_func(@major varchar(20)) returns table

AS return

(

   select student.sno, student.sname, association.atime

   from student,association

   where association.aname = @major and student.ssect = association.ano

)

调用函数 输出参加摄影协会的学生学号,姓名与社团成立日期

SELECT * FROM st_func('摄影协会')



创建游标  输出学生表中第3行,第5行数据

declare sh1_cursor cursor static

for

select * from student

open sh1_cursor

fetch absolute 3 from sh1_cursor

fetch absolute 5 from sh1_cursor

close sh1_cursor

deallocate sh1_cursor



-创建存储过程 查询每个学生的电话号码

CREATE procedure student_telp   

AS

select sno, stelp AS telphone from student

go

执行存储过程

execute student_telp



在学生表创建触发器,插入修改学生时提示

CREATE trigger reminder ON student

FOR INSERT ,UPDATE

AS print '你在插入或修改student的数据'



在社团表创建触发器删除社团时输出删除的社团数

CREATE trigger del_count ON association

FOR delete

AS

   declare @count varchar(50)

   set @count = STR (@@rowcount) + '个社团被删除'

   SELECT @count

return



源代码:
--创建大学生社团人员管理系统数据库 CREATE DATABASE ASSOCIATION_MANAGEMENT ON PRIMARY ( NAME =
'ASSOCIATION_MANAGEMENT_DATA', FILENAME =
'E:\DATA\ASSOCIATION_MANAGEMENT_DATA.MDF', SIZE = 5MB, MAXSIZE = 20MB,
FILEGROWTH = 20% ) LOG ON ( NAME = 'ASSOCIATION_MANAGEMENT_LOG', FILENAME =
'E:\DATA\ASSOCIATION_MANAGEMENT_DATA. LDF', SIZE = 5MB, MAXSIZE = 10MB,
FILEGROWTH = 2MB ) --创建学生表 USE ASSOCIATION_MANAGEMENT CREATE TABLE student (
sno varchar(20) PRIMARY KEY, --学号 sname char(10) NOT NULL, --姓名 ssex char(10) ,
--性别 sage int, --年龄 ssect char(10) NOT NULL, --社团号 sguris char(10) NOT NULL,
--权限 stelp varchar(20) --电话 ) --创建社团表 USE ASSOCIATION_MANAGEMENT CREATE TABLE
association ( ano varchar(20) PRIMARY KEY, --编号 aname char(10) NOT NULL, --名字
atime date, --创建时间 aarty varchar(20) --主要活动 ) --插入数据 USE ASSOCIATION_MANAGEMENT
GO INSERT INTO student(sno,sname,ssex,sage,ssect,sguris,stelp) VALUES
('001','小明','女',18,'01','管理员','178639'),
('002','小华','男',20,'02','成员','1782569'),
('003','小呆','男',19,'03','成员','1783159'),
('004','小丽','女',19,'04','管理员','1784674'),
('005','小君','男',18,'05','成员','1784527'),
('006','小美','女',20,'06','成员','1788534'),
('007','小天','女',18,'07','成员','1788216'),
('008','小鹰','男',18,'08','成员','1786314') INSERT INTO
association(ano,aname,atime,aarty) VALUES('01','数学建模','2007-3-5','数学比赛'),
('02','ACM协会','2009-5-15','浪潮杯大赛'), ('03','摄影协会','2012-5-12','摄影比赛'),
('04','轮滑社团','2013-2-25','轮滑比赛'), ('05','计算机','2010-10-25','网页设计大赛'),
('06','跆拳道','2014-11-3','跆拳道比赛'), ('07','健美操','2012-4-25','健美操比赛'),
('08','篮球队','2006-9-20','CUBA') --创建视图 CREATE VIEW student_association AS
SELECT student.sno'学号', student.sname'姓名', student.ssex'性别',
student.sguris'权限', student.stelp'电话',
association.aname'名字',association.atime'创建日期',association.aarty'活动' FROM
student,association WHERE student.ssect = association.ano GO --查询 USE
ASSOCIATION_MANAGEMENT GO SELECT sname FROM student WHERE ssno = '003' SELECT
sname FROM student WHERR ssex = '男' and sage = 18 SELECT sname, ssex from
student SELECT sname from student where ssect='02' SELECT sname,ssect from
student WHERE where sage > 19 OR sage < 19 SELECT avg(sage) AS 平均年龄 FROM
student SELECT
student.sno,student.sname,association.ano,association.aname,atime,aarty FROM
student,association WHERE student.ssect=association.ano SELECT
association.atime from student,association where student.sno = '008' and
student.ssect = association.ano SELECT ssex from student where sno = '002'
Intersect SELECT ssex from student where sno = '003' --修改数据 UPDATE student SET
sno = '009' WHERE sname = '小鹰' --删除数据 DELETE FROM student WHERE sno = '009'
--创建索引 CREATE UNIQUE INDEX student_sno ON student(sno ASC) CREATE INDEX
association_ano ON association(ano ASC) --删除索引 DROP INDEX association_ano ON
association --if else 语句 if(SELECT sage FROM student where sno ='002' > 18)
print('年龄比较大') else print('年龄不大') --创建函数 参数为社团名称 输出 学生学号,姓名 ,社团创建时间 CREATE
FUNCTION st_func(@major varchar(20)) reutrn table AS RETURN ( select
student.sno, student.sname, association.atime from student,association where
association.aname = @major and student.ssect = association.ano ) --调用函数 SELECT
* FROM st_func('摄影协会') --创建游标 输出学生表中第3行,第5行数据 DECLARE sh1_cursor CURSOR STATIC
FOR SELECT * FROM student OPEN sh1_cursor FETCH ABSOLUTE 3 FROM sh1_cursor
FETCH ABSOLUTE 5 FROM sh1_cursor CLOSE sh1_cursor DEALLOCATE sh1_cursor
--创建存储过程 查询每个学生的电话号码 CREATE PROCEDURE student_telp AS SELECT sno, stelp AS
telphone from student GO --执行存储过程 EXECUTE student_telp --在学生表创建触发器,插入修改学生时提示
CREATE TRIGGER reminder ON student FOR INSERT, UPDATE AS
print('你在插入或修改student的数据') --在社团表创建触发器 删除社团时输出删除的社团数 CREATE TRIGGER del_count
ON association FOR DELETE AS DECLARE @count varchar(50) SET @count =
STR(@@rowcount) + '个社团被删除' SELECT @count RETURN
 

 

 

 

 

 

友情链接
ioDraw流程图
API参考文档
OK工具箱
云服务器优惠
阿里云优惠券
腾讯云优惠券
京东云优惠券
站点信息
问题反馈
邮箱:[email protected]
QQ群:637538335
关注微信