You are on page 1of 27

Hotel Management Project

Using C++(OOP) structure

Features:
 Manage Rooms

 Check-In

 Get available rooms

 Search customer

 Check-out room

 Get guest summary report

: ‫اعداد‬
‫محمود نضال تحسين‬
‫احمد فاضل‬

:‫اشراف االستاذة‬
‫ميس قحطان صديق‬
Introduction:
Object Oriented Programming in C++

The prime purpose of C++ programming was to add object orientation to the C programming language,
which is in itself one of the most powerful programming languages. The core of the pure object-oriented
programming is to create an object, in code, that has certain properties and methods. While designing
C++ modules, we try to see whole world in the form of objects. Object Oriented programming is a
programming style that is associated with the concept of Class, Objects and various other concepts
revolving around these two, like Inheritance, Polymorphism, Abstraction, Encapsulation etc.

Let us try to understand a little about all these, through a simple example. Human Beings are living
forms, broadly categorized into two types, Male and Female. Right? Its true. Every Human being(Male or
Female) has two legs, two hands, two eyes, one nose, one heart etc. There are body parts that are
common for Male and Female, but then there are some specific body parts, present in a Male which are
not present in a Female, and some body parts present in Female but not in Males. All Human Beings
walk, eat, see, talk, hear etc. Now again, both Male and Female, performs some common functions, but
there are some specifics to both, which is not valid for the other. For example : A Female can give birth,
while a Male cannot, so this is only for the Female. Human Anatomy is interesting, isn't it? But let's see
how all this is related to C++ and OOPS. Here we will try to explain all the OOPS concepts through this
example and later we will have the technical definitons for all this.

There are a few principle concepts that form the foundation of object oriented programming −

Object
This is the basic unit of object oriented programming. That is both data and function that operate on
data are bundled as a unit called as object.

Class
When you define a class, you define a blueprint for an object. This doesn't actually define any data, but
it does define what the class name means, that is, what an object of the class will consist of and what
operations can be performed on such an object.

Abstraction
Data abstraction refers to, providing only essential information to the outside world and hiding their
background details, i.e., to represent the needed information in program without presenting the details.
For example, a database system hides certain details of how data is stored and created and maintained.

1
Similar way, C++ classes provides different methods to the outside world without giving internal detail
about those methods and data.

Encapsulation
Encapsulation is placing the data and the functions that work on that data in the same place. While
working with procedural languages, it is not always clear which functions work on which variables but
object-oriented programming provides you framework to place the data and the relevant functions
together in the same object.

Inheritance
One of the most useful aspects of object-oriented programming is code reusability. As the name
suggests Inheritance is the process of forming a new class from an existing class that is from the existing
class called as base class, new class is formed called as derived class. This is a very important concept of
object-oriented programming since this feature helps to reduce the code size.

Polymorphism
The ability to use an operator or function in different ways in other words giving different meaning or
functions to the operators or functions is called polymorphism. Poly refers to many. That is a single
function or an operator functioning in many ways different upon the usage is called polymorphism.

Overloading
The concept of overloading is also a branch of polymorphism. When the exiting operator or function is
made to operate on new data type, it is said to be overloaded.

2
Project explanation:
Idea
project is a project for managing the hotel rooms and reservation throw multi features that help to
register,checkin,add rooms and other features .

Code explanation:

We will start by explaining every piece of code in the project and for that we will explain the functions
then we will gather all the pieces to make a running managing hotel rooms program

Notes: we will write Arabic explanation on code screens to make it clear

We will need to classes Customer and Rooms

Customer class

3
Room Class

Then we will will need a Hotel management class for putting our functions in

Hotel management class

It has 5 main functions in it listed in the screen above

4
We now start with the first function which is Check in()

Check in secreen1

5
Check in secreen2

6
2. getAvilableRooms() to check if there is available room

7
3. searchcustomer() to search if this customer is reserving a room

8
4. Check out() to checkout from room

9
5.getsummeryreport() to get a report about the status of hotel

10
Now the Main() finction will contain all the options in hotel including add rooms

Main secreen1

11
Main secreen2

12
Finally the integration of code is below

#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) : ";

13
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;
}

14
//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";

15
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();
}
}

16
//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<<" /";

17
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: ";

18
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();

19
}
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();
}

20
Final result after run

21
‫وزارة التعليم العالي والبحث العلمي‬
‫الجامعة التقنية الشمالية‬
‫ الموصل‬/ ‫الكلية التقنية الهندسية‬

Report about
Genetic Algorithms in C++

Submitted by:
Mahmood Nidhal Tahseen

Stage: second stage

pg. 1
Genetic Algorithms
Genetic Algorithms(GAs) are adaptive heuristic search algorithms that
belong to the larger part of evolutionary algorithms. Genetic algorithms are
based on the ideas of natural selection and genetics. These are intelligent
exploitation of random search provided with historical data to direct the
search into the region of better performance in solution space. They are
commonly used to generate high-quality solutions for optimization
problems and search problems.
Genetic algorithms simulate the process of natural selection which
means those species who can adapt to changes in their environment are
able to survive and reproduce and go to next generation. In simple words,
they simulate “survival of the fittest” among individual of consecutive
generation for solving a problem. Each generation consist of a
population of individuals and each individual represents a point in search
space and possible solution. Each individual is represented as a string of
character/integer/float/bits. This string is analogous to the Chromosome.
Foundation of Genetic Algorithms

Genetic algorithms are based on an analogy with genetic structure and


behavior of chromosome of the population. Following is the foundation of
GAs based on this analogy –
1. Individual in population compete for resources and mate
2. Those individuals who are successful (fittest) then mate to create more offspring
than others
3. Genes from “fittest” parent propagate throughout the generation, that is sometimes
parents create offspring which is better than either parent.
4. Thus each successive generation is more suited for their environment.
Search space
The population of individuals are maintained within search space. Each
individual represent a solution in search space for given problem. Each
individual is coded as a finite length vector (analogous to chromosome) of
components. These variable components are analogous to Genes. Thus a
chromosome (individual) is composed of several genes (variable

pg. 2
components).

Fitness Score
A Fitness Score is given to each individual which shows the ability of an
individual to “compete”. The individual having optimal fitness score (or
near optimal) are sought.
The GAs maintains the population of n individuals (chromosome/solutions)
along with their fitness scores.The individuals having better fitness scores
are given more chance to reproduce than others. The individuals with
better fitness scores are selected who mate and produce better
offspring by combining chromosomes of parents. The population size is
static so the room has to be created for new arrivals. So, some individuals
die and get replaced by new arrivals eventually creating new generation
when all the mating opportunity of the old population is exhausted. It is
hoped that over successive generations better solutions will arrive while
least fit die.
Each new generation has on average more “better genes” than the
individual (solution) of previous generations. Thus each new generations
have better “partial solutions” than previous generations. Once the
offsprings produced having no significant difference than offspring
produced by previous populations, the population is converged. The
algorithm is said to be converged to a set of solutions for the problem.
Operators of Genetic Algorithms
Once the initial generation is created, the algorithm evolve the generation
using following operators –
1) Selection Operator: The idea is to give preference to the individuals
with good fitness scores and allow them to pass there genes to the
successive generations.
2) Crossover Operator: This represents mating between individuals. Two
individuals are selected using selection operator and crossover sites are
chosen randomly. Then the genes at these crossover sites are exchanged

pg. 3
thus creating a completely new individual (offspring). For example –

3) Mutation Operator: The key idea is to insert random genes in offspring


to maintain the diversity in population to avoid the premature convergence.
For example –

pg. 4
The whole algorithm can be summarized as –
1) Randomly initialize populations p
2) Determine fitness of population
3) Untill convergence repeat:
a) Select parents from population
b) Crossover and generate new population
c) Perform mutation on new population
d) Calculate fitness for new population
Example problem and solution using Genetic Algorithms

Given a target string, the goal is to produce target string starting from a
random string of the same length. In the following implementation, following
analogies are made –
 Characters A-Z, a-z, 0-9 and other special symbols are considered as genes
 A string generated by these character is considered as
chromosome/solution/Individual
Fitness score is the number of characters which differ from characters in
target string at a particular index. So individual having lower fitness value is
given more preference.

pg. 5

You might also like