C++ 酒店管理
本文包括一个C++酒店管理项目。该系统提供了许多选择,如预订房间、查看客户信息、更改或删除任何客户,并查看已分配的所有房间。在项目开发中使用了两个关键的C++概念-类和文件处理。
C++酒店管理系统的特点
- 管理客房
- 办理入住手续
- 获取可用客房
- 搜索客户
- 办理退房手续
- 获取客人摘要报告
程序分解
#include
#include
#include
#define max 100
using namespace std;
我们将包含所有必要的库文件,以避免任何类型的错误,并预定义最大值为100。
class Customer
{
public:
char name[100];
char address[100];
char phone[12];
char from_date[20];
char to_date[20];
float payment_advance;
int booking_id;
};
我们已经为客户创建了一个类,其中包含以下变量:姓名(大小为100),地址(大小为100),电话(字符数最多为12),起始日期(大小为20),截止日期(大小为20),浮点型预付款变量和一个整型的booking_id。
class Room
{
public:
char type;
char stype;
char ac;
int roomNumber;
int rent;
int status;
class Customer cust;
class Room addRoom(int);
void searchRoom(int);
void deleteRoom(int);
void displayRoom(Room);
};
我们声明了一个包含变量的教室类,如类型(type)、子类型(stype)、空调(ac)、教室号(roomNumber,类型为int)、租金(rent,类型为int)和状态(status,类型为int)。我们创建了一个顾客类cust的对象。
class Room rooms[max];
int count = 0;
我们已将房间类的rooms[max]声明为全局变量,并将count设为0;
Room Room::addRoom(int rno)
{
class Room room;
room.roomNumber = rno;
cout << "\nType AC/Non-AC (A/N) : ";
cin >> room.ac;
cout << "\nType Comfort (S/N) : ";
cin >> room.type;
cout << "\nType Size (B/S) : ";
cin >> room.stype;
cout << "\nDaily Rent : ";
cin >> room.rent;
room.status = 0;
cout << "\n Room Added Successfully!";
getch();
return room;
}
在addroom函数中,创建了一个room类的对象,该对象将根据客户的需求负责添加房间,并要求选择AC或否,然后要求选择房间的舒适度和大小(S或B),以及每日租金,我们将根据需要进行设置。房间添加成功。
void Room::searchRoom(int rno)
{
int i, found = 0;
for (i = 0; i < count; i++)
{
if (rooms[i].roomNumber == rno)
{
found = 1;
break;
}
}
if (found == 1)
{
cout << "Room Details\n";
if (rooms[i].status == 1)
{
cout << "\nRoom is Reserved";
}
else
{
cout << "\nRoom is available";
}
displayRoom(rooms[i]);
getch();
}
else
{
cout << "\nRoom not found";
getch();
}
}
这个函数搜索房间将帮助找到已经存在的可用的房间。客户将输入房间号码,如果找到房间,将显示房间的详细信息。
void Room::displayRoom(Room tempRoom)
{
cout << "\nRoom Number: \t" << tempRoom.roomNumber;
cout << "\nType AC/Non-AC (A/N) " << tempRoom.ac;
cout << "\nType Comfort (S/N) " << tempRoom.type;
cout << "\nType Size (B/S) " << tempRoom.stype;
cout << "\nRent: " << tempRoom.rent;
}
当客户输入房间号和选择空调与否以及舒适度和类型大小等时,此功能将仅显示房间。
class HotelMgnt : protected Room
{
public:
void checkIn();
void getAvailRoom();
void searchCustomer(char *);
void checkOut(int);
void guestSummaryReport();
};
这将是一个酒店管理的课程,具有以下选项:办理入住、可用房间、搜索客户、办理退房和获取汇总报告。
void HotelMgnt::guestSummaryReport()
{
if (count == 0)
{
cout << "\n No Guest in Hotel !!";
}
for (int i = 0; i < count; i++)
{
if (rooms[i].status == 1)
{
cout << "\n Customer First Name : " << rooms[i].cust.name;
cout << "\n Room Number : " << rooms[i].roomNumber;
cout << "\n Address (only city) : " << rooms[i].cust.address;
cout << "\n Phone : " << rooms[i].cust.phone;
cout << "\n---------------------------------------";
}
}
上述的getsummary函数将获取存在的客户的摘要(如果有的话),我们也可以添加摘要。它将要求提供客户的名字,房间号,地址和电话号码。
// hotel management reservation of room
void HotelMgnt::checkIn()
{
int i, found = 0, rno;
class Room room;
cout << "\nEnter Room number : ";
cin >> rno;
for (i = 0; i < count; i++)
{
if (rooms[i].roomNumber == rno)
{
found = 1;
break;
}
}
if (found == 1)
{
if (rooms[i].status == 1)
{
cout << "\nRoom is already Booked";
getch();
return;
}
cout << "\nEnter booking id: ";
cin >> rooms[i].cust.booking_id;
cout << "\nEnter Customer Name (First Name): ";
cin >> rooms[i].cust.name;
cout << "\nEnter Address (only city): ";
cin >> rooms[i].cust.address;
cout << "\nEnter Phone: ";
cin >> rooms[i].cust.phone;
cout << "\nEnter From Date: ";
cin >> rooms[i].cust.from_date;
cout << "\nEnter to Date: ";
cin >> rooms[i].cust.to_date;
cout << "\nEnter Advance Payment: ";
cin >> rooms[i].cust.payment_advance;
rooms[i].status = 1;
cout << "\n Customer Checked-in Successfully..";
getch();
}
}
如果客户想要预订房间,那么这段代码将会发挥作用。客户将输入房间号码;如果该房间已经被预订,则系统将显示一个文本,显示房间已经被预订。如果房间没有被预订,系统将要求输入预订编号、客户姓名、输入地址、输入电话号码、输入您想要入住的日期以及输入预付款金额。然后系统将显示一个文本,显示客户成功入住。
void HotelMgnt::getAvailRoom()
{
int i, found = 0;
for (i = 0; i < count; i++)
{
if (rooms[i].status == 0)
{
displayRoom(rooms[i]);
cout << "\n\nPress enter for next room";
found = 1;
getch();
}
}
if (found == 0)
{
cout << "\nAll rooms are reserved";
getch();
}
}
上面的功能将显示可用的房间,如果发现该房间已被预订,系统将显示一个标记,表示所有房间都已预订。
// hotel management shows all persons that have booked room
void HotelMgnt::searchCustomer(char *pname)
{
int i, found = 0;
for (i = 0; i < count; i++)
{
if (rooms[i].status == 1 && stricmp(rooms[i].cust.name, pname) == 0)
{
cout << "\nCustomer Name: " << rooms[i].cust.name;
cout << "\nRoom Number: " << rooms[i].roomNumber;
cout << "\n\nPress enter for next record";
found = 1;
getch();
}
}
if (found == 0)
{
cout << "\nPerson not found.";
getch();
}
}
上述代码片段将用于搜索客户。用户将输入客户名称,如果客户不存在,则显示“未找到该人”。
// hotel managemt generates the bill of the expenses
void HotelMgnt::checkOut(int roomNum)
{
int i, found = 0, days, rno;
float billAmount = 0;
for (i = 0; i < count; i++)
{
if (rooms[i].status == 1 && rooms[i].roomNumber == roomNum)
{
// rno = rooms[i].roomNumber;
found = 1;
// getch();
break;
}
}
if (found == 1)
{
cout << "\nEnter Number of Days:\t";
cin >> days;
billAmount = days * rooms[i].rent;
cout << "\n\t######## CheckOut Details ########\n";
cout << "\nCustomer Name : " << rooms[i].cust.name;
cout << "\nRoom Number : " << rooms[i].roomNumber;
cout << "\nAddress : " << rooms[i].cust.address;
cout << "\nPhone : " << rooms[i].cust.phone;
cout << "\nTotal Amount Due : " << billAmount << " /";
cout << "\nAdvance Paid: " << rooms[i].cust.payment_advance << " /";
cout << "\n*** Total Payable: " << billAmount - rooms[i].cust.payment_advance << "/ only";
rooms[i].status = 0;
}
getch();
}
上述代码用于生成客户的账单。
void manageRooms()
{
class Room room;
int opt, rno, i, flag = 0;
char ch;
do
{
system("cls");
cout << "\n### Manage Rooms ###";
cout << "\n1. Add Room";
cout << "\n2. Search Room";
cout << "\n3. Back to Main Menu";
cout << "\n\nEnter Option: ";
cin >> opt;
// switch statement
switch (opt)
{
case 1:
cout << "\nEnter Room Number: ";
cin >> rno;
i = 0;
for (i = 0; i < count; i++)
{
if (rooms[i].roomNumber == rno)
{
flag = 1;
}
}
if (flag == 1)
{
cout << "\nRoom Number is Present.\nPlease enter unique Number";
flag = 0;
getch();
}
else
{
rooms[count] = room.addRoom(rno);
count++ ;
}
break;
case 2 :
cout << " \ n Enter room number : " ;
cin >> rno ;
room.searchRoom ( rno ) ;
break ;
case 3 :
// nothing to do
Break ;
default :
cout << " \ n Please Enter correct option " ;
break ;
}
} while ( opt != 3 ) ;
}
上面的代码片段用于管理房间,如添加房间或搜索房间或返回菜单。
酒店管理系统的程序
#include <iostream>
#include <string.h>
#include <conio.h>
#define max 100
using namespace std;
// Class Customer
class Customer
{
public:
char name[100];
char address[100];
char phone[12];
char from_date[20];
char to_date[20];
float payment_advance;
int booking_id;
};
class Room
{
public:
char type;
char stype;
char ac;
int roomNumber;
int rent;
int status;
class Customer cust;
class Room addRoom(int);
void searchRoom(int);
void deleteRoom(int);
void displayRoom(Room);
};
// Global Declarations
class Room rooms[max];
int count = 0;
Room Room::addRoom(int rno)
{
class Room room;
room.roomNumber = rno;
cout << "\nType AC/Non-AC (A/N) : ";
cin >> room.ac;
cout << "\nType Comfort (S/N) : ";
cin >> room.type;
cout << "\nType Size (B/S) : ";
cin >> room.stype;
cout << "\nDaily Rent : ";
cin >> room.rent;
room.status = 0;
cout << "\n Room Added Successfully!";
getch();
return room;
}
void Room::searchRoom(int rno)
{
int i, found = 0;
for (i = 0; i < count; i++)
{
if (rooms[i].roomNumber == rno)
{
found = 1;
break;
}
}
if (found == 1)
{
cout << "Room Details\n";
if (rooms[i].status == 1)
{
cout << "\nRoom is Reserved";
}
else
{
cout << "\nRoom is available";
}
displayRoom(rooms[i]);
getch();
}
else
{
cout << "\nRoom not found";
getch();
}
}
void Room::displayRoom(Room tempRoom)
{
cout << "\nRoom Number: \t" << tempRoom.roomNumber;
cout << "\nType AC/Non-AC (A/N) " << tempRoom.ac;
cout << "\nType Comfort (S/N) " << tempRoom.type;
cout << "\nType Size (B/S) " << tempRoom.stype;
cout << "\nRent: " << tempRoom.rent;
}
// hotel management class
class HotelMgnt : protected Room
{
public:
void checkIn();
void getAvailRoom();
void searchCustomer(char *);
void checkOut(int);
void guestSummaryReport();
};
void HotelMgnt::guestSummaryReport()
{
if (count == 0)
{
cout << "\n No Guest in Hotel !!";
}
for (int i = 0; i < count; i++)
{
if (rooms[i].status == 1)
{
cout << "\n Customer First Name : " << rooms[i].cust.name;
cout << "\n Room Number : " << rooms[i].roomNumber;
cout << "\n Address (only city) : " << rooms[i].cust.address;
cout << "\n Phone : " << rooms[i].cust.phone;
cout << "\n---------------------------------------";
}
}
getch();
}
// hotel management reservation of room
void HotelMgnt::checkIn()
{
int i, found = 0, rno;
class Room room;
cout << "\nEnter Room number : ";
cin >> rno;
for (i = 0; i < count; i++)
{
if (rooms[i].roomNumber == rno)
{
found = 1;
break;
}
}
if (found == 1)
{
if (rooms[i].status == 1)
{
cout << "\nRoom is already Booked";
getch();
return;
}
cout << "\nEnter booking id: ";
cin >> rooms[i].cust.booking_id;
cout << "\nEnter Customer Name (First Name): ";
cin >> rooms[i].cust.name;
cout << "\nEnter Address (only city): ";
cin >> rooms[i].cust.address;
cout << "\nEnter Phone: ";
cin >> rooms[i].cust.phone;
cout << "\nEnter From Date: ";
cin >> rooms[i].cust.from_date;
cout << "\nEnter to Date: ";
cin >> rooms[i].cust.to_date;
cout << "\nEnter Advance Payment: ";
cin >> rooms[i].cust.payment_advance;
rooms[i].status = 1;
cout << "\n Customer Checked-in Successfully..";
getch();
}
}
// hotel management shows available rooms
void HotelMgnt::getAvailRoom()
{
int i, found = 0;
for (i = 0; i < count; i++)
{
if (rooms[i].status == 0)
{
displayRoom(rooms[i]);
cout << "\n\nPress enter for next room";
found = 1;
getch();
}
}
if (found == 0)
{
cout << "\nAll rooms are reserved";
getch();
}
}
// hotel management shows all persons that have booked room
void HotelMgnt::searchCustomer(char *pname)
{
int i, found = 0;
for (i = 0; i < count; i++)
{
if (rooms[i].status == 1 && stricmp(rooms[i].cust.name, pname) == 0)
{
cout << "\nCustomer Name: " << rooms[i].cust.name;
cout << "\nRoom Number: " << rooms[i].roomNumber;
cout << "\n\nPress enter for next record";
found = 1;
getch();
}
}
if (found == 0)
{
cout << "\nPerson not found.";
getch();
}
}
// hotel managemt generates the bill of the expenses
void HotelMgnt::checkOut(int roomNum)
{
int i, found = 0, days, rno;
float billAmount = 0;
for (i = 0; i < count; i++)
{
if (rooms[i].status == 1 && rooms[i].roomNumber == roomNum)
{
// rno = rooms[i].roomNumber;
found = 1;
// getch();
break;
}
}
if (found == 1)
{
cout << "\nEnter Number of Days:\t";
cin >> days;
billAmount = days * rooms[i].rent;
cout << "\n\t######## CheckOut Details ########\n";
cout << "\nCustomer Name : " << rooms[i].cust.name;
cout << "\nRoom Number : " << rooms[i].roomNumber;
cout << "\nAddress : " << rooms[i].cust.address;
cout << "\nPhone : " << rooms[i].cust.phone;
cout << "\nTotal Amount Due : " << billAmount << " /";
cout << "\nAdvance Paid: " << rooms[i].cust.payment_advance << " /";
cout << "\n*** Total Payable: " << billAmount - rooms[i].cust.payment_advance << "/ only";
rooms[i].status = 0;
}
getch();
}
// managing rooms (adding and searching available rooms)
void manageRooms()
{
class Room room;
int opt, rno, i, flag = 0;
char ch;
do
{
system("cls");
cout << "\n### Manage Rooms ###";
cout << "\n1. Add Room";
cout << "\n2. Search Room";
cout << "\n3. Back to Main Menu";
cout << "\n\nEnter Option: ";
cin >> opt;
// switch statement
switch (opt)
{
case 1:
cout << "\nEnter Room Number: ";
cin >> rno;
i = 0;
for (i = 0; i < count; i++)
{
if (rooms[i].roomNumber == rno)
{
flag = 1;
}
}
if (flag == 1)
{
cout << "\nRoom Number is Present.\nPlease enter unique Number";
flag = 0;
getch();
}
else
{
rooms[count] = room.addRoom(rno);
count++;
}
break;
case 2:
cout << "\nEnter room number: ";
cin >> rno;
room.searchRoom(rno);
break;
case 3:
// nothing to do
break;
default:
cout << "\nPlease Enter correct option";
break;
}
} while (opt != 3);
}
using namespace std;
int main()
{
class HotelMgnt hm;
int i, j, opt, rno;
char ch;
char pname[100];
system("cls");
do
{
system("cls");
cout << "######## Hotel Management #########\n";
cout << "\n1. Manage Rooms";
cout << "\n2. Check-In Room";
cout << "\n3. Available Rooms";
cout << "\n4. Search Customer";
cout << "\n5. Check-Out Room";
cout << "\n6. Guest Summary Report";
cout << "\n7. Exit";
cout << "\n\nEnter Option: ";
cin >> opt;
switch (opt)
{
case 1:
manageRooms();
break;
case 2:
if (count == 0)
{
cout << "\nRooms data is not available.\nPlease add the rooms first.";
getch();
}
else
hm.checkIn();
break;
case 3:
if (count == 0)
{
cout << "\nRooms data is not available.\nPlease add the rooms first.";
getch();
}
else
hm.getAvailRoom();
break;
case 4:
if (count == 0)
{
cout << "\nRooms are not available.\nPlease add the rooms first.";
getch();
}
else
{
cout << "Enter Customer Name: ";
cin >> pname;
hm.searchCustomer(pname);
}
break;
case 5:
if (count == 0)
{
cout << "\nRooms are not available.\nPlease add the rooms first.";
getch();
}
else
{
cout << "Enter Room Number : ";
cin >> rno;
hm.checkOut(rno);
}
break;
case 6:
hm.guestSummaryReport();
break;
case 7:
cout << "\nTHANK YOU! FOR USING SOFTWARE";
break;
default:
cout << "\nPlease Enter correct option";
break;
}
} while (opt != 7);
getch();
}
输出:
######## Hotel Management #########
1. Manage Rooms
2. Check-In Room
3. Available Rooms
4. Search Customer
5. Check-Out Room
6. Guest Summary Report
7. Exit
//when option 1
Enter Option:
### Manage Rooms ###
1. Add Room
2. Search Room
3. Back to Main Menu
Enter Option: 1
Enter Room Number: 1
Type AC/Non-AC (A/N) : A
Type Comfort (S/N) : S
Type Size (B/S) : B
Daily Rent : 1000
Room Added Successfully!
### Manage Rooms ###
1. Add Room
2. Search Room
3. Back to Main Menu
Enter Option: 2
Enter room number: 1
Room Details
Room is available
Room Number: 1
Type AC/Non-AC (A/N) A
Type Comfort (S/N) S
Type Size (B/S) B
Rent: 1000
//when option 2 check in room
Enter Phone: 456378654
Enter From Date: 30/07/2022
Enter to Date: 02/08/2022
Enter Advance Payment: 500
Customer Checked-in Successfully..
//when search for customer
Enter Option: 4
Enter Customer Name: Rohit
Customer Name: Rohit
Room Number: 1
Press enter for next record
//when option chosen for check out
Enter Option: 5
Enter Room Number : 1
Enter Number of Days: 10
######## CheckOut Details ########
Customer Name : Rohit
Room Number : 1
Address : Delhi
Phone : 456378654
Total Amount Due : 10000 /
Advance Paid: 500 /
*** Total Payable: 9500/ only