您的位置:首页 > 汽车 > 时评 > 珠海七中科技制作_地址定位怎么申请开通_网络seo排名_网络服务提供者知道或者应当知道

珠海七中科技制作_地址定位怎么申请开通_网络seo排名_网络服务提供者知道或者应当知道

2024/12/22 0:49:33 来源:https://blog.csdn.net/m0_67677309/article/details/143308258  浏览:    关键词:珠海七中科技制作_地址定位怎么申请开通_网络seo排名_网络服务提供者知道或者应当知道
珠海七中科技制作_地址定位怎么申请开通_网络seo排名_网络服务提供者知道或者应当知道

酒店管理系统项目:
    旅客类:
        姓名、性别、身份证号
        构造函数
        show
        setName\setSex\setId    (可选)
    房间类:
        房号、房型、房价、入住数、旅客数组
        构造函数
        入住
        退房
        show
    酒店类:(单例模式)
        层数、每层房数、房间对象(三级指针)
        构造函数    (读酒店信息文件进行构造)
        入住
        退房
        查看空房
        查询房间
        升级
    管理员类:(选做)

5   层数
4   第一层房间数
1001 2 200
1002 3 200
1003 2 200
1005 2 200
2

1.guest.h

#pragma once#include <iostream>
#include <string>
#include <fstream>using namespace std;class Guest
{string name;char sex;string id;
public:Guest(const string name="", char sex='m', const string id="") : name(name), sex(sex), id(id) {}//显示客人信息void show(){cout<<name<<" "<<sex<<" "<<id<<endl;}// friend ostream& operator<<(ostream& os, const Guest& g)// {//     return os<<g.name<<" "<<g.sex<<" "<<g.id;// }
};

2.room.h

#pragma once#include "guest.h"class Room 
{char type;short id;float price;int guest_cnt;Guest** guests;public:Room(char type, short id, float price):type(type), id(id), price(price){guests = new Guest*[100];guest_cnt = 0;}//显示房间,客人信息void show(void){cout<<id<<" "<<(int)type<<" "<<price<<endl;for(int i=0; i<guest_cnt; i++){cout<<"旅客"<<i+1<<": "<<endl;guests[i]->show();}}//运算符重载写法// friend ostream& operator<<(ostream& os, const Room& r)// {//     os<<r.id<<" "<<r.type<<" "<<r.price<<endl;//     for(int i=0; i<r.guest_cnt; i++)//     {//         os<<"旅客"<<i+1<<": "<<endl;//         os<<r.guests[i];//     }//     return os;// }bool cmp_room_id(int room_id){return id==room_id;}bool in(Guest* guest){if(guest_cnt >= type){return false;}guests[guest_cnt++] = guest;return true;}//重载==运算符,对比房号bool operator==(int room_id){return id==room_id;}//是否空房bool empty(void){return guest_cnt==0;}//退房void out(void){if(0==guest_cnt){cout<<"房间"<<id<<"已空"<<endl;}for(int i=0; i<guest_cnt; i++){delete guests[i];}guest_cnt = 0;cout<<"退房成功"<<endl;system("pause");}
};

3.hotel.h

#pragma once#include "room.h"
#include "tools.h"class Hotel
{static Hotel hotel;int level_cnt;int *level_room;Room ***rooms;Hotel(void){}Hotel(const Hotel& that){}
public:static Hotel& getHotel(void){return hotel;}void load(const char *path);    //加载房间信息void start(void);   //程序运行int menu(void);     //显示菜单并返回选择void in(void);      //入住void list(void);    //显示空房void query(void);   //查询已入住房间,房客信息void out(void);     //退房void upgrade(void); //升级房间Room *find(int room_id);    //根据房间号查找房间,因为入住或退房等都需要房间号,所以提供一个接口
};

4.hotel.cpp

#include "hotel.h"Hotel Hotel::hotel;void Hotel::load(const char *path)
{FILE *fp = fopen(path, "r");if (NULL == fp){perror("fopen");return;}fscanf(fp, "%d", &level_cnt);level_room = new int[level_cnt];rooms = new Room **[level_cnt];for (int i = 0; i < level_cnt; i++){fscanf(fp, "%d", &level_room[i]);rooms[i] = new Room *[level_room[i]];for (int j = 0; j < level_room[i]; j++){char type;short id;float price;fscanf(fp, "%hd %hhd %f", &id, &type, &price);rooms[i][j] = new Room(type, id, price);rooms[i][j]->show();}}// C++写法//  ifstream ifs(path);//  if(!ifs.good())//  {//      cout<<"errno"<<endl;//      return;//  }//  ifs>>level_cnt;//  level_room = new int[level_cnt];//  rooms = new Room **[level_cnt];//  for(int i=0;i<level_cnt;i++)//  {//      ifs>>level_room[i];//      rooms[i] = new Room *[level_room[i]];//      for(int j=0;j<level_room[i];j++)//      {//          char type;//          short id;//          float price;//          ifs>>id>>type>>price;//          rooms[i][j]=new Room(type, id, price);//      }//  }// cout<<__func__<<endl;
}void Hotel::start(void)
{while (true){switch (menu()){case '1':in(); break;case '2':query(); break;case '3':out(); break;case '4':list(); break;case '0':cout << "欢迎下次光临!" << endl;return;break;default:break;}}//cout << __func__ << endl;
}int Hotel:: menu(void) // 显示菜单并返回选择
{system("cls");cout << "***欢迎使用XXX酒店管理系统***" << endl;cout << "1.入住 2.查询" << endl;cout << "3.退房 4.查看" << endl;cout << "0.退出" << endl;return get_cmd('0','4');
}void Hotel:: in(void)
{string name,id;char sex;cout << "请输入姓名、性别、身份证号:";cin >> name >> sex >> id;Guest *guest = new Guest(name, sex, id);int room_id;cout << "请输入要入住的房间:";cin >> room_id;Room *room = find(room_id);if (room == NULL){cout << "未找到该房间:" <<room_id <<",请检查房间号"<< endl;return;}if(room->in(guest)){cout << "入住成功!" << endl;system("pause");}else{cout << "该房间已满!" << endl;delete guest;}
}
void Hotel::list(void)
{for(int i=0;i<level_cnt;i++){for(int j=0;j<level_room[i];j++){if(rooms[i][j]->empty()){rooms[i][j]->show();}}}system("pause");
}
void Hotel::query(void)
{for(int i=0;i<level_cnt;i++){for(int j=0;j<level_room[i];j++){if(!rooms[i][j]->empty()){rooms[i][j]->show();}}}system("pause");
}
void Hotel::out(void)
{int room_id;cout << "请输入要退房的房间号:";cin >> room_id;Room *room = find(room_id);if (room == NULL){cout << "未找到该房间:" << room_id << ",请检查房间号" << endl;return;}room->out();
}
void Hotel::upgrade(void)
{}
Room *Hotel::find(int room_id)
{for (int i = 0; i < level_cnt; i++){for (int j = 0; j < level_room[i]; j++){if (rooms[i][j]->cmp_room_id(room_id)){return rooms[i][j];}}}return NULL;
}

5.tools.h

#pragma once#include "hotel.h"char get_cmd(char a, char b);void anykey_continue(void);

6.tool.cpp

#include "hotel.h"char get_cmd(char a, char b) // 输入命令
{char cmd;while (true){cout << "请输入命令(1-" << b << "):";cin >> cmd;if (cmd >= a && cmd <= b){return cmd;}cout << "输入错误,请重新输入!" << endl;}
}// //按任意键继续(Linux)
// void anykey_continue(void)
// {
//     stdin->IO_read_ptr = stdin->IO_read_end;
//     cout << "按任意键继续..." << endl;
//     getch();
//     cout << endl;
// }

7.main.cpp

#include "hotel.h"int main(int argc,const char* argv[])
{if(2!=argc){cout<<"User: ./hotel [hotel_name]"<<endl;return 0;}Hotel &hotel=Hotel::getHotel();hotel.load(argv[1]);hotel.start();return 0;
}

8.hotel.txt

5   
5  
1001 2 200
1002 3 200
1003 2 200
1004 2 200
1005 2 200
6
2001 2 300
2002 3 300
2003 2 300
2004 2 300
2005 2 300
2006 2 300
7
3001 3 400
3002 3 400
3003 3 400
3004 3 400
3005 3 400  
3006 3 400
3007 3 400
8
4001 4 500
4002 4 500
4003 4 500
4004 4 500
4005 4 500
4006 4 500
4007 4 500
4008 4 500

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com