宾馆客房管理系统的设计与实现 (1)客房信息包括:房间号(char num[10])、房间类型(char type[10])、价格(float money)、是否入住(int flag) (2)除了总的模块要求外,还需计算a.已入住客房的总收入;b.查找某一房间类型的所有房间信息。第一个模块——主函数main()的功能是:根据选单的选项调用各函数,并完成相应的功能。 第二个模块——Menu()的功能是:显示提示选单。 第三个模块——Quit()的功能是:退出选单。 第四个模块——Create()的功能是:创建新的数据记录。 第五个模块——Add()的功能是:增加新的数据记录,并返回选单。 第六个模块——Find()的功能是:按要求查询相关的信息,如果找到了,则显示该信息,如果未找到,则提示文件中没有该信息,并返回选单。 第七个模块——Alter()[的功能是:修改某条记录的信息,如果未找到要修改的记录,则提示系统中无此记录,并返回选单。 第八个模块——Delete()的功能是:删除某条记录,如果未找到要删除的记录,则提示通讯录中没有,并返回选单。 第九个模块——List()的功能是:显示所有记录。 用C语言
时间: 2024-03-22 22:42:11 浏览: 16
以下是一份可能的宾馆客房管理系统的代码,包括所需的结构体定义和各个模块函数的实现:
```c
#include <stdio.h>
#include <string.h>
// 客房信息结构体定义
typedef struct {
char num[10]; // 房间号
char type[10]; // 房间类型
float money; // 价格
int flag; // 是否入住,0表示未入住,1表示已入住
} Room;
// 显示提示选单
void Menu() {
printf("1. 创建新的数据记录\n");
printf("2. 增加新的数据记录\n");
printf("3. 按要求查询相关的信息\n");
printf("4. 修改某条记录的信息\n");
printf("5. 删除某条记录\n");
printf("6. 显示所有记录\n");
printf("7. 退出\n");
}
// 退出选单
void Quit() {
printf("谢谢使用,再见!\n");
exit(0);
}
// 创建新的数据记录
void Create() {
FILE *fp;
Room room;
printf("请输入房间号:");
scanf("%s", room.num);
printf("请输入房间类型:");
scanf("%s", room.type);
printf("请输入价格:");
scanf("%f", &room.money);
room.flag = 0; // 新创建的客房默认未入住
fp = fopen("rooms.dat", "ab");
fwrite(&room, sizeof(Room), 1, fp);
fclose(fp);
printf("新客房创建成功!\n");
}
// 增加新的数据记录
void Add() {
FILE *fp;
Room room;
printf("请输入房间号:");
scanf("%s", room.num);
fp = fopen("rooms.dat", "rb+");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
while (fread(&room, sizeof(Room), 1, fp) == 1) {
if (strcmp(room.num, num) == 0) {
printf("该客房已存在!\n");
fclose(fp);
return;
}
}
printf("请输入房间类型:");
scanf("%s", room.type);
printf("请输入价格:");
scanf("%f", &room.money);
room.flag = 0; // 新创建的客房默认未入住
fwrite(&room, sizeof(Room), 1, fp);
fclose(fp);
printf("新客房添加成功!\n");
}
// 按要求查询相关的信息
void Find() {
FILE *fp;
Room room;
char num[10], type[10];
int option, found = 0;
printf("查询选项:\n");
printf("1. 按房间号查询\n");
printf("2. 按房间类型查询\n");
scanf("%d", &option);
switch (option) {
case 1:
printf("请输入要查询的房间号:");
scanf("%s", num);
break;
case 2:
printf("请输入要查询的房间类型:");
scanf("%s", type);
break;
default:
printf("无效选项!\n");
return;
}
fp = fopen("rooms.dat", "rb");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
while (fread(&room, sizeof(Room), 1, fp) == 1) {
if ((option == 1 && strcmp(room.num, num) == 0) ||
(option == 2 && strcmp(room.type, type) == 0)) {
printf("房间号:%s\t房间类型:%s\t价格:%.2f\t是否入住:%s\n", room.num, room.type, room.money, room.flag ? "是" : "否");
found = 1;
}
}
fclose(fp);
if (!found) {
printf("文件中没有该信息!\n");
}
}
// 修改某条记录的信息
void Alter() {
FILE *fp;
Room room;
char num[10];
int found = 0;
printf("请输入要修改的客房房间号:");
scanf("%s", num);
fp = fopen("rooms.dat", "rb+");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
while (fread(&room, sizeof(Room), 1, fp) == 1) {
if (strcmp(room.num, num) == 0) {
printf("请输入新的房间类型:");
scanf("%s", room.type);
printf("请输入新的价格:");
scanf("%f", &room.money);
fseek(fp, -sizeof(Room), SEEK_CUR);
fwrite(&room, sizeof(Room), 1, fp);
found = 1;
break;
}
}
fclose(fp);
if (!found) {
printf("系统中无此记录!\n");
} else {
printf("客房信息修改成功!\n");
}
}
// 删除某条记录
void Delete() {
FILE *fp, *temp;
Room room;
char num[10];
int found = 0;
printf("请输入要删除的客房房间号:");
scanf("%s", num);
fp = fopen("rooms.dat", "rb");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
temp = fopen("temp.dat", "wb");
while (fread(&room, sizeof(Room), 1, fp) == 1) {
if (strcmp(room.num, num) != 0) {
fwrite(&room, sizeof(Room), 1, temp);
} else {
found = 1;
}
}
fclose(fp);
fclose(temp);
remove("rooms.dat");
rename("temp.dat", "rooms.dat");
if (!found) {
printf("文件中没有该信息!\n");
} else {
printf("客房信息删除成功!\n");
}
}
// 显示所有记录
void List() {
FILE *fp;
Room room;
float total_income = 0;
char type[10];
int option, found = 0;
printf("显示选项:\n");
printf("1. 显示所有客房信息\n");
printf("2. 显示已入住客房信息\n");
printf("3. 显示所有房间类型信息\n");
scanf("%d", &option);
fp = fopen("rooms.dat", "rb");
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
while (fread(&room, sizeof(Room), 1, fp) == 1) {
if (option == 1 || (option == 2 && room.flag == 1)) {
printf("房间号:%s\t房间类型:%s\t价格:%.2f\t是否入住:%s\n", room.num, room.type, room.money, room.flag ? "是" : "否");
if (room.flag == 1) {
total_income += room.money;
}
found = 1;
}
if (option == 3 && strcmp(room.type, type) != 0) {
printf("房间类型:%s\n", room.type);
strcpy(type, room.type);
found = 1;
}
}
fclose(fp);
if (!found) {
printf("文件中没有该信息!\n");
} else {
if (option == 2) {
printf("已入住客房的总收入为:%.2f\n", total_income);
}
}
}
// 主函数
int main() {
int option;
while (1) {
Menu(); // 显示选单
printf("请输入选项:");
scanf("%d", &option);
switch (option) {
case 1:
Create();
break;
case 2:
Add();
break;
case 3:
Find();
break;
case 4:
Alter();
break;
case 5:
Delete();
break;
case 6:
List();
break;
case 7:
Quit();
break;
default:
printf("无效选项!\n");
break;
}
}
return 0;
}
```
请注意,以上代码仅供参考,实际应用中可能需要进行更多的错误处理和优化。