📄 manager.h
字号:
#include <iostream.h>
#include <stdlib.h>
#include "Rooms.h"
class Manager
{
//struct the linked list
struct Node_re
{
const char *name;
int number_in_party;
int arrival_day;
int departure_day;
bool cancellation_flag;
bool check_out_flag;
bool no_room_at_the_inn_flag;
bool smoking;
int reservation_number;
Node_re *next;
};
private:
//all fields
Rooms rooms_array[100];
Node_re *front;
Node_re *rear;
public:
//constructor
Manager()
{
for(int i=0; i<100; i++)
{
rooms_array[i]=NULL;
}
front=rear=NULL;
}
//add one reservation at the tail of the reservation list
void enReservation(Reservation &a)
{
Node_re *add=new Node_re;
if(front==NULL)
{
front=add;
}
else
{
rear->next=add;
}
//copy all fields to new node
add->name=a.getName();
add->number_in_party=a.getNumber_in_party();
add->arrival_day=a.getArrival_day();
add->departure_day=a.getDeparture_day();
add->cancellation_flag=a.getCancellation_flag();
add->check_out_flag=a.getCheck_out_flag();
add->no_room_at_the_inn_flag=a.getNo_room_at_the_inn_flag();
add->smoking=a.getSmoking();
add->reservation_number=a.getReservation_number();
add->next=NULL;
rear=add;
}
//remove reservation from reservation list
bool deReservation(Reservation &a)
{
//if list is empty
if(front==NULL)
{
return false;
}
//not empty
else
{
if(front->reservation_number==a.getReservation_number())
{
Node_re *temp=new Node_re();
temp=front;
front=front->next;
delete temp;
}
else
{
Node_re *add=front;
Node_re *temp=new Node_re();
temp=front->next;
while(temp->reservation_number!=a.getReservation_number() && temp->next!=NULL)
{
temp=temp->next;
add=add->next;
}
if(temp->reservation_number==a.getReservation_number())
{
add->next=temp->next;
delete temp;
return true;
}
else
{
return false;
}
}
}
}
//reset all data
void initialize(int p)//p=total room number
{
int index=0;
while(index < p/4)
{
Reservation a(0, rand()%5+1);
Tags b(a);
enReservation(a);
int r=(a.getNumber_in_party()+1)/2;
int i=0;
while(i<r)
{
rooms_array[index].enTags(b);
cout <<"Reservation "<<a.getReservation_number()<<" move to room "<<index<<"\n";
index++;
i++;
}
}
cout << "The total number of rooms in this hotel is:" << p << "\n";
cout << "Before we start simulating, there are about " << p/4 << " rooms have been filled.";
cout<< "\n"<<"\n"<<"\n";
}
//reserve
bool reserve(int day, int number)
{
Reservation a(day, day+rand()%5+1);
Tags b(a);
int i=0;
bool out=false;
int index=0;
int x[10];
int n=0;
//looking for element by go through
while(i < number && out==false)
{
if(rooms_array[i].getHead()!=NULL)
{
if((rooms_array[i].getTail())->departure_Day<=b.get_Arrival_day())
{
x[n]=i;
n++;
}
}
else
{
x[n]=i;
n++;
}
i++;
if(n>=a.getNumber_in_party())
{
out=true;
enReservation(a);
for(int m=0; m<n; m++)
{
int s=x[m];
rooms_array[s].enTags(b);
cout<<"Reservation "<<a.getReservation_number()<<" move to room "<<s<<"\n";
}
}
}
if(out==false)
{
cout<<"Reservation "<<a.getReservation_number()<<"has been turned away "<<"\n";
}
return out;
}
void cancel(int number)//number=total rooms number
{
int i=rand()%number;
int n=(rooms_array[i].getTail())->reservation_Number;
Node_re *temp=new Node_re;
temp=front;
while((temp->reservation_number)!=n)
{
temp=temp->next;
}
temp->cancellation_flag=true;
cout<<"Reservation "<<temp->reservation_number<<" has been cancelled.";
cout<<"\n";
}
void check_out(int number)//number=total rooms number
{
int i=rand()%number;
int n=(rooms_array[i].getTail())->reservation_Number;
Node_re *temp=new Node_re;
temp=front;
while((temp->reservation_number)!=n)
{
temp=temp->next;
}
temp->check_out_flag=true;
cout<<"Reservation "<<temp->reservation_number<<" has checked out.";
cout<<"\n";
delete temp;
}
void end_status()
{
int a=0;
int b=0;
int c=0;
Node_re *temp=new Node_re;
temp=front;
while((temp->next)!=rear)
{
if(temp->cancellation_flag==true)
{
a++;
}
c=c+(temp->departure_day)-(temp->arrival_day);
temp=temp->next;
b++;
}
double percentage_cancellations=a/b;
double average_length_of_stay=c/b;
cout<<"the percentage of cancellation is "<<percentage_cancellations<<"\n";
cout<<"the average_length of stay is "<<average_length_of_stay<<"\n";
}
void rooms_status()
{
//dont know how to do...
}
void clear(int number)
{
for(int i=0; i<number; i++)
{
rooms_array[i]=NULL;
}
Node_re *temp=new Node_re;
temp=front;
while(temp!=rear)
{
front=front->next;
delete temp;
temp=front;
}
}
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -