c语言实现酒店管理系统

```
#Code
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<conio.h>

void welcome() //欢迎 
{

    printf("**************************\n");
    printf("*****宾馆客房管理系统*****\n");
    printf("**************************\n");
    printf("**********功能选择********\n");
    printf("        1.查询房间\n");//
    printf("        2.入住房间\n");//
    printf("        3.修改房间\n");//
    printf("        4.房间入住情况\n");//
    printf("        5.保存信息\n");//
    printf("        6.读取信息\n");//
    printf("        7.入住人数\n");//
    printf("        8.退出房间\n");//
    printf("        0.退出系统\n");//


}
typedef struct _Guest  //结构体 ,宾客信息 
{
    char name[20]; //姓名 
    char sex[20];  //性别 
    int  fanghao;  //房号 

}Guest;


typedef struct _Node  //链表 
{
    Guest gue; //宾客 
    struct _Node* pNext; //指向下一个节点的指针 

}Node;


Node *g_pHead = NULL;  //头节点 

void  log()  //入住房间   
{
    Node* pNewNode = (Node*)malloc(sizeof(Node)); //建一个新的节点,动态开辟内存 ,malloc返回一个*void指针,需要强转成*Node才能赋给pNewNode 
    pNewNode->pNext = NULL; //将节点指向NULL。
    if (g_pHead == NULL)   //判断该头节点是否为NULL,如果为真,头节点为新创建的节点,如果为假,新节点指向头节点,头节点为新节点。头插法。 
    {
        g_pHead = pNewNode;
        
    }
    else                
    {
        
        pNewNode->pNext = g_pHead;
        g_pHead = pNewNode; 
        
        
        
    }
    printf("请输入房间号:\n");
    scanf("%d",&pNewNode->gue.fanghao);
    
    printf("请输入性别:\n");
    scanf("%s",pNewNode->gue.sex);
    
    printf("请输入姓名:\n");
    scanf("%s",pNewNode->gue.name);
    
    printf("房间已入住成功,欢迎您的入住\n"); 
    
    system("pause"); 
    system("cls"); //清屏 
}


void PrintRoom()
{

 printf("**************************\n");
 printf("*******宾馆客房管理*******\n"); 
 printf("**************************\n");
 printf("房间号     性别       姓名\n");
 printf("**************************\n");
 
 //你 

 Node* p = g_pHead; //从头节点开始 
 while(p!=NULL)   //不为空节点,就一直遍历 
 {
     
 printf("%d         %s        %s\n",p->gue.fanghao,p->gue.sex,p->gue.name);
     
 p = p->pNext;
 printf("**************************\n");
 }
    system("pause"); 
    system("cls");
}


void SaveRoom()  //保存信息 
{
    
    //打开文件
    FILE* fp = fopen("D:\\dev\\room.dat","w+"); 
    
    Node* p = g_pHead; //从头节点开始 
    while(p!=NULL)
    {
        fwrite(&p->gue,1,sizeof(Guest),fp);
        
        
        p = p->pNext;
        
    }
    
    fclose(fp); //关闭文件 
    printf("数据保存成功\n"); 
    system("pause"); 
    system("cls");
}

void  ReadGuest()  //加载数据 
{
    //打开文件
    FILE *fp = fopen("D:\\dev\\room.dat","r"); //打开文件 
    if (fp == NULL)
    {
        printf("打开文件失败\n");
    
    }
    
    Guest Guest;
    while(fread(&Guest,1,sizeof(Guest),fp)) //读取信息 
    {   
        //创建一个新节点
        Node* pNewNode = (Node*)malloc(sizeof(Node)); 
        
        pNewNode->pNext = NULL;  //指向空 
        
        memcpy(pNewNode,&Guest,sizeof(Guest)); //拷取信息 
    
        
        
        if (g_pHead == NULL) 
      {
        g_pHead = pNewNode;
        
      }
       else
      {
        
        pNewNode->pNext = g_pHead;
        g_pHead = pNewNode; 
        
      }
        
        
    }
    
    fclose(fp);
    printf("加载数据成功\n");
    system("pause"); 
    system("cls");
}


int Sumguest()
{
    int count = 0;
    //遍历链表
    
    Node* p = g_pHead;
    while(p!=NULL) 
    {
        count++;
        p = p->pNext; 
        
        
        
     } 
    system("pause"); 
    system("cls");
    
    return count;
    
 } 


Node* FindGuest()
{   
    int guest;
    char Name[20];
    printf("请输入查询的房间:\n");
    scanf("%d",&guest);
    
    Node* p = g_pHead;
    while(p != NULL)
    {
        if (p->gue.fanghao == guest)
        {
            
            return p;
        }
        
        
        p = p->pNext;
        
    }
        
    return NULL;
    
}


void ModifyRoom()
{
    int fanghao;
    printf("请输入要修改的房间号:\n");
    scanf("%d",&fanghao);
    
    Node* p = g_pHead;
    while(p != NULL)
    {
        
        if (p->gue.fanghao == fanghao)
        {    
            printf("请输入要修改的宾客 姓名 性别: \n");
            scanf("%s %s",p->gue.name,p->gue.sex);
            printf("修改成功");
            break; 
        }
        
        p = p->pNext;
    }
    if (p == NULL)
    {
        printf("没有找到该学生信息。\n");
    }
    system("pause"); 
    system("cls");
 } 

void deleteguest()
{
    
    int fanghao;
    printf("请输入要退房的房间号:\n");
    
    scanf("%d",&fanghao);
    
    Node* p1,*p2;
    
    if(g_pHead->gue.fanghao == fanghao)    
    {
        p1 = g_pHead;
        g_pHead = g_pHead->pNext;
        free(p1);
        return;
    }
    Node* p = g_pHead;

    while(p->pNext != NULL)
    {
        if (p->pNext->gue.fanghao == fanghao)
        {
            p2 = p->pNext;
            p->pNext = p->pNext->pNext;
            free(p2 );
        system("pause"); 
        system("cls");
        
            return ; 
        }
        p = p->pNext; 
        
        if (p->pNext == NULL)
        {
            break;
            
        }
    }
    if (p->pNext == NULL)
    {
        printf("没有找到该客人");
        
    }
        system("pause"); 
        system("cls");
    
    
}


int main()
{

    while (1)
    {

        welcome();

        char ch = getch();
        switch (ch)
        {
        case'1': //查询房间
         {
         Node* p = FindGuest();
         if (p!=NULL)
         {
             printf("性别:%s 姓名:%s\n",p->gue.sex,p->gue.name);
         }
         else
            printf("没有该客人\n");
        system("pause"); 
        system("cls");
            break;}
            
            
                    
        case'2': //入住房间
            log();
            break;
        case'3': //修改房间
            ModifyRoom();
            break;    
        case'4': 
         PrintRoom(); //房间入住情况 
            break;
            
        case'5': //保存信息 
         SaveRoom();
            break;
                
        case'6': //读取信息 
          ReadGuest();
            break;
        
        case'7': //入住人数 
          printf("入住总人数:%d\n",Sumguest());
            break;    
            
        case'8': //退出房间 
         deleteguest();
            break;
                
        case'0': //退出系统
            printf("再见\n"); 
            return 0;
        default:
            printf("您的输入有问题,请重新输入\n");
            system("pause");
            system("cls");
            break;
        }

        getchar();
    }

return 0;
}

```

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值