大學生社團人員管理資料庫系統開發
本篇文章實現了一個簡易的資料庫管理系統,水平有限,沒有使用者介面。。
開發環境為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