酒店管理系统

酒店管理系统

#include <stdio.h>
#include <string.h>
#include <ctype.h>         //用于测试字符是否属于特定的字符类别
#include <stdlib.h>
#include <windows.h>

#define ROOM_NUM 3        /* 最多的房间数 */

typedef struct room{
    int num;            /* 房间号 */ 
    int kind;           /* 房间种类 (单人 双人)*/
    char flag[10];      /* 标识房间是否为空 */
    int price;          /* 房间单价 */
    int sum;            /* 盈利 */ 
}ROOM;

typedef struct tourist{
	int num;            /* 房间号 */
	char name[20];      /* 旅客姓名 */
	char sex[4];        /* 旅客性别 */
    int ID[19];         /* 身份证号 */
    int day ;           /* 入住天数 */
    int sum;            /* 房费 */
    struct tourist *next;  
}TOURIST;

/*	函数功能:	    显示用户菜单并获得用户键盘输入的选项进行身份选择
	函数参数:	    无 
	函数返回值:	用户输入的选项
*/
char Menu(void)
{
	system("CLS");
	char ch;
	printf("\n酒店管理系统");
	printf("\n------------");
	printf("\n1.旅客\n");
	printf("\n2.经理\n");
	printf("\n0.退出\n");
	printf("\n请选择您的身份:");

	scanf(" %c", &ch); /*在%c前面加一个空格,将存于缓冲区中的回车符读入*/
	
	return ch;
}

/*	函数功能:	    显示旅客菜单并获得旅客键盘输入的选项进行功能选择
	函数参数:	    无
	函数返回值:	用户输入的选项
*/
char Menu1(void)
{
	char ch;

	printf("\n旅客系统");
	printf("\n--------");
    printf("\n1.入住信息总览\n");
    printf("\n2.登记入住\n");
    printf("\n3.退房\n");
	printf("\n0.退出系统\n");
	printf("\n请输入您的选择:");

	scanf(" %c", &ch); /*在%c前面加一个空格,将存于缓冲区中的回车符读入*/

	return ch;
}

/*	函数功能:	    显示经理菜单并获得经理键盘输入的选项进行功能选择
	函数参数:	    无
	函数返回值:	用户输入的选项
*/
char Menu2(void)
{
	char ch;

	printf("\n经理系统");
	printf("\n--------");
	printf("\n1.初始化房间基本信息\n");
	printf("\n2.查询旅客的信息\n");
	printf("\n3.所有房间的营业额排序\n");
    printf("\n4.入住信息总览\n");
	printf("\n0.退出系统\n");
	printf("\n请输入您的选择:");

	scanf(" %c", &ch); /*在%c前面加一个空格,将存于缓冲区中的回车符读入*/

	return ch;
}

/*	函数功能:	    由经理初始化房间信息 
	函数参数:	    结构体指针 room,指向存储房间信息的结构体数组的首地址
	函数返回值:	无 
*/
void  registerroom(ROOM *room)
{
	int i;
	for(i=0;i<ROOM_NUM;i++){
		room[i].num=i+1;
		printf("\n%d号房间类别:",i+1);
		scanf("%d",&room[i].kind );
		printf("\n%d号房间单价:",i+1);
		scanf("%d",&room[i].price );
		strcpy(room[i].flag,"空房");
		room[i].sum=0;
	}
}

/*	函数功能:	    根据房间号或者房客姓名查询房间信息 
	函数参数:	    结构体指针 room,指向存储房间信息的结构体数组的首地址
	函数返回值:	无 
*/
void SearchRoom(TOURIST *head)
{
	int i,num;
	TOURIST *p;
	char name[10]; 
	printf("\n1.按房间号查询\n");
	printf("\n2.按姓名查询\n");
	printf("\n请输入选项:");
	scanf("%d",&i);
	if(i==1){
		printf("\n请输入房间号: ");              //按房号查询
		scanf("%d",&num);
		for(p=head;p!=NULL;p=p->next){
			if(p->num==num){
				printf("\n查询成功\n");
				printf("\n  房间号\t旅客姓名\t入住天数\t营业额\n");
  	            printf("  %d\t\t%s\t\t%d\t\t%d\n",p->num,p->name,p->day,p->sum);
  	            break;
			}	    
		}
		if(p==NULL){
			printf("\n此房间无人居住,查询失败\n");
		}
	}else if(i==2){
		printf("\n请输入姓名: ");               //按姓名查询
		scanf("%s",name);
		for(p=head;p!=NULL;p=p->next){
			if(strcmp(p->name,name)==0){
				printf("\n查询成功\n");
				printf("\n  房间号\t旅客姓名\t入住天数\t营业额\n");
  	            printf("  %d\t\t%s\t\t%d\t\t%d\n",p->num,p->name,p->day,p->sum);
  	            break;
			}	   
		}
		if(p==NULL){
			printf("\n人员信息错误,查询失败\n");
		}
	}else
	    printf("\n抱歉,房间不存在\n");    
}

/*	函数功能:	    计算每个房间的营业额 
	函数参数:	    结构体指针 room和head,分别指向存储房间信息的结构体数组的首地址和旅客信息的首地址 
	函数返回值:	无 
*/
void sumroom(ROOM *room,TOURIST *head)
{
	TOURIST *p;
	int i;
	
	for(p=head;p!=NULL;p=p->next){
	    for(i=0;i<ROOM_NUM;i++){
	    	if(p->num==room[i].num){
	    		room[i].sum=p->day * room[i].price;
	    		p->sum=room[i].sum;
	    		break;
			}
		}
	}
}

/*	函数功能:	    对每个房间的营业额进行排序 
	函数参数:	    结构体指针 room,指向存储房间信息的结构体数组的首地址
	函数返回值:	无 
*/
void SortSum(ROOM *room, int n)
{
    int i,j,k;
    ROOM temp;
    for(i=0;i<n-1;i++){
        k = i;
        for(j=i+1;j<n;j++){
            if((room+j)->sum > (room+k)->sum)
            {
                k=j;
            }
	    }
        if(k!=i)
        {
            temp=*(room+k);
            *(room+k)=*(room+i);
            *(room+i)=temp;
        }
    }
	for(i=0;i<ROOM_NUM;i++){
        printf("\n  房间号\t类别\t单价\t入住情况\t总营业额\n");
  	    printf("  %d\t\t%d\t%d\t%s\t\t%d\n",room[i].num,room[i].kind,room[i].price,room[i].flag,room[i].sum);
    } 
}

/*	函数功能:	    打印每个房间的信息 
	函数参数:	    结构体指针 room,指向存储房间信息的结构体数组的首地址
	函数返回值:	无 
*/
void PrintScore(ROOM *room)
{
	int i;
	for(i=0;i<ROOM_NUM;i++){
        printf("\n  房间号\t类别\t单价\t入住情况\t\n");
  	    printf("  %d\t\t%d\t%d\t%s\t\t",room[i].num,room[i].kind,room[i].price,room[i].flag);
    }

}

/*	函数功能:	    旅客进行登记入住 
	函数参数:	    结构体指针 room和head,分别指向存储房间信息的结构体数组的首地址和旅客信息的首地址
	函数返回值:	无 
*/
void  registercust(ROOM *room,TOURIST *head)
{
	int i;
	TOURIST *p,*q;
	
	for(p=head;p->next!=NULL;p=p->next){
	}
	q=(TOURIST*)malloc(sizeof(TOURIST));
	p->next=q;
	q->next=NULL;
	printf("\n选择房间号:");
	scanf("%d",&(q->num) );
	for(i=0;i<ROOM_NUM;i++){
		if(q->num==room[i].num )
	    {
            strcpy(room[i].flag,"已订"); 
            break;
        }
	}
	printf("\n姓名:");
	scanf("%s",q->name);
	printf("\n性别:");
	scanf("%s",q->sex);
	printf("\n身份证号:");
	scanf("%d",&q->ID);
	printf("\n入住天数:");
	scanf("%d",&q->day);
}

/*	函数功能:	    旅客退房并结账 
	函数参数:	    结构体指针 room和head,分别指向存储房间信息的结构体数组的首地址和旅客信息的首地址
	函数返回值:	无 
*/
void deletecust(ROOM *room,TOURIST *head)
{
	int num,i;
	TOURIST *p,*pre;
	
	printf("请输入所退房间号:\n");
	scanf("%d",&num);
	for(p=head;p->num!=num;p=p->next){
	}
	for(pre=head;pre->next!=p;pre=pre->next){
	}
	for(i=0;i<ROOM_NUM;i++){
		    if(num==room[i].num ){
                strcpy(room[i].flag,"空房");
				room[i].sum=0; 
                break;
            }
	}
	pre->next=p->next;
	free(p);
	printf("退房成功\n");
	printf("您的房费为%d,请缴纳!\n",p->sum);
}

int main(void)
{
    ROOM Room[ROOM_NUM];
    TOURIST *head=(TOURIST*)malloc(sizeof(TOURIST));
	char ch;
	head->next=NULL;
	
	
	while(1){
	
	ch=Menu();                                /* 调用身份选择模块 */
	system("CLS");
		if(ch=='1'){
		do{
			ch=Menu1();
			system("CLS");
	        switch(ch){
	        	case'1':                     /* 调用入住信息显示模块 */ 
                    PrintScore(Room);
					Sleep(4500);
					system("CLS");        
  			        break;
			    case'2':                     /* 调用登记入住模块 */
                    registercust(Room,head);
                    system("CLS");
  			        break;
  			    case'3':                     /* 调用退房模块 */
                    sumroom(Room,head);
                    deletecust(Room,head);
                    system("CLS");
  			        break;
		    }
	    }while(ch!='0');
    }else if(ch=='2'){
    	do{
    		ch=Menu2();
    		system("CLS");
		    switch(ch){
			    case'1':                     /* 调用初始化房间模块 */
                    registerroom(Room);
                    system("CLS");
  			        break;
			    case'2':                     /* 调用查询房间模块 */
			        sumroom(Room,head);
                    SearchRoom(head);
                    Sleep(5000);
                    system("CLS");
  			        break;
                case '3':                    /* 调用盈利查询模块 */
                	sumroom(Room,head);
            	    SortSum(Room,ROOM_NUM);
            	    system("CLS");
                    break;
                case '4':                    /* 调用入住信息显示模块 */
            	    PrintScore(Room);
            	    Sleep(4500);
            	    system("CLS");
            	    break;
            }
		}while(ch!='0');
	}else
	    exit(0);                             /* 退出程序 */
    }
	return 0;   
}

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值