《数据库原理》课程设计报告
《數據庫原理》課程設計報告
 題目: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更加合理。
總結
以上是生活随笔為你收集整理的《数据库原理》课程设计报告的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: idea生成方法注释的正确方法
- 下一篇: nginx下只能通过域名,禁止使用ip访
