1.将单词测试中的功能完善,可针对做错的单词重复记忆。
基本思想:
错词来源:使用标记的方法判断再单词测试中该单词的背诵是否出现错误,如果出现错误则将该单词写入到wrong.txt文件中
错词加深背诵:当选择错词背诵时,读取wrong.txt文件中的所有单词,并保存到wrong_word数组中,采用遍历的凡是加深背诵
错词浏览:读取wrong.txt文件中的所有单词,并保存到wrong_word数组中,采用遍历输出所有单词
1)错词记忆(中英)
void memoryzy(){
char b1[20];
int z;
int choose=1;
int i=0;
while(choose)
{
printf("\n【%s】请输入英文单词:",wrong_word[i].ch);
scanf("%s",b1);
for(z=0;strcmp(b1,wrong_word[i].en)!=0;z=z)//比较单词,直到正确跳出循环
{
printf("\n输入错误!!请重新输入:");scanf("%s",b1);
c++;
}
i++;
printf("\n恭喜你,回答正确,加10分!\n\n");
d++;
if(i==wrong_num)
printf("错词加深完成\n");
printf("\n继续测试请选1,返回上一级请选0:");
scanf("%d",&choose);
if(choose==1&&i==wrong_num)
printf("没有更多的错词,将自动返回主菜单");
if(choose==0||i==wrong_num)
return;
}
}
2)错词记忆(英中)
由于算法基本相同再次就不粘贴源代码,只需要将上面代码中的所有的en改ch即可
3)错词浏览
void show_wrong(){
int i=0;
printf("\n单词: 英文 中文 ");
for(i=0;i<wrong_num;i++)
printf("\n %-12s%-12s",wrong_word[i].en,wrong_word[i].ch);
}
4)目录函数
void wrong()
{
FILE *fp;
int i=0;
int choice;
fp=fopen("wrong.txt","r");//从wrong.txt文件中读取错误单词
if(!fp)
{
printf("\n打开文件wrong.txt失败!");
}
while(fscanf(fp,"%s %s ",wrong_word[i].en,wrong_word[i].ch)==2)//将错误单词放入wrong_word数组中
{
i++;
}
wrong_num=i;
if(0==i)
{
printf("\n文件为空,请选择词典维护增加词条!");
return;
}
else
printf("\n");
fclose(fp);
for(int j=0;j<=wrong_num;j++){
printf("%s %s",wrong_word[i].en,wrong_word[i].ch);
}
int choose=1;
while(choose){
printf("\n1.中英加深背诵\n");
printf("2.英中加深背诵\n");
printf("3.错词浏览\n");
printf("4.退出\n");
printf("请选择:");
loop:
scanf("%d",&choice);
switch(choice)
{
case 1:
memoryzy();break;//功能3,单词背诵(中英)
case 2:
memoryyz(); break;//功能4,单词背诵(英中)
case 3:
show_wrong();break;
case 4:
return;//退出
default:
printf("输入有误,请重新选择:");
goto loop;
}
printf("\n返回上级请选1,退出请选0:");
scanf("%d",&choose);
}
}
2.查询单词的功能添加英文词查询,中文查询的功能完善(考虑如何显示同样中文意义,不同的英文单词)
基本思想:由于之前代码已经实现了该功能,先只做逻辑上的修改
在原来的代码中,采用遍历数组的方式比较字符串,一旦查询到符合条件的结果便跳出循环,因此只能显示一个结果
在修改后的代码中同样采用遍历数组的方式比较字符串吗,只是在跳出循环条件上稍作修改,必须遍历完整个数组再根据设置的标识符来判断是否找到单词,否则输出未找到单词的提示。对背诵错误的单词写入wrong.txt文件。
代码比较:
原代码:
void yztest()
{
char b1[20];
int z,x=41;
int choose=1;
int i;
i = rand()%num;
while(choose)
{
printf("【%s】请输入中文意思:",s[i].en);
scanf("%s",b1);
for(z=0;strcmp(b1,s[i].ch)!=0;z=z)
{
printf("输入错误!!请重新输入:");scanf("%s",b1);c=c+1;}
printf("\n恭喜你,回答正确,加10分!\n\n");d=d+1;
printf("\n继续测试请选1,返回上一级请选0:");
scanf("%d",&choose);
if(choose==0) return;
}
}
修改后代码:
void yztest()
{
char b1[20];
int z,x=41;
int choose=1;
int i;
struct word word;
while(choose)
{
i = rand()%num;
word=s[i];
printf("【%s】请输入中文意思:",s[i].en);
scanf("%s",b1);
for(z=0;strcmp(b1,s[i].ch)!=0;z++)
{
printf("输入错误!!请重新输入:");
scanf("%s",b1);
c++;
}
if(z>=1)
{
FILE *fp;
int i=0;
fp=fopen("wrong.txt","a");
if(!fp)
printf("\n打开文件data.txt失败!");
fprintf(fp,"\n%s %s ",word.en,word.ch);
printf("\n");
fclose(fp);
}
printf("\n恭喜你,回答正确,加10分!\n\n");
d++;
printf("\n继续测试请选1,返回上一级请选0:");
scanf("%d",&choose);
if(choose==0) return;
}
}
3.添加记录使用情况功能
基本思想:运行程序之前让用户通过键盘输入用户名,并保存起来,再根据用户的背诵单词情况相应的加分或者减分,在退出程序的时候将用户的背诵得分显示到屏幕,并将用户名和分数保存到score.txt文件中,在下次访问程序查看使用记录时即可看到之前的用户使用情况和分数
详细代码:
int main()
{
char username[20];
printf("请输入用户名:");
scanf("%s",&username);
int g;
g=getchar();
int score=0;
while(select)//判断当前是否为退出程序状态,否则跳出循环,退出程序
{
menu();
}
score=10*d-10*c;
printf("得分:%s %d \n",username,score);
writefile_score(username,score);
system("pause");
return 0;
}
void writefile_score(char username[20],int score)
{
FILE *fp;
int i=0;
fp=fopen("score.txt","a");
if(!fp)
{
printf("\n打开文件score.txt失败!");
}
fprintf(fp,"%s %d \n",username,score);
printf("\n");
fclose(fp);
}