1. 程式人生 > >資料庫課程設計——羽晴YuQ3,物資管理系統

資料庫課程設計——羽晴YuQ3,物資管理系統

附錄1課程設計題目 

(1) 設計題目:物資管理及出借系統

        背景資料:

1) 擺放物資的有兩間辦公室,每間辦公室都有若干個位置擺放物資。

2) 每個擺放物資的地方都有一個唯一的編號。

3) 物資的基本資料包括物資編號、物資名稱、擺放位置、可用數量、租金、押金、狀態(如:正常、維修等)、出借範圍(如:院內、校內等)、型別(如:消耗品、非消耗品)以及描述等。

4) 使用者註冊後,管理員設定其角色,規定其可借用物品的範圍。

5) 使用者的角色用6種,包括系統管理員、部門管理員、團學使用者、院內使用者、校內使用者及訪客。訪客沒有出借物資的許可權。

6) 使用者通過在系統中提交物品出借預約。除校內使用者外,均無需租金押金。管理員收到預約後會在24小時內回覆是否通過其預約申請。

7) 使用者按照預約申請的出借時間和預計歸還時間進行物資的出借與歸還,事後,管理員應及時做好歸還記錄。

8)管理員可以刪除其他使用者,增加、編輯、刪除物資,增加、編輯、刪除物資位置。

9)系統可以根據預約記錄與歸還記錄生成每年的出借記錄。

附錄3課程設計報告書寫格式要求 

為了培養學生嚴謹的工作態度,鍛鍊學生編寫文件的能力,要求實驗報告包括下面主要部分(包括附錄1,附錄2,附錄3,附錄4): 

1、前言(課程設計的目的、意義、要求) 

本次課程設計目的及意義在於實踐上學期學習的資料庫原理的理論知識。將學到的資料庫基本概念、基本原理、關係資料庫的設計理論、設計方法用到實處。要求通過所學知識建立資料庫模型,熟悉資料建模工具PowerDesigner的使用。充分掌握SQL語句的編寫,並利用其建立資料庫、表、檢視以及儲存過程和觸發器等,以熟悉MicrosoftSQL Server的操作環境。把理論經驗轉化成實踐經驗。

(1)課程設計目的:

1) 加深對講授內容的理解

《資料庫系統》中有關資料庫技術的基本理論、基本概念、設計與實現的方法和階段性知識,光靠課堂講授既枯燥無味又難以記住,但它們都很重要,要想熟練掌握,必須經過大量實踐環節加深對它們的理解。

2) 通過課程設計,掌握資料庫系統設計與開發的方法及步驟

資料庫是一門應用性很強的學科,開發一個數據庫系統需要集理論、系統和應用三方面為一體,以理論為基礎,以系統(DBMS)作支柱,以應用為目的,將三者緊密結合起來。同時結合實際需要開發一個真實的資料庫系統,對於較大型的系統可多人一起完成,但無論如何都應完成資料庫的需求分析、資料的分析與建模、資料庫的建立、資料庫的開發與執行等全部過程。在此過程中將所學的知識貫穿起來,達到能夠縱觀全域性,分析、設計具有一定規模的題目要求,基本掌握資料庫系統設計與開發的基本思路和方法並且做到對知識的全面掌握和運用。

3) 培養學生自學以及主動解決問題的能力

通過本次設計,使同學能夠主動查閱與資料庫相關資料,掌握一些課堂上老師未曾教授的知識,從而達到培養學生自學以及主動解決問題的能力的目的。

(2)課程設計基本要求:

1)  課程設計應由學生本人獨立完成,嚴禁抄襲,如果發現最後的設計基本相同者(系統需求分析與功能設計、資料庫的概念設計、邏輯設計,資料庫的實現與執行等內容基本相同),一經驗收教師認定其抄襲行為,則成績均為不及格。

2) 掌握所學的基礎理論知識,資料庫的基本概念、基本原理、關係資料庫的設計理論、設計方法等。熟悉資料建模工具PowerDesigner與資料庫管理系統Oracle(或者選擇SqlServer)軟體的使用。

3) 按時上機除錯,認真完成課程設計。

4) 認真編寫課程設計報告,請務必按照要求編寫:課程設計報告的封面見附錄2,課程設計的格式見附錄3。

2、 需求分析 

物資管理及出借系統包括如下功能,見圖1。


(1)  新增物資位置:管理員新增物資擺放地點的位置。 

(2)  編輯物資位置:管理員編輯物資擺放點的資訊。 

(3)  刪除物資位置:管理員刪除某一物資擺放點位置資訊。

(4)  新增物資:管理員新增一件物資,並填寫其基本資訊。 

(5)  修改物資資訊:管理員編輯某一件物資的資訊。 

(6)  刪除物資:管理員刪除某一件不存在的物資資訊。 

(7)  檢視預約記錄:管理員檢視未處理的預約申請。 

(8)  查看出借記錄:管理員檢視過去的出借記錄。

(9)  添加出借記錄:使用者歸還物資之後,管理員做好物資歸還的記錄。

(10) 編輯出借記錄:使用者取消預約成功的出借,管理員修改出借的記錄。

(11) 刪除出借記錄:管理員將超過儲存期限的出借記錄刪除。

(12) 修改使用者許可權:使用者註冊後,管理員根據其身份設定其角色已確定其可出借物資的範圍。

(13) 更改其他使用者密碼:使用者忘記密碼後,管理員將其密碼進行修改。

(14) 刪除使用者:管理員刪除過期出借記錄後,同時刪除已畢業的使用者。

3、 資料庫概念結構設計 

物資管理及出借系統: 

(1) 在物資管理及出借系統應用中主要涉及的實體的屬性

物資位置(編號,辦公室號,位置名稱)

物資(編號,名稱,位置編號,數量,單位,圖片名稱,租金,押金,狀態,出借範圍,型別,剩下數量,描述)

角色(編號,角色名)

使用者角色(角色編號,使用者編號)  

使用者(編號,使用者名稱,密碼,姓名,學院,組織,長號,短號)  

預約(編號,使用者編號,物資編號,出借時間,預期歸還時間,租金,押金,數量,狀態,留言)

出借記錄(編號,歸還時間,銀碼,備註)

(2) 實體間的聯絡

物資位置與物資之間是1:n(n≥0)的聯絡;     

角色與使用者角色之間是1:n(n≥0)的聯絡;

使用者角色與使用者之間是1:1的聯絡;

使用者與預約是1:n(n≥0)的聯絡;

物資與預約是1:n(n≥0)的聯絡;

預約與出借記錄是1:m(m=1或0)的聯絡;

(3) 物資管理及出借系統的E-R圖,見圖2。


4、 資料庫邏輯結構設計 


(1) 邏輯結構設計圖型描述,見圖3。


(2) 邏輯結構設計列表描述,見表1。

序號

表名

中文名

作用

1

Locations

物資位置表

記錄物資擺放點資訊

2

Goods

物資表

記錄物資資訊

3

Role

角色表

記錄角色資訊

4

UserRole

使用者角色表

記錄每位使用者對應的角色

5

User

使用者表

記錄使用者資訊

6

Reservation

預約表

記錄使用者預約情況

7

Records

出借記錄表

記錄使用者出借物資資訊


5、 資料庫實現 

5.1建立資料庫、資料表、檢視、索引

5.1.1建立資料庫

CREATE DATABASE [myDatabase]
CONTAINMENT = NONE
ON  PRIMARY 
(NAME=N'myDatabase_Data',FILENAME=N'D:\Wingtip\Wingtip\App_Data\myDatabase_Data.mdf' , SIZE = 4160KB , MAXSIZE = UNLIMITED, FILEGROWTH = 1024KB )
LOG ON 
(NAME=N'myDatebase_log',FILENAME=N'D:\Wingtip\Wingtip\App_Data\myDatebase_log.ldf' , SIZE = 1040KB , MAXSIZE = 2048GB , FILEGROWTH = 10%);

5.1.2建立資料表

(1)物資位置表的建立
create table Locations
(
LocationID 		int			not null,
	OfficeID 		int 			not null,
	GoodsLocation 	nvarchar(30) not null,
	constraint 		location_PK 	primary key(LocationID),
		constraint 	location_officeID_check 	check(OfficeID=222 or OfficeID=214)
);
(2)物資表的建立
create table Goods
(
GoodsID		int         		not null,
Name      	nvarchar(100) 	not null,
LocationID  	int        		not null,
Amount     int         		not null,
Unit        	nvarchar(10)  	not null,
Image      	nvarchar(100) 	not null,
Rent       	float 			default 0.00 	not null,
Pledge     	float 			default 0.00,
Status      	int         		default 1 ,
Type       	int         		default 1 ,
RestAmount	int ,
Range      int         		default 1 ,
Synopsis    nvarchar(200),
CONSTRAINT check_goods_amount 	CHECK(amount>0),
CONSTRAINT check_goods_rent 		CHECK(rent>0),
CONSTRAINT check_goods_pledge 	CHECK(pledge>0),
CONSTRAINT check_goods_status		CHECK(status>0 and status<5),
CONSTRAINT check_goods_type 		CHECK(type>0 and type<=2),
CONSTRAINT check_goods_rest_amount CHECK(rest_amount>0),
CONSTRAINT check_goods_range 	CHECK(range>0 and range<5),
CONSTRAINT goods_pk 				PRIMARY KEY(GoodsID),
CONSTRAINT goods_fk 				
FOREIGN KEY(LocationID) 
			           REFERENCES Locations(LocationID) 
);

create table Role

(

ID                         int           notnull,

Name              nvarchar(30)not null,

CONSTRAINT     role_pk         PRIMARYKEY(ID)

);

(3)角色表的建立
create table Role
(
ID				int         	not null,
Name      		nvarchar(30) not null,
CONSTRAINT 	role_pk 		PRIMARY KEY(ID)
);

(4)使用者表的建立
create table Users
(
ID         	int         	not null,
Name      	nvarchar(20) not null,
NickName	nvarchar(20) not null,
Institute		nvarchar(50) not null,
Organization	nvarchar(50) not null,
Password   	nvarchar(16) not null,
LongPhone  nchar(11) 	not null,
ShortPhone	nvarchar(11)	not null,
CONSTRAINT users_pk PRIMARY KEY(ID),
CONSTRAINT users_fk FOREIGN KEY(ID) 
			           REFERENCES UserRole(UserID) ON DELETE CASCADE
);
(5)使用者角色表的建立
create table UserRole
(
UserID				int      not null,
RoleID      		int		not null,
CONSTRAINT 	userrole_pk 	PRIMARY KEY(UserID),
CONSTRAINT 	userrole1_fk FOREIGN KEY(UserID) 
			           REFERENCES Users(ID) ON DELETE CASCADE,
CONSTRAINT userrole2_fk
FOREIGN KEY(RoleID) REFERENCES Role(ID) 
);
(6)預約表的建立
create table Reservation
(
ID          int		not null,
UserID      int		not null,
GoodsID    int		not null,
LendTime   datetime	not null,
ExceptReturnTime datetime not null,
Rent       	float		not null,
Pledge     	float		not null,
Amount		int		not null,
Status      	int   	default 1,
Synopsis    nvarchar(100),
CONSTRAINT reservation_pk 				PRIMARY KEY(ID),
CONSTRAINT reservation_users_fk 		FOREIGN KEY(UserID) 
			           REFERENCES Users(ID) ON DELETE CASCADE,
CONSTRAINT reservatiRon_goods_fk 		FOREIGN KEY(GoodsID) 
			           REFERENCES Goods(GoodsID) ON DELETE CASCADE,
CONSTRAINT check_reservation_rent 		CHECK(Rent>=0),
CONSTRAINT check_reservation_pledge 	CHECK(Pledge>=0),
CONSTRAINT check_reservation_amount 	CHECK(Amount>0),
CONSTRAINT check_reservation_status 	CHECK(Status>=0 and Status<=5)
);
(7)出借記錄表的建立
create table Records
(
ID			int		not null,
ReserveID   int		not null,
Returntime  datetime	not null,
CashNumber	nvarchar(100),
Synopsis   	nvarchar(150),
CONSTRAINT records_pk PRIMARY KEY(ID),
CONSTRAINT records_fk FOREIGN KEY(ReserveID) 
			           REFERENCES Reservation(ID) ON DELETE CASCADE
);

5.1.3 建立檢視

  (1)用於查詢和更新物資資訊的檢視定義
create view GoodsLocationView
(
GoodsID,Name,OfficeID,GoodsLocation,Amount,Unit,
Image,Rent,Pledge,Status,Type,RestAmount,Range,Synopsis)
as
select a.GoodsID,a.Name,b.OfficeID,b.GoodsLocation,a.Amount,a.Unit,
	a.Image,a.Rent,a.Pledge,a.Status,a.Type,a.Restamount,a.Range,a.Synopsis
from Goods a
	left join Locations b
	on a.LocationID=b.LocationID
with check option;
  (2)為方便查看出借記錄,檢視定義
create view RentLogs(ID,UserName,GoodsName,Amount,
					LendTime,ReturnTime,Rent,Pledge,Synopsis)
as
select a.ID,d.NickName,c.Name,a.Amount,a.LendTime,b.Returntime,a.Rent,a.Pledge,b.Synopsis
from Reservation a
	right join Records b
	on a.ID=b.ReserveID
		left join Goods c
		on a.GoodsID=c.GoodsID
			left join Users d
			on d.ID=a.UserID
with check option; 
(3) 為方便使用者列表,檢視定義
create view UserListView(Institue,Organization,Name, LongPhone,ShortPhone,Role)
as
select a.Institue,a.Organization,a.NickName,a.LongPhone,a.ShortPhone,c.Name
from Users a
	left join UserRole b
	on a.ID=b.UserID
		left join Role c
		on b.RoleID=c.ID
with check option; 

5.1.4 建立索引

create unique index GoodsIDIndex on Goods(GoodsID);
create unique index LocationIDIndex on Locations(LocationID);
create unique index UserIDIndex on Users(ID);
create index UserRoleIndex on UserRole(UserID,RoleID);
create unique index RoleIndex on Role(ID);
create unique index ReservationIndex on Reservation(ID);
create index RecordsIndex on Records(ReserveID,ID);

5.2資料入庫

       系統包括物資位置、物資、角色、使用者角色、使用者、預約、出借記錄,共有8張基本表,牽涉到大量資料的錄入,又由於時間限制,採用事先在Excel中錄入資料,然後使用SQLServer 2012資料匯入/匯出嚮導功能,直接將資料匯入到相應的基本表中。各個基本表插入元組的儲存功能,詳見附錄2。

5.3建立各個功能的儲存過程

系統共建立了16個儲存過程,具體列表(見表2)

編號

儲存過程名稱

定義

作用

P-1

LocaionsInsert

詳見附錄2-1

在Locations表中插入一元組

P-2

GoodsInsert

詳見附錄2-2

在Goods表中插入一元組

P-3

RoleInsert

詳見附錄2-3

在RoleInsert表中插入一元組

P-4

UserRoleInsert

詳見附錄2-4

在UserRole表中插入一元組

P-5

UsersInsert

詳見附錄2-5

在Users表中插入一元組

P-6

ReservationsInsert

詳見附錄2-6

在Reservations表中插入一元組

P-7

RecordsInsertInsert

詳見附錄2-7

在Records表中插入一元組

6執行結果(包括系統測試)

       本次的課程設計,我採用了網頁的形式來實現其功能,以實現在網路上完成物品的預約和管理工作。

      登入管理員賬號,點選管理功能,見圖4。在這裡列舉了管理員的所有功能。一共分為四個部分,包括物資位置、物資、出借、使用者四大方面的增刪查改。


圖4

圖5左 圖5右         首先,點選“新增物資位置”,進入新增物資介面,見圖5。如果出現錯誤,會出現圖5左邊的提示語句。新增成功或失敗後,會出現提示語句,點選“立即檢視”,即可檢視詳細資訊,見圖6。

圖6左
圖6右         在管理頁面點選“編輯物資位置”,在物資位置列表中,點選“編輯”,即可進入物資位置編輯介面,見圖7和圖8。如果不按要求填寫資訊的話,會出現錯誤提示,圖8是修改成功後的顯示效果。
圖7 圖8 圖9左
圖9右         在物資位置列表,見圖7中,點選刪除,會顯示圖9左邊的顯示介面,可以選擇確定刪除或取消刪除。點選確認,會出現圖9右邊顯示效果。

圖10左
圖10右         在管理頁面,物資管理下點選“新增物資”,進入新增物資頁面,如果輸入錯誤,會出現圖10左邊的錯誤資訊。正確填寫資訊後,點選新增物資,可見到圖10右邊的效果。點選立即檢視,即可檢視新增物資的詳細資訊。
圖11左
圖11右         在管理員頁面,點選“編輯物資”,轉跳到物資列表,選擇相應物資下的“編輯按鈕”,進入編輯頁面,見圖11。編輯相應的資訊,其中,在數量和租金、押金等輸入框內加入了正則表示式,防止了非法輸入。
圖12左
圖12右         在物資列表中,選擇“刪除”,或點選圖片進入物資的資訊頁面,點選“刪除”,均可達到刪除某件物資的效果,見圖12。 接著,我們結合普通使用者對系統的使用,表現我們實現出借管理和使用者管理的功能。我們模擬有一位來自華南農業大學藝術學院學生會外聯部的同學註冊並出借物資的過程。首先,進入首頁後,點選導航欄右上角的註冊後,進入註冊介面,見圖13。
圖13 成功註冊後,系統會自動將其加入“訪客”的角色中, 此時她還不能借用物資,管理員還需要根據實名驗證後,才會加入相應的許可權中。見圖14,使用者註冊後,顯示的角色是訪客,需要管理員使用者管理,提升使用者的許可權。如圖,管理員將使用者的許可權提升為“校內使用者”,那麼該使用者就能出借對全校開放的物資。另外,使用者管理還能實現編輯使用者資訊,重置密碼和刪除賬戶的功能,見圖15。
圖14上
圖14下
圖15上
圖15中
圖15下 使用者被提升許可權後,可以搜尋可出借物品,進行出借,見圖16。

圖16上
圖16下
圖17


        預約成功後,會自動轉跳到使用者當前的“我的預約”頁面中,裡面會顯示當前等待通過的預約,見圖17。在預約通過或被拒絕之前,使用者可以點選“取消預約”以取消預約。同時,在該頁面,也會顯示使用者已通過的預約,和未被批准的預約以及已經歸還的出借歷史。

附錄1資料庫邏輯結構定義

1. 物資位置(Locations)基本資訊表,用於記錄物資擺放資訊,見表3。

屬性名

資料型別

取值範圍

主屬性或外來鍵

完整性

LocationID

int

PK

Not Null

OfficeID

Int

214或222

Not Null

GoodsLocation

Nvarchar(30)

Not Null

2. 物資(Goods)基本資訊表,用於記錄物資的基本資訊,見表4。

屬性名

資料型別

取值範圍

主屬性或外來鍵

完整性

GoodsID

int

PK

Not Null

Name

Nvarchar(100)

主屬性

Not Null

LocationID

int

FK

Not Null

Amount

Int

自然數

Not Null

Unit

nvarchar(10)

Not Null

Image

nvarchar(100)

Not Null

Rent

float

大於等於0

Pledge

float

大於等於0

Status

int

大於0小於5

Not Null

Type

int

1或2

Not Null

RestAmount

int

小於Amount

Range

int

大於0小於5

Not Null

Synopsis

nvarchar(200)

3. 角色(Role)基本資訊表,用於記錄角色資訊,見表5。

屬性名

資料型別

取值範圍

主屬性或外來鍵

完整性

ID

int

PK

Not Null

Name

nvarchar(30)

主屬性

Not Nul

4. 使用者角色(UserRole)表,用於記錄使用者與角色之間的關係,見表6。

屬性名

資料型別

取值範圍

主屬性或外來鍵

完整性

UserID

int

PK,FK

Not Null

RoleID

int

FK,主屬性

Not Null

5. 使用者(Users)基本資訊表,用於記錄使用者的基本資訊,見表7。

屬性名

資料型別

取值範圍

主屬性或外來鍵

完整性

ID

int

PK

Not Null

Name

nvarchar(50)

主屬性

Not Null

NickName

nvarchar(20)

主屬性

Not Null

Password

nvarchar(16)

Not Null

LongPhone

nchar(11)

11位純數字

主屬性

Not Null

ShortPhone

nvarchar(11)

11位內純數字

Institute

nvarchar(50)

Organization

nvarchar(50)

6. 出借記錄(Records)表,存放使用者歸還物資的記錄,見表8。

屬性名

資料型別

取值範圍

主屬性或外來鍵

完整性

ID

int

PK

Not Null

ReserveID

int

主屬性,FK

Not Null

ReturnTime

datetime

Not Null

CashNumber

varchar(100)

Synopsis

nvarchar(150)

7. 預約(Reservations)表,用於存放使用者預約物資的記錄,見表9。

屬性名

資料型別

取值範圍

主屬性或外來鍵

完整性

ID

int

PK

Not Null

UserID

int

FK

Not Null

GoodsID

int

FK

Not Null

LendTime

datetime

Not Null

ExceptReturnTime

datetime

大於LendTime

Not Null

Rent

float

大於等於0

Pledge

float

大於等於0

Amount

int

小於物資總數

Not Null

Status

int

0~5之間

Synopsis

nvarchar(100)

附錄2儲存過程定義

create procedure LocationsInsert
@LocationID		 int,
@OfficeID		 int,
@GoodsLocation nvarchar(30),
@Image		 	nvarchar(100)
as
insert into Locations
values (@LocationID,@OfficeID,@GoodsLocation,@Image);

2. GoodsInsert的定義(表Goods的儲存過程):

create procedure GoodsInsert
@GoodsID int,
@Name nvarchar(100),
@LocationID int,
@Amount int,
@Unit nvarchar(10),
@Image nvarchar(100),
@Rent float,
@Pledge float,
@Status int,
@Type int,
@RestAmount int,
@Synopsis nvarchar(200)
as
insert into Goods
values(@GoodsID,@Name,@LocationID,@Amount,@Unit,
@Image,@Rent,@Pledge,@Status,@Type,@RestAmount,@Synopsis);

3. RoleInsert的定義(表Role的儲存過程):

create procedure RoleInsert
@ID int,
@Name nvarchar(30)
as
insert into Role values(@ID,@Name);

4. UserRoleInsert的定義(表UserRole的儲存過程):

create procedure UserRoleInsert
@UserID int,
@RoleID int
as
insert into UserRole values(@UserID,@RoleID);

5. UsersInsert的定義(表Userse的儲存過程):

create procedure UserInsert
@ID int,
@Name nvarchar(50),
@NickName nvarchar(20),
@Password nvarchar(16),
@LongPhone nchar(11),
@ShortPhone nvarchar(11),
@Institue nvarchar(50),
@Organization nvarchar(50)
as
insert into Users 
values(@ID,@Name,@NickName,@Password,@LongPhone
,@ShortPhone,@Organization,@Institue);

6. ReservationInsert的定義(表Reservation的儲存過程):

create procedure ReservationInsert
@ID int,
@UserID int,
@GoodsID int,
@LendTime datetime,
@ExceptReturnTime
@Rent float,
@Pledge float,
@Amount int,
@Status int,
@Synposis varchar(100)
as
insert into Reservation
values(@ID,@UserID,@GoodsID,@LendTime,@ExceptReturnTime,@Rent
,@Pledge,@Amount,@Status,@Synposis);

7. RecordsInsert的定義(表Records的儲存過程):

create procedure RecordsInsert
@ID int,
@ReserveID int,
@ReturnTime datetime,
@CashNumber varchar(100),
@Synopsis varchar(150)
as
insert into Records
values(@ID,@ReserveID,@ReturnTime,@CashNumber,@Synopsis);

附錄3資料檢視和儲存過程功能的驗證

1. 基本表的資料檢視(基於檢視查詢,以SQLServer為例)

1) 檢視物資表中的資料,見圖4。


圖4

2) 檢視使用者表中的資料,見圖5。


圖5

2. 儲存過程功能的驗證(LocationsInsert和GoodsInsert為例)

1) 儲存過程LocationsInsert功能的驗證,見圖6。


圖6

2) 儲存過程GoodsInsert功能的驗證,見圖7。


圖7