c语言酒店 (c语言酒店管理系统实验报告)

Bili最近好忙都没时间更新帖子了,今天给大家分享下酒店管理系统

使用win32控制台,VC6.0版本,VS不可用,有点问题没时间改请原谅

c语言实现酒店预订管理系统,酒店客源管理系统c语言应用开发

学的不仅仅是技术,更是梦想

头文件

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <dos.h>

链表结构体

//数据结构体
typedef struct {
	char name[50];	//姓名
	char sex[50];	//性别
	char ID[50];	//ID
	char number[50];//房号
	char come[50];	//入住时间
	int day;		//天数
	int type;		//套餐
	int style;		//状态
	int yushou;		//预收
	int yajin;		//押金
	char leave[50];	//离开
} datatype;
//链表结构体
typedef struct node {
	datatype data;				//数据表
	struct node* next;			//指向下一节点的指针
} listnode;
typedef listnode* linklist;

函数声明

//函数声明
//目录
int Menu();	
int Menu_Edit();		//修改
int Menu_Del();			//删除
int Menu_Register();	//登记
int	Menu_Search();		//查询
//功能
linklist Read();						//读取
linklist Create();						//创建
linklist Insert(linklist head,int i);	//插入
void Save(linklist head);				//存储
void Print(linklist head);				//打印
void Delete(linklist head,int Index);	//删除
//修改
linklist Edit_Name(linklist head);		//按姓名修改
//查询
linklist Search_Name(linklist head);	//按姓名查询
linklist Search_Sex(linklist head);		//按性别查询
linklist Search_Cometime(linklist head);//按入住时间查询 
linklist Search_Roomnum(linklist head);	//按房间号查询
//封装
void PRINT();							//打印语句
void PRINTF_SCANF();					//输入语句

全局变量

//全局变量
linklist Temp;			//临时指针
listnode* p,* q;		//新节点、尾节点
linklist head = NULL;	//头指针
int i;			//预留参数
int Index;		//预留参数
int Count = 0;	//计数参数

主函数入口

//主函数
void main() {
	int i;
	system("color f0\n");
	while (1) {
		switch (Menu()) {
		case 1:
			switch(Menu_Register()) {
				case 1: 
					printf("\t\t**顾客登记**\n");
					printf("\t\t输入你想登记的数目:");
					scanf("%d", &i);
					head = Create(i);
					break;
				case 2: 
					printf("\t\t**顾客添加**\n");
					printf("\t\t输入你想添加的数目:");
					scanf("%d", &i);
					head = Insert(head,i);
					break;
				case 0: break;
			}
			break;
		case 2:	
			switch(Menu_Search()) {
				case 1:
					printf("\t\t**按姓名查询**\n");
					Temp = Search_Name(head); 
					break;
				case 2: 
					printf("\t\t**按性别查询**\n");
					Temp = Search_Sex(head);
					break;
				case 3: 
					printf("\t\t**按房间号查询**\n");
					Temp = Search_Roomnum(head);
					break;
				case 4: 
					printf("\t\t**按入住时间查询**\n");
					Temp = Search_Cometime(head);
					break;
				case 5: 
					printf("\t\t**普通查询**\n");
					Print(head);
					break;
				case 0: break;
			}
			break;
		case 3: 
			switch(Menu_Edit()) {
				case 1: 
					printf("\t\t**顾客修改**\n");
					head = Edit_Name(head);
					break;
				case 0: break;
			}
			break;
		case 4:	
			switch(Menu_Del()) {
				case 1: 
					printf("\t\t**顾客删除**\n");
					printf("\t\t你想删除第几条数据?\n\t\t请输入:");		
					scanf("%d",&Index);
					Delete(head,Index);
					break;
				case 0: break;
			}
			break;
		case 5:	
			printf("\t\t**退房功能**\n");
			Temp = Search_Name(head);
			if(Temp == NULL) {
				break;
			} else {
				printf("\t\t确定退房吗?\n\t\t1.是\t2.否\n\t\t请输入操作序号:");
				scanf("%d",&i);
				while(1) {
					if(i == 1) {
						Temp->data.style = 2;
						printf("\t\t退房成功!");
						break;
					}else if(i == 2) {
						break;
					}else {
						printf("\t\t输入错误,请重新输入!!");
					}
				}
			}
			break;
		case 6:
			printf("\t\t**读取功能**\n");
			head = Read();
			break;
		case 7:
			printf("\t\t**保存功能**\n");
			Save(head);
			break;
		case 0:
			printf("\t\t是否要退出系统?\n\t\t1.是\t2.否\n\t\t请输入操作序号:");
			scanf("%d",&i);
			if(i == 1) {
				exit(0);
			}else if(i == 2) {
				break;
			}else {
				printf("\t\t输入错误,请重新输入!!");
			}	
		default:
			break;
		}
	}
}

目录函数

//菜单功能
int Menu() {
	printf("\n\n");
	printf("\t\t欢迎使用XXXX宾馆管理系统!\t\t创建者:BiliIT\t\t时间:2019/10/01\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t=\t\t\t\t\t\t\t\t\t\t=\n");
	printf("\t\t=\t\t\t\t宾馆客房管理系统\t\t\t\t=\n");
	printf("\t\t=\t\t\t\t\t\t\t\t\t\t=\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t=\t\t选择功能列表\t\t=\t\t套餐介绍\t\t=\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t=\t\t\t\t\t=\t\t\t\t\t=\n");
	printf("\t\t=\t1.登记功能\t2.查询功能\t=\t【套餐一】单人间 50/天\t\t=\n");
	printf("\t\t=\t\t\t\t\t=\t【套餐二】大床房 70/天\t\t=\n");
	printf("\t\t=\t3.修改功能\t4.删除功能\t=\t【套餐三】双人间 100/天\t\t=\n");
	printf("\t\t=\t\t\t\t\t=\t【套餐四】豪华套房 300/天\t=\n");
	printf("\t\t=\t5.退房功能\t6.读取功能\t=\t【套餐五】情侣套房 300/天\t=\n");
	printf("\t\t=\t\t\t\t\t=\t【套餐六】早餐配送 10/天\t=\n");
	printf("\t\t=\t7.保存功能\t0.退出系统\t=\t【竭诚服务,欢迎入住!】\t=\n");
	printf("\t\t=\t\t\t\t\t=\t\t\t\t\t=\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t请输入操作序号:");
	for (;;) {
		scanf("%d",&i);
		printf("\n");
		if (i < 0 ||i > 9) {
			printf("\t\t选择错误,重新选择:");
		} else {
			break;
		}
	}
	return i;
}
//查询目录
int Menu_Search() {
	printf("\n\n");
	printf("\t\t欢迎使用XXXX宾馆管理系统!\t\t创建者:BiliIT\t\t时间:2019/10/01\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t=\t\t\t\t\t\t\t\t\t\t=\n");
	printf("\t\t=\t\t\t\t宾馆客房管理系统\t\t\t\t=\n");
	printf("\t\t=\t\t\t\t\t\t\t\t\t\t=\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t=\t\t选择功能列表\t\t=\t\t查询功能\t\t=\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t=\t\t\t\t\t=\t\t\t\t\t=\n");
	printf("\t\t=\t1.登记功能\t2.查询功能\t=\t\t\t\t\t=\n");
	printf("\t\t=\t\t\t\t\t=\t\t1.按姓名查询\t\t=\n");
	printf("\t\t=\t3.修改功能\t4.删除功能\t=\t\t2.按性别查询\t\t=\n");
	printf("\t\t=\t\t\t\t\t=\t\t3.按房间号查询\t\t=\n");
	printf("\t\t=\t5.退房功能\t6.读取功能\t=\t\t4.按入住时间查询\t=\n");
	printf("\t\t=\t\t\t\t\t=\t\t5.普通查询\t\t=\n");
	printf("\t\t=\t7.保存功能\t0.退出系统\t=\t\t0.返回系统\t\t=\n");
	printf("\t\t=\t\t\t\t\t=\t\t\t\t\t=\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t请输入操作序号:");
	for (;;) {
		scanf("%d",&i);
		printf("\n");
		if (i < 0 ||i > 9) {
			printf("\t\t选择错误,重新选择:");
		} else {
			break;
		}
	}
	return i;
}
//登记目录
int Menu_Register() {
	printf("\n\n");
	printf("\t\t欢迎使用XXXX宾馆管理系统!\t\t创建者:BiliIT\t\t时间:2019/10/01\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t=\t\t\t\t\t\t\t\t\t\t=\n");
	printf("\t\t=\t\t\t\t宾馆客房管理系统\t\t\t\t=\n");
	printf("\t\t=\t\t\t\t\t\t\t\t\t\t=\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t=\t\t选择功能列表\t\t=\t\t登记功能\t\t=\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t=\t\t\t\t\t=\t\t\t\t\t=\n");
	printf("\t\t=\t1.登记功能\t2.查询功能\t=\t\t\t\t\t=\n");
	printf("\t\t=\t\t\t\t\t=\t\t1.顾客登记\t\t=\n");
	printf("\t\t=\t3.修改功能\t4.删除功能\t=\t\t\t\t\t=\n");
	printf("\t\t=\t\t\t\t\t=\t\t2.顾客添加\t\t=\n");
	printf("\t\t=\t5.退房功能\t6.读取功能\t=\t\t\t\t\t=\n");
	printf("\t\t=\t\t\t\t\t=\t\t0.返回系统\t\t=\n");
	printf("\t\t=\t7.保存功能\t0.退出系统\t=\t\t\t\t\t=\n");
	printf("\t\t=\t\t\t\t\t=\t\t\t\t\t=\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t请输入操作序号:");
	for (;;) {
		scanf("%d",&i);
		printf("\n");
		if (i < 0 ||i > 9) {
			printf("\t\t选择错误,重新选择:");
		} else {
			break;
		}
	}
	return i;
}
//修改目录
int Menu_Edit() {
	printf("\n\n");
	printf("\t\t欢迎使用XXXX宾馆管理系统!\t\t创建者:BiliIT\t\t时间:2019/10/01\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t=\t\t\t\t\t\t\t\t\t\t=\n");
	printf("\t\t=\t\t\t\t宾馆客房管理系统\t\t\t\t=\n");
	printf("\t\t=\t\t\t\t\t\t\t\t\t\t=\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t=\t\t选择功能列表\t\t=\t\t修改功能\t\t=\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t=\t\t\t\t\t=\t\t\t\t\t=\n");
	printf("\t\t=\t1.登记功能\t2.查询功能\t=\t\t\t\t\t=\n");
	printf("\t\t=\t\t\t\t\t=\t\t\t\t\t=\n");
	printf("\t\t=\t3.修改功能\t4.删除功能\t=\t\t1.修改顾客信息\t\t=\n");
	printf("\t\t=\t\t\t\t\t=\t\t\t\t\t=\n");
	printf("\t\t=\t5.退房功能\t6.读取功能\t=\t\t0.返回系统\t\t=\n");
	printf("\t\t=\t\t\t\t\t=\t\t\t\t\t=\n");
	printf("\t\t=\t7.保存功能\t0.退出系统\t=\t\t\t\t\t=\n");
	printf("\t\t=\t\t\t\t\t=\t\t\t\t\t=\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t请输入操作序号:");
	for (;;) {
		scanf("%d",&i);
		printf("\n");
		if (i < 0 ||i > 9) {
			printf("\t\t选择错误,重新选择:");
		} else {
			break;
		}
	}
	return i;
}
//删除目录
int Menu_Del() {
	printf("\n\n");
	printf("\t\t欢迎使用XXXX宾馆管理系统!\t\t创建者:BiliIT\t\t时间:2019/10/01\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t=\t\t\t\t\t\t\t\t\t\t=\n");
	printf("\t\t=\t\t\t\t宾馆客房管理系统\t\t\t\t=\n");
	printf("\t\t=\t\t\t\t\t\t\t\t\t\t=\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t=\t\t选择功能列表\t\t=\t\t删除功能\t\t=\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t=\t\t\t\t\t=\t\t\t\t\t=\n");
	printf("\t\t=\t1.登记功能\t2.查询功能\t=\t\t\t\t\t=\n");
	printf("\t\t=\t\t\t\t\t=\t\t\t\t\t=\n");
	printf("\t\t=\t3.修改功能\t4.删除功能\t=\t\t1.删除顾客\t\t=\n");
	printf("\t\t=\t\t\t\t\t=\t\t\t\t\t=\n");
	printf("\t\t=\t5.退房功能\t6.读取功能\t=\t\t0.返回系统\t\t=\n");
	printf("\t\t=\t\t\t\t\t=\t\t\t\t\t=\n");
	printf("\t\t=\t7.保存功能\t0.退出系统\t=\t\t\t\t\t=\n");
	printf("\t\t=\t\t\t\t\t=\t\t\t\t\t=\n");
	printf("\t\t=================================================================================\n");
	printf("\t\t请输入操作序号:");
	for (;;) {
		scanf("%d",&i);
		printf("\n");
		if (i < 0 ||i > 9) {
			printf("\t\t选择错误,重新选择:");
		} else {
			break;
		}
	}
	return i;
}

功能函数

//读取
linklist Read() { 
	FILE *fp;
	fp = fopen("D:\\data.txt","r"); 
	if(!fp) {
		printf("\t\t文件打开失败!"); 
		exit(0); 
	} else {
		printf("\t\t文件打开成功");
	}
	while(!feof(fp)) {
		p = (linklist)malloc(sizeof(listnode));
		fscanf(fp,"%d\t%s\t%s\t%s\t%s\t%d\t%d\t%s\t%d\t%d\t%s\t%d\n",&i,p->data.name,p->data.sex,p->data.ID,p->data.come,&p->data.day,&p->data.type,p->data.number,&p->data.yajin,&p->data.yushou,p->data.leave,&p->data.style);
		p->next = head;			//新节点指向原来的首节点
		head = p;				//头指针指向新节点
		Count++;				//增加链表节点数量
	}
	fclose(fp);
	return head;
}
//链表的保存
void Save(linklist head) {
	FILE *fp;
	Temp = head;
	if(Temp==NULL) { printf("ok1");
		printf("\t\t现在没有顾客信息,请先输入顾客信息!\n");
		return;
	}
	fp=fopen("D:\\data.txt","w");
	if(!fp) { printf("ok2");
		printf("\t\t文件不存在!\n");
		return;
	} while(Temp) { 
		fprintf(fp,"%d\t%s\t%s\t%s\t%s\t%d\t%d\t%s\t%d\t%d\t%s\t%d\n",i,Temp->data.name,Temp->data.sex,Temp->data.ID,Temp->data.come,Temp->data.day,Temp->data.type,Temp->data.number,Temp->data.yajin,Temp->data.yushou,Temp->data.leave,Temp->data.style); 
		Temp=Temp->next;
	}
	fclose(fp);
	printf("\t\t文件保存成功!\n");
}
//链表删除
void Delete(linklist head,int Index) {
	linklist Temp;
	linklist Pre;
	Temp = head;
	Pre = Temp;
	printf("\t\t删除第%d条数据!!\n",Index);
	for(i = 1;i < Index;i++) {
		Pre = Temp;
		Temp = Temp->next;
	}
	Pre->next = Temp->next;
	free(Temp);
	Count--;
}
//链表头节点插入
linklist Insert(linklist head,int i) {
	int n = 1;
	//存储数据
	while(i--) {
		p = (listnode *)malloc(sizeof(listnode));
		printf("\t\t请输入第%d条客户信息!\n", n);
		PRINTF_SCANF();
		printf("\n");
		p->next = head;			//新节点指向原来的首节点
		head = p;				//头指针指向新节点
		Count++;				//增加链表节点数量
		n++;
		printf("\n");
	}
	return head;
}
//创建动态链表
linklist Create(int i) {
	int n = 1;
	p = q = (linklist)malloc(sizeof(listnode));
	while(i--) {
		printf("\t\t请输入第%d条客户信息!\n", n);
		PRINTF_SCANF();
		printf("\n");
		Count++;
		n++;
		if(Count == 1) {
			p->next = head;
			q = p;
			head = p;
		}else {
			p->next = NULL;
			q->next = p;
			q = p;
		}
		p = (linklist)malloc(sizeof(listnode));
	}
	free(p);
	return head;
}
//打印
void Print(linklist head) {
	int Index = 1;
	printf("\t\t列表中有%d条数据!!\n\n",Count);
	Temp = head;
	//printf("id\t姓名\t性别\t证件\t\t\t入住\t\t天数\t套餐\t房号\t价格\t押金\t预收\t离开\n\n");
	printf("\tid\t姓名\t性别\t证件\t入住\t天数\t套餐\t房号\t押金\t预收\t离开\t状态\n\n");
	while(Temp != NULL) {
		for(i = 1;i <= Count;i++) {
 			printf("\t%d\t%s\t%s\t%s\t%s\t%d\t%d\t%s\t%d\t%d\t%s\t",i,Temp->data.name,Temp->data.sex,Temp->data.ID,Temp->data.come,Temp->data.day,Temp->data.type,Temp->data.number,Temp->data.yajin,Temp->data.yushou,Temp->data.leave);
			if(Temp->data.style == 1) {
				printf("已入住\n");
			} else {
				printf("已退房\n");
			}
			Temp = Temp->next;
			Index++;
		}
	}
}

查询函数

void PRINT() {
	printf("\tid\t姓名\t性别\t证件\t入住\t天数\t套餐\t房号\t押金\t预收\t离开\t状态\n\n");
 	printf("\t%d\t%s\t%s\t%s\t%s\t%d\t%d\t%s\t%d\t%d\t%s\t",
	i,Temp->data.name,Temp->data.sex,Temp->data.ID,Temp->data.come,
	Temp->data.day,Temp->data.type,Temp->data.number,
	Temp->data.yajin,Temp->data.yushou,Temp->data.leave);
	if(Temp->data.style == 1) {
		printf("已入住\n");
	} else {
		printf("已退房\n");
	}
}
void PRINTF_SCANF() {
	printf("\t\t姓名:");		scanf("%s", p->data.name, 128);
	printf("\t\t性别:");		scanf("%s", p->data.sex, 128);
	printf("\t\t证件:");		scanf("%s", p->data.ID, 128);
	printf("\t\t入住:");		scanf("%s", p->data.come, 128);
	printf("\t\t房号:");		scanf("%s", p->data.number, 128);
	printf("\t\t天数:");		scanf("%d", &p->data.day, 128);
	printf("\t\t套餐:");		scanf("%d", &p->data.type, 128);
	printf("\t\t离开:");		scanf("%s", p->data.leave, 128);
	p->data.style = 1;
	p->data.yajin = 100;
	if(p->data.type==1) {
		p->data.yushou = p->data.day * 50;
	} else if(p->data.type==2) {
		p->data.yushou=p->data.day*70;
	} else if(p->data.type==3) {
		p->data.yushou=p->data.day*100;
	} else if(p->data.type==4) {
		p->data.yushou=p->data.day*300;
	} else if(p->data.type==5) {
		p->data.yushou=p->data.day*300;
	} else {
		p->data.yushou=p->data.day*10;
	}
	
	printf("\t\t押金:%d\n",p->data.yajin);
	printf("\t\t预收:%d\n",p->data.yushou);
	if(p->data.style == 1) {
		printf("\t\t状态:已入住");
	}
}
//==============================================================================================================================================
//按性别查找宾馆信息 
linklist Search_Sex(linklist head) {
	char sex[10];
	Temp = head; 
	printf("\t\t输入要查询的性别:"); 
		scanf("%s",&sex); 
		while((Temp != NULL) && ((strcmp(Temp->data.sex,sex) > 0) || (strcmp(Temp->data.sex,sex) < 0))) {
			Temp = Temp->next; 
		} if(Temp == NULL || (strcmp(Temp->data.sex,sex) < 0)) { 
			Temp = NULL; 
		}if(Temp != NULL) { 
			PRINT();
		} else printf("\t\t该用户不存在!"); 
	return Temp; 
}
//按房间号查找宾馆信息 
linklist Search_Roomnum(linklist head) {
	char number[10]; 
	Temp = head;
	printf("\t\t输入要查询的房间号:"); 
	scanf("%s",&number);
	while((Temp != NULL) && ((strcmp(Temp->data.number,number) > 0) || (strcmp(Temp->data.number,number) < 0))) { 
		Temp = Temp->next;
	} 
	if(Temp == NULL || (strcmp(Temp->data.number,number) < 0)) { 
		Temp=NULL; 
	} 
	if(Temp != NULL) { 
		PRINT();
	} else printf("\t\t该用户不存在!"); 
	return Temp; 
}
//按入住时间查找 
linklist Search_Cometime(linklist head) {
	char come[10]; 
	Temp = head; 
	printf("\t\t输入要查询的入住时间:"); 
	scanf("%s",&come); 
	while((Temp != NULL) && ((strcmp(Temp->data.come,come) > 0) || (strcmp(Temp->data.come,come) < 0))) { 
		Temp = Temp->next; 
	} if(Temp == NULL || (strcmp(Temp->data.come,come) < 0)) {
		Temp = NULL; 
	} if(Temp != NULL) { 
		PRINT();
	} else printf("\t\t该用户不存在!"); 
	return Temp;
}
//按姓名查询
linklist Search_Name(linklist head) { 
	char name[10];
	Temp = head; 
		printf("\t\t输入要查询的姓名:"); 
		scanf("%s",&name);
		while((Temp != NULL) && ((strcmp(Temp->data.name,name) > 0) || (strcmp(Temp->data.name,name) < 0))) {
			Temp = Temp->next;
		}
		if(Temp == NULL || strcmp(Temp->data.name,name) < 0) {
			Temp = NULL;
		}if(Temp != NULL) { 
			PRINT();
		} else printf("\t\t该用户不存在!\n"); 
	return Temp;
}
//按客户姓名的信息修改 
linklist Edit_Name(linklist head) { 
	p = Search_Name(head);
	if(Temp == NULL) { 
		printf("\t\t宾馆信息不存在!\n"); 
	} else {
		scanf("\t%s\t%s\t%s\t%s\t%d\t%d\t%s\t%d\t%d\t%s\t%d\n",
			p->data.name,p->data.sex,p->data.ID,p->data.come,
			&p->data.day,&p->data.type,p->data.number,
			&p->data.yajin,&p->data.yushou,p->data.leave,&p->data.style);
		printf("\t\t宾馆信息已修改!\n"); 
	}
	return p;
}

可能有些BUG,请大家评论区指正,Bili会及时修正优化