酒店房间登记与计费管理系统

在这里插入图片描述

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<time.h>

typedef struct _House
{
	int no;//房间号
	int flag;//是否入住
	char style[20];//房间标准
	float dayprice;//每天单价
	float hourprice;//每小时单价
}House;

typedef struct _Record
{
	char name[20];//姓名
	int no;//房间号
	time_t time;//入住时间
	int style;//计费方式
	float price;//单价
}Record;//入住记录

int AddInfo(Record rec[],int rnum,House house[],int hnum)
{
	int i,flag=0;
	system("cls");
	printf("请输入入住客人姓名:");
	scanf("%s",rec[rnum].name);
	printf("请输入入住房间号:");
	scanf("%d",&rec[rnum].no);
	for(i=0;i<hnum;i++)//根据房间号 查询是否有该房间 并查询是否已经有人入住
	{
		if(rec[rnum].no == house[i].no)//查询到房间
		{
			flag=1;//查询到房间
			if(house[i].flag==1)//已经有人入住
			{
				printf("该房间已有客人!入住失败!\n");
				system("pause");
				return rnum;//记录数量不变
			}
			break;
		}
	}
	if(flag==0)//没用该房间信息
	{
		printf("该房号不存在!入住失败!\n");
		system("pause");
		return rnum;//记录数量不变
	}
	//查询到 并且没人入住  说明可以入住
	house[i].flag=1;//设置有人入住
	rec[rnum].time=time(NULL);//获取当前时间
	printf("请选择计费方式(0:按天 1:按小时):");
	scanf("%d",&rec[rnum].style);
	if(rec[rnum].style==0)//根据计费方式 设置单价
		rec[rnum].price=house[i].dayprice;
	else
		rec[rnum].price=house[i].hourprice;
	printf("入住成功!\n");
	system("pause");
	return rnum+1;//记录数量增加
}

int menu()
{
	int choice;
	system("cls");
	printf("1:登记入住\n");
	printf("2:查询房间\n");
	printf("3:查询费用\n");
	printf("4:结账退房\n");
	printf("5:房间信息\n");
	printf("6:入住信息\n");
	printf("0:退出\n");
	printf("请输入选择:");
	scanf("%d",&choice);
	return choice;
}

void PrintRec(Record rec[],int rnum)
{
	int i;
	char ch[100];
	printf("%-10s%-10s%-20s%-10s%-10s\n","姓名","房间号","入住时间","计费方式","单价");
	for(i=0;i<rnum;i++)
	{
		printf("%-10s",rec[i].name);
		printf("%-10d",rec[i].no);
		strftime(ch, 99, "%Y-%m-%d %H:%M:%S", localtime(&rec[i].time));     //年-月-日 时-分-秒	
		printf("%-20s",ch);

		if(rec[i].style==0)
		{
			printf("%-10s","按天");
		}
		else
		{
			printf("%-10s","按小时");
		}
		printf("%-10g\n",rec[i].price);
	}
}

int CalMoney(time_t in,time_t out,int style)
{
	long second=out-in;//计算经过多少秒
	if(style==0)//按天计算
	{	
		return (second%86400==0)?(second/86400):(second/86400+1);
	}
	//按小时计算 不能整除3600 多出来的按一小时算
	return (second%3600==0)?(second/3600):(second/3600+1);
}

void CostNow(Record rec[],int rnum)
{
	int i,no,len;
	time_t nowtime;
	char ch[100];
	system("cls");
	printf("请输入要查询的房间号:");
	scanf("%d",&no);
	for(i=0;i<rnum;i++)
	{
		if(rec[i].no==no)
		{
			PrintRec(&rec[i],1);//输出当前记录信息
			nowtime=time(NULL);
			strftime(ch, 99, "%Y-%m-%d %H:%M:%S", localtime(&nowtime));     //年-月-日 时-分-秒	
			printf("当前时间:%s\n",ch);
			//根据入住时间和当前时间  计算费用
			len=CalMoney(rec[i].time,nowtime, rec[i].style);//计算时间长度
			printf("当前费用:%g\n",len*rec[i].price);//时间乘以单价
			break;
		}
	}
	if(i==rnum)
	{
		printf("查询失败,该房间无人入住!\n");
	}
	system("pause");
}

void PrintHouse(House house[],int hnum)
{
	int i;
	printf("%-10s%-10s%-10s%-10s%-10s\n","房间号","是否入住","房间类型","每天单价","每小时单价");
	for(i=0;i<hnum;i++)
	{
		printf("%-10d",house[i].no);
		if(house[i].flag==0)
		{
			printf("%-10s","否");
		}
		else
		{
			printf("%-10s","是");
		}
		printf("%-10s",house[i].style);
		printf("%-10g",house[i].dayprice);
		printf("%-10g\n",house[i].hourprice);
	}
}
//根据房间号查询房间信息
void SerachHouse(House house[],int hnum)
{
	int no,i;
	system("cls");
	printf("请输入要查询的房间号:");
	scanf("%d",&no);
	for(i=0;i<hnum;i++)
	{
		if(house[i].no==no)
		{
			PrintHouse(&house[i],1);//输出房间信息
			break;
		}
	}
	if(i==hnum)
	{
		printf("无该房间号信息!\n");
	}
	system("pause");
}

int DelRec(Record rec[],int rnum,House house[],int hnum)
{
	int i,no,len,j;
	time_t nowtime;
	char ch[100];
	system("cls");
	printf("请输入要退房的房间号:");
	scanf("%d",&no);
	for(i=0;i<rnum;i++)
	{
		if(rec[i].no==no)
		{
			PrintRec(&rec[i],1);//输出当前记录信息
			nowtime=time(NULL);
			strftime(ch, 99, "%Y-%m-%d %H:%M:%S", localtime(&nowtime));     //年-月-日 时-分-秒	
			printf("当前时间:%s\n",ch);
			//根据入住时间和当前时间  计算费用
			len=CalMoney(rec[i].time,nowtime, rec[i].style);//计算时间长度
			printf("需要付款:%g\n",len*rec[i].price);//时间乘以单价
			break;
		}
	}
	if(i==rnum)
	{
		printf("查询失败,该房间无人入住!\n");
		system("pause");
		return rnum;
	}
	//存在就需要在记录里删除
	for(j=i;j<rnum;j++)
	{
		rec[j]=rec[j+1];
	}
	
	for(i=0;i<hnum;i++)//找到房间 修改入住情况
	{
		if(house[i].no==no)
			house[i].flag=0;
	}

	printf("退房成功!\n");
	system("pause");
	return rnum-1;//记录-1
}

int main()
{
	int choice;
	House house[]={
		{101,0,"单人间",100,20},
		{102,0,"单人间",100,20},
		{103,0,"单人间",100,20},
		{104,0,"标间",130,25},
		{105,0,"标间",130,25},
		{106,0,"标间",130,25},
		{107,0,"标间",130,25},
		{108,0,"双人间",150,40},
		{109,0,"双人间",150,40},
		{110,0,"双人间",150,40}
	};
	int hnum=sizeof(house)/sizeof(House);//得到房间的数量
	Record rec[100];//记录入住信息
	int rnum=0;//入住信息数量
	do
	{
		choice=menu();
		switch(choice)
		{
		case 1:
			rnum=AddInfo(rec,rnum,house,hnum);
			break;
		case 2:
			SerachHouse(house,hnum);
			break;
		case 3:
			CostNow(rec,rnum);
			break;
		case 4:
			rnum=DelRec(rec,rnum,house,hnum);
			break;
		case 5:
			system("cls");
			PrintHouse(house,hnum);
			system("pause");
			break;
		case 6:
			system("cls");
			PrintRec(rec,rnum);
			system("pause");
			break;
		}
	}while(choice!=0);
	return 0;
}


  • 5
    点赞
  • 39
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值