C语言实现健身房会员管理系统(文件操作)

首先要创建3个文本文件,命名方式要么和我图中一样,要么要将代码中的读取文件地址改成你自己的:

代码【代码有点乱,适合应付用,很早之前写的】:

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<time.h>
typedef struct time//时间
{
	int year;//年
	int month;//月
	int day;//日
}Time;

struct Body//身体数据
{
	int num;//编号
	Time date;//日期
	int height;//身高
	int weight;//体重
	float propor;//腰臀比
};

struct Vip//会员顾客
{
	char ID[5];//会员卡号
	char name[21];//姓名
	int age;//年龄
	float balance;//余额
	int bodyNum;//身体数据条数 
	struct Body body[10];//10组身体数据
}vip[100];
int N = 0;//会员顾客人数初始为0 

struct ordinary//普通顾客
{
	char ID[5];//卡号
	char name[21];//姓名
	float balance;//余额
}ord[100];
int M = 0;//普通用户人数初始为0 

void Recharge(int n,int m);//充值函数 
void menu1()
{
	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^请选择功能^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	printf("\t1.注册\n");
	printf("\t2.登录\n");
	printf("\t0.退出\n");
}
void menu2()
{
	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^请选择功能^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	printf("\t1.普通顾客\n");
	printf("\t2.会员顾客\n");
	printf("\t0.退出\n");
	printf("请输入选择:"); 
}
void menu3()
{
	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^请选择功能^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	printf("\t1.健身\n");
	printf("\t2.充值\n");
	printf("\t0.退出\n");
	printf("请输入选择:");
}
void menu4()
{
	printf("^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^请选择功能^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n");
	printf("\t1.健身\n");
	printf("\t2.充值\n");
	printf("\t3.记录身体数据\n");
	printf("\t4.查看身体数据\n");
	printf("\t0.退出\n");
	printf("请输入选择:");
}
void num_to_str(int n,int m,char *pc)
{	int j,k=1,i=0;
	while(k<=n){k*=10;i++;}	
	k/=10; i=m-i;
	for(j=0;j<i;j++) pc[j]='0';
	while(k>1)
	{
		j=n/k;pc[i]=j+48;
		i++;n=n%k;k/=10;
	}
	pc[i]=n+48;i++;pc[i]='\0';
}
void get_date(int *year,int *mon,int *day,int *hour,int *min,int *sec)
{
	time_t rawtime;
	struct tm * timeinfo;
	time ( &rawtime );
	timeinfo = localtime ( &rawtime );
	*year=timeinfo->tm_year+1900;
	*mon=timeinfo->tm_mon+1;
	*day=timeinfo->tm_mday;
	*hour=timeinfo->tm_hour;
	*min=timeinfo->tm_min;
	*sec=timeinfo->tm_sec;
}

void fitness(int n,int m)
{
	int a,b,t,year,mon,day,hour,min,sec;
	get_date(&year,&mon,&day,&hour,&min,&sec);
	printf("进入健身房:%d年%d月%d日%d时%d分%d秒\n",year,mon,day,hour,min,sec);
	a=hour;
	get_date(&year,&mon,&day,&hour,&min,&sec);
	printf("离开健身房:%d年%d月%d日%d时%d分%d秒\n",year,mon,day,hour,min,sec);
	b=hour;
	t=b-a;
	if(t==0) t=1;
	if(m==0) 
	{
		ord[n].balance-=t*1;
		printf("扣款金额:%f\n",t*1.0);
		printf("余额:%f\n",ord[n].balance);
		if(ord[n].balance<0) Recharge(n,m);
	}
	if(m==1)
	{
		vip[n].balance-=t*0.8;
		printf("扣款金额:%f\n",t*0.8);
		printf("余额:%f\n",vip[n].balance);
		if(vip[n].balance<0) Recharge(n,m);
	}
	system("pause");
}

void Recharge(int n,int m)//充值函数 
{
	int money;
	printf("请输入充值金额:");
	scanf("%d",&money);
	if(m==0) 
	{
		ord[n].balance+=money;
		printf("当前余额:%f\n",ord[n].balance);
	}
	if(m==1) 
	{
		vip[n].balance+=money;
		printf("当前余额:%f\n",vip[n].balance);
	}
}

void bodyDataRecord(int n)
{
	int a,b,i,year,mon,day,hour,min,sec;
	for(i=1;vip[n].body[i-1].date.year;i++) 
		if(i==10) break;
	if(i<10)
	{
		get_date(&year,&mon,&day,&hour,&min,&sec);
		vip[n].body[i-1].date.year=year;
		vip[n].body[i-1].date.month=mon;
		vip[n].body[i-1].date.day=day;
		printf("日期为:%d年%d月%d日\n",vip[n].body[i-1].date.year,vip[n].body[i-1].date.month,vip[n].body[i-1].date.day);
		vip[n].body[i-1].num=i;
		printf("请输入身高:");
		scanf("%d",&vip[n].body[i-1].height);
		printf("请输入体重:");
		scanf("%d",&vip[n].body[i-1].weight);
		printf("请输入腰臀比:");
		scanf("%f",&vip[n].body[i-1].propor);
	}
	if(i==10)
	{
		printf("请输入需要删除的数据编号:");
		scanf("%d",&a);
		for(b=0;b<10;b++)
		{	if(vip[n].body[b].num==a) 
		{
				get_date(&year,&mon,&day,&hour,&min,&sec);
				vip[n].body[b].date.year=year;
				vip[n].body[b].date.month=mon;
				vip[n].body[b].date.day=day;
				printf("日期为:%d年%d月%d日\n",vip[n].body[b].date.year,vip[n].body[b].date.month,vip[n].body[b].date.day);
				printf("请输入身高:");
				scanf("%d",&vip[n].body[b].height);
				printf("请输入体重:");
				scanf("%d",&vip[n].body[b].weight);
				printf("请输入腰臀比:");
				scanf("%f",&vip[n].body[b].propor);
		}break;}
	}
}

void bodyDataShow(int n)
{
	int i;
	printf("编号\t日期\t身高\t体重\t腰臀比\n");
	for(i=0; i<vip[n].bodyNum; i++) 
	{
		printf("%d\t%d.%d.%d\t%d\t%d\t%f\n",vip[n].body[i].num,vip[n].body[i].date.year,vip[n].body[i].date.month,vip[n].body[i].date.day,vip[n].body[i].height,vip[n].body[i].weight,vip[n].body[i].propor);
	    if(!vip[n].body[i].date.year) 
		{printf("\n身体数据输出完毕!\n");break;}
	}
	system("pause");
}

void ordinary()
{
	char ID[5], name[21];
	int i,k,m=0;
	printf("卡号:");
	scanf("%s", ID);
	printf("姓名:");
	scanf("%s", name);
	menu3();
	scanf("%d",&k);
	for(i=0;i<100;i++)
	{
		if(strcmp(ord[i].ID, ID)==0)
		{
			switch(k)
			{
				case 1:fitness(i,m);break;
				case 2:Recharge(i,m);break;
				case 0:break;
			}
		}
	}
}
void vvip()
{
	char ID[5], name[21];
	int i, k, key=0, m=1;
	printf("卡号:");
	scanf("%s", ID); 
	printf("姓名:");
	scanf("%s", name);
	for(i=0; i<N; i++){
		if(strcmp(vip[i].ID, ID) == 0){//寻找对应卡号的会员 
			key = i;//记录会员下标 
			break;
		}
	}
	if(key >= N){
		printf("无此卡号,登录失败!");
		return;
	}
	menu4();
	scanf("%d",&k);
	switch(k)
	{
		case 1:fitness(key,m);break;
		case 2:Recharge(key,m);break;
		case 3:bodyDataRecord(key);break;
		case 4:bodyDataShow(key);break;
		case 0:break;
	}
}

void login(int k)//登录 
{
	if(k==1) 
	{
		printf("请登录:\n");
		ordinary();
	}
	if(k==2) 
	{
		printf("请登录:\n");
		vvip();
	}
}

void reg(int k)//注册 
{
	if(k==1)
	{
		printf("请输入0开头的三位卡号:\n");
	    scanf("%s",ord[M].ID);
	    printf("姓名:");
	    scanf("%s",ord[M].name);			
	    printf("充值金额:");			
	    scanf("%f",&ord[M].balance);		
	    printf("注册成功!\n");
	    M++;
//		system("cls");
	}
	if(k==2)
	{
		printf("请输入1开头的三位卡号:\n");
		scanf("%s",vip[N].ID);
		printf("姓名:\n");
		scanf("%s",vip[N].name);
		printf("年龄:\n");
		scanf("%d",&vip[N].age);
		printf("充值金额:\n");
		scanf("%f",&vip[N].balance);
	    printf("注册成功!\n");
		N++;
//		system("cls");
	}
}		
void readCustomers()//读取普通用户信息 
{
	int k=0; 
	FILE *fp;
	if((fp=fopen("普通顾客.txt","r"))!=NULL){	
		while(fscanf(fp, "%s %s %f", ord[k].ID,ord[k].name,&ord[k].balance) == 3){
			k++;
		}
		fclose(fp);
	}
	else{
		printf("文件打开失败!");
	}
	M=k;
}

void writeCustomers()//保存普通顾客信息 
{
	int i; FILE *fp;
	fp=fopen("普通顾客.txt","w");
	for(i=0; i<M; i++)
		fprintf(fp,"%s %s %f\n",ord[i].ID,ord[i].name,&ord[i].balance);
	fclose(fp);
}

void readVipCustomers()//读取vip用户信息 
{	int i,k=0; FILE *fp;
	if((fp=fopen("会员顾客.txt","r"))!=NULL)
	{	while(fscanf(fp,"%s %s %d %f",vip[k].ID,vip[k].name,&vip[k].age,&vip[k].balance) == 4)
		{
			vip[k].bodyNum = 0;//初始为0 
			k++;
		}
		fclose(fp);
	}
	else{
		printf("文件打开错误!");
	}
	N = k;
}

void writeVipCustomers()//保存vip顾客信息以及其对应的身体数据 
{
	FILE *fp, *fp1;
	fp = fopen("会员顾客.txt","w");
	fp1 = fopen("会员顾客身体数据.txt", "w");
	if(fp == NULL || fp1 == NULL){
		printf("文件打开失败!会员顾客信息保存出错\n");
		return;
	}
	for(int i=0; i<N; i++){
		fprintf(fp, "%s %s %d %f\n", vip[i].ID, vip[i].name, vip[i].age, vip[i].balance);//保存会员数据 
		for(int j=0; j<vip[i].bodyNum; j++){//循环保存会员身体数据 
			fprintf(fp, "%s %d %d %d %d %d %d %f\n", vip[i].ID, vip[i].body[j].num, vip[i].body[j].date.year, vip[i].body[j].date.month, vip[i].body[j].date.day, vip[i].body[j].height, vip[i].body[j].weight, vip[i].body[j].propor);
		}
	}
	fclose(fp);
	fclose(fp1);
}

void readBodyData(){//读取身体数据 
	int k=0; FILE *fp;
	char ID[15];//卡号 
	int num;//编号
	Time date;//日期
	int height;//身高
	int weight;//体重
	float propor;//腰臀比
//	int year, month, day;//年月日 
	if((fp=fopen("会员顾客身体数据.txt","r"))!=NULL)
	{
		while(fscanf(fp,"%s %d %d %d %d %d %d %f", ID, &num, &date.year, &date.month, &date.day, &height, &weight, &propor) == 8)
		{
			Body newBody;//创建一个新body【身体数据】结点 
			//把读取的到的信息赋值给新结点
			newBody.date = date; 
			newBody.num = num;
			newBody.height = height;
			newBody.propor = propor;
			newBody.weight = weight;
			for(int i=0; i<N; i++){//循环会员数据 
				if(strcmp(vip[i].ID, ID) == 0){//找到对应ID的会员 
					vip[i].body[vip[i].bodyNum++] = newBody; //赋值给对应会员的身体数据,并且身体数据数量+1 
					break; 
				}
			}
		}
		fclose(fp);
	}
	else printf("文件打开失败!");
}

int main()
{
	int choice,k;
	readCustomers();//读取普通顾客信息 
	readVipCustomers();//读取vip顾客信息 
	readBodyData();//读取身体数据信息 
	while(true){
		menu1();
		printf("请输入选择:"); 
		scanf("%d", &choice);
		switch(choice)
		{
			case 0:
				printf("程序已退出,谢谢使用!\n");
				exit(0);//退出程序 
			case 1:
				menu2();
				scanf("%d",&k);
				reg(k);
				break;
			case 2:
				menu2();
				scanf("%d",&k);
				login(k);
				break;
			default:
				printf("您输入的选择无效,请重新输入:");
				break;
		}
		system("cls");
	}
	writeCustomers();//保存普通用户信息 
	writeVipCustomers();//保存vip用户信息及其身体数据 
	return 0; 
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值