```
#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;
}
```
c语言实现酒店管理系统
于 2023-11-01 18:53:52 首次发布