前言
為數據庫課程設計做,划水了幾天,實在無聊看了一下書(上課沒咋聽,唉)自己做了一下(剛開始准備划水來着,小組大佬有做),所以有些粗糙,就記錄一下,還請大佬們指教
需求分析
需求大家應都非常理解了,不在多述
E-R圖(充錢不夠,只能畫60個圖標,部分實體屬性不全)

E-R圖轉換為表結構
客戶(證件號[主鍵],證件類型,姓名,性別,聯系電話)
房間類型(類型編號[主鍵],單價/天,押金,是否可為鍾點房,鍾點房價格/h)
房間(房間號[主鍵],類型編號[外鍵],狀態)
入住信息(入住編號[主鍵],房間號[外鍵],證件號[外鍵],入住時間,預入住時間,退房時間,鍾點房標志位,罰款金額)
服務(入住編號,服務編號) 實現服務總金額 sum(消費金額) over()
可服務內容(服務編號[主鍵],服務內容,服務金額)
員工(編號[主鍵],姓名,職務,性別)
結算(入住編號[主鍵],員工編號[主鍵],折扣,折扣原因,收費總金額)
--視圖
入住總覽表:
入住編號,客戶證件號,姓名,聯系電話,房間號,入住時間,預入住時間,鍾點房標志位
--房間空閑表
房間號,房間類型編號,單價/天,押金,是否可為鍾點房,鍾點房價格/h
--服務消費總表
入住編號,服務內容,服務金額
代碼實現
--創建數據庫
create database Hotel_management;
use Hotel_management;
--表的構建
--客戶表customer
CREATE TABLE CUSTOMER
( Cid nvarchar(20) NOT NULL, --證件號[主鍵]
Ctype nvarchar(10) DEFAULT '身份證號', --證件類型
Cname nvarchar(10) NOT NULL, --姓名
Csex nvarchar(2) DEFAULT '男' CHECK (Csex = '男' OR Csex='女'),--性別
Cnumber nvarchar(15) NOT NULL, --聯系電話
PRIMARY KEY (Cid),
);
--房間類型表roottype
CREATE TABLE ROOMTYPE
( RTid nvarchar(10) NOT NULL, --類型編號[主鍵]
RTprice float NOT NULL CHECK (RTprice>=0), --單價/天
RTdeposit float NOT NULL CHECK (RTdeposit>=0),--押金
RTjudge bit NOT NULL, --是否為鍾點房
RTjdprice float CHECK (RTjdprice>=0), --鍾點房價格
PRIMARY KEY (RTid),
);
--房間表root
CREATE TABLE ROOM
( Rid nvarchar(10) NOT NULL, --房間號[主鍵]
Rroomtype nvarchar(10) NOT NULL, --類型編號[外鍵ROOMTYPE(RTid)]
Rstate bit NOT NULL, --狀態
PRIMARY KEY (Rid),
FOREIGN KEY (Rroomtype) REFERENCES ROOMTYPE(RTid),
);
--入住信息表live
CREATE TABLE LIVE
( Lid int IDENTITY(1,1), --入住編號[主鍵]自增
Lrootid nvarchar(10) NOT NULL, --房間號[外鍵ROOM(Rid)]
Lcustomerid nvarchar(20) NOT NULL,--證件號[外鍵CUSTOMER(Cid)]
Lstart date NOT NULL, --入住時間
Lexpect date NOT NULL, --預計入住時間
Lout date, --退房時間
Lfine float CHECK (Lfine>=0), --罰款金額
Lmark bit NOT NULL, --鍾點房標志位
PRIMARY KEY (Lid),
FOREIGN KEY (Lrootid) REFERENCES ROOM(Rid),
FOREIGN KEY (Lcustomerid) REFERENCES CUSTOMER(Cid),
);
--服務表service
CREATE TABLE SERVICE
( SLid int, --入住編號
SCid int, --服務編號
);
--存在的服務CSERVICE
CREATE TABLE CSERVICE
( CSid int IDENTITY(1,1), --服務編號[主鍵]
CScontent nvarchar(10) NOT NULL, --服務內容
CSprice float CHECK (CSprice>0) NOT NULL, --服務金額
PRIMARY KEY (CSid),
);
--員工表employees
CREATE TABLE EMPLOYEES
( Eid int IDENTITY(1,1), --職工編號
Ename nvarchar(10) NOT NULL, --姓名
Esex nvarchar(2) DEFAULT '男' CHECK (Esex = '男' OR Esex='女'), --性別
Eposition nvarchar(10) NOT NULL, --職務
PRIMARY KEY (Eid),
);
--結算表settlement
CREATE TABLE SETTLEMENT
( Sliveid int NOT NULL, --入住編號
Semployeesid int NOT NULL, --員工編號
Sdiscount float CHECK (1>Sdiscount AND Sdiscount>0), --折扣
Sdiscountwhy nvarchar(20), --折扣原因
Stotalamount float CHECK (Stotalamount>0), --收費總金額
PRIMARY KEY (Sliveid,Semployeesid),
);
--視圖的建立
--入住信息表
go
CREATE VIEW LIVE_INFO(入住編號,客戶證件號,客戶姓名,聯系電話,房間號,入住時間,預入住時,鍾點房標志位)
AS
SELECT LIVE.Lid,LIVE.Lcustomerid,CUSTOMER.Cname,CUSTOMER.Cnumber,LIVE.Lrootid,Lstart,Lexpect,Lmark
FROM LIVE,CUSTOMER
WHERE LIVE.Lcustomerid = CUSTOMER.Cid
WITH CHECK OPTION;
go
--房間空閑表
CREATE VIEW FREE_ROOM(房間號,房間類型編號,房間單價,房間押金,是否可為鍾點房,鍾點房價格)
AS
SELECT ROOM.Rid,ROOM.Rroomtype,ROOMTYPE.RTprice,RTdeposit,RTjudge,RTjdprice
FROM ROOM,ROOMTYPE
WHERE (ROOM.Rroomtype = ROOMTYPE.RTid AND ROOM.Rstate = 'False')
WITH CHECK OPTION;
go
--服務消費總金額表
CREATE VIEW CUSTOMER_SERVICE(入住編號,服務內容,服務金額)
AS
SELECT SERVICE.SCid,CSERVICE.CScontent,CSERVICE.CSprice
FROM SERVICE,CSERVICE
where SERVICE.SLid = CSERVICE.CSid
WITH CHECK OPTION;
go
添加測試數據
--添加數據
--INSERT INTO table_name (column1,column2,column3,...)
--VALUES (value1,value2,value3,...);
--客戶表加數據
INSERT INTO CUSTOMER (Cid,Cname,Csex,Cnumber)
VALUES ('444555200201283625','lnng','男','17837712772');
INSERT INTO CUSTOMER (Cid,Cname,Csex,Cnumber)
VALUES ('414455200201283626','樊星','男','15937711673');
INSERT INTO CUSTOMER (Cid,Cname,Csex,Cnumber)
VALUES ('678876200201283627','李月','女','17037711784');
--房間類型表加數據
INSERT INTO ROOMTYPE (RTid,RTprice,RTdeposit,RTjudge,RTjdprice)
VALUES ('0001','200','200','1','50');
INSERT INTO ROOMTYPE (RTid,RTprice,RTdeposit,RTjudge,RTjdprice)
VALUES ('0002','400','400','0','0');
INSERT INTO ROOMTYPE (RTid,RTprice,RTdeposit,RTjudge,RTjdprice)
VALUES ('0003','600','600','0','0');
--房間表room加數據
INSERT INTO ROOM (Rid,Rroomtype,Rstate)
VALUES ('201','0001','1');
INSERT INTO ROOM (Rid,Rroomtype,Rstate)
VALUES ('301','0002','0');
INSERT INTO ROOM (Rid,Rroomtype,Rstate)
VALUES ('401','0003','0');
--入住信息表live加數據
INSERT INTO LIVE (Lrootid,Lcustomerid,Lstart,Lexpect,Lmark)
VALUES ('201','444555200201283625',getdate(),dateadd(d, 1, getdate()),0);
--存在的服務CSERVICE加數據
INSERT INTO CSERVICE (CScontent,CSprice)
VALUES ('可樂','3');
INSERT INTO CSERVICE (CScontent,CSprice)
VALUES ('午飯','20');
--服務表service加數據
INSERT INTO SERVICE (SLid,SCid)
VALUES ('1','1');
INSERT INTO SERVICE (SLid,SCid)
VALUES ('2','1');
--員工表employees加數據
INSERT INTO EMPLOYEES (Ename,Esex,Eposition)
VALUES ('王晨','男','經理');
INSERT INTO EMPLOYEES (Ename,Esex,Eposition)
VALUES ('王月','女','管家');
----結算表settlement
INSERT INTO SETTLEMENT (Sliveid,Semployeesid)
VALUES ('1','1');
效果圖



