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

📄 hotelmuanul.cpp

📁 偶的个人简单客房管理系统 它有密码功能. 可以快速让顾客预定房间,查询空房,退房等
💻 CPP
字号:

#include <iostream.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h>
#include <ctime>
#define  N 500
#define  TRUE 1
#define  FALSE 0

 /*定义顾客结构体*/
typedef struct Passenger   
{ 
	char name[10];      //姓名
    int  roomNO[20];    //房号
	int  price[5];      //各等级房间价格
	int  remain[5];     //各等级空房间数
	void PassWord();    //系统密码
	void order();       //预定
	void del();         //取消预定
	void addnum(Passenger*);
	void pgsearch();
	void query_remain();//按空余房间查询
	void query_price(); //按各等级价格查询
	void display();     //浏览预定储存信息
}   PG;

     /*结构体成员赋值*/
int  price[5]={500,300,150,100,50};  //各等级价格
int  remain[5]={100,100,100,100,100};//各级房间初始剩余数
int  A=500,B=400,C=300,D=200,E=100;  //计算门牌号

static int  p=0;
static int  TOTAL=0;                 //统计人数(全局变量)
       char line[10];

PG gesters[N];                       //结构体变量gesters数组


  /*加密函数*/
void PassWord()
{ 
    int  i,m=0;
	char x[1][6]={'t','a','n','g','s','h'};//密码
    char w[1][7];
	cout<<"\t>>>>>>>欢迎进入客房服务终端<<<<<<<<\n\n";
	cout<<"请输入系统管理密码:(6位数,数字或大小写字母)"<<endl;
 to1:	for(i=0;i<7;i++)               //输入密码
	{
		w[0][i]=getch();
		if(  ((w[0][i]>='0')&&(w[0][i]<='9')
			||(w[0][i]>='a')&&(w[0][i]<='z')
			||(w[0][i]>='A')&&(w[0][i]<='Z'))&&(i!=6))
		printf("*");	              //输出"*"覆盖密码原值
		else if(i!=6)
			goto to2;
	}
    if((x[0][0]!=w[0][0])||(x[0][1]!=w[0][1])//输入密码若不正确
		||(x[0][2]!=w[0][2])||(x[0][3]!=w[0][3])
		||(x[0][4]!=w[0][4])||(x[0][5]!=w[0][5]))
	{
   to2:   m++;
		if(m==3)      //输入超过3次,自动关闭应用程序
		{
            printf("\n\t\t你输入密码已超过三次, 程序自动关闭!\n");
		    exit(0);
		}
        printf("\n\n\t密码错误,请重试.....\n");
  goto to1;           //密码错误未超过3次,重新输入

	}
	cout<<"\n通过密码验证,程序启动!\n\n";	 
	system("cls");        //清屏
}

  /*预定房间*/
void order()
{
loop1:	FILE *fp;
	PG g;//定义结构体Passengers变量
	if(p==0)//判断是否为结构体数组的第一个变量信息
	{
		if((fp=fopen("roombook.txt","w"))==NULL)//写入方式打开文件
		{
		   cout<<"\t创建存档文件失败!"<<endl;
		   return;
		}
		p++;
	}
	else   //非结构体数组第一个变量信息
	{
	    if((fp=fopen("roombook.txt","ab+"))==NULL)//追加方式打开文件
		{
		    cout<<"\t不能够打开这个文件\n";
		    return;
		}
	}
	system("cls");
	cout<<"\n\n\n>>>>>>>>>>>>>欢迎顾客光临<<<<<<<<<<<<<<\n\n";//输入顾客信息
    int  region,count=0,total,j=0;
 	int  q=1,w;
	char k,u;	
	char c='y';
	TOTAL++;
	cout<<"请您输入性别:(m(男)/f(女))\n"; //判断性别
	cin>>k;
  loop2:{
		   if(k=='m'||k=='M')
			  w=1;                           //1为男性                                   
		   else if(k=='f'||k=='F')
			  w=2;                           //2为女性
		   else                              
		   {
			  cout<<"性别输入出错,请重试 !\n\n";
			  cin>>k;
			  goto loop2;                   //出错处理
			} 
		}
	if(w==1)         
	   cout<<"\n 先生,请输入您的姓名:\n";
    else
	   cout<<"\n 女士,请输入您的姓名:\n";
	cin>>g.name ;                       //输入姓名
	for(;;)
	{
		int i=0, u ,back=0;    	
 loop3:	cout<<"请问您想购买哪总等级的房间";
		cout<<"(1:A等 2:B等 3:C等 4:D等 5:E等)\n";
		cin>>line[0];                 //输入订房等级
		region = line[0];          
		if(region>'5'||region<'1')//判断等级正确性
		{
			cout<<"\n输入出错,请重试 !\n\n";
			continue;
		}
		region=region-48;
		if(remain[region-1]<1)      //判断空余房间数
		{
			cout<<"该等级客房已售完 !\n";
			continue;
		}
		
		cout<<"\n您需要订几间房 ?\n";//询问开取房间数
		cin>>line;
		count=atoi(line);
		if(count>remain[region-1])   //判断所需房间数是否充足
		{
			cout<<"房间数量不够 !\n";
			continue;
		}
		if(count<1)
		{
			cout<<"\n输入数量出错 ! 请重试\n\n";//数值过大处理
			continue;
		}
		remain[region-1]=remain[region-1]-count;//计数剩余房间数
        total=count*price[region-1];            //计算金额
		if(w==1)
			printf("\n  %s 先生,你已经预定了%c 等级的房间 ",&g.name,region+64);
		else
			printf("\n  %s 女士,你已经预定了%c 等级的房间 ",&g.name,region+64);
		cout<<count<<" 间,门牌号是:\n\n";
		for(i=back,u=0;i<count+back;i++)       //记录并输出顾客开取房间号码
			{
				if(region == 1)     //若为A等房
				{
					A+=1;
					cout<<'\t'<<A;
					g.roomNO[i]=A;
				}
				else if(region == 2)//若为B等房
				{
					B+=1;
					cout<<'\t'<<B;
					g.roomNO[i]=B;
				}
				else if(region == 3)//若为C等房
				{
                    C+=1;
					cout<<'\t'<<C;
					g.roomNO[i]=C;					
				}
				else if(region == 4)//若为D等房
				{
					D+=1;
					cout<<'\t'<<D;
					g.roomNO[i]=D;					
				}
				else               //若为E等房
				{
					E+=1;
					cout<<'\t'<<E;
					g.roomNO[i]=E;							
				}
				u++;
				if(u%6==0)        //每行输出6个号
					cout<<'\n';
				
		}back+=count;      //判断重复预定时补录门牌号
		cout<<"\n\n\t您本次应付的总金额为"<<total<<"元。"<<endl;//输出金额
        cout<<"\n\t您的预订成功,欢迎光临本宾馆 !\n";
		cout<<"\n\n请问是否继续预订?(y/n)\n";
		cin>>c;
		if(c=='y'||c=='Y')
		{
			goto loop3;//若重复预定房间
		    
		}
		else
			break; //不重复预定时跳出while()循环  
	}
	if(p==1)//如输入的为第一个信息,把信息赋给gesters[0]
	{
		strcpy(gesters[0].name,g.name);
		for(int j=0;j<20;j++)
		{
			gesters[0].roomNO[j]=g.roomNO[j];
		}
        fwrite(&gesters,sizeof(struct Passenger),1,fp);//读入磁盘
		p++;//描述使第一个信息不被覆盖判断
		fclose(fp);
	}
	else//如不是第一个输入信息
	{
	    fwrite(&g,sizeof(struct Passenger),1,fp);//以添加形式读入磁盘
		rewind(fp);
		fclose(fp);
    }
	cout<<"还需添加新的客户信息吗?(y/n)\n";
	cin>>u;
	if(u=='y'||u=='Y')
		goto loop1;	//添加新的顾客信息
}

  /*显示预定的客户信息*/
void display()
{
	FILE *fp;
	if((fp=fopen("roombook.txt","r"))==NULL)//读出形式打开文件
	{
		cout<<"文件打开失败,无法读取数据!"<<endl;
        return;
	}
	if(TOTAL==0)        //判断是否为空文件
	{
		p=0;
		cout<<"\n很抱歉,列表中没有可遍历的顾客信息!\n";
		return;
	}
	cout<<"客房预定情况如下:\n\t姓名\t房间号\n";//不为空时输出所有信息
	for(int j=0;(fread(&gesters[j],sizeof(struct Passenger),1,fp))!=0,j<=TOTAL;j++)
	{			   
	    cout<<'\n'<<'\t'<<gesters[j].name<<'\t';//姓名
	    for(int i=0,w=1;i<20&&gesters[j].roomNO[i]>100&&gesters[j].roomNO[i]<600;i++,w++)
		{
			cout<<gesters[j].roomNO[i]<<'\t';//房间号
		    if(w%6==0)
			cout<<"\n\t\t";
		}
	}
	fclose(fp);
}

  /*工具函数*/
void addnum(PG ad)   //返回因被删除顾客占用的房间号
{
	for(int j=0;ad.roomNO[j]>=100&&ad.roomNO[j]<=600;j++)
	{
		if(ad.roomNO[j]>100&&ad.roomNO[j]<=200)//若为E等房
		{
			remain[4]=remain[4]+1;           //空房间数加1
		}
		if(ad.roomNO[j]>200&&ad.roomNO[j]<=300)//若D为等房
		{
			remain[3]=remain[3]+1;
		}
		if(ad.roomNO[j]>300&&ad.roomNO[j]<=400)//若为C等房
		{
			remain[2]=remain[1]+1;
		}
		if(ad.roomNO[j]>400&&ad.roomNO[j]<=500)//若为B等房
		{
			remain[1]=remain[4]+1;
		}
		if(ad.roomNO[j]>500&&ad.roomNO[j]<=600)//若为A等房
		{
			remain[0]=remain[0]+1;
		}
	}
}

  /*删除客户预定资料*/
void del()
{
	FILE *fp;
	int  T;
	char delname[10],c='y';	
	if((fp=fopen("roombook.txt","w"))==NULL)
	{
		cout<<"\n信息文件打开失败 !"<<endl;
		return;
	}
    while(c=='y'||c=='Y')
	{
		cout<<endl;
		display();//每次删除前遍历订房信息
		if(TOTAL==0)
		{
			p=0;
			system("cls");
			cout<<"\n\t------->无效删除,系统自动返回上级:\n";
			break;
		}
	   cout<<"\n\n请输入要取消的订户姓名 :"<<endl;
 	   cin>>delname;//输入目标删除姓名
	   for(int i=0;i<=TOTAL;i++)
	   {
		  T=TOTAL;
		if(strcmp(gesters[i].name,delname)==0)
		{
			addnum(gesters[i]);//运行工具函数,释放被占房间
			TOTAL--;
			for(;(gesters[i].name)!=NULL;i++)
			{
				for(;i<=TOTAL;i++)
				gesters[i]=gesters[i+1];//跳过被删除信息节点
				
			}
			cout<<"\n删除成功!\n";
			
		}fwrite(&gesters,sizeof(struct Passenger),TOTAL,fp);
		                                //刷新信息
		
	}
	 if(TOTAL==T)//如若总数不变(即没被删除)时处理
		cout<<"\n查无此顾客 !"<<endl;
	cout<<"\n是否继续?(y/n)\n";
	cin>>c;
    }
	fclose(fp);
}

  /*客户查询函数(按姓名查询)*/
void pgsearch()
{
	FILE *fp;
    char searchname[10],c='y';	
	if((fp=fopen("roombook.txt","w"))==NULL)
	{
		cout<<"文件打开失败,无法读取数据!"<<endl;
        return;
	}
	if(TOTAL==0)
	{
		p=0;//p为0,使得再次输入顾客信息时第一个赋给gesters[0]
		cout<<"\n很抱歉,没有顾客可以查询!\n\n";
		return;                       //"roombook.txt"文件中没有信息,跳出本函数
	}
	while(c=='y'||c=='Y')                              //顾客查询循环体
	{
		int y=FALSE;
	   for(int j=0;(fread(&gesters[j],sizeof(struct Passenger),1,fp))!=0,j<TOTAL;j++)
	   {

	       cout<<"\n\n请输入要查询的订户姓名 :"<<endl;
 	       cin>>searchname;                           //输入目标查询姓名
	       for(int i=0;i<=TOTAL;i++)
		   {
		      if(strcmp(gesters[i].name,searchname)==0)//若是查到了顾客
			  {
				  y=TRUE;
	             cout<<"您所查询的顾客资料为:\n\t姓名\t房间号\n";			   
	             cout<<'\n'<<'\t'<<gesters[j].name<<'\t';//输出顾客姓名
	             for(int i=0,w=1;i<20&&gesters[j].roomNO[i]>100&&gesters[j].roomNO[i]<600;i++,w++)
				 {
			         cout<<gesters[j].roomNO[i]<<'\t';//输出该顾客所预定房间
		             if(w%6==0)
			         cout<<"\n\t\t";                  //输出格式为每行6六个
				 }
			  }
		   }
		   if(y!=TRUE)                               //若是没有查到
		   {
		      cout<<"\n\t很抱歉,没有您要查询的顾客资料!\n\n";
			  break;                                //跳出while()循环
		   }		   
	   }
	   cout<<"\n是否继续?(y/n)\n";
	   cin>>c;
	}
	fclose(fp);
}


  /*按剩余房间查询*/
void query_remain()
{
	time_t tt;                                            //读取系统当前时间
        time(&tt);
	cout<<"\n\t本地时间为:  " << ctime(&tt) <<endl;       // 显示时间
	cout<<"\n\t目前宾馆各等级的待预定房间情况如下:\n\n";  //显示个等级房间空余数
	cout<<'\t'<<'\t'<<"A等"<<'\t'<<"B等"<<'\t'<<"C等"<<'\t'<<"D等"<<'\t'<<"E等\n"<<endl;
	cout<<'\t'<<'\t'<<remain[0]<<'\t'<<remain[1]<<'\t'<<remain[2]<<'\t'<<remain[3]<<'\t'<<remain[4]<<endl;
	cout<<"\n\t-------------------显示完毕---------------------\n"<<endl;
	system("pause");
	system("cls");                                     //查询完毕后清屏
}

  /*按套间价格查询*/
void query_price()
{
	cout<<"\n\t本宾馆各等级的客房单天单间价格如下:(单位:元)\n\n";//输出个等级房间单价
	cout<<'\t'<<'\t'<<"A等"<<'\t'<<"B等"<<'\t'<<"C等"<<'\t'<<"D等"<<'\t'<<"E等\n"<<endl;
	cout<<'\t'<<'\t'<<"500"<<'\t'<<"400"<<'\t'<<"300"<<'\t'<<"200"<<'\t'<<"100\n"<<endl;
	cout<<"\n\t------------------显示完毕----------------------\n"<<endl;
	system("pause");
	system("cls");                                            //查询完毕后清屏
}

/*客房查询系统*/
void query()
{
	char i;
	for(;;)
	{
		cout<<"\n\n\n\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";
		cout<<"\t\t\t1------查询顾客情况\n";
		cout<<"\t\t\t2------查询各等级空房\n";
		cout<<"\t\t\t3------查询各等级房价格\n";
		cout<<"\t\t\t0------返回上级菜单\n";
		cout<<"\t\t~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n";

		cout<<"\n请输入服务功能键: ";
		cin>>i;
		system("cls");
		switch(i)
		{
		case '1':
			pgsearch();      break;//按顾客姓名查询
		 case '2':
			query_remain();  break;//按各等级空余房间查询
		 case '3':
			query_price();   break;//按各等级单间价格查询
		 case '0':
			system("cls");   break;//跳出查询
		 default:
			{
				cout<<"输入出错!请重试"<<endl;
				system("pause");   //出错  按任意键重试
			    continue;//重新循环
			 }
		}
		if(i=='0')
		{
			system("cls");
			break;
		}
	}
	cout<<"\n\n系统安全返回上级菜单:\n"<<endl;//查询完毕,返回主菜单
}

  /*主函数*/
main()
{
	FILE *fp;
	fp=fopen("roombook.txt","r");           //读取(/建立)信息文本文件
	PassWord();                             //执行密码程序
	char select;
	char c='y';
    cout<<"欢迎使用客房客户端服务系统:\n";  //进入主菜单
	while(c=='y'||c=='Y')
	{
		cout<<"\n\n\t\t\t   -------主菜单--------\n\n";
		cout<<"\t\t************************************************\n";
        cout<<"\t\t\t1----------进入订房系统订房\n";
		cout<<"\t\t\t2----------遍历预定信息\n";
		cout<<"\t\t\t3----------取消房间订单\n";
		cout<<"\t\t\t4----------查询系统\n";
		cout<<"\t\t\t0----------退出本程序\n";
		cout<<"\t\t************************************************\n";
		cout<<"\n请选择服务项目: ";
		cin>>select;                                //功能键选择
		switch(select)
		{
		  case '1':
			      order();                          //(1)预定房间
				  break;
		  case '2':
			  {
				  display();                        //(2)显示预定信息
				  cout<<endl<<"显示完毕!!!!!!"<<endl;
				  cout<<endl<<"按任意键返回...."<<endl;
				  getch();
				  system("cls");
			      break;
			  }
		  case '3':
			  del();   break;                       //(3)按姓名撤销预定
		  case '4':                                 //(4)进入查询子菜单
			  {
				  system("cls");
				  cout<<"\n\n\n\t\t>>>>>>>>欢迎进入查询菜单<<<<<<<<<< \n\n";
			      query(); 
				  break;  
			  }
		  case '0':
			           break;                       //(0)退出系统          
		  default:                                  //(其他键)异常处理
			  {
				  cout<<"输入出错!请重试"<<endl;
				  system("pause");
				  system("cls");
			         continue;                     //重新循环
			  }
		}
		if(select=='0')
		{                            //(0)退出系统
		    system("cls");			
		    break;
		}
	}
	cout<<"\n\n\n\n\n\n\n\n\t\t欢迎使用本系统,再见!\n\n\n"<<endl;
	return 0;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -