首先要创建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;
}