⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 manager.h

📁 这是一个我的课后习题,要求编译一个酒店管理程序.做的不好~多多执教
💻 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 + -