lOMoARcPSD| 58970315
lOMoARcPSD| 58970315
Lớp : 68CS2
lOMoARcPSD| 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
lOMoARcPSD| 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
lOMoARcPSD| 58970315
I. 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ệ
nhập ngày từ chuỗi.
2. Cấu trúc Room
Cấu trúc Roomi 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.
lOMoARcPSD| 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.
lOMoARcPSD| 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
lOMoARcPSD| 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
lOMoARcPSD| 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ự n 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:
lOMoARcPSD| 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:
lOMoARcPSD| 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.
lOMoARcPSD| 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.
lOMoARcPSD| 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.
lOMoARcPSD| 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
lOMoARcPSD| 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.
lOMoARcPSD| 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()startDate.toDays() cộng
lOMoARcPSD| 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
lOMoARcPSD| 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.
lOMoARcPSD| 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.

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()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.