社团人员管理数据库系统开发"/>
大学生社团人员管理数据库系统开发
本篇文章实现了一个简易的数据库管理系统,水平有限,没有用户界面。。
开发环境为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('年龄比较大')
elseprint('年龄不大')--创建函数 参数为社团名称 输出 学生学号,姓名 ,社团创建时间
CREATE FUNCTION st_func(@major varchar(20)) reutrn table
AS RETURN
(select student.sno, student.sname, association.atimefrom student,associationwhere 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
更多推荐
大学生社团人员管理数据库系统开发
发布评论