1. 程式人生 > >大學生社團人員管理資料庫系統開發

大學生社團人員管理資料庫系統開發

本篇文章實現了一個簡易的資料庫管理系統,水平有限,沒有使用者介面。。

開發環境為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