#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;
}