大学生社团人员管理数据库系统开发

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/baidu_38304645/article/details/82820417

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

开发环境为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






 

 

 

猜你喜欢

转载自blog.csdn.net/baidu_38304645/article/details/82820417
今日推荐