概述
本文编写实现单词本程序中的“退出并打卡”功能模块,在索引文章中我们提到过,当用户选择执行此程序时,退出单词本并打卡。
源代码
void Exit()
{
typedef struct yhsj //定义结构体
{
char name[20];
char password[8];
int dkts;
}sj;
sj yhxx[1000]; //定义结构体数组,用来存储用户信息
int i=0,a,count=0; //a为选择变量,
printf("是否确认退出并打卡(1、是,2、否):");
scanf("%d",&a);
system("cls");
if(a==1) //若用户选择进行打卡,则执行此步骤
{
FILE *fp; //打开文件,调出用户数据
fp=fopen("D:\\Ctext\\yonghushuju.txt","r");
if(!fp) //判断文件是否成功打开
{
printf("file error!\n");
exit(1);
}
fscanf(fp,"%s%s%d",yhxx[i].name,yhxx[i].password,&yhxx[i].dkts);
while(!feof(fp))
{
i++;
fscanf(fp,"%s%s%d",yhxx[i].name,yhxx[i].password,&yhxx[i].dkts);
}
count=i; //用户总数
fclose(fp);
for (i=0;i<count;i++) //用for循环找到该用户对应的结构体,并对打卡次数进行“+1”
{
if(!strcmp(mingzi,yhxx[i].name))
{
yhxx[i].dkts++;
printf("你已成功退出并累计打卡%d次。\n",yhxx[i].dkts);
getchar();getchar();
break;
}
}
fp=fopen("D:\\Ctext\\yonghushuju.txt","w+");
if(!fp)
{
printf("file error!\n");
exit(1);
}
for(i=0;i<count;i++) //将更新后的用户数据重新写入文件
{
fprintf(fp,"%s %s %d\n",yhxx[i].name,yhxx[i].password,yhxx[i].dkts);
}
fclose(fp);
exit(1);
}
else if(a==2) //不退出则重新回到菜单栏
{
Menu();
}
}
效果图
(1)选择“退出”功能:
(2)按下回车键后:
后记
上述代码只实现了记录打卡次数的功能,有兴趣的读者可以自行加上一些扩展功能,如用户可以选择是否进行打卡,或者将打卡次数改为打卡天数等。