Bili最近好忙都没时间更新帖子了,今天给大家分享下酒店管理系统
使用win32控制台,VC6.0版本,VS不可用,有点问题没时间改请原谅

学的不仅仅是技术,更是梦想
头文件
#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会及时修正优化