【C++例程】:宾馆客房管理系统

news/2024/7/20 4:24:27 标签: c++, java, 开发语言, 小程序

目录

  • 宾馆客房管理系统
    • 1 设计思路及总体设计
    • 2 订房功能的c++实现:
  • 3 入住登记功能的c++实现:


宾馆客房管理系统

1 设计思路及总体设计

通过对c++课程的学习,我了解到了其面向对象的高级特性,我决定使用它实现一个宾馆客房管理系统,模拟一个实际宾馆客房系统的运行,下面我就将这个系统的实现思路说明一下。
作为一个宾馆客房间管理系统,必然涉及到客房对象,顾客对象等实体。这个系统我设置了80个房间,其中房间分四个等级,每个等级的价格是不一样的,可以通过房间编号得到房间的等级。然后就是房间的分配问题,就是当有顾客要求定房或入住时,我的程序能够根据用户要求入住的等级到相应等级的房间中去查找一个还没有预定的房间和一个没有入住的空闲房间。
当启动程序后,在windows平台下都是从main函数开始运行的,程序首先调用initial_room函数初始化80个房间的信息,包括房间编号,房间等级,房间价格,房间状态。其中房间编号和房间等级有直接联系,只要知道了房间编号就可以通过计算得到该房间的等级,房间状态初始化时等于0,表示该房间既没有被预定,也没有被入住。然后调用welcome函数,考虑到作为一个宾馆管理系统的安全性,对操作本系统的人员也要求认证的,其中在本函数中就要求只有通过输入了正确的用户名和密码才能操作系统哦!当通过登陆认证后,就进入宾馆管理系统了,在这里,系统给操作员显示一个操作菜单如:1->定房 2->入住 3->退房 4->查询,当操作员选择不同的数字就实现不同的功能。而这些功能的具体实现我就在详细设计中一一介绍了。

主函数流程图
在这里插入图片描述

主函数实现代码:

void main()			//程序入口从这里开始运行
{
 char choice='1';
 initial_room();	//初始化80个房间的信息,分四个等级
 welcome();			//验证用户登陆,登陆成功显示欢迎信息
 
 while(choice=='1')
 {
  enter();   //根据用户的选择执行不同的功能
  cout<<endl;
  cout<<"继续使用本系统请按\"1\",退出请按\"2\"!  ";
  cin>>choice;
  cout<<endl;
 }
}

2 订房功能的c++实现:

作为一个宾馆管理系统,顾客可以提前到宾馆进行房间的预定,操作员能根据用户的需求查询到适合顾客的房间。在这个系统中,这个功能是在book_room函数中实现的,其流程图如下所示。首先,构造一个顾客对象,然后设置该顾客预定客房的天数,设置顾客预定客房标准,根据用户需要的客放标准到相应的标准客房去查找一个一个既没有被预定也没有入住的房间,然后把该住房对象结构体的状态修改为已预定状态,同时将顾客对象的预定房间号属性,也将住房费用计算出来并显示到界面上,最后将住房顾客数家1。

订房功能流程图
在这里插入图片描述

订房功能c++代码实现:

void book_room()
{
 customer[i]=new Customer;
 int room_standard,day;
 cout<<"请您选择预定房间的标准:\n"; 
 cout<<"1.单人间/天150元\n2.双人间/天200元\n3.标准间/天300元\n4.总统套房/天600元\n"; 
 cin>>room_standard; 
 cout<<"请输入预定天数\n"; 
 cin>>day; 
 customer[i]->set_day(day);
 switch(room_standard) 
 { 
  int n;
 case 1:
  cout<<"住房费用总共为: "<<day*150<<"元\n";		//计算住房费用
  for(n=0;n<20;n++)			//从第一个级别的房间中查找一个空闲的房间
  {
   if(room[n].state==0)		//state=0表示该住房没有被预定的
   {
    cout<<"预定成功★房间号码为: "<<room[n].number<<endl;
                room[n].state=1;
    customer[i]->set_room_number(room[n].number);
    break;
   }
  }
  break; 
 case 2:
  cout<<"住房费用总共为: "<<day*200<<" 元\n"; 
  for(n=20;n<40;n++)
  {
   if(room[n].state==0)
   {
    cout<<"预定成功★房间号码为: "<<room[n].number<<endl;
                room[n].state=1;
    customer[i]->set_room_number(room[n].number);
    break;
   }
  }
  break; 
 case 3:
  cout<<"住房费用总共为: "<<day*300<<" 元\n"; 
  for(n=40;n<60;n++)
  {
   if(room[n].state==0)
   {
    cout<<"预定成功★房间号码为: "<<room[n].number<<endl;
                room[n].state=1;
    customer[i]->set_room_number(room[n].number);
    break;
   }
  }
  break; 
 case 4:
  cout<<"住房费用总共为: "<<day*600<<"元\n"; 
  for(n=60;n<80;n++)
  {
   if(room[n].state==0)
   {
    cout<<"预定成功★房间号码为: "<<room[n].number<<endl;
                room[n].state=1;
    customer[i]->set_room_number(room[n].number);
    break;
   }
  }
  break;   
 }  
 i++;  //住房的顾客数加1
}

3 入住登记功能的c++实现:

这个功能是在函数check_in中实现的,程序首先判断顾客是否订房了,如果预定了房间,则要求输入顾客姓名和身份证号码,然后在所有的顾客中去查找此姓名和身份证号码的顾客,如果匹配了就取得其住房编号,然后根据住房编号计算出该住房的标准,再根据该顾客要求预定住房的天数和该住房标准的价格计算出该顾客要缴纳的房费,同时显示到界面上,这时操作员对顾客进行收费,同时设置顾客的住房费用属性,将该住房的状态修改为以入住状态(state=2);如果顾客没有来得及先预定房间,在这里可以实现先查找空房再入住的功能,同预定房间功能一样,先建立一个顾客对象代表即将入住的顾客,然后设置入住天数,选择住房标准,根据住房标准查询到一个空房,然后设置顾客的住房房间属性,同时直接修改该房间的状态为已入住状态,计算好要收的房费直接执行收费了,将顾客数加1。

入住登记功能流程图
在这里插入图片描述

入住登记c++代码实现:

void check_in()
{
    char name1[10],id1[19];
 int ding_or_no,prepaid;
 cout<<"该顾客订房了吗? (1->订了  2->没订) ";
 cin>>ding_or_no;
 if(ding_or_no==1)
 {
  cout<<"请输入顾客的姓名:"<<endl;
  cin>>name1;
  cout<<"请输入顾客的身份证号码:"<<endl;
  cin>>id1;
  for(int j=0;j<=i;j++)
  {
   if((strcmp(customer[j]->get_name(),name1)==0)&&(strcmp(customer[j]->get_ID(),id1)==0))  //查找该顾客的定房信息
   {
    int num=customer[j]->get_room_number();  //取得定房的房间号
    cout<<"顾客"<<name1<<"今天入住本宾馆! 房间号码为: "<<num<<endl;
    switch(num/100)
    {
    case 6:
     prepaid=customer[j]->get_day()*150;
     customer[j]->set_prepaid(prepaid);
     cout<<"请收房费 "<<prepaid<<"元整!"<<endl; //开始收费
     room[num%100-1].state=2;                  //修改房间状态为入住状态
     break;
    case 7:
     prepaid=customer[j]->get_day()*200;
     customer[j]->set_prepaid(prepaid);
     cout<<"请收房费 "<<prepaid<<"元整!"<<endl;
     room[19+num%100].state=2;
     break;
    case 8:
     prepaid=customer[j]->get_day()*300;
     customer[j]->set_prepaid(prepaid);
     cout<<"请收房费 "<<prepaid<<"元整!"<<endl;
     room[39+num%100].state=2;
     break;
    case 9:
     prepaid=customer[j]->get_day()*600;
     customer[j]->set_prepaid(prepaid);
     cout<<"请收房费 "<<prepaid<<"元整!"<<endl;
     room[59+num%100].state=2;
     break;
     
    }
    break;
   } 
  }
  
  
 } 
 else
 {
  customer[i]=new Customer;
  int room_standard,day;
  cout<<"请您选择预定房间的标准:\n"; 
  cout<<"1.单人间/天150元\n2.双人间/天200元\n3.标准间/天300元\n4.总统套房/天600元\n"; 
  cin>>room_standard; 
  cout<<"请输入住宿天数\n"; 
  cin>>day; 
  customer[i]->set_day(day);
  switch(room_standard) 
  { 
   int n;
  case 1:
   prepaid=day*150;
   customer[i]->set_prepaid(prepaid);
   cout<<"请收房费 "<<prepaid<<"元整!\n"; 
   for(n=0;n<20;n++)
   {
    if(room[n].state==0)
    {
     cout<<"入住房间号码为: "<<room[n].number<<endl;
     room[n].state=2;
     customer[i]->set_room_number(room[n].number);
     break;
    }
   }
   break; 
  case 2:
   prepaid=day*200;
   customer[i]->set_prepaid(prepaid);
   cout<<"请收房费 "<<prepaid<<"元整!\n"; 
   for(n=20;n<40;n++)
   {
    if(room[n].state==0)
    {
     cout<<"入住房间号码为: "<<room[n].number<<endl;
     room[n].state=2;
     customer[i]->set_room_number(room[n].number);
     break;
    }
   }
   break; 
  case 3:
   prepaid=day*300;
   customer[i]->set_prepaid(prepaid);
   cout<<"请收房费 "<<prepaid<<"元整!\n"; 
   for(n=40;n<60;n++)
   {
    if(room[n].state==0)
    {
     cout<<"入住房间号码为: "<<room[n].number<<endl;
     room[n].state=2;
     customer[i]->set_room_number(room[n].number);
     break;
    }
   }
   break; 
  case 4:
   prepaid=day*600;
   customer[i]->set_prepaid(prepaid);
   cout<<"请收房费 "<<prepaid<<"元整!\n"; 
   for(n=60;n<80;n++)
   {
    if(room[n].state==0)
    {
     cout<<"入住房间号码为: "<<room[n].number<<endl;
     room[n].state=2;
     customer[i]->set_room_number(room[n].number);
     break;
    }
   }
   break;   
  }  
  i++;
 }
}

http://www.niftyadmin.cn/n/187523.html

相关文章

力扣sql简单篇练习(二十八)

力扣sql简单篇练习(二十八) 1 上级领导已离职的公司员工 1.1 题目内容 1.1.1 基本题目信息 1.1.2 示例输入输出 1.2 示例sql语句 # Write your MySQL query statement below SELECT e1.employee_id FROM (SELECT employee_id,manager_idFROM EmployeesWHERE salary<3000…

1MORE Aero荣获《RollingStone》2023滚石音频奖最佳降噪耳机

近日&#xff0c;老牌音乐媒体《RollingStone》&#xff08;滚石&#xff09;发布了2023年滚石音频奖。万魔科技旗下的1MORE Aero凭借出众的降噪性能、创新的空间音频技术和独特外观设计&#xff0c;在数百款产品中脱颖而出&#xff0c;被《RollingStone》授予2023年滚石音频器…

新探索研究生英语读写教程

词汇题&#xff08;55道&#xff09; 1. You should carefully think over_____ the manager said at the meeting. A. that B. which C. what D. whose 1.选C,考察宾语从句连接词&#xff0c;主句谓语动词think over后面缺宾语&#xff0c;后面的宾语从句谓语动…

数字图像处理简答题

目录 1、图像可广义上分为哪两类&#xff1f;各有什么特点&#xff1f; 2、简述连续图像&#xff08;模拟图像&#xff09;与数字图像的转换过程&#xff1f; 3、数字图像处理的特点有哪三种&#xff1f; 4、谈谈智能手机中哪些功能使用了图像处理技术&#xff1f; 1、图像可…

GPT4国内镜像站

GPT-4介绍GPT-4是OpenAI发布的最先进的大型语言模型&#xff0c;是ChatGPT模型的超级进化版本。与ChatGPT相比&#xff0c;GPT-4的推理能力、复杂问题的理解能力、写代码能力得到了极大的强化&#xff0c;是当前人工智能领域&#xff0c;最有希望实现通用人工智能的大模型。但G…

梦的解析 —— 周公版,包括【周公解梦】在内的超多免费可用 API 推荐(二)

写在前面 梦是人们日常生活中经常出现的现象&#xff0c;人们对梦的解析一直是一个重要的研究领域。周公解梦是中国古代传统文化中的一部分&#xff0c;它对于梦的解析提供了很多有价值的参考&#xff0c;成为了梦解释的重要参考工具之一。 现代科技的发展使得周公解梦的应用…

【蓝桥杯-筑基篇】动态规划

&#x1f353;系列专栏:蓝桥杯 &#x1f349;个人主页:个人主页 目录 1.最大连续子段和 2.LCS 最大公共子序列 3.LIS 最长上升子序列 4.数塔 5.最大子矩阵和 6.背包问题 ①01背包问题 ②完全背包 1.最大连续子段和 这段代码是一个求最大子数组和的算法&#xff0c;使用…

【需求分析】到【技术文档】实录

1. 需求背景 1. 文档:我要在ddyy首页,美食分类tab下做一个活动,活动期间有严格时间限制,比如从7.01号-7.18号23:59:59是活动期,需要透出大促期间的活动feed;大促结束后需要下线活动feed,同时美食分类tag下展示日常feed; 2. 需求目标:提高ddyy的GMV收入;引导用户在ddy…