数据库课程设计——学生宿舍信息管理系统
數據庫課程設計——學生宿舍信息管理系統
目錄?????????????????????????????????????????????????????????????????????????????????????????????
1.設計目的... 2
2、任務與要求... 2
3、學生宿舍管理系統課程設計... 2
3.1 引言... 2
3.2需求分析... 2
3.2.1. 2
3.2.2. 3
3.3概念設計... 6
3.4邏輯設計... 10
3.5物理結構設計... 12
3.6數據庫實施... 14
3.6.1數據庫表的定義... 14
3.6.2視圖的定義:... 15
3.6.3索引:... 16
3.6.4觸發器的定義:... 17
3.6.5用戶的定義:... 18
3.6.6 對數據的管理:... 18
3.7系統調試和測試... 19
4.系統評價... 20
4.1我的系統特色:... 20
4.2 系統不足及改進... 21
5.設計心得... 21
?
1.設計目的
《數據庫系統原理》課程設計是軟件工程和計算機科學與技術專業集中實踐性環節之一,旨在讓我們自身加深對數據庫基礎理論和基本知識的理解,掌握設計數據庫管理系統的基本方法,鍛煉運用知識解決實際問題的動手能力。
2、任務與要求
要求學生們從給定的設計題目中進行選擇,進行需求分析,概念設計、邏輯設計,數據庫的設計過程,表結構、表之間的關聯,給出視圖的定義、觸發器的定義、索引,安全性的實現,用SQL語句等在SQL Server 2008系統中實現數據庫的數據輸入,查詢,更新和輸出;給出實現效果截圖及部分測試結果。
?
3、學生宿舍管理系統課程設計
3.1 引言
?
隨著社會的發展以及教育水平的提高,當今社會在校生的數量越來越龐大。與此同時,使用曾經的手工的方式對學生的信息進行管理效率非常低下。在互聯網技術高度發達的今天 ,使用數據庫技術隊對學生的住信息進行管理能夠使學校對學生信息的管理更加的高效,檢索迅速,查找方便,可靠性高存儲量大。使用數據庫技術的這些優點可以使得學生信息出錯的發生。同時使用數據庫技術可以使學生住宿信息長時間穩定地保存,也不容易丟失。開發出這樣的一個數據庫迫在眉睫。
3.2需求分析
3.2.1
?系統需求調查的方法為訪談法,通過對多個學校的宿舍管理人員進行交談,從而得出系統的主要任務和特定的要求。系統的主要任務是能夠對宿舍信息,學生信息,管理員信息,住宿信息進行登記,調整,并能進行各種查詢以及信息的備份。
?
完整性要求:防止不符合語義的數據進入數據庫。
安全性要求:需要防止客戶對數據進行未經授權的訪問。
性能要求:最好能夠實現并發訪問,允許多個用戶同時對數據庫中的數據進行訪問。
一致性要求:防止數據庫進入不一致狀態。
數據庫要求:各種各樣的故障都可能發生,出現意外時,,盡可能的確保任何數據在任何情況下都不會丟失。
3.2.2
系統的業務流程:
學生入住和退宿時通過管理員進行登記;
住宿產生的各種費用以及使用的各項物品由管理員進行登記;
管理員將登記的各項信息上報給教務處;
教務處將各項住宿信息進行統一管理;
儲存的所有數據供不同權限的客戶進行訪問;
?
?
數據字典:
學生基本信息
| 編號 | 屬性名 | 類型 | 解釋 | 備注 |
| 0001 | 學號 | Varchar(15) | 無 | 無 |
| 0002 | 姓名 | Varchar(10) | 無 | 無 |
| 0003 | 性別 | Varchar(2) | 無 | 男、女 |
| 0004 | 年齡 | Int | 無 | 0……100之間 |
| 0005 | 手機號 | Varchar(15) | 手機號碼 | 無 |
| 0006 | 專業 | Varchar(20) | 無 | 無 |
?
住宿費用信息:
?
?
| 編號 | 屬性名 | 類型 | 解釋 | 備注 |
| 0008 | 表單編號 | Varchar(15) | 無 | 無 |
| 0009 | 學號 | Varchar(15) | 無 | 無 |
| 0010 | 宿舍號 | Varchar(6) | 不是門牌號 | 無 |
| 0011 | 水費 | Double(6) | 無 | 大于0 |
| 0012 | 電費 | Double(6) | 無 | 大于0 |
| 0013 | 維修費 | Double(6) | 無 | 大于0 |
| 0014 | 住宿費 | Double(6) | 無 | 大于0 |
| 0015 | 日期 | Date(8) | 無 | 無 |
| 0016 | 合計 | Double(6) | 無 | 大于0 |
?
?
?
物品管理信息:
?
| 編號 | 屬性名 | 類型 | 解釋 | 備注 |
| 0017 | 員工號 | Varchar(15) | 無 | 無 |
| 0018 | 宿舍號 | Varchar(15) | 無 | 無 |
| 0019 | 桌子 | Int | 無 | 大于0 |
| 0020 | 椅子 | Int | 無 | 大于0 |
| 0021 | 床 | Int | 無 | 大于0 |
| 0022 | 電扇 | Int | 無 | 大于0 |
| 0023 | 燈 | Int | 無 | 大于0 |
| 0024 | 窗戶 | Int | 無 | 大于0 |
?
?
?
宿舍信息
?
| 編號 | 屬性名 | 類型 | 解釋 | 備注 |
| 0025 | 宿舍編號 | Varchar(15) | 無 | 無 |
| 0026 | 樓號 | Varchar(15) | 無 | 無 |
| 0027 | 區域 | Varchar(15) | 校園內 | ABCDEFG |
| 0028 | 人數 | Int | 無 | 0……8 |
| 0029 | 房間類型 | Varchar(15) | 按人數分 | 1(四人)2(六人)3(八人) |
?
?
管理員信息
?
| 編號 | 屬性名 | 類型 | 解釋 | 備注 |
| 0030 | 員工號 | Varchar(15) | 無 | 無 |
| 0031 | 姓名 | Varchar(10) | 無 | 無 |
| 0032 | 性別 | Varchar(2) | 無 | 男,女 |
| 0033 | 年齡 | Int | 無 | 0……100 |
| 0034 | 手機號 | Varchar(15) | 無 | 11位 |
| 0035 | 樓號 | int | 無 | 無 |
| 0036 | 區域 | int | 無 | ABCDEFG |
| 0037 | 職位 | Varchar(2) | 無 | 1(高級員工)2(普通員工) |
?
?
3.2.2 系統功能描述:
對學生的信息進行管理;
對宿舍信息進行管理;
對管理員信息進行管理;
對宿舍物品進行登記和管理;
對住宿產生的各項費用進行登記和管理;
對已經更改的學生和管理員信息進行保存
?
在這幅圖中,其中各項從左往右前5部分功能都包括各自信息的增刪改查,第六項功能為學生和教師信息的備份,也就是已修改信息儲存。
3.3概念設計
(說明使用數據庫概念設計的基本思想和原理方法,設計出系統E-R圖)
基本思想:將需求分析得到的用戶需求抽象為信息結構,分析數據字典中數據字典間內在語義關聯,并將其抽象表示為數據的概念模式,從而能真實,充分地反應真實世界,包括事物和事物之間的聯系,能滿足用戶對數據的處理需求,是現實世界的一個真實模型,易于理解,從而可以用它和不熟悉計算機的人交換意見,且易于更改。方法:首先分析整個系統中涉及到的實體,得到局部的ER圖。然后分析這些實體之間的關系,進行連接從而得到
?
?
?
?
?
?
3.4邏輯設計
基本思想:首先整個系統一共可以劃分出三個實體,分別是學生,管理員和宿舍,三者之間構成一個三角關系。同時,學生和宿舍之間的住宿關系衍生出一系列的住宿產生的費用,管理員和宿舍的管理關系衍生出一系列需要管理的物品,因此五張表相互關聯生成完整的數據庫系統。
數據庫關系圖:
學生的個人信息:學號,姓名,性別,年齡,手機號碼,專業,管理員號
student(stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,manager_num)
?
宿舍費用信息:表單編號,水費,電費,維修費,住宿費,總費用,日期
live(list_num,stu_num,dor_num,water,electric,service,lodge,total,date)
?
宿舍物品信息:桌子,椅子,床,燈,
tool(mana_num,dor_num,table,chair,bed,light)
?
宿舍信息:宿舍編號,人數,房間類型,樓號,區域
dormitory(dor_num ,prople_total,size, build_num,zone)
?
宿舍管理人員信息:員工號,姓名,性別,年齡,手機號
manager(mana_num,mana_name,mana_gender,mana_age,mana_tele)
??
??
3.5物理結構設計
?
物理設計的基本思想:根據邏輯設計出的邏輯模式,DBMS及計算機系統所提供的手段和施加的限制,設計數據庫的內模式,即文件結構,各種路徑,控件分配,記錄的存取方式等,為邏輯數據結構選取一個最合適的應用環境的物理結構。
學生基本信息表:
?
| 屬性名 | 類型 | 長度 | 備注 |
| Stu_num | varchar | 15 | 無 |
| Stu_name | varchar | 10 | 無 |
| Stu_gender | varchar | 2 | 男、女 |
| Stu_age | int | 4 | 0……100之間 |
| Stu_tele | varchar | 15 | 無 |
| Stu_spe | varchar | 20 | 無 |
住宿費用信息表:
?
| 屬性名 | 類型 | 長度 | 備注 |
| List_num | Varchar | 15 | 無 |
| ?? Stu_num | Varchar | 15 | 無 |
| ?? Dor_num | Varchar | 15 | 無 |
| water | double | 6 | 大于0 |
| Elect | double | 6 | 大于0 |
| ??? Repaire | double | 6 | 大于0 |
| live | double | 6 | 大于0 |
| date | date | 8 | 指的是具體一年 |
物品管理信息表:
?
| 屬性名 | 類型 | 長度 | 備注 |
| Mana_num | Varchar | 15 | 無 |
| ??? Dor_num | Varchar | 15 | 無 |
| Desk | Int | 2 | 大于0 |
| Chair | Int | 2 | 大于0 |
| Bed | Int | 2 | 大于0 |
| fan | Int | 2 | 大于0 |
| lighr | Int | 2 | 大于0 |
| window | Int | 2 | 大于0 |
宿舍信息表:
| 屬性名 | 類型 | 長度 | 備注 |
| Dor_num | Varchar | 15 | 無 |
| Build_num | Varchar | 2 | 無 |
| Zone | Varchar | 2 | ABCDEFG |
| People_total | Int | 2 | 0……8 |
| size | varchar | 2 | 1(四人)2(六人)3(八人) |
管理員信息表:
| 屬性名 | 類型 | 長度 | 備注 |
| ?? Mana_num | Varchar | 15 | 無 |
| Mana_name | Varchar | 10 | 無 |
| Mana_gender | Varchar | 2 | 男,女 |
| Mana_age | Int | 4 | 0……100 |
| Mana_tele | varchar | 15 | 11位 |
| Build_num | int | 2 | 無 |
| zone | varchar | 2 | ABCDEFG |
3.6數據庫實施
數據庫的實施:數據庫設計完成后,設計人員要用DBMS提供的數據定義語言和其他的使用程序將數據庫邏輯結構設計和物理結構設計的結構用DDL嚴格描繪出來,成為DBMS可以接受的源代碼,再經過調試產生目標模式。最后將數據裝入數據庫。
?
3.6.1數據庫表的定義
創建學生信息表:
?Create table student
(stu_num? varchar(15),
Stu_name? varchar(10),
Stu_gender? varchar(2)? check(stu_gender=’男’ or stu_gender=’女’),
Stu_age? int? check(stu_age>0 and stu_age<100),
Stu_tele? varchar(15),
Stu_spe? varchar(20),
Primary key (stu_num),
);
?
創建費用信息表:
?Create? table? live
( list_num? varchar(15),
Stu_num? varchar(15),
Dor_num? varchar(15),
Water? float check(water>=0),
Elect? float? check(elect>=0),
Repair? float? check(repair>=0),
Living? float? check(living>=0),
statu? int default(1),?
Date? date,
Primary key(list_num),
Foreign key (stu_num ) references? student(stu_num)
on update cascade,
Foreign key (dor_num ) references? dormitory(dor_num)
on update cascade
);
?
?
創建物品信息管理表:
Create? table tool
( mana_num? varchar(15),
Dor_num? varchar(15),
desk? int? check(desk>=0),
Chair? int? check(chair>=0),
Bed? int? check(bed>=0),
Light? int? check(light>=0),
Primary key (dor_num),
Foreign key (mana_num ) references? manager(mana_num)
on update cascade on delete set null
);
?
創建宿舍信息管理表:
?Create table dormitory
(dor_num varchar(15),
People_total? int? check(people_total>=0 and people_total<=8),
Size?? int check(size=1 or size=2? or size=3)
);
?
創建管理員信息表:
?Create table manager
(mana_num? varchar(15),
mana_name? varchar(10),
mana_gender? varchar(2)? check(stu_gender='男' or stu_gender='女'),
mana_age? int? check(stu_age>0 and stu_age<100),
mana_tele? varchar(15),
Primary key (mana_num)
);
?
3.6.2視圖的定義:
所有的信息匯總在一起:
Create view allmass
(stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,stu_statu,list_num,dor_num,water,elect,repair,living,live_status,Date,people_total,size,dor_status,mana_num,desk,chair,bed,light,tool_statu,mana_name,mana_gender,mana_age,mana_tele,mana_statu)
as select student.stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,stu_statu,list_num,dormitory.dor_num,water,elect,repair,living,live_statu,Date,people_total,size,dor_statu,manager.mana_num,desk,chair,bed,light,tool_statu,mana_name,mana_gender,mana_age,mana_tele,mana_statu
from student,lives,dormitory,tool,manager
where student.stu_num=lives.stu_num
and lives.dor_num=dormitory.dor_num
and dormitory.dor_num=tool.dor_num
and tool.mana_num= manager.mana_num ;
學生信息視圖:
Select stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,mana_name
from allmass
where stu_statu=1;
?
管理員信息:
create view manager_view
as
select manager.mana_num,mana_name,mana_age,mana_gender,mana_tele
from manager
where? mana_statu=1;
宿舍信息:
create view dormitory_view
as
select tool.dor_num,build_num,zone,people_total,size
from tool,dormitory
where tool.dor_num=dormitory.dor_num and dor_statu=1;
物品信息:
create view tool_view
as
select dor_num,mana_num, desk,chair,bed,light
from tool
where tool_statu=1;
賬單信息:
create view lives_view
as
select list_num,stu_name,dor_num,water,elect,date,repair,living
from lives,student
where live_statu=1 and lives.stu_num=student.stu_num;
?
3.6.3索引:
每一張表通過主鍵的列產生索引,從而加快查詢時的進度。
拿學生信息表進行舉例:
Create index stu_index on student(stu_num);
當然可以通過數據庫自動生成。
?
3.6.4觸發器的定義:
在學生表上建立觸發器,記錄被修改的信息。在原表中通過一個狀態屬性標示是否被刪除,因此數據并不會真正被刪除,只需要記錄被修改的信息。
create trigger on_pre_stu
on student
for update
as
begin
declare @stu_num varchar(15)
declare @pre_stu_name varchar(10)
declare @pre_stu_gender varchar(2)
declare @pre_stu_age int
declare @pre_stu_tele varchar(15)
declare @pre_stu_spe? varchar(20)
select? @stu_num = stu_num from deleted
select @pre_stu_name =stu_name from deleted
select @pre_stu_gender =stu_gender from deleted
select @pre_stu_age = stu_age from deleted
select @pre_stu_tele =stu_tele from deleted
select @pre_stu_spe = stu_spe from deleted
insert into pre_stu(stu_num,pre_stu_name,pre_stu_gender,pre_stu_age,pre_stu_tele,pre_stu_spe )
values(@stu_num,@pre_stu_name,@pre_stu_gender,@pre_stu_age,@pre_stu_tele,@pre_stu_spe)
end
?
在管理員上建立觸發器,記錄被修改的信息。在原表中通過一個狀態屬性標示是否被刪除,因此數據并不會真正被刪除,只需要記錄被修改的信息。
?
create trigger on_pre_mana
on manager
for update
as
begin
declare @mana_num varchar(15)
declare @pre_mana_name varchar(10)
declare @pre_mana_gender varchar(2)
declare @pre_mana_age int
declare @pre_mana_tele varchar(15)
select? @mana_num = mana_num from deleted
select @pre_mana_name =mana_name from deleted
select @pre_mana_gender =mana_gender from deleted
select @pre_mana_age = mana_age from deleted
select @pre_mana_tele =mana_tele from deleted
insert
into pre_mana(mana_num,pre_mana_name,pre_mana_gender,pre_mana_age,pre_mana_tele)values(@mana_num,@pre_mana_name,@pre_mana_gender,@pre_mana_age,@pre_mana_tele)
??? end
3.6.5用戶的定義:
create user dba for login dba with default_schema=dbo
exec sp_addrolemember 'db_owner' ,'dba'
?
3.6.6 對數據的管理:
對數據的管理主要是由增刪改查組成,以學生信息的管理為例,
增加:
insert into
student(stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe,stu_statu)
values('201677H0555','劉飛達','男',19,14646646465,'軟工',1);
?
刪除:值得注意的是我刪除信息用的是更新信息語句,只需要更改狀態值即可標示數據是否被刪除,數據不會真的被刪除,做好了別分工作。
update student set stu_status=0 where stu_num=’201677H0522’;
修改:
update student set stu_name='劉豪' where stu_num='201677H0522';
?
查詢:值得注意的是查詢的條件是數據行的狀態值是1,也就是被標示未被刪除。
select stu_num,stu_name,stu_gender,stu_age,stu_tele,stu_spe from student where stu_statu=1;
?
分別查詢每一個宿舍的總費用,并且按照宿舍號進行排序(使用的是分組求和的思想):
select dor_num , sum(w?? ater+elect + repair +living) from lives group by dor_num order by dor_num ;
在sql代碼執行的過程中,會自動生成存儲過程,將有價值的存儲過程進行儲存。
?
3.7系統調試和測試
?
在對數據庫的備份功能進行測試的過程中,我在原表中對數據進行修改,從而觸動觸發器將被刪除的信息儲存在備份表中。執行語句update student set stu_name='劉豪' where stu_num='201677H0522'; 然后查看備份表中的信息,驗證之后正確。
?
把數據庫總所有的信息聯合起來,形成一張非常大的表,生成一個視圖,測試之后,可以成功生成,滿足要求。
在安全性方面,我創建了用戶并且進行了授權:
create login dba with password='123456', default_database=stu_dor_manage;
create user dba for login dba with default_schema=dbo
exec sp_addrolemember 'db_owner' ,'dba'
執行以后,成功生成了一個用戶:測試成功!
4.系統評價
4.1我的系統特色:
A、數據結構化 ,數據之間具有聯系,面向整個系統。
B、數據的共享性高,冗余度低,易擴充 。
C、數據獨立性高 。
D、數據由DBMS統一管理和控制。
4.2 系統不足及改進
在對數據庫進行設計的過程中,結構比較簡單,不能夠應對是否能復雜的情況,只能對學生住宿的簡單信息進行操作。另外,在安全性方面做得也不夠完善,主要原因在于設計的重點是功能的正常執行,而不是在每一個細節做到完美。另外,執行虛度方面沒有做出專門的優化。因此,這個數據庫系統需要我在以后相信的去完成每一個細節。
5.設計心得
在設計數據庫的過程中我遇到過非常多的問題:
首先,在設計階段有非常多的數據項,當時覺得不好分類和處理,而且有很多的數據項和許多實體都有關系。最后通過查看課本例題,問同學等方式將各個數據項進行歸類,對于和多個實體之間都有關系的數據項可以建立一個關系表,從而完成歸類。
接著,在添加數據的過程中,我忽略掉了數據的參照完整性,導致許多數據不能夠正常加入。后來經過同學的提示,我將數據進行了統一分析,保持所有的數據一致,最后數據可以正常輸入。
最后,每個表中的數據更改完成之后,更改后的數據會丟失找不到了。對于這個問題就解決辦法為加入觸發器,記錄表中信息的修改前的值,成功解決問題。
收獲:對于一個系統,數據庫的設計是非常重要的,數據庫設計決定了以后數據好不好維護。后期需求好不好展。同時也決定了系統的性能。一個壞的數據庫設計一個功能點的改動可能會設計多張表的改動。一不小心可能就會引起數據的不一致。為了解決這些問題。在數據庫設計之初就要考慮這些問題。減少后期系統維護量。
?
?
?
?
總結
以上是生活随笔為你收集整理的数据库课程设计——学生宿舍信息管理系统的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 讯时构架设计
- 下一篇: mysql将小数取整,mysql的取整函