C语言单词小助手

1.改写程序为良好程序风格(文档注释,函数注释,语句注释)。
2.将单词测试中的功能完善,可针对做错的单词重复记忆。
3.查询单词的功能添加英文词查询,中文查询的功能完善(考虑如何显示同样中文意义,不同的英文单词)
提高要求:
可将程序中的不足(如数据验证,排名功能)等根据自己的能力与理解完成。

 

1.首先我对原本整个代码的格式进行了调整,使代码看起来更加的舒服一些

 

2.先将第三点要求放到第二点来陈述吧.原本的代码只能进行中输入中文查询单词,对此我添加了输入英文查询单词的,这和原本的中文查询单词的代码基本一致,只需修改几个变量,用一个switch语句给你选择两种查询方式即可.

一个相同的中文意思,会有多个不同的英文单词,原来的代码进行遍历之后就break了循环,自然只能查询到一个英文单词,我做的是遍历整个数组,同时用一个下标index = -1 进行标记,同时打印该单词的中英文,下标index的值改为当前数组的下标i ,继续遍历打印,同时标记,遍历完整个数组就可以打印多个拥有相同中文解释的不同的英文单词. 而index的作用就是,如果遍历完整个数组index仍等于-1,那么就说明没有查到该单词,可以进行查询为空的判断.具体代码如下.

void search()
{
    int i = 0, choose = 0, flag = 1;
    int index = -1; //检索到该单词的中文或者英文的下标
    int option = 0;
    char ch[MAX_CHAR];   //中文形式
    char en[MAX_CHAR];
    while(1){
        printf("请输入1.以中文查询单词2.以英文查询单词0.退出");
        scanf("%d", &option);//可选中英文查询
        switch(option)
        {
        case 1: 
            while(1)
            {
                printf("\n请输入你要查询的单词中文形式:");    
                scanf("%s", ch);
                for(i=0; i<num; i++)//遍历找到所有该中文对应的单词
                    if(strcmp(s[i].ch, ch) == 0 && index == -1)  //输出该单词的中英文形式
                    {    
                        printf("\n英文形式       中文形式        ");
                        printf("\n   %-12s%12s", s[i].en, s[i].ch);    
                        index = i;
                    }else if(strcmp(s[i].ch, ch) == 0)
                    {
                        printf("\n   %-12s%12s", s[i].en, s[i].ch);
                        index = i;
                    }
                    if(index == -1)        //如果没找到该单词,下标仍为初始值-1
                    {
                        flag = 0;         //让flag = 0; 表示没有该单词
                    }
                    if(!flag)               
                        printf("\n没有这个单词!");
                    index = -1;          //将index 和flag的值重新初始化为原来的值
                    flag = 1;
                    printf("\n继续查询请选1,返回上一级请选0:");     //选择是否继续查询
                    scanf("%d", &choose);
                    if(choose == 0) 
                        break;
            }
            break;
        case 2:                         //查询该英文形式对应的单词,方法如上
            while(1)
            {
                printf("\n请输入你要查询的单词英文形式:");    
                scanf("%s", en);
                for(i=0; i<num; i++)//先找到该英文形式对应的序号
                    if(strcmp(s[i].en, en) == 0)
                    {    
                        printf("\n英文形式       中文形式        ");
                        printf("\n   %-12s%12s", s[i].en, s[i].ch);    
                        index = i;
                    }
                    if(index == -1)
                    {
                        flag = 0;
                    }
                    if(!flag)     
                        printf("\n没有这个单词!");
                    index = -1;
                    flag = 1;
                    printf("\n继续查询请选1,返回上一级请选0:");
                    scanf("%d", &choose);
                    if(choose == 0) 
                        break;
            }
        default:
            return;
        }
    }

   
}

3.做错单词的重复记忆,以及成绩的排名.数据验证的优化我是同时处理的,由于有中-英, 英-中两种测试方式,两种测试方式的功能添加,其实是一致的,于是做错单词的重复记忆,以及成绩的排名,数据验证的优化我是只在中文意思写出英文单词的检测中进行添加,云本的代码一个随机单词的测试,需要不断输入单词,无法跳出,直到你输入单词正确为止,对此我进行了修改,当你输错三次的时候,你可以继续该单词的测试,也可以选择重新随机一个单词进行测试,于此同时,输错三次的单词会录入到错题库数组中,并且可以写出到wrong.txt的一个错题库中,在主菜单里添加了一项可以回顾错题的功能,将做错的单词进行重复记忆,

这些错题库中单词的中文和英文都是直接给出的,当然也可以设计成测试模式,给英文,写中文,或者给中文写英文,与原代码中的功能模块中的代码是相似的.

关于成绩的排名:原来的代码是输入一次错误扣10分,输入一次正确加10分.无限累加,给一个总分,我的理解是,会有多个人进行单词测试,而在每次测试结束的时候,进行一个名字+成绩的一个录入, 存完会对成绩的数组进行从高到低的排序,排行榜的人数最大为10人,最低分会进行覆盖.

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值