首页 > 其他分享 >C语言数据结构实现酒店管理

C语言数据结构实现酒店管理

时间:2024-03-12 21:59:41浏览次数:14  
标签:酒店 goto int scanf 房间 C语言 length printf 数据结构

#include<stdio.h>
#include <windows.h>
#include<stdlib.h> 
#include <string.h>//用于用户验证 
#define MAX 100 //最大房间容量 
#define Stytm 20
#define mAX 1024//文件读取字符长 
int fileHang(FILE *fp);
int length=0;//房间顺序 
typedef int DataType;
typedef struct Hos
{
     int num[MAX];//房间号
     char type[MAX];//房间类型 
     float money[MAX];//价格 
     int flag[MAX]; //是否入住 
     int sumroom;         //已入住房间数 
     
}SeqList; 
typedef struct login  //注册集合 
{
    char username[20];
    char password[20];
    
}Loginsys;
typedef struct yanzheng
{
    char UUname[20];
    char UUpass[20];
}UUList; 
int Menu (int s);//声明 
void AddList(SeqList *L);
void NewList(SeqList *L);
void PrintfList(SeqList *L);
void Strcte(Loginsys *S,UUList *P);
void PrintfList(SeqList *L);
void IntList(SeqList *L)//初始化住房房间数; 
{
    L->sumroom=0;
    return; 
}
void AddList(SeqList *L)//添加 
{
    char x;
 
    FILE *file=fopen("1.txt","a");//文件打开如果没有则创建 ,有的话继续写人 
    if(file==NULL)
    {
        printf("error!");
        return;
    }
    do 
    {
        char ant[10];
        int goub[10];
O:    printf("输入房间号 (本酒店房间号为三位):\n");
    scanf(" %d",&L->num[length]);
    if(L->num[length]<0||L->num[length]>999) 
    {
        printf("请重新输入房间号!!");
        goto O;
    }
    fprintf(file,"\n酒店存在的房间号:%d\n",L->num[length]);//使用fprintf写入文件 
    printf("输入房间类型:\n");
    scanf("%s",&L[length].type);//当对数据进行打包时 ([length])该位置为打包的第几组数据; 
    fprintf(file,"\n房间类型:%s\n",L[length].type);//字符串写入文件
    printf("房间价格:\n");
    scanf("%f",&L->money[length]);
    fprintf(file,"\n%s的房间价格:%f\n",L[length].type,L->money[length]);
S:    printf("确认是否入住(1(入住)/0(无)):\n");
    scanf("%d",&L->flag[length]);
    if(L->flag[length]==0)
    {
        printf("不入住,即将返回页面。");
        Sleep(2000);
        
    }
    if(L->flag[length]!=1)
    {
        printf("请输入合法字符!!!");
        goto  S;
    }
    printf("是否继续入住:(Y/N)\n");
    scanf(" %c",&x);
    if(x=='Y'||x=='y')
    {
        length++;
        system("cls");
    }
    }
    while(x=='Y'||x=='y');
    fclose(file);//一定要关闭文件
    PrintfList(L);
    return;
 
}
void PrintfList(SeqList *L)//数据展开 
{
    int i,x;
    for(i=0;i<=length;i++)
 
    {
        printf("\n\n第%d个房间信息:\n",i+1);
        printf("现有居住的房号:%d\n",L->num[i]);
        printf("房间居住类型:%s\n",L[i].type);
        printf("%s型房间价格为%f元\n",L[i].type,L->money[i]);
    }
    
    return;
}
void FindList(SeqList *L)//查找房间号; 
{
    int x,i;
    printf("\n输入要查的房间号:\n");
    scanf("%d",&x);
    for(i=0;i<=length;i++)
    {
        if(x==L->num[i])
        {
            printf("房间已有住客! 信息如下:\n");
            printf("\n现有居住的房号:%d\n",L->num[i]);
            printf("房间类型:%s\n",L[i].type);
            printf("%s型房间价格为%f\n",L[i].type,L->money[i]);
            break;
        }
        
            if(i==length)
            printf("该房间为空房间!!");
        
    }
 
    return;

void Findroomname(SeqList *L)//按照房间类型查找 
{
    int s;
    char a[10];
    printf("请输入房间类型:\n");
    scanf("%s",a);
    for(s=0;s<=length;s++)
    {
        if(strcmp(a,L[s].type)==0)
        {
                printf("房间已有住客! 信息如下:\n");
            printf("\n现有居住的房号:%d\n",L->num[s]);
            printf("房间类型:%s\n",L[s].type);
            printf("%s型房间价格为%f\n",L[s].type,L->money[s]);
            
        }
    }
    if(s>length)
    {
        printf("不存在该房间类型!!!!\n");
    }
    return;
}
void NewList(SeqList *L)//添加房间信息 
{
    printf("\n请添加房间的数据\n");
    char x;
    length++;
    FILE *file=fopen("1.txt","a");//文件打开如果没有则创建 ,有的话继续写人 
    if(file==NULL)
    {
        printf("error!");
        return;
    }
    do 
    {
        char ant[10];
        int goub[10];
    printf("输入房间号 (本酒店房间号为三位):\n");
    scanf(" %d",&L->num[length]);
    fprintf(file,"\n酒店存在的房间号:%d\n",L->num[length]);//使用fprintf写入文件 
    printf("输入房间类型:\n");
    scanf("%s",&L[length].type);//当对数据进行打包时 ([length])该位置为打包的第几组数据; 
    fprintf(file,"\n房间类型:%s\n",L[length].type);//字符串写入文件
    printf("房间价格:\n");
    scanf("%f",&L->money[length]);
    fprintf(file,"\n%s的房间价格:%f\n",L[length].type,L->money[length]);
    printf("确认是否入住(1(入住)/0(无)):\n");
    scanf("%d",&L->flag[length]);
    printf("是否继续入住:(Y/N)\n");
    scanf(" %c",&x);
    if(x=='Y'||x=='y')
    {
        length++;
        system("cls");
    }
    }
    while(x=='Y'||x=='y');
    fclose(file);//一定要关闭文件
    return;
}
void FixList(SeqList *L)//修改房间信息 
{
 
W:    int room,i,x;
    PrintfList(L);
    printf("\n请输入要修改的房间号:\n");
    scanf("%d",&room);
    for(i=0;i<=length;i++)
    {
        if(room==L->num[i])
        {
            printf("房间已有住客! 信息如下:\n");
            printf("现有居住的房号:%d\n",L->num[i]);
            printf("房间类型:%s\n",L[i].type);
            printf("%s型房间价格为%f\n",L[i].type,L->money[i]);
            break;
        }
            if(i==length)
            {
            printf("该房间为空房间!!");
            goto W;
            }
    }
    printf("\n请输入您要修改的信息:\n");
    printf("修改房号请按 (1)\n");
    printf("修改房间类型请按(2) \n");
    printf("修改房间价格请按(3)\n"); 
    scanf("%d",&x);
    switch(x)
    {
        case 1: printf("\n输入修改后的结果:\n");scanf("%d",&L->num[i]);break;
        case 2: printf("\n输入修改后的结果:\n");scanf("%s",L[i].type);break;
        case 3: printf("\n输入修改后的结果:\n");scanf("%f",&L->money[i]);break;
        default :printf("\n请输入合法的要修改的字符\n"); 
        
    }
    return;
}
void DeleteList(SeqList *L)//删除 
{
    int d,i,s;
    char x;
    printf("\n请输入要删除的房间号:");
    PrintfList(L);
    scanf("%d",&d);
    for(i=0;i<=length;i++)
    {
        if(d==L->num[i])
        {
            printf("房间已有住客! 信息如下:\n");
            printf("现有居住的房号:%d\n",L->num[i]);
            printf("房间类型:%s\n",L[i].type);
            printf("%s型房间价格为%f\n",L[i].type,L->money[i]);
            break;
        }
            if(i==length)
            {
            printf("该房间为空房间,无法删除!!\n");
            }
    }
 
    printf("\n确认删除(Y/N): ");
    scanf(" %c",&x);
    if(x=='Y'||x=='y')
    {
        printf("删除后:\n");
        for(s=0;s<length;s++)
        {
            L->num[i+s]=L->num[i+s+1];//数据覆盖 
            L->money[i+s]=L->money[i+s+1];
            length--;
        }
    }
    PrintfList(L);
    
    Menu(s);
    return;
}
char Endingclass()//退出界面 
{
    char a;
    printf("确定退出系统(Y/y)\n");
    scanf(" %c",&a);
    if(a=='y'||a=='Y') 
    printf("\t\t\t\t***********************************************\n");
    printf("\t\t\t\t------------欢迎下次使用本酒店管理系统---------\n");
    printf("\t\t\t\t***********************************************\n");
    return a;
}
 
 int Menu(int s)//选单 
{
    SeqList L;
    Loginsys S;
     UUList O;
     //Strcte(&S,&O);
    int m;
    printf("正在加载");
    for(int l=0;l<=4;l++)
    {
        printf(".");
        Sleep(300);
    }
    //Sleep(4000);
    system("cls");//刷新; 
    printf("...正在跳转数据....\n");
    printf("...正在处理后台数据...\n");
    printf("\t\t------- 欢迎使用GoodHotls后台系统!!! ---------\t\t\t\t\n");
    printf("跳转成功!\n\n\n");
    printf("\t\t*------- 1--创建新的数据记录              ---------*\t\t\t\t\n");
    printf("\t\t*------- 2--增加新的数据记录,并返回选单  ---------*\t\t\t\t\n");
    printf("\t\t*------- 3--按房间号查找相关信息         ---------*\t\t\t\t\n");
    printf("\t\t*------- 4--修改记录信息           ---------*\t\t\t\t\n");
    printf("\t\t*------- 5--删除记录信息           ---------*\t\t\t\t\n");
    printf("\t\t*------- 6--列出所有数据           ---------*\t\t\t\t\n");
    printf("\t\t*------- 7--退出               ---------*\t\t\t\t\n");
    printf("\t\t*------- 8--注册                   ---------*\t\t\t\t\n");
    printf("\t\t*------- 9--按照房间类型查找             ---------*\t\t\t\t\n");
    printf("-----------------------------------------------------------------------------------------------------------------\n");
    printf("要进行的操作:");
    scanf("%d",&m);
    system("cls");
    return m;
}
void Strcte(Loginsys *S,UUList *P)//注册 ,登录; 
{    char q,l,m;
    int x=0,k=0,t=0;
        printf("\t\t\t\t**********************************************\n"); 
        printf("\t\t\t\t*---------欢迎使用GoodHotls酒店管理系统------*\n");
        printf("\t\t\t\t**********************************************\n"); 
    P:    printf("\t\t\t\t*--------还未注册? 请按 G 进行管理员注册!---*\n");
        printf("\t\t\t\t**********************************************\n");
        printf("                "); 
     scanf(" %c",&q);
     if(q=='G'||q=='g')
     {    
         printf("                "); 
     B:    printf("请输入要注册账号(不长于20位):\n");
         printf("                "); 
        scanf("%s",&S[x].username);
        printf("                "); 
        printf("请输入要注册密码(不长于20位):\n");
        printf("                "); 
        scanf("%s",&S[x].password); 
     }    
     else
     {
         printf("                "); 
         printf("请输入合法注册字符!\n");
         goto P;
     }
        printf("                "); 
        printf("注册成功,是否登录账号(Y/N)\n");
         printf("                "); 
        scanf(" %c",&m);
    if(m=='y'||m=='Y')
    {
        system("cls");
        printf("正在跳转");
        for(int n=0;n<3;n++)
        {
            Sleep(100);
            printf(".");
        }
        system("cls");
    }
    else
    if(m=='n'||m=='N')
    {
        printf("请重新注册\n");
        goto B;
    }
    else
    {
        printf("请输入合法字符!!\n");
    }
    
    if(S[0].username!=NULL&&S[0].password!=NULL)
    {
    
 C:    printf("已有账号?请按(Y/y)进行登录:\n");
    scanf(" %c",&l);
    if(l=='Y'||l=='y')
        {
        L:    
            printf("请输入账号:\n");
            scanf("%s",&P[0].UUname);
            printf("请输入密码:\n");
            scanf("%s",&P[0].UUpass);
            
        }
        else
        {
            printf("请输入合法字符!!!\n");
            goto C;
        }
    }
         
    K:    if(strcmp(S[k].username,P[0].UUname)==0)
        {
            if(strcmp(S[k].password,P[0].UUpass)==0)
            goto G;
            else
            {
                printf("密码错误!\n");
                k=0;
                goto L;
            }
        } 
        if(strcmp(S[k].username,P[0].UUname)!=0)
        {
            k++;
            if(k<=x) 
            goto K;
            if(k>x)
            { 
                k=0; 
                printf("无此用户!\n"); 
                goto L;
            
            } 
        }
        
        G:
return;
}
 
int main()
{     float sum=0;
    Loginsys S;//需要在主函数内声明 
    SeqList L;//需要在主函数内声明 
    UUList O;
    SeqList longth[50];//打包字符50个,用于储存字符 
    Loginsys Names[10];
    UUList check[10];
    Strcte(&S,&O);
    int com;
    //Strcte(&S,&O);
    IntList(&L);
    A: com=Menu(0);
    switch(com)
    {
        case 1:    AddList(&L); goto A;break;
        case 2: NewList(&L);goto A;break;
        case 3: FindList(&L);goto A;break;
        case 4: FixList(&L);goto A;break;
        case 5: DeleteList(&L);goto A; break;
        case 6: PrintfList(&L); goto A;break;
        case 7: Endingclass(); if(Endingclass()=='Y'||Endingclass()=='y') break; else goto A;
        case 8: Strcte(&S,&O);goto A;break;
        case 9: Findroomname(&L); goto A; break;
        default: printf("请输入合法数字!!\n"); goto A;break;
    }
    for(int s=0;s<=length;s++)//计算酒店目前收入 
    {
        sum=sum+L.money[s];
    }
    printf("该酒店现客房总收入为:%f\n\n\n\n\n",sum);
    char line[mAX];//文件读取 
    int lines = 0;
    FILE *fp1 = fopen("1.txt","r"); // 创建文件指针及打开文本文件
    if (fp1 == NULL)
    {
        printf("文件打开时发生错误");
        exit(1);
    }
 
    while(fgets(line,mAX,fp1) != NULL){
    // 或者使用whie(!feof(fp1)){fgets(line,MAX,fp1)}(不推荐,易报错) 
        lines++; // 统计行数
        printf(line);// 打印文本
        
    }
    printf("\n%d 个房间记录",lines/2/3);//记录共有多少房间记录 
    fclose(fp1); // 关闭文件指针()
 
    return 0;
}

标签:酒店,goto,int,scanf,房间,C语言,length,printf,数据结构
From: https://blog.csdn.net/mawanbing/article/details/136664548

相关文章

  • 实验1 C语言输入输出和简单程序编写
    1#include<stdio.h>usingnamespacestd;intmain(){ printf("O\n"); printf("<H>\n"); printf("II\n"); return0;}2#include<stdio.h>usingnamespacestd;intmain(){floata,b,c; scanf......
  • 数据结构——线性表2(链表)
    【基本知识】链表是一种常见的数据结构,用于存储和组织数据。它由一系列节点组成,每个节点包含两部分:数据(data)和指向下一个节点的指针(*next)。链表中的节点可以在内存中不连续地分布,通过指针将它们连接起来。链表有多种类型,其中最常见的是单向链表和双向链表。在单向链表中,......
  • 【数据结构】排序
    文章目录一、排序的概念及引用1、排序的概念2、常见的排序算法二、常见排序算法的实现1、插入排序2、直接插入排序一、排序的概念及引用1、排序的概念排序:所谓排序,就是使一串记录,按照其中的某个或某些关键字的大小,递增或递减的排列起来的操作。稳定性:假定在待排......
  • 【数据结构】堆
    目录1、树的概念及结构1.1树的概念1.2树的相关概念1.3树的结构定义2、二叉树的概念及结构2.1二叉树的概念2.2特殊的二叉树2.3二叉树的性质3、堆的概念及结构3.1二叉树的存储方式3.1.1顺序存储3.1.2链式存储3.2堆的概念及结构4、堆的代码实现4.1堆的初始化(建堆)......
  • c语言不可不说的一件事——进制之间的转化
    进制之间的转换二进制转换二进制转换为十进制10111010.101转换方法:个位数是乘以2的0次方从小数点开始分割,(小数点前从右往左,小数点后从左往右)乘以2的对应次方(从0开始取),最后相加二进制转换为八进制转换方法:取三合一凑不够三位数就补0与八进制转换表一一对应从小数点......
  • c语言注释
    注释a.由于变量可能到处被定义和引用,当它被引用的次数很多时,就很难找到这个变量的含义。可以变量值前面需要加上@,这样搜索变量的含义很快。b.注释是不参与编译的c.文件开头注释可以清楚表明文件作用,功能范例一/*======================================================......
  • “c语言+结构体+链表”实现名片系统
    //名片系统//第一步:创建名片姓名:年龄:(23)手机号:(默认为171****3422)地址:河南洛阳// 公司:tzh职务:学员//输出名片信息////第二步:删除已存在的名片////第三步:修改信息#可指定修改内容////第四步:查询信息#可查询相关姓名对应的信......
  • 数据结构——线段树 学习笔记
    数据结构——线段树学习笔记classseg_t{private:structemm{intl,r;structv;};vector<emm>a;voidpush_up(intk){}voidaction(intk,intv){}voidpush_down(intk){}voidbuild(vector<any>q,intk,intl,intr){a[k].l=......
  • C语言清空输入缓冲区
    在C语言中,清空输入缓冲区通常是为了清除任何残留在输入缓冲区中的数据,这些数据可能会干扰后续的输入操作。以下是几种清空输入缓冲区的方法:使用 fflush(stdin) 函数:这个方法在C语言标准中并不推荐,因为它并不被所有的编译器和操作系统支持。ffflush不是标准库函数,在gcc下是不......
  • 实验1 C语言输入输出和简单程序编写
    task1_1.c`#include<stdio.h>include<stdlib.h>intmain(){printf("O\n");printf("\n");printf("II\n");printf("O\n");printf("\n");printf("II\n");system("pause&......