《數據庫原理》課程設計報告

《數據庫原理》課程設計報告
題目:KTV管理系統
就是記錄一下小組做的 以後或許有點用

一、簡要概述

顧客來到KTV一定會開包房消費,但是包房會有大小之分,不同類型的包房的價格也不同。可以按照顧客的需求進行包房的分配,並且及時知道包房剩餘狀態,更方便快捷的進行包房的分配。並且可以瞭解VIP顧客的性別,年齡,電話,可以準確地爲客人服務。現在大部分ktv都是將酒水放在房間外一個單獨的地方,有需求的顧客可以自行去購買酒水然後結賬購買酒水,顧客消費酒水,系統可以對酒水消費的賬單進行查詢,查詢賣出酒水的種類,數量。對服務員可以準確地瞭解服務員信息,可以輸入新招聘的服務員的信息,刪除原來辭職的服務員信息,有效地提高服務效率,使顧客體驗更好。

二、需求分析

1.現實需求分析(通過與一些去過KTV的顧客以及KTV服務員之間的問答進行分析而得)
KTV管理信息系統主要是完成對KTV的管理(包括預定,開房,結賬)和各種相關信息的管理的錄入和查詢。用戶登入系統,輸入用戶名和密碼,系統從數據庫的用戶信息表進行覈對,完全進入系統。房間或會員信息的增加時,系統會把這些信息入到數據庫中的房間和會員信息表中。
若客人取消預定,則在預定單表中刪除這些信息。當結賬時, 通過房間編號從收銀單據表中讀取消費信息。結賬後,就把此行信息刪除,寫入到收銀單據表中。如果是會員,消費的信息會員寫入到會員信息中,消費的次數和消費的金額都將累加,如果消費積分達到一定的程度,會員的賬單可以擁有一定的折扣。
2.系統最終用戶
服務員
3.數據庫功能需求分析
本系統是爲一般KTV設計的KTV 管理系統,程序要求能錄入些基本的資料,需要對顧客完成對房間的預定,開房,結賬以及進行酒水消費等基本信息操作,並可以對這些信息進行統計,根據以上的需求,數據庫的設計,必需滿足以下幾點:
●記錄服務員的基本信息:工號,姓名,性別,電話。
●記錄房間的基本信息:房間號,房間推薦人數,房間類型,房間的價格,房間狀態。
●記錄會員的基本信息: 會員賬號,會員姓名,電話,地址,充值數目,充值時間,賬戶餘額,消費次數,消費積分。
●記錄預訂單信息:包括預訂單編號,顧客名稱,房間編號,房間類型,房間價格,顧客電話,開房開始時間,開房結束時間,服務員姓名,服務員工號,下訂單日期,備註。
●記錄收銀單據信息:單據編號,房間編號,房間類型,房間價格,顧客名稱,開房時間,關房時間,付款方式,折扣,消費總額,開房日期,會員編號
●記錄用戶信息,包括用戶ID,用戶名,用戶密碼,用戶權限類型
●記錄酒水賬單信息,包括酒水賬單編號,酒水種類,酒水價格,酒水售出時間
主要功能包括:
1、權限管理:爲指定角色分配權限
(1)根據輸入信息(ID、權限信息、功能信息)分配角色對應權限。 (2)保存權限信息。
2、會員管理:查看會員基本信息,更新積分情況,記錄消費次數
3、服務員管理:
記錄服務員的基本信息並對相關信息進行管理
4、房間管理:
查看包房狀態變化、更新包房信息、進行房間信息查詢
進行房間預定:顧客打電話預訂包間 ,然後KTV前臺服務員查詢包房房間信息然後安排預訂,將預訂號反饋給顧客最後更新房間預訂狀態
開房:在查詢到的滿足顧客條件的包房中安排一間包房給顧客
5.酒水消費:顧客進行酒水消費,打印酒水消費賬單
6.收銀:顧客提出結賬要求、服務員打印收銀小票 、修改包間房間信息
功能結構圖
在這裏插入圖片描述

4.數據字典
用戶:
數據名稱 數據類型 是否可以爲空 默認值 描述 備註
user_id char 否 登錄用戶id 主鍵
user_name varchar 否 用戶姓名
user_password varchar 否 用戶密碼
user_type int 否 用戶權限類型(0:管理員1:普通用戶)
服務員:
數據名稱 數據類型 是否可以爲空 默認值 描述 備註
s_id char 否 服務員工號 主鍵
s_name varchar 否 服務員姓名
s_phone char 否 服務員電話
s_sex Char 否 服務員性別 只能男或女
vip顧客:
數據名稱 數據類型 是否可以爲空 默認值 描述 備註
v_id Char 否 顧客賬號 主鍵
v_name varchar 否 顧客姓名
v_phone varchar 否 顧客電話
v_age Tinyint 否 顧客年齡
v_sex char 否 顧客性別 只能男或女
v_address varchar 否 顧客地址
v_charge double 否 充值數目
v_time datetime 否 充值時間
v_yue float 否 賬戶餘額
v_ci int 否 0 消費次數
v_integral float 否 消費積分
房間:
數據名稱 數據類型 是否可以爲空 默認值 描述 備註
r_id char 否 房間編號 主鍵
r_type varchar 否 房間類型 1:小包2:中包3:大包
r_status int 否 0 房間狀態 0:空房 1:已預訂 2:有人
r_price float 否 房間價格
r_num Char 否 推薦人數(1-2、3-6、7-15)
預訂單:
數據名稱 數據類型 是否可以爲空 默認值 描述 備註
order_id Char 否 預訂單編號 主鍵
c_name varchar 否 顧客姓名
r_id char 否 房間編號
r_type varchar 否 房間類型 1:小包2:中包3:大包
r_price float 否 房間價格
c_phone char 否 顧客電話
openc_start datetime 否 開房開始時間
openc_end datetime 否 開房結束時間
s_id char 否 服務員工號
order_time datetime 否 預訂日期
v_id char 是 會員編號
order_remake varchar 是 描述
酒水消費:
數據名稱 數據類型 是否可以爲空 默認值 描述 備註
w_id Char 否 酒水賬單編號 主鍵
w_category varchar 否 酒水種類
w_name varchar 否 酒水名稱
w_price Decimal 否 酒水價格
w_num int 否 購買數量
w_out Datetime 否 售出時間
w_money float 否 酒水消費
收銀單據:
數據名稱 數據類型 是否可以爲空 默認值 描述 備註
b_id char 否 單據編號 主鍵
r_id char 否 房間編號
r_type varchar 否 房間類型
r_price float 否 房間價格
c_name varchar 否 顧客姓名
openc_start datetime 否 房間開始時間
openc_end datetime 否 結束時間
order_time datetime 否 下單時間
s_id Char 否 服務員工號
v_id char 是 會員賬號
f_money double 否 總消費
f_paymode varchar 否 付款方式

三、 概念結構設計

3.1實體和實體間的聯繫
(1)一個顧客對應一個房間。
(2)一個顧客對應一個收銀單據。
(3)多個服務員對應多個包間。
(4)一個顧客對應一個酒水賬單。
(5)一個酒水對應一個顧客。
(6)一個房間對應多個顧客。

3.2全局概念模式設計

在這裏插入圖片描述

一、
二、

各實體之間關係E-R圖

四、邏輯結構設計

1、由實體關係圖轉換關係模式,結果如下:
(1)用戶(用戶id,用戶姓名,用戶密碼,用戶權限類型)
(2)vip顧客(顧客賬號,顧客姓名,顧客電話,顧客性別,顧客地址,賬號餘額
充值數目,充值時間,消費次數,消費積分)
(3)服務員(服務員工號,服務員姓名,服務員性別,服務員電話)
(4)房間(房間編號,房間價格,房間類型,房間狀態,推薦人數)
(5)酒水賬單(酒水賬單編號,名稱,種類,價格,購買數量,售出時間,酒水消費)
(6)收銀單據(單據編號,服務員工號,顧客姓名,房間編號,房間類型,房間價格,顧客姓名,房間開始時間,結束時間,開房日期,會員編號,總消費,下單時間,付款方式)
(7)預訂訂單(預訂單編號,顧客姓名,房間編號,房間類型,房間價格,顧客電話,開房日期,開房時間,服務員工號,預訂日期,會員編號,備註)
2、數據庫中表的的邏輯結構
用戶(users):
列名 數據類型 長度 是否可以爲空 默認值 備註 約束
user_id char 2 否 登錄用戶id primary key
user_name varchar 8 否 用戶姓名
user_password varchar 16 否 用戶密碼
user_type int 否 用戶權限類型(0:管理員1:普通用戶)
服務員(server):
列名 數據類型 長度 是否可以爲空 默認值 備註 約束
s_id char 6 否 服務員工號 primary key
s_name varchar 10 否 服務員姓名
s_phone char 11 否 服務員電話
s_sex Char 4 否 服務員性別 只能男或女
vip顧客(vipcustomer):
列名 數據類型 長度 是否可以爲空 默認值 備註 約束
v_id Char 8 否 顧客賬號 primary key
v_name varchar 10 否 顧客姓名
v_phone varchar 11 否 顧客電話
v_age Tinyint 否 顧客年齡
v_sex char 2 否 顧客性別 Check
v_address varchar 30 否 顧客地址
v_charge Float 8 否 充值數目
v_time datetime 否 充值時間
v_yue float 8 否 賬戶餘額
v_ci int 8 否 0 消費次數
v_integral float 8 否 消費積分
房間(room):
列名 數據類型 長度 是否可以爲空 默認值 備註 約束
r_id char 4 否 房間編號 primary key
r_type varchar 10 否 房間類型 1:小包2:中包3:大包
r_status int 否 0 房間狀態 0:空房 1:已預訂 2:有人
r_price float 8 否 房間價格
r_num Char 6 否 推薦人數(1-2、3-6、7-15)
預訂單(orders):
列名 數據類型 長度 是否可以爲空 默認值 備註 約束
order_id Char 6 否 預訂單編號 Primary key
c_name varchar 8 否 顧客姓名
r_id char 4 否 房間編號
r_type varchar 10 否 房間類型 1:小包2:中包3:大包
r_price float 8 否 房間價格
c_phone char 11 否 顧客電話
openc_start datetime 否 開房開始時間
openc_end datetime 8 否 開房結束時間
s_id char 6 否 服務員工號
order_time datetime 否 預訂日期
v_id char 8 是 會員編號
order_remake varchar 50 是 備註
酒水消費(wine):
列名 數據類型 長度 是否可以爲空 默認值 備註 約束
w_id Char 4 否 酒水賬單編號 primary key
w_category varchar 20 否 酒水種類
w_name varchar 20 否 酒水名稱
w_price Decimal 10,2 否 酒水價格
w_num int 否 購買數量
w_out Datetime 否 售出時間
w_money float 8 否 酒水消費
收銀單據(bill):
列名 數據類型 長度 是否可以爲空 默認值 備註 約束
b_id char 10 否 單據編號 Primary key
r_id char 4 否 房間編號
r_type varchar 10 否 房間類型
r_price float 8 否 房間價格
c_name varchar 8 否 顧客姓名
openc_start datetime 否 房間開始時間
openc_end datetime 否 結束時間
order_time datetime 否 下單時間
s_id Char 6 否 服務員工號
v_id char 8 是 會員賬號
f_money double 8 否 總消費
f_paymode varchar 10 否 付款方式

五、數據庫物理實現

1、數據庫物理結構設計
SQL SERVER操作
(1)創建數據庫:
createdatabase ktv;
(2) 建表
use ktv;
用戶表:
createtable users(–用戶
user_idchar(2)primarykey,–用戶id
user_namevarchar(8)notnull,–用戶姓名
user_type int,–用戶權限類型
user_password varchar(16)–用戶密碼
)
結果如圖所示:

Vip顧客表:
createtable vipcustomer(–vip顧客
v_id char(8)primarykey,–vip賬號
v_name varchar(10)notnull,–姓名
v_age tinyintnotnull,–年齡
v_phone char(11)notnull,–電話
v_sex char(2)check (v_sex=‘男’or v_sex=‘女’),–性別
v_time datetimenotnull,–充值時間
v_ci intdefault’0’,–消費次數
v_address varchar(30),–顧客地址
v_integral float(8),–消費積分
v_charge float(8),–充值數目
v_yue intdefault’0’notnull–賬戶餘額
)
結果如圖所示:

服務員表:
createtableserver(–服務員
s_id char(8)primarykey,–服務員工號
s_name varchar(10)notnull,–服務員姓名
s_sex char(2)check(s_sex='男’or s_sex=‘女’),–服務員性別
s_phone varchar(11)notnull,–服務員電話
)
結果如圖所示:

房間表:
createtable room(–房間
r_id char(4)primarykey,–房間編號
r_type char(10)notnull,–房間類型
r_status intdefault’0’,–房間狀態(0:空房,1:已預訂,2:已開房)
r_price intnotnull,–房間價格
r_num char(6)notnull–推薦人數
)
結果如圖所示:

酒水消費表:
createtable wine(–酒水消費
s_id intprimarykey,–酒水賬單編號
w_name varchar(20)notnull,–酒水名稱
w_category varchar(20)notnull,–酒水種類
w_price decimal(10,2)notnull,–酒水價格
w_out datetimenotnull,–售出時間
w_num intnotnull,–購買數量
w_money float(8)–酒水消費
)
結果如圖所示:
收銀單據表:
createtable bill(–收銀單據
b_id char(10)primarykey,–單據編號
s_id char(8)notnull,–服務員工號
r_id char(4)notnull,–房間編號
r_type char(10)notnull,–房間類型
r_price intnotnull,–房間價格
openc_start datetimenotnull,–房間開始時間
openc_end datetimenotnull,–結束時間
openc_date datetimenotnull,–開房日期
v_id char(8),–會員賬號
c_name char(8)notnull,–顧客姓名
f_money intnotnull,–總消費
f_paymode varchar(10)notnull,–付款方式
f_time datetimenotnull–下單時間
constraint fk_sid foreignkey(s_id)referencesserver(s_id)ondeletecascadeonupdatecascade,
constraint fk_vid foreignkey(v_id)references vipcustomer(v_id)ondeletecascadeonupdatecascade,
constraint fk_rid foreignkey(r_id)references room(r_id)ondeletecascadeonupdatecascade
)
結果如圖所示:

預訂單表:
createtable orders(–預訂單
order_id char(10)primarykey,–單據編號
s_id char(8)notnull,–服務員工號
r_id char(4)notnull,–房間編號
r_type char(10)notnull,–房間類型
r_price intnotnull,–房間價格
openc_time datetimenotnull,–開房開始時間
openc_end datetimenotnull,–開房結束時間
order_date datetimenotnull,–預訂日期
v_id char(8),–會員賬號
c_name char(8)notnull,–顧客姓名
c_phone char(11)notnull,–顧客電話
order_remake varchar(50),–備註
constraint fk_s2id foreignkey(s_id)referencesserver(s_id)ondeletecascadeonupdatecascade,
constraint fk_v2id foreignkey(v_id)references vipcustomer(v_id)ondeletecascadeonupdatecascade,
constraint fk_r2id foreignkey(r_id)references room(r_id)ondeletecascadeonupdatecascade
)
結果如圖所示:

2、數據操作
2.1數據錄入(部分)
用戶表:
insertinto users(user_id,user_name,user_password,user_type)values (‘01’,‘mary’,‘200010’,1)
insertinto users(user_id,user_name,user_password,user_type)values (‘02’,‘haha’,‘200011’,1)
insertinto users(user_id,user_name,user_password,user_type)values (‘03’,‘zhangsam’,‘200012’,1)
insertinto users(user_id,user_name,user_password,user_type)values (‘04’,‘lila’,‘200013’,1)
服務員表:
insertintoserver(s_id,s_name,s_phone,s_sex)values (‘000001’,‘mary’,‘15873322471’,‘女’)
insertintoserver(s_id,s_name,s_phone,s_sex)values (‘000002’,‘haha’,‘15873122471’,‘男’)
insertintoserver(s_id,s_name,s_phone,s_sex)values (‘000003’,‘zhangsam’,‘15373322471’,‘男’)
insertintoserver(s_id,s_name,s_phone,s_sex)values (‘000004’,‘lila’,‘15873232471’,‘女’)

Vip顧客表:
insertinto vipcustomer(v_id,v_name,v_phone,v_age,v_sex,v_address,v_charge,v_time,v_yue,v_ci,v_integral)values (‘19069001’,‘張三’,‘15833354471’,21,‘男’,‘湖南’,100,2017-12-12,100,2,10)
insertinto vipcustomer(v_id,v_name,v_phone,v_age,v_sex,v_address,v_charge,v_time,v_yue,v_ci,v_integral)values (‘19069002’,‘麗麗’,‘15834554471’,21,‘男’,‘河南’,50,2017-10-12,100,2,10)
insertinto vipcustomer(v_id,v_name,v_phone,v_age,v_sex,v_address,v_charge,v_time,v_yue,v_ci,v_integral)values (‘19069003’,‘小飛’,‘15245335447’,21,‘女’,‘福建’,200,2018-04-02,100,2,10)
insertinto vipcustomer(v_id,v_name,v_phone,v_age,v_sex,v_address,v_charge,v_time,v_yue,v_ci,v_integral)values (‘19069004’,‘菲菲’,‘15833435466’,21,‘男’,‘江西’,200,2018-11-02,100,2,10)

房間表:
insertinto room(r_id,r_type,r_status,r_price,r_num)values (‘1001’,‘小包’,0,20,‘1-2’)
insertinto room(r_id,r_type,r_status,r_price,r_num)values (‘1002’,‘中包’,1,60,‘2-6’)
insertinto room(r_id,r_type,r_status,r_price,r_num)values (‘1003’,‘大包’,0,88,‘7-15’)
insertinto room(r_id,r_type,r_status,r_price,r_num)values (‘1004’,‘中包’,2,60,‘2-6’)
4.2數據查詢
–(1)查詢vip顧客表中最年長的vip顧客年齡
selectmax(v_age)from vipcustomer

–(2)統計男女vip顧客的人數
select v_sex,count(v_id)from vipcustomer groupby v_sex

–(3)查詢所有姓李的服務員信息
select*fromserverwhere s_name like’李%’

–(4)查詢房間空閒的房間信息
select*from room where r_status=0

–(5)查詢vip顧客消費次數大於4的顧客信息
select*from vipcustomer where v_ci>10

–(6)查詢年齡在19-23之間的vip顧客信息
select*from vipcustomer where v_age>=19 and v_age<=23

–(7)查詢房間類型和數量
select r_type,count(r_type)from room groupby r_type

–(8)查詢服務員名字第二個字是’天’的個人信息
select*fromserverwhere s_name like’_天%’

–(9)查詢各種包房的單價和
select r_type,sum(r_price)from room groupby r_type

–(10)將電話爲’15833354471’的vip顧客姓名改爲胡漢三
update vipcustomer set v_name='胡漢三’where v_phone=‘15833354471’

–(11)將包房的使用情況更新成使用。
update room set r_status=1 where r_id=10

–(12)將服務員李紅的信息刪除
deletefromserverwhere s_name=‘李紅’

–(13)查詢酒水賬單編號爲’9003’的信息
select*from wine where w_id=‘9003’

–(14)查詢每種酒的單價
selectdistinct w_category,sum(w_price)from wine groupby w_category

–(15)查詢房間總消費低於平均房間消費的支付方式
select f_money,f_paymode from bill wheref_money<(selectavg(f_money)from bill)

4.3視圖
–1.視圖V1,查詢年齡是21歲的VIP顧客信息
GO
createview V1
as
select*from vipcustomer where v_age=21
withcheckoption

GO
–2.視圖V2,查詢所有服務員的信息
createview V2
as
select*fromserver

GO
–3.視圖V3,按總消費查詢收銀單據前5單信息
create view V3 
as  
select
top 5 * 
from bill orderby bill.f_money desc

視圖圖示:

六、總結

1、小組總結
在這次項目設計中,我們小組所選擇的是設計一個KTV管理系統,這對我
們來說是一次嘗試與創新的過程,也可以說是一個挑戰的過程。由於我們剛剛學數據庫,因此我們還是缺少經驗。現在我們利用自己學到的知識設計並製作一
個KTV管理系統,這本身就是一個知識轉化爲生產力的過程,所以大家都很興奮,
都不同程度的投入了很高的熱情與努力。哪怕我們因爲思路上有些差池導致最後結果有些不盡人意,但是我們已經在盡我們最大努力了。交上了一份還算滿意的答卷。從各種文檔的閱讀到需求分析、概要設計、數據庫總體設計、代碼編寫與調試,我們都準備了好長時間。總的來說,在數據庫的規範性方面我們系統比較符合範式,表與表之間存在着比較合理的依賴關係;在實用性方面,我們通過KTV系統服務員可以爲顧客開房、預定房間、收銀等等,顧客還可以通過服務員進行房間消費查詢,並且擁有收銀單據,服務員可以通過每日收銀單據進行單天收入記錄,總的來說整個服務系統還是較爲完善的。有着很大的實用性。系統結構符合實際的要求,能夠適用於現在許多的KTV;在系統功能方面我們能夠滿足服務員進行管理的功能、權限管理、房間管理、信息查詢等等功能,使得系統正常運行。
一個數據庫的設計首先最重要的是要能夠滿足需求,並且要儘量使其與程序較爲符合使編碼的難度有所降低,而且就像數據結構決定代碼的效率,數據庫的結構同樣如此,好的表結構對於以後的數據庫結構有着莫大的作用。畢竟打好基礎纔可以穩固的進行下一步。然後數據庫的設計,要儘量符合範式,減少數據冗餘,表與表間的聯繫要準確,邏輯要正確從而提高效率和維護數據一致性,但是根據實際經驗,適當的冗餘可以有利於數據庫的查詢速度,所以這中間的取捨是我們主要討論的一個點。數據庫設計的步驟先找到所有實體,找到實體間的關係,對已有E-R圖進行刪減多餘信息,最後根據三大基本範式對錶進行重新檢查。
在此次設計過程中,我們遇到了很多的問題,比如約束設置不合理,最終我們在實踐過程中才實現了更好的相關約束;還有字段設置不合理,比如時間,我們設計的是datetime,但是在處理數據過程我們才發現應該使用date更加合理。

發佈了165 篇原創文章 · 獲贊 45 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章