



















Preview text:
  lOMoAR cPSD| 58970315       lOMoAR cPSD| 58970315 Lớp  : 68CS2        lOMoAR cPSD| 58970315            
Hà Nội, Tháng 4 năm 202  MỤC LỤC   I. Mô tả ề 
tài....................................................................................................................................4 
II. Phân tích ề tài .............................................................................................................................4 
1. Yêu cầu chính...........................................................................................................................4 
2. Dữ liệu ầu vào ........................................................................................................................4 
3. Dữ liệu ầu ra...........................................................................................................................4 
III. Thiết kế chương trình .................................................................................................................4 
1. Cấu trúc Date ...........................................................................................................................4 
2. Cấu trúc Room..........................................................................................................................5 
3. Cấu trúc Hotel ..........................................................................................................................5 
IV. Cài ặt chương trình ...................................................................................................................5 
1. Cấu trúc Date : .........................................................................................................................5 
1.1 Cấu trúc này dùng ề biểu diễn và thao tác với ngày tháng..............................................5 
b. Cấu trúc Date dùng các phương thức sau: ..........................................................................5 
2. Cấu trúc Room:.........................................................................................................................8 
a. Bao gồm các thuộc tính và phương thức liên quan ến một phòng trong khách sạn: .........8 
b. Cấu trúc Room dùng các phương thức sau: 
.........................................................................9  3. Cấu trúc Hotel: 
.........................................................................................................................9 a. Bao gồm 
các thuộc tính và phương thức liên quan ến một khách sạn. .............................9 
b. Các phương thức sử dụng trong cấu trúc Hotel. ...............................................................10 
4. Các thư viện sử dụng trong chương trình: .............................................................................12  V. Kết quả 
.......................................................................................................................................21 
Giao diện chương trình sau khi hoàn thiện. ...............................................................................21      lOMoAR cPSD| 58970315
- Chức năng thêm thông tin khách sạn: 
.................................................................................21  - Chức năng thêm phòng: 
......................................................................................................22 
- Chức năng hiển thị phòng: 
..................................................................................................23 
- Chức năng tìm kiếm phòng:................................................................................................24  - Chức năng thống kê. 
...........................................................................................................24  V. Kết luận 
......................................................................................................................................27 Tài liệu 
tham khảo ..........................................................................................................................27 
PHIẾU GIAO NHIỆM VỤ BÀI TẬP LỚN 
...................................................................................28        lOMoAR cPSD| 58970315 I. Mô tả ề tài 
Bài tập lớn yêu cầu xây dựng một chương trình quản lý khách sạn với N phòng và 
M ngày trong tháng. Chương trình cần có các chức năng như xem, tìm kiếm và 
thống kê. Trạng thái cảu phòng ươc ánh dấu bằng các chữ cái “G”,”T” và “K” 
tương ứng với các giá khuyến mãi, giá bình thường và không ược thuê. Mỗi phòng 
xoa một tỷ lệ khuyến mãi ược cho trước. 
II. Phân tích ề tài  1. Yêu cầu chính  
Chương trình cần quản lý thông tin về các phòng trong khách sạn. Bao gồm 4 tính 
năng chính là thêm phòng, hiển thị phòng, tìm kiếm phòng, thống kê. 
2. Dữ liệu ầu vào  
Dữ liệu ầu vào cho chương trình bao gồm thông tin về khách sạn và thông tin về 
từng phòng. Thông tin về một phòng bao gồm mã phòng, trạng thái, giá, tỷ lệ 
khuyến mãi, ngày bắt ầu và ngày kết thúc thuê phòng. 
3. Dữ liệu ầu ra  
Dữ liệu ầu ra của chương trình là thông tin về các phòng ược người dùng yêu cầu 
xem, danh sách các phòng ược tìm thấy theo trạng thái và thống kê số lượng phòng  theo từng trạng thái. 
III. Thiết kế chương trình 
Chương trình ược xây dựng dựa trên ba struct(cấu trúc) chính là Date, Room và  Hotel 
1. Cấu trúc Date  
Cấu trúc Date ại diện cho một ngày, với các thuộc tính như ngày, tháng, năm và một 
mảng chứa số ngày trong mỗi tháng. Cấu trúc này cũng có các phương thức ể 
chuyển ổi ngày thành chuỗi, lấy số ngày từ ngày 0/0/0, kiểm tra ngày hợp lệ và  nhập ngày từ chuỗi.   
2. Cấu trúc Room  
Cấu trúc Room ại diện cho một phòng trong khách sạn, với các thuộc tính như mã 
phòng, trạng thái, giá, tỷ lệ khuyến mãi, ngày bắt ầu và ngày kết thúc thuê phòng.      lOMoAR cPSD| 58970315
Cấu trúc này cũng có các phương thức ể kiểm tra ngày hợp lệ, kiểm tra phòng có 
rỗng không và lấy tổng số ngày thuê phòng. 
3. Cấu trúc Hotel  
Cấu trúc Hotel quản lý thông tin về khách sạn và danh sách các phòng. 
IV. Cài ặt chương trình 
1. Cấu trúc Date :  
1.1 Cấu trúc này dùng ề biểu diễn và thao tác với ngày tháng.     • 
int day, month, year;: Đây là các thuộc tính cơ bản của một ngày, bao gồm  ngày, tháng và năm.  • 
bool isEmpty;: Biến này kiểm tra xem ngày có ược ặt hay không.  • 
int dayInMonth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};: Mảng 
này lưu số ngày trong mỗi tháng của năm. 
1.2 Cấu trúc Date dùng các phương thức sau:     • 
string toString(): Phương thức này chuyển ổi ngày thành chuỗi theo 
ịnh dạng “ngày/tháng/năm”. Nếu isEmpty là true, nó sẽ trả về chuỗi  rỗng.      lOMoAR cPSD| 58970315   • 
string getDays(int numberDays): Phương thức này nhận vào một số 
ngày và trả về ngày sau khi cộng thêm số ngày ó vào ngày hiện tại. 
Nó tính toán tổng số ngày từ ngày hiện tại ến ngày cần tìm, sau ó 
chia tổng số ngày cho 365 ể tìm năm. Số ngày còn lại sau khi chia 
sẽ ược sử dụng ể tìm tháng và ngày trong tháng.    • 
int toDays(): Phương thức này chuyển ổi ngày hiện tại thành số 
ngày tính từ ngày 0/0/0. Nếu isEmpty là true, nó sẽ trả về 0. Nếu  không, nó sẽ tính tổng      lOMoAR cPSD| 58970315
số ngày từ ngày 0/0/0 ến ngày hiện tại. Nếu năm hiện tại là năm nhuận và 
tháng hiện tại lớn hơn 2, nó sẽ cộng thêm 1 ngày vào tổng số ngày.      • 
bool validDate(): Phương thức này kiểm tra xem ngày hiện tại có 
hợp lệ không. Nếu tháng nhỏ hơn 1 hoặc lớn hơn 12, hoặc ngày nhỏ 
hơn 1 hoặc lớn hơn số ngày trong tháng, nó sẽ trả về false. Nếu 
không, nó sẽ trả về true.    • 
void toDate(string dateInput): Hàm này chuyển ổi một chuỗi ầu vào 
thành một ngày. Nếu ngày không hợp lệ, nó sẽ yêu cầu người dùng 
nhập lại. Chuỗi ầu vào ược phân tách thành ngày, tháng và năm dựa  trên dấu phân cách      lOMoAR cPSD| 58970315 ‘/’.    • 
void input():Hàm này yêu cầu người dùng nhập một ngày từ bàn 
phím. Nó sẽ tiếp tục yêu cầu người dùng nhập cho ến khi ngày nhập  vào là hợp lệ. 
Phương thức này tương tự như toDate(string dateInput), nhưng thay vì nhận 
chuỗi ầu vào từ tham số, nó nhận chuỗi ầu vào từ bàn phím. 
2. Cấu trúc Room:  
2.1 Bao gồm các thuộc tính và phương thức liên quan ến một phòng trong  khách sạn:       lOMoAR cPSD| 58970315   • 
string roomCode;: Mã của phòng.  • 
char status;: Trạng thái của phòng.  • 
double price;: Giá của phòng.  • 
double discount;: Mức giảm giá của phòng.  • 
Date startDate;: Ngày bắt ầu thuê phòng.  • 
Date endDate;: Ngày kết thúc thuê phòng.  • 
long totalDays;: Tổng số ngày thuê phòng.  • 
double totalPrice;: Tổng giá tiền thuê phòng. 
2.2 Cấu trúc Room dùng các phương thức sau:     • 
bool validDate(): Phương thức này kiểm tra xem ngày kết thúc có lớn hơn 
hoặc bằng ngày bắt ầu không.  • 
bool isEmpty(): Phương thức này kiểm tra xem mã phòng có rỗng không.  • 
int getTotalDay(): Phương thức này tính tổng số ngày thuê phòng. Nếu ngày 
bắt ầu hoặc ngày kết thúc rỗng, nó sẽ trả về 0. 
3. Cấu trúc Hotel:       lOMoAR cPSD| 58970315
3.1 Bao gồm các thuộc tính và phương thức liên quan ến một khách sạn.     • 
string name;: Tên của khách sạn.  • 
int totalRooms;: Tổng số phòng trong khách sạn.  • 
Room rooms[maxRooms];: Mảng chứa thông tin về các phòng trong khách 
sạn. Số lượng phòng tối a ược xác ịnh bởi maxRooms.  • 
string address;: Địa chỉ của khách sạn. 
3.2 Các phương thức sử dụng trong cấu trúc Hotel.     • 
readData(Hotel &hotel): Hàm này mở một tệp tin ể ọc dữ liệu. Dữ 
liệu ược ọc bao gồm tên khách sạn, ịa chỉ, tổng số phòng và thông 
tin chi tiết về từng phòng. Sau khi ọc xong, tệp tin sẽ ược óng lại.      lOMoAR cPSD| 58970315   • 
saveData(Hotel &hotel): Phương thức này mở một tệp tin ể ghi dữ 
liệu. Dữ liệu ược ghi bao gồm tên khách sạn, ịa chỉ, tổng số phòng 
và thông tin chi tiết về từng phòng. Sau khi ghi xong, tệp tin sẽ ược  óng lại.      • 
Đoạn mã ịnh nghĩa một số hàm liên quan ến quản lý phòng khách  sạn: 
o void addHotel(Hotel &hotel);: Thêm thông tin về khách sạn. o void 
addRoom(Hotel &hotel);: Thêm một phòng vào khách sạn. 
o void displayRoom(Room &room);: Hiển thị thông tin về một phòng cụ thể. 
o void displayRooms(Hotel &hotel);: Hiển thị thông tin về tất cả các phòng  trong khách sạn. 
o void searchRoom(Hotel &hotel, string& roomCode);: Tìm kiếm phòng dựa  trên mã phòng. 
o void statistics(Hotel &hotel);: Cung cấp thống kê liên quan ến khách sạn.      lOMoAR cPSD| 58970315  
• toString(double n): Hàm này chuyển ổi giá trị double n thành một  chuỗi. 
Nó sử dụng hàm std::to_string(n) ể chuyển ổi giá trị double thành chuỗi. 
Phần s.erase(s.size() - 4) loại bỏ bốn ký tự cuối cùng khỏi chuỗi kết quả, loại 
bỏ bất kỳ số 0 nào sau dấu thập phân.        lOMoAR cPSD| 58970315      
• Hàm addRoom(Hotel &hotel): thêm một phòng vào khách sạn. Nếu 
tên khách sạn trống, nó yêu cầu người dùng nhập thông tin về khách 
sạn (giả sử là tên khách sạn). Nếu khách sạn ã ạt ến số lượng phòng tối      lOMoAR cPSD| 58970315
a, nó hiển thị thông báo cho biết không thể thêm phòng nữa. Nếu 
không, nó tiếp tục thu thập thông tin về phòng mới: 
o Mã phòng ( ảm bảo là duy nhất). o Trạng thái phòng (K, T hoặc G). o Giá 
phòng ( ảm bảo không âm). o Phần trăm giảm giá (nếu trạng thái là ‘G’). 
o Ngày bắt ầu và ngày kết thúc (nếu trạng thái là ‘G’ hoặc ‘T’).  • 
Nó tính toán tổng giá dựa trên giá phòng, giảm giá và tổng số ngày.  • 
Cuối cùng, nó thêm phòng vào danh sách phòng của khách sạn và lưu dữ  liệu.    • 
displayRooms(Hotel &hotel): Hàm này hiển thị thông tin về các phòng trong 
khách sạn. Nó sử dụng một vòng lặp ể duyệt qua danh sách các phòng trong 
hotel. Nếu phòng không trống (isEmpty() trả về false), nó hiển thị thông tin 
về phòng ó: mã phòng (roomCode), trạng thái phòng (status), giá phòng 
(price), phần trăm giảm giá (discount), ngày bắt ầu (startDate), ngày kết thúc 
(endDate), tổng số ngày (totalDays). tổng giá (totalPrice). Nếu phòng trống, 
vòng lặp kết thúc. Cuối cùng, nó hiển thị các dòng ngăn cách.        lOMoAR cPSD| 58970315 • 
searchRoom(Hotel &hotel, string &roomCode): Hàm này tìm kiếm phòng 
dựa trên mã phòng (roomCode). Nó duyệt qua danh sách các phòng trong 
hotel. Nếu tìm thấy phòng có mã phù hợp, nó hiển thị thông tin về phòng ó: 
Mã phòng, trạng thái phòng, giá phòng, phần trăm giảm giá. Nếu không tìm 
thấy phòng, nó thông báo “Không tìm thấy phòng”.    • 
displayOccupancyRate(Hotel hotel, int day): Hàm này tính tỷ lệ phòng ã ược 
thuê trong khách sạn vào một ngày cụ thể (day). Nó duyệt qua danh sách các 
phòng trong hotel. Nếu phòng không trống, không ở trạng thái “K” ( ã ặt 
phòng), và ngày bắt ầu (startDate) trước hoặc bằng day, và ngày kết thúc 
(endDate) sau hoặc bằng day, nó tăng biến ếm occupiedRooms. Cuối cùng, 
nó tính tỷ lệ phòng ã ược thuê dựa trên số phòng ã thuê và tổng số phòng  trong khách sạn.      • 
displayDailyRevenue(Hotel hotel, Date startDate, Date endDate): Hàm này 
tính toán và hiển thị doanh thu hàng ngày của khách sạn trong khoảng thời 
gian từ startDate ến endDate. Đầu tiên, nó tính số ngày trong khoảng thời 
gian bằng cách lấy hiệu của endDate.toDays() và startDate.toDays() cộng      lOMoAR cPSD| 58970315
thêm 1. Khởi tạo mảng dailyRevenue với kích thước bằng số ngày và giá trị 
ban ầu là 0. Duyệt qua danh sách các phòng trong hotel. Nếu phòng không 
trống và nằm trong khoảng thời gian ã chọn (startDate ến endDate), nó tính 
toán doanh thu cho từng ngày và cộng vào mảng dailyRevenue. Nếu không 
tìm thấy phòng hợp lệ, nó thông báo “Không có doanh thu trong khoảng thời 
gian ã chọn”. Nếu có phòng hợp lệ, nó hiển thị bảng thông tin doanh thu hàng  ngày.       
Bảng Thông Tin Doanh Thu Hàng Ngày. Bảng này bao gồm các cột sau:  
o Ngày: Ngày trong khoảng thời gian ã chọn. o Doanh Thu: Tổng doanh thu 
của khách sạn trong ngày ó. o Tỷ lệ phòng cho thuê: Tỷ lệ phòng ã ược thuê 
trong ngày ó (dựa trên hàm displayOccupancyRate). 
o Tổng Doanh Thu: Cuối cùng, nó tính tổng doanh thu bằng cách cộng tất cả 
các giá trị trong mảng dailyRevenue.    • 
displayHotelInfo(Hotel &hotel): Hàm này hiển thị thông tin về khách sạn. 
Nếu tên khách sạn trống (hotel.name.empty() trả về true), nó yêu cầu người      lOMoAR cPSD| 58970315
dùng nhập thông tin về khách sạn (giả sử là tên khách sạn). Sau ó, nó hiển thị 
thông tin về khách sạn: o Tên khách sạn (hotel.name). o Địa chỉ khách sạn  (hotel.address). 
o Tổng số phòng (hotel.totalRooms).    • 
displayRoomsByStatus(Hotel &hotel, char status): Hàm này hiển thị thông 
tin về các phòng dựa trên trạng thái (status) ã cho. Đầu tiên, nó kiểm tra giá 
trị của status ể xác ịnh loại phòng (Giảm giá, Thường, hoặc Không hoạt ộng). 
Sau ó, nó hiển thị tiêu ề cho bảng thông tin phòng: 
o Mã phòng (roomCode). o Trạng thái phòng (status). 
o Giá phòng (price). o Nếu trạng thái là ‘G’, hiển thị cột “Giam Gia”. 
o Nếu trạng thái không phải ‘K’, hiển thị các cột khác (Ngày bắt ầu, Ngày kết 
thúc, Tổng số ngày, Tổng giá). 
o Duyệt qua danh sách các phòng trong hotel. 
Nếu phòng không trống và trạng thái phù hợp (room.status == status), nó hiển thị 
thông tin về phòng ó. Cuối cùng, nó hiển thị các dòng ngăn cách.        lOMoAR cPSD| 58970315
displayRoomsByStatus(Hotel &hotel): Hàm này hiển thị thông tin về các phòng 
dựa trên trạng thái (status) ã cho. Đầu tiên, nó kiểm tra giá trị của status ể xác ịnh 
loại phòng (Giảm giá, Thường, hoặc Không hoạt ộng). Sau ó, nó gọi hàm 
displayRoomsByStatus(hotel, 'G') ể hiển thị thông tin về các phòng có giảm giá. 
Tiếp theo, nó gọi hàm displayRoomsByStatus(hotel, 'K') ể hiển thị thông tin về 
các phòng chưa cho thuê.Cuối cùng, nó gọi hàm displayRoomsByStatus(hotel, 
'T') ể hiển thị thông tin về các phòng bình thường.       
displayTotalRevenue(Hotel &hotel): Hàm này tính tổng doanh thu của khách sạn. 
Duyệt qua danh sách các phòng trong hotel. Nếu phòng không trống, nó cộng vào 
biến totalRevenue giá trị của room.totalPrice. Cuối cùng, nó hiển thị tổng doanh  thu của khách sạn.