#include<stdio.h>
int room_count = 0; //总房间数
typedef struct room {
int room_num; //房间号
char room_type[20]; //房间类型
int room_flag; //flag=0时表示房间为空,flag=1时表示房间有人
} room;
void Menu1() { //主菜单
printf("\n**************酒店入住管理系统*************\n");
printf("* (主菜单) *\n");
printf("* *\n");
printf("* [1] 客户登录 *\n");
printf("* [2] 管理员登录 *\n");
printf("* [3] 退出 *\n");
printf("* *\n");
printf("* *\n");
printf("* (请输入编号进行操作) *\n");
printf("*******************************************\n");
}
void Menu2() { //管理员登录后
printf("\n**************酒店入住管理系统*************\n");
printf("* (管理员) *\n");
printf("* *\n");
printf("* [1] 录入房间信息 *\n");
printf("* [2] 查询房间信息 *\n");
printf("* [3] 删除所有房间信息 *\n");
printf("* [4] 退出 *\n");
printf("* *\n");
printf("* (请输入编号进行操作) *\n");
printf("*******************************************\n");
}
void Menu3() { //客户登录后
printf("\n**************酒店入住管理系统*************\n");
printf("* (客户) *\n");
printf("* *\n");
printf("* [1] 选择房间 *\n");
printf("* [2] 退房 *\n");
printf("* [3] 查询房间信息 *\n");
printf("* [4] 退出 *\n");
printf("* *\n");
printf("* (请输入编号进行操作) *\n");
printf("*******************************************\n");
}
int main_create_room(room r[]) {
FILE* pf = fopen("create_room.txt", "ab");
if (pf == NULL) {
printf("打开文件失败!\n");
return 0;
}
printf("\n请输入房间号:");
scanf("%d", &r[room_count].room_num);
for (int i = 0; i < room_count; i++) { //检查房间号是否重复
if (r[room_count].room_num == r[i].room_num)
return 0;
}
printf("\n请输入房间类型:");
scanf("%s", r[room_count].room_type);
r[room_count].room_flag = 0;
fprintf(pf, "%d%s%s%s%d%s", r[room_count].room_num, "\n", r[room_count].room_type, "\n", r[room_count].room_flag, "\n");
fclose(pf);
pf = NULL;
room_count++;
return 1;
}
void creat_room() {
int k = 1;
room r[100];
while (k != 0) {
int a = 0;
a = main_create_room(r); //将保存房间的数组传入函数中,检查是否房间号重复
if (a == 1)
printf("\n录入成功!");
else
printf("\n录入失败,房间号已被占用!");
printf("\n是否继续录入?(输入1表示继续,0表示结束)\n");
scanf("%d", &k);
}
FILE* pf = fopen("room_count.txt", "wb");
if (pf == NULL) {
printf("打开文件失败!\n");
return;
}
fprintf(pf, "%d", room_count); //将总房间树保存到文件中
fclose(pf);
pf = NULL;
return;
}
void traverse_room() { //查看所有房间
int count = 0, i; //count和room_count的值相等
FILE* pf = fopen("room_count.txt", "rb");
if (pf == NULL) {
printf("打开文件失败!\n");
return;
}
fscanf(pf, "%d", &count);
fclose(pf);
printf("\n房间的总数:%d\n", count);
pf = fopen("create_room.txt", "rb");
if (pf == NULL) {
printf("打开文件失败!\n");
return;
}
room a[100];
for (i = 0; i < count; i++) {
fscanf(pf, "%d%s%d", &a[i].room_num, a[i].room_type, &a[i].room_flag);//把文件中的数据读到内存中准备好的数组中
printf("房间号:%d 房间类型:%s", a[i].room_num, a[i].room_type);
if (a[i].room_flag == 0)
printf(" 房间为空\n");
else
printf(" 房间已入住\n");
}
fclose(pf);
pf = NULL;
return;
}
void delete_room() {
FILE* pf = fopen("create_room.txt", "wb");//以只写的方式打开文件,什么都不输入,以空白覆盖原文件
if (pf == NULL) {
printf("打开文件失败!\n");
return;
}
fclose(pf);
pf = fopen("room_count.txt", "wb");
if (pf == NULL) {
printf("打开文件失败!\n");
return;
}
fprintf(pf, "%d", 0); //将房间总数设置为0
fclose(pf);
pf = NULL;
printf("删除操作完成!\n");
return;
}
void reserve() { //客户选择房间
int ans_num, count = 0, i; //count和room_count的值相等
room r[100]; //用于保存从文件中读取的值
FILE* pf = fopen("room_count.txt", "rb");
if (pf == NULL) {
printf("打开文件失败!\n");
return;
}
fscanf(pf, "%d", &count); //从文件中获取房间总数
if (count == 0) {
printf("您选择的房间不存在!\n");
return;
}
fclose(pf);
pf = fopen("create_room.txt", "rb");
if (pf == NULL) {
printf("打开文件失败!\n");
return;
}
for (i = 0; i < count; i++)
fscanf(pf, "%d%s%d", &r[i].room_num, r[i].room_type, &r[i].room_flag);//把文件中的数据读到内存中准备好的数组中
fclose(pf);
printf("请输入您选择的房间号:\n");
scanf("%d", &ans_num);
for (i = 0; i < count; i++) {
if (ans_num == r[i].room_num && r[i].room_flag == 0) { //房间为空的情况
printf("您选择成功!(房间号:%d 房间类型:%s)\n", r[i].room_num, r[i].room_type);
r[i].room_flag = 1;
break;
} else if (ans_num == r[i].room_num && r[i].room_flag == 1) { //房间不为空时
printf("您选择的房间已有人入住!\n");
break;
} else if (i == count - 1)
printf("您选择的房间不存在!\n");
}
pf = fopen("create_room.txt", "wb");
if (pf == NULL) {
printf("打开文件失败!\n");
return;
}
for (i = 0; i < count; i++)
fprintf(pf, "%d%s%s%s%d%s", r[i].room_num, "\n", r[i].room_type, "\n", r[i].room_flag, "\n"); //将更改过的数据写到文件,并覆盖原有文件
fclose(pf);
pf = NULL;
return;
}
void check_room() { //退房
int ans_num, count = 0, i; //count和room_count的值相等
room r[100]; //用于保存从文件中读取的值
FILE* pf = fopen("room_count.txt", "rb");
if (pf == NULL) {
printf("打开文件失败!\n");
return;
}
fscanf(pf, "%d", &count);
if (count == 0) {
printf("您要退的房间不存在!\n");
return;
}
fclose(pf);
pf = fopen("create_room.txt", "rb");
if (pf == NULL) {
printf("打开文件失败!\n");
return;
}
for (i = 0; i < count; i++)
fscanf(pf, "%d%s%d", &r[i].room_num, r[i].room_type, &r[i].room_flag);
fclose(pf);
printf("请输入您要退的房间号:\n");
scanf("%d", &ans_num);
for (i = 0; i < count; i++) {
if (ans_num == r[i].room_num && r[i].room_flag == 1) {
printf("退房成功!(房间号:%d 房间类型:%s)\n", r[i].room_num, r[i].room_type);
r[i].room_flag = 0;
break;
} else if (ans_num == r[i].room_num && r[i].room_flag == 0) {
printf("您要退的房间已经为空!\n");
break;
} else if (i == count - 1)
printf("您要退的房间不存在!\n");
}
pf = fopen("create_room.txt", "wb");
if (pf == NULL) {
printf("打开文件失败!\n");
return;
}
for (i = 0; i < count; i++)
fprintf(pf, "%d%s%s%s%d%s", r[i].room_num, "\n", r[i].room_type, "\n", r[i].room_flag, "\n");
fclose(pf);
pf = NULL;
return;
}
int main() {
int choice = 0;
while (1) {
Menu1(); //显示主菜单
scanf("%d", &choice);
if (choice == 3) //退出系统
return 0;
else if (choice == 2) { //管理员登录
Menu2();
scanf("%d", &choice);
if (choice == 4) //退出
return 0;
else if (choice == 1) //录入房间
creat_room();
else if (choice == 2) //查询所有房间
traverse_room();
else if (choice == 3) //删除所有房间信息
delete_room();
else
printf("输入的编号有误!\n");
} else if (choice == 1) { //客户登录
Menu3();
scanf("%d", &choice);
if (choice == 4) //退出
return 0;
else if (choice == 1) //选择房间
reserve();
else if (choice == 2) //退房
check_room();
else if (choice == 3) //查询房间
traverse_room();
else
printf("输入的编号有误!\n");
} else
printf("输入的编号有误,请重新选择!\n");
printf("\n本轮操作结束,返回主菜单!\n");
}
return 0;
}
大一 C语言课程设计 酒店入住管理系统
于 2023-06-09 21:23:41 首次发布