本文为大家分享了C语言单词小助手的具体实现代码,供大家参考,具体内容如下
一.题目分析
单词小助手,要求完成以下任务:
1.改写程序为良好程序风格(文档注释,函数注释,语句注释)。
2.将单词测试中的功能完善,可针对做错的单词重复记忆。
3.查询单词的功能添加英文词查询,中文查询的功能完善(考虑如何显示同样中文意义,不同的英文单词)
提高要求:
可将程序中的不足(如数据验证,排名功能)等根据自己的能力与理解完成。
二.算法构造(新增函数)
流程图
(1)总流程图
(2)search()函数流程图
(3)repeat()函数流程图
三.程序实现
#include#include #include #define MAX_CHAR 20 // 最大字符 #define MAX_NUM 200 // 单词的最大个数 struct word //单词的结构体 { char en[MAX_CHAR]; // 英文形式 char ch[MAX_CHAR]; //中文形式 } s[MAX_NUM]; //单词数组 int num; //单词个数 int select=1;//select 为是否退出系统的标记 int d=0,c=0;//c为答错的次数,d为答对的次数 //帮助 void help() { printf("n本系统主要实现英语单词学习的功能。用户可对词典文件中的单词进行预览,增删改查。"); printf("n同时还可进行中英、英中测试。本系统还提供了测试成绩的显示功能。"); } //从文件中读取单词的信息 void readfile() { FILE *fp; int i=0; fp=fopen("E:\data.txt","r"); if(!fp) { printf("n打开文件data.txt失败!"); } while(fscanf(fp,"%s %s ",s[i].en,s[i].ch)==2) { i++; } num=i; if(i==0) printf("n文件为空,请选择词典维护增加词条!"); else printf("n"); fclose(fp);//关闭文件 } //向文件中写入单词 void writefile() { FILE *fp; int i=0; fp=fopen("E:\data.txt","w"); if(!fp) { printf("n打开文件data.txt失败!"); } for(i=0;i i;j--) if(strcmp(s[j-1].en,s[j].en)>0) { strcpy(temp,s[j-1].en); strcpy(s[j-1].en,s[j].en); strcpy(s[j].en,temp); strcpy(temp,s[j-1].ch); strcpy(s[j-1].ch,s[j].ch); strcpy(s[j].ch,temp); } } } //定义记忆文件函数,用来记忆背诵错误的单词,将背诵过程中错误的单词写入Repeat文件 void readRepeatfile() { FILE *fp; int i=0; fp=fopen("E:\Repeat.txt","r");//增强记忆文件 if(!fp) { printf("n打开文件失败"); } while(fscanf(fp,"%s %s",s[i].en,s[i].ch)==2) { i++; } num=i; if(i==0)//没有错题 printf("n没有错题"); else printf("n"); fclose(fp); } //添加单词信息 void add() { int i=num,j,flag=1; int a=0,k=0; printf("你想添加几个单词:"); scanf("%d",&a); while(flag) { for(k=0;k 四.经验归纳
这次的上机实验很有趣,但是也很高级,老师一开始就给了一个基本框架了,我只需要往里面增添,修改一些些就好了。
(1)首先,我把主界面的选择序号改了一点点,因为以我个人而言,我用不惯从0开始。也在里面根据我自己的理解,加了些注释。
(2)在search()函数中,因为一个相同的中文意思可能会有多个英语单词与之对应,原来的代码进行遍历之后就break了循环,自然只能查询到一个英文单词,我做的是遍历整个数组,同时用一个下标index = -1 进行标记,同时打印该单词的中英文,下标index的值改为当前数组的下标i ,继续遍历打印,同时标记,遍历完整个数组就可以打印多个拥有相同中文解释的不同的英文单词. 而index的作用就是,如果遍历完整个数组index仍等于-1,那么就说明没有查到该单词,可以进行查询为空的判断.
(3)在add()函数中,我添加了一个for循环,是录入单词变得更简洁了。
(4)我也加入了错题功能,在测试中,回答错误的单词会被加入在repeat.txt文件中,然后用随机数,抽取出来,再次回答,在这里,我改了一下下计分,在错题库的中出来重新回答的题目,答对不加分,答错还是会扣分,所以,还是最好有了没记住的单词 就赶快记下它哦。
(5)调试中发现我在search()中把s[i].en和s[i].ch给弄反了。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持考高分网。



