C语言 宾馆客房管理系统

别忘了在文件里面建立这两个文件其他的应该没问题在这里插入图片描述

#include<stdio.h>
#include<stdlib.h> 
#include<string.h>
#include<malloc.h>
typedef struct
{
	char name[50];  
	char sex[50]; 
	char ID[50];
	char come[50];  
	char day[50];
	char number[50]; 
	char type[50];
	char price[50];  
	char yushou[50];
	char yajin[50];  
	char leave[50];
}datatype;
typedef struct node//定义链表节点
{
	datatype data;  //数域
	struct node *next;//指针区域 指向后继元素(链表节点的结构体声明) 
}listnode; 
typedef listnode *linklist;//结构体指针
linklist head;
listnode *p;
void Output_allInfo(linklist head);//输出所有客户信息  
void Delete_info(linklist head);//客户信息的删除 
void Info_Modify(linklist head);//按客户姓名的信息修改 
listnode *Name_Search(linklist head); //按姓名查找宾馆信息 
listnode *Sex_Search(linklist head);//按性别查找宾馆信息  
listnode *Roomnum_Search(linklist head);//按房间号查找宾馆信息
listnode *Cometime_Search(linklist head) ;//按入住时间查找 
char Display_Menu();//菜单输出函数 
listnode* Add(linklist head,int b);//增加客户信息
linklist Create(int a);//宾馆客户信息的建立  
void SaveInfoToFile(linklist head);//保存顾客信息到文件中
listnode *ReadInfoFromFile();//信息从文件读出
int main()//主函数 
{ 
	system("color 0a");
	int i,a;
	for(;;) //while(1)
	{ 
		switch(Display_Menu())  
		{
		case 1: printf("**2.宾馆信息的建立**\n");           
			printf("输入你想输入的数目:");         
			scanf("%d",&i);       head=Create(i); break;  
		case 2: printf("**1.从文件读入客户信息!**\n");        
			ReadInfoFromFile();             break;      
		case 3: printf("**3.宾馆信息的添加**\n");          
			printf("输入你想添加的人数:");       
			scanf("%d",&a);       
			Add(head,a); break; 
		case 4:  printf("**4.客户姓名的查询**\n");        
			p=Name_Search(head);             if(p!=NULL)       
			{       
				printf("姓名\t 性别\t 证件\t\t 入住\t 天数\t 房号\t 价格\t 押金\t 离开\n ");     
				printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->data.name,p->data.sex,p->data.ID,      
					p->data.come,p->data.day,p->data.number,p->data.price,p->data.yajin,p->data.leave );      
				printf("\n");  
			} 
			else printf("该用户不存在!");break;       
		case 5: printf("**5.客户性别的查询**\n");    
			p=Sex_Search(head);          
			if(p!=NULL)         
			{
				printf("姓名\t 性别\t 证件\t\t 入住\t 天数\t 房号\t 价格\t 押金\t 离开\n ");   
				printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->data.name,p->data.sex,p->data.ID,    
					p->data.come,p->data.day,p->data.number,p->data.price,p->data.yajin,p->data.leave );      
				printf("\n");   
			}
			else
				printf("该用户不存在!");break;  
		case 6: 
			printf("**6.客户房号的查询**\n");     
			p=Roomnum_Search(head);     
			if(p!=NULL)  
			{
				printf("姓名\t 性别\t 证件\t\t 入住\t 天数\t 房号\t 价格\t 押金\t 离开\n ");   
				printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->data.name,p->data.sex,p->data.ID, 
					p->data.come,p->data.day,p->data.number,p->data.price,p->data.yajin,p->data.leave );   
				printf("\n");     
			}
			else printf("该房间信息不存在!");break; 
		case 7:
			printf("**7.客户时间的查询**\n");    
			p=Cometime_Search(head);
			if(p!=NULL)   
			{
				printf("姓名\t 性别\t 证件\t\t 入住\t 天数\t 房号\t 价格\t 押金\t 离开\n ");    
				printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->data.name,p->data.sex,p->data.ID,
					p->data.come,p->data.day,p->data.number,p->data.price,p->data.yajin,p->data.leave );    
				printf("\n");  
			}    
			else printf("该房间信息不存在!");break;
		case 8: printf("**8.宾馆信息的修改**\n");         
			Info_Modify(head);break; 
		case 9: printf("**9.宾馆信息的删除**\n"); 
			Delete_info(head);break;   
		case 10: printf("**10.宾馆信息的输出**\n");    
			Output_allInfo(head); break;  
		case 11:printf("11.保存顾客信息");      
			SaveInfoToFile(head); break;
			//保存顾客信息到文件中   
		case 0:printf("**0.退出**\n");     
			exit(0);   
		default: break; 
		} 
	}
	return 0; 
}
//菜单函数 
char Display_Menu() 
{  
	int  i;  
	FILE *fp;
	char ch; 
	printf("\n\n\n\n\n\n");
	printf("                        *** 欢迎使用宾馆信息管理系统!***\n\n\n\n                                   **菜单**\n\n\n1.客房信息录入\n2.客人入住登记\n3.客人信息添加\n4.客人姓名查询\n5.客户性别查询\n6.宾馆房号查询\n7.入住时间查询\n8.客户信息修改\n9.宾馆信息删除\n10.信息显示\n11.保存信息\n0.退出") ;   
	if((fp=fopen("D:\\宾馆\\menu.txt","r"))==NULL) 
	{
		printf("菜单文件打开失败!");  
		exit(0);  
	} 
	ch=fgetc(fp);//从文件指针fp指向的文件中读取一个字符并返回
	while(ch!=EOF)//当信息没结束 
	{
		putchar(ch); //写到屏幕上
		ch=fgetc(fp);
	}
	printf("\n");
	for(;;)  
	{ 
		scanf("%d",&i); 
		printf("\n");  
		if(i<0||i>11) 
			printf("选择错误,重新选择:\n");   
		else break;
	}   
	return i;
}
listnode *ReadInfoFromFile() 
{ 
	FILE *fp;  
	int b; 
	fp=fopen("D:\\宾馆\\customer.txt","r");  
	listnode *p=NULL,*q=NULL,*head=NULL;
	p=(listnode *)malloc(sizeof(listnode));//将返回的指针(void*)强制转换成ListNode*   
	head=p;//打开等读的文件。分配一个表结点空间。头结点的下一结点为p     
	b=1;
	if(!fp)  
	{
		printf("文件打开失败!");  
		exit(0); 
	}
	else printf("文件打开成功");  
	while(!feof(fp)) //含有信息
	{  
		/*fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->next->data.name,p->next->data.se x,p->next->data.ID,          p->next->data.come,p->next->data.day,p->next->data.number,p->next->data.price,p->next->data. yajin,p->next->data.leave );*/  
		q=(listnode *)malloc(sizeof(listnode));   
		fscanf(fp,"%s%s%s%s%s%s%s%s",p->data.name,p->data.sex,p->data.ID,   
			p->data.come,p->data.day,p->data.number,p->data.price,p->data.yajin,p->data.leave); 
		p->next=q;
		q=p ;
		b++;
	}
	head=Add(head,b); 
	printf("\n"); 
	fclose(fp);  
	return head; 
}
//宾馆客户信息的建立 
linklist Create(int a)
{
	linklist head=(listnode *)malloc(sizeof(listnode));//结构体变量
	listnode *p,*q;  
	q=head;
	while(a--) 
	{
		p=(listnode *)malloc(sizeof(listnode)); 
		printf("姓名\t 性别\t 证件\t \t入住\t 天数\t 房号\t 价格\t 押金\t 离开\n "); 
		scanf("%s%s%s%s%s%s%s%s%s",p->data.name,p->data.sex,p->data.ID,   
			p->data.come,p->data.day,p->data.number,p->data.price,p->data.yajin,p->data.leave);//通过p访问p所指向属对象的数据成员data的数据成员 
		q->next=p;   
		q=p; 
	} 
	q->next=NULL; 
	return head; 
}
listnode* Add(linklist head,int b)//增加顾客信息 
{
	listnode *m,*n,*p;
	m=head;
	n=m->next;  
	while(n->next!=NULL)//判断返回值是否为空
	{
		m=n;  
		n=n->next; 
	}
	while(b--) 
	{
		p=(listnode *)malloc(sizeof(listnode));   
		printf("姓名\t 性别\t 证件\t \t入住\t 天数\t 房号\t 价格\t 押金\t 离开\n "); 
		printf("***************************\n"); 
		scanf("%s%s%s%s%s%s%s%s%s",p->data.name,p->data.sex,p->data.ID,        
			p->data.come,p->data.day,p->data.number,p->data.price,p->data.yajin,p->data.leave );  
		n->next=p;//把p的地址送给n的指针与即是n的下一节点
		n=p; 
	}
	n->next=NULL; 
	return head; 
}
//按姓名查找宾馆信息 
listnode *Name_Search(linklist head) 
{
	listnode *p;  
	char name[10];
	int i;  
	printf("按 1 表示姓名查找:");  
	p=head->next ;//头结点 
	scanf("%d",&i);  
	if(i==1) 
	{
		printf("输入要查询的姓名:");  
		scanf("%s",&name);
		while(p&&strcmp(p->data.name,name)>0)   
			p=p->next;   
		if(p==NULL||strcmp(p->data.name,name)<0)
			p=NULL;
	}
	else
		printf("输入错误!");  
	return p;
}
//按性别查找宾馆信息  
listnode *Sex_Search(linklist head)
{
	listnode *p; 
	char sex[10];
	int i;  
	printf("按 1 表示性别查找:");  
	scanf("%d",&i);
	p=head->next ;//头结点  
	if(i==1)  
	{
		printf("输入要查询的性别:");  
		scanf("%s",&sex); 
		while(p&&strcmp(p->data.sex,sex)>0)
			p=p->next; 
		if(p==NULL||strcmp(p->data.sex,sex)<0) 
			p=NULL;  
	}
	return p; 
}
//按房间号查找宾馆信息  
listnode *Roomnum_Search(linklist head)
{
	listnode *p;
	char number[10]; 
	int i;
	printf("按 1 表示房间号查找:");  
	p=head->next ;
	scanf("%d",&i);
	if(i==1)  
	{
		printf("输入要查询的房间号:");   
		scanf("%s",&number);
		while(p&&strcmp(p->data.number,number)>0)  
			p=p->next; 
		if(p==NULL||strcmp(p->data.number,number)<0)  
			p=NULL; 
	}
	return p; 
}
//按入住时间查找 
listnode *Cometime_Search(linklist head) 
{
	listnode *p; 
	char come[10]; 
	int i;  
	printf("按 1 表示入住时间查找:");  
	p=head->next ;
	scanf("%d",&i); 
	if(i==1) 
	{
		printf("输入要查询的入住时间:");  
		scanf("%s",&come); 
		while(p&&strcmp(p->data.come,come)>0) 
			p=p->next;  
		if(p==NULL||strcmp(p->data.come,come)<0)
			p=NULL; 
	}
	return p; 
}
//按客户姓名的信息修改  
void Info_Modify(linklist head) 
{  
	listnode *p;
	p=Name_Search(head);
	if(p==NULL)
	{ 
		printf("宾馆信息不存在!\n");  
	}  
	else
	{
		printf("姓名\t 性别\t 证件\t \t入住\t 天数\t 房号\t 价格\t 押金\t 离开\n ");
		printf("***************************\n");   
		scanf("%s%s%s%s%s%s%s%s%s",p->data.name,p->data.sex,p->data.ID,       
			p->data.come,p->data.day,p->data.number,p->data.price,p->data.yajin,p->data.leave );  printf("宾馆信息已修改!");    
	}
}
//客户信息的删除
void Delete_info(linklist head) 
{
	int i;  
	listnode *p,*q; 
	p=Name_Search(head);  
	if(p==NULL) 
	{
		printf("信息不存在!\n");   
		return;  
	}  
	else 
	{
		printf("按 1 删除:");   
		scanf("%d",&i);
		if(i==1) 
		{
			q=head;
			while(q!=NULL&&q->next!=p)  
				q=p->next;
			q->next=p->next; 
			free(p); 
			printf("信息已删除!");    
		}
	}
}
//宾馆信息的输出 
void Output_allInfo(linklist head) 
{
	listnode *p; 
	p=head;  
	printf("姓名\t 性别\t 证件\t \t入住\t 天数\t 房号\t 价格\t 押金\t 离开\n "); 
	while(p->next!=NULL)  { 
		
		printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->next->data.name,p->next->data.sex,p-> next->data.ID,      
			p->next->data.come,p->next->data.day,p->next->data.number,p->next->data.price,p->next->data. yajin,p->next->data.leave ); 
		p=p->next ;
	}
}
void SaveInfoToFile(linklist head) 
{ 
	FILE *fp;
	listnode *p; 
	p=head->next; 
	if(p==NULL) 
	{ 
		printf("现在没有顾客信息,请先输入顾客信息!\n\n"); 
		return; 
	}
	fp=fopen("D:\\宾馆\\customer.txt","w");  
	if(!fp) 
	{ 
		printf("文件不存在!\n");
		return;
	}
	while(p)  
	{
		fprintf(fp,"%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\t%s\n",p->data.name,p->data.sex,p->data.ID,      p->data.come,p->data.day,p->data.number,p->data.price,p->data.yajin,p->data.leave );     
		p=p->next; 
	}  
	fclose(fp);  
	printf("文件保存成功!\n"); 
} 

  • 1
    点赞
  • 5
    评论
  • 12
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 撸撸猫 设计师:马嘣嘣 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、C币套餐、付费专栏及课程。

余额充值