C++课程设计(简单宾馆客房间管理系统)

来源:互联网 发布:淘宝网创始人有多少人 编辑:程序博客网 时间:2024/04/30 13:48

初学c++,这只是一次作业。


设计思路及总体设计

通过对c++课程的学习,我了解到了其面向对象的高级特性,我决定使用它实现一个宾馆客房管理系统,模拟一个实际宾馆客房系统的运行,下面我就将这个系统的实现思路说明一下。

作为一个宾馆客房间管理系统,必然涉及到客房对象,顾客对象等实体。这个系统我设置了80个房间,其中房间分四个等级,每个等级的价格是不一样的,可以通过房间编号得到房间的等级。然后就是房间的分配问题,就是当有顾客要求定房或入住时,我的程序能够根据用户要求入住的等级到相应等级的房间中去查找一个还没有预定的房间和一个没有入住的空闲房间。

当启动程序后,在windows平台下都是从main函数开始运行的,程序首先调用initial_room函数初始化80个房间的信息,包括房间编号,房间等级,房间价格,房间状态。其中房间编号和房间等级有直接联系,只要知道了房间编号就可以通过计算得到该房间的等级,房间状态初始化时等于0,表示该房间既没有被预定,也没有被入住。然后调用welcome函数,考虑到作为一个宾馆管理系统的安全性,对操作本系统的人员也要求认证的,其中在本函数中就要求只有通过输入了正确的用户名和密码才能操作系统哦!当通过登陆认证后,就进入宾馆管理系统了,在这里,系统给操作员显示一个操作菜单如:1->定房  2->入住  3->退房  4->查询,当操作员选择不同的数字就实现不同的功能。而这些功能的具体实现我就在详细设计中一一介绍了。




完整代码如下:

#include<iostream.h> 

#include<string.h>

//***********************************************************************************

void initial_room(); //初始化80个房间信息

void welcome(); //验证用户登陆,登陆成功显示欢迎信息

void enter();

void book_room();

void check_in();

void check_out();

void inquire();

int i=0;

//***********************************************************************************

struct Room  

{

 int number;

 int dank;

 int price;

 int state; 

};

class Customer  

{

public:

 Customer();

 

 void set_name(char *n){strcpy(name,n);}

 void set_ID(char *p){strcpy(ID,p);}

 void set_room_number(int n){room_number=n;}

 void set_day(int d){day=d;}

 void set_prepaid(int p){prepaid=p;}

 char *get_name(){return name;}

 char *get_ID(){return ID;}

 int  get_room_number(){return room_number;}

 int  get_day(){return day;}

 int  get_prepaid(){return prepaid;} 

 

 virtual ~Customer();

private: 

 char name[10],ID[19]; 

 int  room_number;

 int  prepaid;

 int  change;

 int  day;

};

Customer::Customer()

{

 cout<<"请您输入顾客的姓名\n";

 cin>>name;

 cout<<"请您输入顾客的身份证号码\n"; 

 cin>>ID; 

 prepaid=change=day=0;

}

Customer::~Customer()

{

 cout<<"该顾客退房成功!"<<endl;

}

//***********************************************************************************

Room room[80];

Customer *customer[80];

void main() //程序入口从这里开始运行

{

 char choice='1';

 initial_room(); //初始化80个房间的信息,分四个等级

 welcome(); //验证用户登陆,登陆成功显示欢迎信息

 

 while(choice=='1')

 {

  enter();   //根据用户的选择执行不同的功能

  cout<<endl;

  cout<<"继续使用本系统请按\"1\",退出请按\"2\"!  ";

  cin>>choice;

  cout<<endl;

 }

}

//系统登陆界面***********************************************************************

void welcome() //验证用户登陆,登陆成功显示欢迎信息

{

 char name[4],code[7];

 cout<<"请输入用户名和密码(以空格隔开):\n"; 

 cin>>name>>code;

 while((strcmp(name,"000")!=0)||(strcmp(code,"666666")!=0))

 {

  cout<<"用户名或密码输入有误,请重新输入!\n";

  cin>>name>>code;

 }

 cout<<endl;

 cout<<endl;

 cout<<"                      ***************************\n"; 

 cout<<"                           △ 欢迎使用***系统!\n"; 

 cout<<"                      ***************************\n"; 

 cout<<endl;

}

//系统入口***************************************************************************

void enter()

{

 int kind_of_service;

 cout<<"请选择服务类别:订房、入住、退房还是查询? \n"; 

 cout<<" 1->定房  2->入住  3->退房  4->查询:  ";

 cin>>kind_of_service; 

 if((kind_of_service>4) || (kind_of_service<1)) 

 {

  cout<<"您的输入有误,请重试!\n"; 

  cin>>kind_of_service;

 } 

 else 

  switch(kind_of_service) 

 {

case 1: book_room();

 break;

case 2: check_in();

 break;

case 3: check_out();

 break;

case 4: inquire();

 break;

 } 

}

//订房实现***************************************************************************

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

}

//入住登记***************************************************************************

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++;

 }

}

//退房结算***************************************************************************

void check_out()

{

 char name2[10],id2[19];

 int standard,j,room_number,day1,day2,day;

 cout<<"请输入要退房的顾客姓名和身份证号码:\n";

 cin>>name2>>id2; 

 cout<<"请输入该顾客实住天数:\n"; 

 cin>>day2; 

 for(j=0;j<i;j++)

 {

  if((strcmp(customer[j]->get_name(),name2)==0)&&(strcmp(customer[j]->get_ID(),id2)==0))

  {

   room_number=customer[j]->get_room_number();

   standard=room_number/100; 

   day1=customer[j]->get_day();

   day=day1-day2;

   switch(standard) 

   {

   case 6: 

    cout<<"顾客的房间号是"<<room_number<<" :为单人间,每天150\n";

    cout<<"该顾客预付了房费 "<<customer[j]->get_prepaid()<<"实际消费 "<<day2*150<<"元整!\n";

    cout<<endl;

    if(day>0)

     cout<<"请退给该顾客 "<<day*150<<" 元整!\n"; 

    if(day<0)

     cout<<"请补收该顾客住房费 "<<-day*150<<" 元整!\n";

    break; 

   case 7:

    cout<<"顾客的房间号是"<<room_number<<" :为单人间,每天200\n";

    cout<<"该顾客预付了房费 "<<customer[j]->get_prepaid()<<"实际消费 "<<day2*200<<"元整!\n";

    cout<<endl;

    if(day>0)

     cout<<"请退给该顾客 "<<day*200<<" 元整!\n"; 

    if(day<0)

     cout<<"请补收该顾客住房费 "<<-day*200<<" 元整!\n";

    break; 

   case 8:

    cout<<"顾客的房间号是"<<room_number<<" :为单人间,每天300\n";

    cout<<"该顾客预付了房费 "<<customer[j]->get_prepaid()<<"实际消费 "<<day2*300<<"元整!\n";

    cout<<endl;

    if(day>0)

     cout<<"请退给该顾客 "<<day*300<<" 元整!\n"; 

    if(day<0)

     cout<<"请补收该顾客住房费 "<<-day*300<<" 元整!\n";

    break; 

   case 9:

    cout<<"顾客的房间号是"<<room_number<<" :为单人间,每天600\n";

    cout<<"该顾客预付了房费 "<<customer[j]->get_prepaid()<<"实际消费 "<<day2*600<<"元整!\n";

    cout<<endl;

    if(day>0)

     cout<<"请退给该顾客 "<<day*600<<" 元整!\n"; 

    if(day<0)

     cout<<"请补收该顾客住房费 "<<-day*600<<" 元整!\n";

    break; 

   }

   cout<<endl;

   cout<<"退房核算清楚,请按1: ";

   char account;

   cin>>account;

   if(account=='1')

   {

    for(int k=0;k<80;k++)

    {

     if(room[k].number==customer[j]->get_room_number()) 

      room[k].state=0;

    }

    i--;

    for(;j<i;j++)

    {

     customer[j]=customer[j+1];

    }

    delete customer[i];

   }

  }

 } 

}

//信息查询***************************************************************************

void inquire()

{

 char inquire_choice;

 cout<<"房间信息查询请按1, 顾客信息查询请按2: "<<endl;

 cin>>inquire_choice;

    if(inquire_choice=='1')

 {

  int j,k=0;

  cout<<endl;

  cout<<"下列房间还没人预订,也没人入住:"<<endl;

  for(j=0;j<80;j++)

  {

   if(room[j].state==0)

   {

    if(k%10==0) cout<<endl;

    cout<<room[j].number<<'\t';

    k++;

   }

  }

  cout<<endl;

  cout<<endl;

  k=0;

  cout<<"下列房间已预订:"<<endl;

  for(j=0;j<80;j++)

  {

   if(room[j].state==1)

   {

    if(k%10==0) cout<<endl;

    cout<<room[j].number<<'\t';

    k++;

   }

  }

  k=0;

  cout<<endl;

  cout<<endl;

  cout<<"下列房间有人入住:"<<endl;

  for(j=0;j<80;j++)

  {

   if(room[j].state==2)

   {

    if(k%10==0) cout<<endl;

    cout<<room[j].number<<'\t';

    k++;

   }

  }

  cout<<endl;

  cout<<endl;

 }

 else if(inquire_choice=='2')

 {

  cout<<"按姓名查询请按1, 按身份证查询请按2: "<<endl;

  char inquire_choice;

  cin>>inquire_choice;

  if(inquire_choice=='1')

  {

   char name3[10];

   cout<<"请输入顾客的姓名: "<<endl;

   cin>>name3;

   for(int j=0;j<=i;j++)

   {

    if(strcmp(customer[j]->get_name(),name3)==0)

    {

     cout<<name3<<"的住房信息如下:\n";

     cout<<'\t'<<"房间号为: "<<customer[j]->get_room_number()<<endl;

     cout<<"\t"<<"预付房费为: "<<customer[j]->get_prepaid()<<endl;

    }

   }

  }

  if(inquire_choice=='2')

  {

   char id3[10];

   cout<<"请输入顾客的姓名: "<<endl;

   cin>>id3;

   for(int j=0;j<=i;j++)

   {

    if(strcmp(customer[j]->get_ID(),id3)==0)

    {

     cout<<customer[j]->get_name()<<"的住房信息如下:\n";

     cout<<'\t'<<"房间号为: "<<customer[j]->get_room_number()<<endl;

     cout<<"\t"<<"预付房费为: "<<customer[j]->get_prepaid()<<endl;

    }

   }

  }

 }

}

//房间信息初始化*********************************************************************

void initial_room()  //80个房间进行初始化,4个等级

{

 int j,k=601;

 for(j=0;j<20;j++)

 {

  room[j].number=k++;

  room[j].dank=1;

  room[j].price=150;

  room[j].state=0;

 }

 k=701;

 for(j=20;j<40;j++)

 {

  room[j].number=k++;

  room[j].dank=2;

  room[j].price=200;

  room[j].state=0;

 }

 k=801;

 for(j=40;j<60;j++)

 {

  room[j].number=k++;

  room[j].dank=3;

  room[j].price=300;

  room[j].state=0;

 }

 k=901;

 for(j=60;j<80;j++)

 {

  room[j].number=k++;

  room[j].dank=4;

  room[j].price=600;

  room[j].state=0;

 }

}

原创粉丝点击