首頁 > 軟體

C++實現賓館房間管理系統

2022-05-27 18:07:26

本文範例為大家分享了C++實現賓館房間管理系統的具體程式碼,供大家參考,具體內容如下

一、問題描述

設計一個程式實現對賓館房間的基本管理,可以實現:客房資訊的錄入功能;客人入住登記、客人退房結算;客房資訊瀏覽功能,瀏覽全部客戶的資訊,客房資訊和客戶資訊分別儲存於不同檔案;客房資訊查詢,查詢空房間情況,實現按房間號查詢等。

二、基本要求

(1)使用物件導向程式設計思想編寫開發過程中需要用到的類,比如:至少包含四個類:日期類,客房類,主要包含客房資訊(房號型別,是否有客人等)及相關操作;客人類,主要完 成客戶資訊(身份證,入住時間,姓名,性別等)的相關操作;管理類實現對客房的管理。
(2)輸入和輸出可以使用文字檔案重定向輸入(儲存資料為磁碟檔案);也可以使用標準輸入輸出進行(提交時需要提交TXT格式輸入資料)。比如:room.txt 的檔案,檔案中應包含 20 條以上記錄(房間的初始狀態),guest.txt 的文字檔案,包含 10 條以上客人記錄。 在執行程式時自動載入。
(3)基本功能要求具有增、刪、改、查。

基本流程圖

#include<iostream>
#include<fstream>
#include<string>
#include<iomanip>
#include<windows.h> 
#include<conio.h>
#define Max 100 
using namespace std;
class Data//日期類,記錄交易時間 
{
    public:
        Data(){}//預設建構函式
        ~Data(){}//解構函式
        void SetDate(int year,int month,int day)//接收輸入的日期 
        {
            this->year=year;
            this->month=month;
            this->day=day;
         } 
         int getyear(){
             return year;
         }
        int getmonth(){
             return month;
         }
        int getday(){
             return day;
         }
    private:
        int year; 
        int month;
        int day; 
}; 
class Room
{
    public:
        Room *r[Max];//房間物件指標陣列                                    
        int Room_count;    //記錄房間數量    
        Room(int Number,string Type,double Price,string Whether)//建構函式 
        {
            this->Number=Number;
            this->Type=Type;
            this->Whether=Whether;
            this->Price=Price;
                    }
        int InputNumber()    {return Number;}
        string InputType(){return Type;}
        string InputWhether(){return Whether;}
        double InputPrice(){return Price;}
        void SetWether(string _state)    {Whether=_state;} 
        void show()    {cout<<"房號:  "<<Number<<"t"<<"房間型別:  "<<Type<<"t"<<"房間狀態:  "<<Whether<<"t"<<"價格:   "<<Price<<endl;}    
    protected:
        int Number; //房號 
        string Type;//型別 
        string Whether;//是否有客人 
        double Price;//價格 
            
};
class Guest
{
    public:
        Guest *g[Max];    //客人物件指標陣列                                
        int Guest_count;    //記錄客人數量    
        Guest(int number,string Name,int Id,string sex,string Intime,int days) //建構函式 
        {
            this->Name=Name;    this->Id=Id;    this->sex=sex; this->number=number;
            this->Intime=Intime;    this->days=days;
        }
        int InputNumber(){return number;}
        string InputName(){return Name;}
        string InputSex(){return sex;}
        int InputDays(){return days;}
        string InputIntime(){return Intime;}
        int InputId(){return Id;}
        void show() 
        {
            cout<<"顧客姓名:  "<<Name<<"t 身份證號:  "<<Id<<"t性別:  "<<sex<<"t入住時間:  "<<Intime<<"t入住天數:  "<<days<<endl;
        }
    protected:
        int number;//房號 
        string Name;//顧客姓名 
        int Id;//身份證號 
        string sex;//性別 
        string Intime;//入住時間 
        int days; //入住天數
};
class Manage 
{
    public:    
        Guest *g[Max];    //客人物件指標陣列                                
        int Guest_count;    //記錄客人數量        
        Room *r[Max];//房間物件指標陣列                                    
        int Room_count;    //記錄房間數量
    /*操作函數*/
        void IncreaseRoom();//新增客房資訊 
        void Check_In();    //刪除客房資訊,辦理入住
        void Check_Out();    //退房    
        int Payment();//結賬 
        void Display(int n);//瀏覽所有資訊(1瀏覽房間,2瀏覽顧客)                 
        void ReadData();  //從檔案中獲取房間和顧客的資訊
        void WriteData(int n);//向檔案中寫入所有的資訊
        void WriteRoom(Room *r);//客房資訊寫入 
        void WriteGuest(Guest *g);//顧客資訊寫入 
    /*查詢選單 */ 
        void SearchMenu();//查詢主選單 
        void SearchType();//查詢所有空房間; 
        void SearchNumber();//按房間號查詢        
}; 
static int i=0; 
void Manage::SearchMenu()
{
    int n;
    system("cls");
    cout<<"===================================="<<endl;
    cout<<"=         查   詢   菜   單        ="<<endl;
    cout<<"===================================="<<endl;
    cout<<"=========  1、查 詢 空 房    ======="<<endl;
    cout<<"=========  2、按房間號查詢   ======="<<endl;
    cout<<"===================================="<<endl;
    cout<<endl<<"請選擇: ";
    cin>>n;
    switch(n)
    {
        case 1:SearchType(); break; 
        case 2:SearchNumber();break;
    }
 } 
void Manage::IncreaseRoom()//新增房間 
{
    string type,Whether;
    double price;
    int number;
    cout<<"請輸入房號: ";    cin>>number;
    cout<<"請輸入房間型別: ";    cin>>type;
    cout<<"請輸入價格: ";    cin>>price;
    cout<<"請輸入房間狀態: ";    cin>>Whether;
    WriteRoom(new Room(number,type,price,Whether));
}
void Manage::Check_In()//刪除房間資訊,即入房登記
{
    ReadData();
    SearchType();
    string name,intime,sex,type;
    int days,number;
    int id;
    cout<<"請輸入房號: ";    cin>>number;
    cout<<"請輸入顧客的姓名: "; cin>>name;
    cout<<"請輸入顧客的身份證號: ";    cin>>id;
    cout<<"請輸入顧客的性別: "; cin>>sex;
    cout<<"請輸入入住日期: ";    cin>>intime;
    cout<<"請輸入入住天數: "; cin>>days;
    for(i=0;i<Room_count;i++)
    {
        if(number==r[i]->InputNumber())
        {
            WriteGuest(new Guest(number,name,id,sex,intime,days));
            r[i]->SetWether("有");
            WriteData(1);
            cout<<"住房登記成功!"<<endl; 
        }
     } 
} 
int Manage::Payment()//退房結賬 
{
    ReadData();
    Display(2);
    int number;
    cout<<"請輸入房號: ";        cin>>number;
    for(i=0;i<Guest_count;i++)
    {
        if(number==g[i]->InputNumber())
        {
            return i;
        }
     } 
} 
void Manage::Check_Out()
{
    int x=Payment();
    ReadData();
    for(i=0;i<Room_count;i++)
    {
        if(g[x]->InputNumber()==r[i]->InputNumber())
        {
            r[i]->SetWether("無");
            cout<<"退房成功,您一共消費了 "<<g[x]->InputDays() *r[i]->InputPrice()<<" 元"<<endl; 
            WriteData(1);
        }    
     } 
    g[x]=NULL;
    WriteData(2);
}
void Manage::Display(int n)//瀏覽所有房間資訊 
{
    ReadData();
    switch(n){
    case 1:
        for(i=0; i<Room_count-1; i++)
        {
            cout<<"房號:"<<r[i]->InputNumber()<<"t房間型別: "<<r[i]->InputType()<<"t房間價格: "<<r[i]->InputPrice()<<"t房間狀態: "<<r[i]->InputWhether()<<endl<<endl; 
        } break;
    case 2:
        for(i=0;i<Guest_count-1;i++)
        {
            cout<<"房間號: "<<g[i]->InputNumber()<<"t顧客姓名: "<<g[i]->InputName()<<"t身份證號: "<<g[i]->InputId()<<"t顧客性別:"<<g[i]->InputSex()<<"t入住時間: "<<g[i]->InputIntime()<<"t入住天數: "<<g[i]->InputDays()<<endl<<endl; 
        } break;
    }
}
void Manage::ReadData()
{
    fstream Rin,Gin;
    Rin.open("room.txt",ios::in);//開啟檔案 
    if(!Rin)
    {
        cout<<"未找到room檔案,請先建立檔案!"<<endl;
        return;
    }
    Room_count=0;
    while(!Rin.eof()){
        string type,Whether;
        double price;
        int number;
        Rin>>number>>type>>price>>Whether;
        r[Room_count++]=new Room(number,type,price,Whether);
    }
    Rin.close();//關閉檔案 
    Gin.open("guest.txt",ios::in);
    if(!Gin)
    {
        cout<<"未找到guest檔案,請先建立檔案!"<<endl;
        return;    
    }
    Guest_count=0;
    while(!Gin.eof()){
        string name,intime,sex;
        int days,number;
        int id;
        Gin>>number>>name>>id>>sex>>intime>>days;
        g[Guest_count++]=new Guest(number,name,id,sex,intime,days);
    }
    Gin.close();
}
void Manage::WriteData(int n)
{
    switch(n)
    {
        case 1:
        {
        ofstream Rout("room.txt",ios::trunc); //用二進位制的方法開啟顧客檔案 ,覆蓋掉之前的所有資訊重新寫入 
        for(i=0; i<Room_count-1; i++) //根據顧客數量判斷輸入幾組資訊 
        {
            if(r[i]!=NULL)
            {
                WriteRoom(r[i]);//呼叫建構函式來建立顧客資訊 
            }
        }
        Rout.close(); break;}
        case 2:{
        ofstream Gout("guest.txt",ios::trunc); //用二進位制的方法開啟顧客檔案 ,覆蓋掉之前的所有資訊重新寫入 
        for(i=0; i<Guest_count-1; i++) //根據顧客數量判斷輸入幾組資訊 
        {
            if(g[i]!=NULL)
            {    
                WriteGuest(g[i]);//呼叫建構函式來建立顧客資訊 
            }
        }
        Gout.close();break;}
    }
} 
void Manage::WriteRoom(Room *r)//儲存單個資訊 
{
    ofstream Rout("room.txt",ios::app);//開啟房間檔案,追加讀寫,不會覆蓋掉之前的所有資訊 
    Rout<<r->InputNumber()<<"t"<<r->InputType()<<"t"<<r->InputPrice()<<"t"<<r->InputWhether()<<endl;
    Rout.close();
}
void Manage::WriteGuest(Guest *g)//儲存單個資訊 
{
    ofstream Gout("guest.txt",ios::app);//開啟顧客檔案,追加讀寫,不會覆蓋掉之前的所有資訊 
    Gout<<g->InputNumber()<<"t"<<g->InputName()<<"t"<<g->InputId()<<"t"<<g->InputSex()<<"t"<<g->InputIntime()<<"t"<<g->InputDays()<<endl;
    Gout.close();
}
void Manage::SearchType()
{
    ReadData();
    for(i=0;i<Room_count;i++)
    {
        if(r[i]->InputWhether()=="無")
            { 
            r[i]->show();}
        }    
}
void Manage::SearchNumber()
{
    ReadData();
    int number,n;
    cout<<"請輸出要查詢的房間號: "; cin>>number;
    for(i=0;i<Room_count-1;i++)
    {
        if(number==r[i]->InputNumber())
            r[i]->show();
        }
    for(i=0;i<Guest_count-1;i++)
    {
        if(g[i]->InputNumber()==number)
            g[i]->show();
        }    
}
int main()
{
    Manage M;
    int n;
    while(1)
    {
        system("cls");    
        cout<<endl<<endl<<endl<<"ttt賓 館 房 間 管 理 系 統     "<<endl<<endl;
        cout<<"ttt1、房 間 信 息 的 錄 入"<<endl<<endl;
        cout<<"ttt2、顧 客 入 住 房 間 登 記"<<endl<<endl;
        cout<<"ttt3、顧 客 退 房 結 賬"<<endl<<endl;
        cout<<"ttt4、所 有 房 間 信 息 顯 示"<<endl<<endl;
        cout<<"ttt5、所 有 顧 客 的 顯 示"<<endl<<endl;
        cout<<"ttt6、查 詢 所 有 空 房 間"<<endl<<endl;
        cout<<"ttt7、查 詢 指 定 的 房 間 號"<<endl<<endl;
        cout<<"ttt8、退 出 系 統"<<endl<<endl;
        cout<<endl<<"請選擇:  ";
        cin>>n; 
        cout<<endl<<endl;
        switch(n)
        {
            case 1:M.IncreaseRoom();getch();break;
            case 2:M.Check_In();getch();break;
            case 3:M.Check_Out();getch();break;
            case 4:M.Display(1);getch();break;
            case 5:M.Display(2);getch();break;
            case 6: M.SearchType();getch();break;
            case 7: M.SearchNumber();getch();break;    
            case 8:exit(0);    
        }         
    }
    return 0;
 } 

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援it145.com。


IT145.com E-mail:sddin#qq.com