大一 C语言课程设计 酒店入住管理系统

#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");
	return;
}

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");
	return;
}

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");
	return;
}

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

猜你喜欢

转载自blog.csdn.net/ghblk/article/details/131135160
今日推荐