C语言客房管理系统课程设计

注:

1、这是本人大一时的C语言课程设计,程序朴实无华。

2、以下所有的代码块已包含我所有的源码

3、学弟们有啥不懂的我们可以相互交流

总体设计

下面来分析一下整个系统,根据上面的要求分析,可将这个系统设计为五大模块(见下图):登记模块,统计模块,查询模块,修改模块,退出模块。其主要功能为:注册,统计,查询,修改,退房功能。

一、头文件以及结构体

#include<stdio.h>

#include<conio.h>

#include<stdlib.h>

#include<string.h>

#define NUM 50                      //定义常量NUM

void input();

void record();

void find();

void modify();

//建立如下结构体:

struct Client

{  

  char name[20];  

  char sex[10];

  int age;

  char ID_card[20];

  int year;

  int month;  

  int date;       

  int Room_ID;  

  char Tel[15];     

  int Price;   

  char Sign[10];   

  }Room[NUM];

二、保存和读取函数

1、保存函数用于将输入的数据保存到文本文件客户信息.txt文件中,实现数据的保存

void save()
{
	FILE *fp;
	int i;
	if ((fp=fopen("客户信息.txt","a+"))==NULL)	/*a+表示以读和追加方式打开文件客户信息.txt */
	{printf("cannot open file\n");
	return;}
	for(i=0;i<NUM&&Room[i].age!=0;i++)
	fprintf(fp,"%s %s %d %s %d %d %d %d %s %d %s\n",Room[i].name,Room[i].sex,Room[i].age,Room[i].ID_card,Room[i].year,Room[i].month,Room[i].date,Room[i].Room_ID,Room[i].Tel,Room[i].Price,Room[i].Sign);
//按照规定的格式保存客户信息
	fclose(fp); 
}

2、读取函数将文本文件客户信息.txt中的客户个人信息读取出来,从而实现统计、查询以及修改的功能。

void read()
{
FILE *fp;
int i;
if((fp=fopen("客户信息.txt","r"))==NULL)
  {printf("\nCannot open file\n");
	return;}
  for(i=0;!feof(fp);i++)			//!feof(fp)文件读到结束时读取停止
fscanf(fp,"%s %s %d %s %d %d %d %d %s %d %s\n",&Room[i].name,&Room[i].sex,
&Room[i].age,&Room[i].ID_card,&Room[i].year,&Room[i].month,&Room[i]. date,&Room[i].Room_ID,&Room[i].Tel,&Room[i].Price,&Room[i].Sign,&now_no); 
	fclose(fp);
}

三、按照房间号查找函数

int search(int num)
{
	int i,k=1;
	read();
	for(i=0;i<NUM;i++)
	{
		if(Room[i].Room_ID==num)
		{
			return 1;
			k=0;
		}
	}
		if(k)
			return 0;
		return 0;
}

四、登记模块

用于完成客户个人信息的输入功能并保存。本函数的功能为先要在文件中查找房间状态,若可以出借,则允许入住,把房客信息(房间号、价格、房间状态、入住人姓名、入住人身份证号等)添加到记录中,并把房间状态改为已住。

void input()
{
	int i,right,index;
	char as;
	do
	{
		printf("\t\t\t\t1.宾客入住登记\n");
		do
		{
			printf("请输入房间号:\n");
			scanf("%d",&i);
			index=search(i);
			if(index)
			{printf("已有宾客居住,请重新输入!\n");
			right=1;
			getchar();}
			else
				right=0;
			Room[i-1].Room_ID=i;
		}
		while(right==1);
		printf("\n输入宾客的姓名:");
		scanf("%s",Room[i-1].name);
		printf("\n输入宾客性别:");
		scanf("%s",Room[i-1].sex);
	printf("\n输入宾客的年龄:");
	scanf("%d",&Room[i-1].age);
	printf("\n输入宾客身份证号:");
	scanf("%s",Room[i-1].ID_card);
	printf("\n输入宾客入住时间:");
	scanf("%d",&Room[i-1].year);
	scanf("%d",&Room[i-1].month);
	scanf("%d",&Room[i-1].date);
	printf("\n输入宾客电话号:");
	scanf("%s",Room[i-1].Tel);
	printf("\n输入宾客房间价格:");
	scanf("%d",&Room[i-1].Price);
	printf("\n输入该房间是否入住(yes/no):");
	scanf("%s",Room[i-1].Sign);//输入客户的个人信息
	Room[i-1].Room_ID=i;
	printf("\n\n");
	printf("是否继续输入?(Y/N)");		//判断是否继续输入
	as=getch();
	system("cls");
    save();
	}
	while(as!='n'&&as!='N');
	system("cls");				//清屏
}

五、统计模块

用于统计总共入住的人数,并且可以统计某一天住了多少人以及收入多少。

void record()
{
	int i,j,y,m,d,s=0,money=0;
	char as;
	int n=0;
		read();
	do
	{printf("\n客房入住总数: ");
	fflush(stdin);	
	for(j=0;j<NUM;j++)
		if(!strcmp(Room[j].Sign,"yes"))
		n=n+1;
	if(n==0)
	{
	printf("%d间\n",n);	//统计一共入住的人数
		break;
	}
	printf("%d间\n",n);	//统计一共入住的人数
	printf("输入查询日期: "); 		//按照日期统计入住人数及收入
	scanf("%d%d%d",&y,&m,&d);
	fflush(stdin);
	for(i=0;i<=NUM;i++)
		if(((Room[i].year==y)&&(Room[i].month==m)&&(Room[i].date==d)))
//判断输入的日期与数据库中的哪些日期相同
		{s=s+1;
		money=money+Room[i].Price;
		printf(" 姓名:%s\n 性别:%s\n 年龄:%d\n 身份证号:%s\n 入住时间:%d年%d月%d日\n 房间号:%d\n 电话号:%s\n 价格:%d\n 是否入住:%s\n",Room[i].name,Room[i].sex,Room[i].age,Room[i].ID_card,Room[i].year,Room[i].month,Room[i].date,Room[i].Room_ID,Room[i].Tel,Room[i].Price,Room[i].Sign);
		}
		printf("\n该天客房入住总数: %d人\n",s); 
		printf("该天共收入%d元\n",money);
		printf("\t按任意键返回主菜单.");
		as=getch();
		system("cls");
	}
	while(!as);
	system("cls");
}

六、查询模块

本函数的功能为输出查询功能菜单选项,包括房间号、价格、房间标记、用户姓名、居份证查询等功能。系统根据输入的选项执行相应的函数。

void find()
{
	int i,a,b,c;
	char str[20],as,d[20],e[10];
	read ();
	do
	{
		printf("\n按以下条件查询:1.宾客姓名 2.房间号 3.房间价格 4.身份证号 5.房间标记 6.返回主菜单\n请选择:");
		scanf("%d",&a);
		switch(a)
		{
		case 1:
			do
			{printf("输入要查询的宾客:");
			fflush(stdin);
			gets(str);
			for(i=0;i<NUM;i++)
			if(!strcmp(Room[i].name,str))
printf(" 姓名:%s\n 性别:%s\n 年龄:%d\n 身份证号:%s\n 入住时间:%d年%d月%d日\n 房间号:%d\n 电话号:%s\n 房间价格:%d\n 该房间是否入住(yes/no)%s\n\n",Room[i].name,Room[i].sex,Room[i].age,
Room[i].ID_card,Room[i].year,Room[i].month,Room[i].date,Room[i].Room_ID,Room[i].Tel,Room[i].Price,Room[i].Sign);
			else;
			}
			while(!as);
			break;
		case 2:
		do
		{
			printf("输入要查询的房间号:");
			scanf("%d",&b);
		for(i=0;i<NUM;i++)
			if(Room[i].Room_ID==b)
printf(" 姓名:%s\n 性别:%s\n 年龄:%d\n 身份证号:%s\n 入住时间:%d年%d月%d日\n 房间号:%d\n 电话号:%s\n 房间价格:%d\n 该房间是否入住(yes/no)%s\n\n",Room[i].name,Room[i].sex,Room[i].age,Room[i].ID_card,Room[i].year,Room[i].month,Room[i].date,Room[i].Room_ID,Room[i].Tel,Room[i].Price,Room[i].Sign);
				else;
		}
		while(!as);
		break;
		case 3:
			do
			{
				printf("输入要查询的房间价格:");
				scanf("%d",&c);
				for(i=0;i<NUM;i++)
					if(Room[i].Price==c)
						printf(" 姓名:%s\n 性别:%s\n 年龄:%d\n 身份证号:%s\n 入住时间:%d年%d月%d日\n 房间号:%d\n 电话号:%s\n 房间价格:%d\n 该房间是否入住(yes/no)%s\n\n",Room[i].name,Room[i].sex,Room[i].age,Room[i].ID_card,Room[i].year,Room[i].month,Room[i].date,Room[i].Room_ID,Room[i].Tel,Room[i].Price,Room[i].Sign);
					else;
			}
			while(!as);
			break;
			case 4:
			do
			{
				printf("输入要查询的身份证号:");
				scanf("%s",d);
				for(i=0;i<NUM;i++)
					if(!strcmp(Room[i].ID_card,d))
						printf(" 姓名:%s\n 性别:%s\n 年龄:%d\n 身份证号:%s\n 入住时间:%d年%d月%d日\n 房间号:%d\n 电话号:%s\n 房间价格:%d\n 该房间是否入住(yes/no)%s\n\n",Room[i].name,Room[i].sex,Room[i].age,Room[i].ID_card,Room[i].year,Room[i].month,Room[i].date,Room[i].Room_ID,Room[i].Tel,Room[i].Price,Room[i].Sign);
					else;
			}
			while(!as);
			break;
			case 5:
			do
			{
				printf("输入要查询的房间标志:");
				scanf("%s",e);
				for(i=0;i<NUM;i++)
					if(!strcmp(Room[i].Sign,e))
						printf(" 姓名:%s\n 性别:%s\n 年龄:%d\n 身份证号:%s\n 入住时间:%d年%d月%d日\n 房间号:%d\n 电话号:%s\n 房间价格:%d\n 该房间是否入住(yes/no)%s\n\n",Room[i].name,Room[i].sex,Room[i].age,Room[i].ID_card,Room[i].year,Room[i].month,Room[i].date,Room[i].Room_ID,Room[i].Tel,Room[i].Price,Room[i].Sign);
					else;
			}
			while(!as);
			break;
		case 6:system("exit");
		default:
		break;
		}
		printf("是否继续查询?(Y/N)\n");
		as=getch();
	}
	while(as!='n'&&as!='N');
		system("cls");
}

七、修改模块

本函数的功能为系统根据输入的调出该用户及所在房间信息,同时输出修改功能菜单选项,包括修改姓名、修改性别、修改年龄、修改身份证号、修改日期、修改电话号码修改房间价格。系统根据输入的选项修改用户相应的信息。

void modify()
{
	int i,x,a;
	char as;
	printf("输入要修改的房间号:");
	scanf("%d",&a);
	read ();
	do 
	{
	for(i=0;i<NUM;i++)
		if(Room[i].Room_ID==a)
		{system("cls");
		printf(" 姓名:%s\n 性别:%s\n 年龄:%d\n 身份证号:%s\n 入住时间:%d年%d月%d日\n 电话号:%s\n 价格:%d\n 是否入住:%s\n\n",Room[i].name,Room[i].sex,Room[i].age,Room[i].ID_card,Room[i].year,Room[i].month,Room[i].date,Room[i].Tel,Room[i].Price,Room[i].Sign);
	printf("请选择要修改的容:\n1.姓名 \t\t2.性别 \t\t3.年龄 \t\t4.身份证号 \n5.入住时间 \t6.电话号\t7.价格\n请选择:");
//按照不同的选择修改相应的容
			scanf("%d",&x);
			switch(x)
			{
			case 1:	
				printf("\n\t\t输入新插入宾客信息\n");
				printf("\n输入宾客姓名:");
				scanf("%s",Room[i].name);break;
			case 2:
				printf("\n输入宾客性别:");
				scanf("%s",&Room[i].sex);break;
			case 3:
				printf("\n输入宾客的年龄:");
				scanf("%d",&Room[i].age);break;
			case 4:
				printf("\n输入宾客身份证号:");
				scanf("%s",&Room[i].ID_card);break;
			case 5:
				printf("\n输入宾客入住时间:");
				scanf("%d",&Room[i].year);
				scanf("%d",&Room[i].month);
				scanf("%d",&Room[i].date);break;
			case 6:
				printf("\n输入宾客电话号:");
				scanf("%s",&Room[i].Tel);break;
			case 7:
				printf("\n输入宾客房间价格:");
				scanf("%d",&Room[i].Price);
			case 8:system("exit");
			default:system("cls");
			}
		printf("\n");
		save();
printf("\n 姓名:%s\n 性别:%s\n 年龄:%d\n 身份证号:%s\n 入住时间:%d年%d月%d日\n 手机号:%s\n 价格:%d\n 是否入住:%s\n",
Room[i].name,Room[i].sex,Room[i].age,Room[i].ID_card,Room[i].year,Room[i].month,Room[i].date,Room[i].Tel,Room[i].Price,Room[i].Sign);
		break;
		}as=getch();
	}while(!as);
	system("cls");
}

八、退房模块

本函数的功能根据输入的房间号判断该房间入住状态,若有宾客居住把房间状态改为空置,把房客信息删除。

​
void OutRoom()      //退房函数
{
    int i,j;
    system("cls");
    printf("                                    退房管理\n");
    printf("请输入房间号:\n");
    scanf("%d",&i);
    printf("确认要退%d号房吗?(1:Y/0:N)",i);
    scanf("%d",&j);
    if(j==1)
	{
        if(Room[i-1].Room_ID==i)
		{
			Room[i-1].Room_ID=0;
strcpy(Room[i-1].name," ");
strcpy(Room[i-1].sex," ");
Room[i-1].age=0;
strcpy(Room[i-1].ID_card," ");
Room[i-1].year=0;
Room[i-1].month=0;
Room[i-1].date=0;
strcpy(Room[i-1].Tel," ");
strcpy(Room[i-1].Sign,"no");
            save();
            system("cls");
            printf("退房成功\n");
		}
        else
		{
            system("cls");
            printf("该房间为空房\n");
		}
	}
    printf("要返回首页吗?(1:Y,0:N)");
    scanf("%d",&j);
    if(j==0)
	{
        OutRoom();
	}
    system("cls");
}

​

九、主函数

​
​
int main()
{
	int as;
start:
	do
	{
		printf("\t***********************************");
		printf("\n\t\t欢迎使用客房管理系统\n");
		printf("\n\t\t|   1.宾客入住登记   |\n\t\t|   2.统计宾客信息   |\n\t\t|   3.查询宾客信息   |\n\t\t|   4.修改宾客信息   |\n\t\t|   5.退房系统       |\n\t\t|   6.退出           |\n");
		printf("\t***********************************\n");
		printf("\t\t选择功能选项: ");	//选择语句用于选择不同的模块
		fflush(stdin);
		scanf("%d",&as);
		switch(as)
		{case 1:system("cls");input();break;
		case 2:system("cls");record();break;
		case 3:system("cls");find();break;
		case 4:system("cls");modify();break;
		case 5:system("cls");OutRoom();break;
		case 6:system("exit");printf("成功退出系统\n");exit(0);
		default:system("cls");goto start;}
	}while(1);
 }

​

​
  • 17
    点赞
  • 84
    收藏
    觉得还不错? 一键收藏
  • 18
    评论
评论 18
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值