自编记单词小程序项目(自定义词库,多功能)C/C++语言实现 您所在的位置:网站首页 游戏过程英语怎么写单词 自编记单词小程序项目(自定义词库,多功能)C/C++语言实现

自编记单词小程序项目(自定义词库,多功能)C/C++语言实现

2024-06-25 14:57| 来源: 网络整理| 查看: 265

一款方便实用又简洁的记单词小程序,自定义单词库,多功能协助记忆!!!

在这里插入图片描述github地址:https://github.com/Knock-man/Memorizing-words-program 如今市面上的记单词app都是规定词库,有时候不能满足我们通常记忆单词的需求,比如我们记忆针对性单词,比较难记忆的单词,记完了需要复习的单词,在市面上的app无法添加自己的词库,都得按照导入的单词数书从头开始记忆,而本人写这个小程序的目的,也就是本程序的特点:“可设置自定义单词库!可设置自定义单词库!可设置自定义单词库!重要的事情说三遍”,除此之外还可以满足我们记单词过程中的多种需求,而且操作简洁,十分适用于天天在死啃单词小伙伴!!!

本人就是天天死啃单词一党,记单词突发奇想创造了这个程序

话不多说!!!开始出使用教程(代码最后会附上)

使用十分方便简单也是本程序一大特点,所以不用担心会麻烦,而且词库是永久性的,一次导入,终身使用,所以也需要担心单词会丢失的问题

顺便提一句担心会有没有写过C的萌新,附上编译器下载地址:Dev-cpp5.4.0

一、创建自己的词库

1.创建文件 在电脑上建立一个新文件,编译运行代码的路径选择到这个文件夹即可 (我在桌面上建立了文件) 在这里插入图片描述 2.运行代码 拷贝我的代码到编译器中编译运行即可,注意编译运行的代码存放路径放入刚才创建的文件下 在这里插入图片描述 运行后将出现菜单页面

在这里插入图片描述 3.创建词库 注意:词库会在自己添加第一个单词时会自动创建,但一旦创建就永久存在 输入1→输入单词 单词随意输入多少个都没问题,输入m退出添加单词 在这里插入图片描述 出现以下页面表示添加成功,按回车返回菜单 在这里插入图片描述 菜单栏下输入6可以看见刚才添加进词库的单词 在这里插入图片描述 打开刚才创建的文件也可以看到词库 在这里插入图片描述 打开词库文件 在这里插入图片描述 以后想添加删除更新词库单词也直接在这里修改,但是注意不要出现多余的回车,修改结束后要保证光标停留在最后一个单词的末尾,也可以直接在程序中和刚才一样进行添加

二、功能介绍

1.添加新单词 可以在外部词库txt文件中添加,也可以输入1在程序中添加,添加的单词会自动永久保存到词库中 2.默写中文 会根据词库随机抽取单词进行中文提问,输入答案之后会自动评测,打分 在这里插入图片描述3.默写英文 会根据词库随机抽取单词进行英文提问,输入答案之后会自动评测,打分 在这里插入图片描述4.根据中文选择英文 会根据词库随机抽取四个单词组成选项ABCD,并进行英文提问,选择选项之后会自动评测,打分(此功能词库最少需要有四个单词) 在这里插入图片描述 5.根据英文选择中文 会根据词库随机抽取四个单词组成选项ABCD,并进行中文提问,选择选项之后会自动评测,打分(此功能词库最少需要有四个单词) 在这里插入图片描述6.查看词库列表 可以查看词库单词、单词个数 在这里插入图片描述7.查找单词 可以根据需求对词库单词进行查找,输入中文可查英文,输入英文可查中文难 在这里插入图片描述 在这里插入图片描述 8.当天复习 录入当天所记词汇,进行复习检测,错误三次单词将自动录入词库 在这里插入图片描述 在这里插入图片描述

三、其他操作说明

1.输入m键返回菜单

2.输入q键退出

3.回车键下一题或者返回上一步或者返回菜单

4.操作过程中会进行自动记分

5.详细见程序的帮助

四、后期使用

程序运行一次之后,不需要再打开源程序运行,直接打开文件中的.exe文件进行操作即可,更加便捷 在这里插入图片描述

注意:若出现异常,请重启打开窗口

五、代码 /* 项目名:轻松记单词 项目时间:2020年7月11日 项目人:Knock man 项目背景:目前市面上的记单词软件无法添加自己的词库,根据词库需求记忆, 本程序就是实现自己设置词库,程序随机考察词库内的单词的功能,协助单词记忆 还提供当天单词复习功能 操作说明:见程序帮助部分 */ #include #include #include #include #include #include #include #include #include #include using namespace std; const int M=9999999; int choose,wordnumber=0,mark=1,score=0; map English; map chinese; struct Node{ string wEnglish; string wchinese; }; Node words[M]; //菜单 void list(){ system("cls"); printf(" ||* * * * * * * * * * * * * * * * * * * * * *《菜单》 * * * * * * * * * * * * * * * * * * * * * * *||\n || ||\n "); printf("|| 1.添加新单词 2.默写中文 3.默写英文 ||\n || ||\n "); printf(" || 4.根据中文选择英文 5.根据英文选择中文 6.查看词库列表 ||\n || ||\n || 7.查找单词 8.查看帮助 9.退出程序 ||\n" ) ; printf(" || ||\n || ||\n" ) ; printf(" ######################################################################################################\n\n"); printf(" 请选择操作(输入相应序号):"); } //添加新单词 int addwords(){ system("cls"); int k=0; printf("请分别输入单词中英文意思用空格隔开,输入m表示结束:\n\n"); while(1){ string Englishword; string chineseword; //输入单英文 cin>>Englishword; //退出程序 if(Englishword=="q"){ printf("\n\n 本次总共得%d分!!! \n\n",score); exit(0); } //打开菜单 if(Englishword=="m"){ system("cls"); if(k>=1){ printf("\n 单词导入词库成功,本次共导入%d个单词!!\n\n\n",k); }else{ printf("\n 您没有导入任何单词!!\n\n\n"); } printf(""); getchar(); getchar(); return 1; } //输入单词中文 cin>>chineseword; //退出程序 if(Englishword=="q"){ printf("\n\n 本次总共得%d分!!! \n\n",score); exit(0); } //打开菜单 if(chineseword=="m"){ system("cls"); if(k>=1){ printf("\n 单词导入词库成功,本次共导入%d个单词!!\n\n\n",k); }else{ printf("\n 您没有导入任何单词!!\n\n\n"); } printf(""); getchar(); getchar(); return 1; } //单词添加到map中 English[Englishword]=chineseword; chinese[chineseword]=Englishword; words[k].wchinese= chineseword; words[k++].wEnglish=Englishword; //单词加入词库 FILE *fp=fopen("词库.txt","a+"); char e[100],c[100]; //将字符串转为字符数组 strncpy(e,Englishword.c_str(),Englishword.length()+1); strncpy(c,chineseword.c_str(),chineseword.length()+1); //判断是否为第一个单词控制换行 if(English.size() fprintf(fp,"\n%s ",e); fprintf(fp,"%s",c); } fclose(fp); wordnumber++;//单词数统计 } } //获取随机数 int random(int num){ srand(time(NULL)); int magic=rand()%num+1; return magic; } //默写中文 int writechinese(){ system("cls"); //保证有单词记 if(English.size()==0){ printf("\n 词库为空,请先添加单词!!!\n\n"); printf(""); getchar(); getchar(); return 1; } while(1){ string answer; map::iterator it=English.begin(); int count=0; int suji=random(English.size()); //确定随机单词位置 for(it=English.begin();it!=English.end();++it){ count++; if(count>=suji){ cout return 1; } if(it->second==answer){ score++; printf("\n恭喜你答对了!!!,分数:%d\n\n",score); }else{ cout printf("\n 词库为空,请先添加单词!!!\n\n"); printf(""); getchar(); getchar(); return 1; } while(1){ map::iterator it=chinese.begin(); int count=0; int suiji=random(English.size()); for(it=English.begin();it!=English.end();++it){ count++; if(count>=suiji){ cout return 1; } if(it->first==answer){ score++; printf("\n恭喜你答对了!!!,分数:%d \n\n",score); }else{ cout printf("\n\n 单词不够请继续添加新的单词(最少四个)!!\n\n\n"); printf(""); getchar(); getchar(); return 1; } while(1){ int book[4]; int t = random(English.size())-1; book[0]=t; cout t=0; } if(j>=4){ break; } book[j++]=t++; } //将四个下标打乱 if(t%2){ swap(book[0],book[random(3)]); swap(book[random(3)],book[random(3)]); swap(book[random(2)],book[0]); }else{ swap(book[0],book[random(1)]); swap(book[random(3)],book[random(3)]); swap(book[random(3)],book[0]); } cout return 1; } if(answer=="q"){ printf("\n\n 本次总共得%d分!!! \n\n",score); exit(0); } if(answer=="A"){ if(words[book[0]].wEnglish==wer){ score++; printf("\n恭喜你答对了!!!,分数:%d\n\n",score); }else{ printf("\n答案错误,正确答案是:"); cout score++; printf("\n恭喜你答对了!!!,分数:%d\n\n",score); }else{ printf("\n答案错误,正确答案是:"); cout score++; printf("\n恭喜你答对了!!!,分数:%d\n\n",score); }else{ printf("\n答案错误,正确答案是:"); cout score++; printf("\n恭喜你答对了!!!,分数:%d\n\n",score); }else{ printf("\n答案错误,正确答案是:"); cout system("cls"); if(English.size() int book[4]; int t = random(English.size())-1; book[0]=t; cout t=0; } if(j>=4){ break; } book[j++]=t++; } //将四个下标打乱 if(t%2){ swap(book[0],book[random(3)]); swap(book[random(3)],book[random(3)]); swap(book[random(2)],book[0]); }else{ swap(book[0],book[random(1)]); swap(book[random(3)],book[random(3)]); swap(book[random(3)],book[0]); } cout return 1; } if(answer=="q"){ printf("\n\n 本次总共得%d分!!! \n\n",score); exit(0); } if(answer=="A"){ if(words[book[0]].wchinese==wer){ score++; printf("\n恭喜你答对了!!!,分数:%d\n\n",score); }else{ printf("\n答案错误,正确答案是:"); cout score++; printf("\n恭喜你答对了!!!,分数:%d\n\n",score); }else{ printf("\n答案错误,正确答案是:"); cout score++; printf("\n恭喜你答对了!!!,分数:%d\n\n",score); }else{ printf("\n答案错误,正确答案是:"); cout score++; printf("\n恭喜你答对了!!!,分数:%d\n\n",score); }else{ printf("\n答案错误,正确答案是:"); cout FILE *fp; int flag = 0, file_row = 0, count = 0; if((fp = fopen("词库.txt", "r")) == NULL)return -1; char ch=fgetc(fp); if(ch==EOF)return 0; while(!feof(fp)) { flag = fgetc(fp); if(flag == '\n') count++; } file_row = count + 1; //加上最后一行 fclose(fp); return file_row; } //读入文件(词库中读入单词) void readfile(){ FILE *fp = fopen("词库.txt","r"); int line=fileline(); for(int i=0;i system("cls"); FILE *fp = fopen("词库.txt","r"); //int line=wordnumber; for(int i=0;i while(1){ system("cls"); printf("\n\n A.根据英文查找中文 "); printf("B.根据中文查找英文\n\n\n"); printf(" 请选择查找类型(输入A,B选项,m返回菜单):"); char r; cin>>r; if(r=='m'){ return 1; }else if(r=='q'){ exit(0); }else if(r=='A'){ system("cls"); string t1; printf(" \n\n请输入英文:"); cin>>t1; map::iterator it=English.begin() ; it=English.find(t1); if(it!=English.end()){ cout system("cls"); string t2; printf(" \n\n请输入中文:"); cin>>t2; map::iterator it=chinese.begin() ; it=chinese.find(t2); if(it!=chinese.end()){ cout system("cls"); printf(" 输入错误!!\n\n\n"); printf(""); getchar(); getchar(); return 1; } getchar(); getchar(); } } void addku(string p){ } //复习当天单词 int dayword(){ system("cls"); printf("\n请输入当天所记单词(中英文空格隔开,输入m表示结束):\n\n"); string wordEnglish[50005]; string wordchinese[50005]; string daywordEnglish; string daywordchinese; int k=1; while(1){ cin>>daywordEnglish; if(daywordEnglish=="m"||daywordEnglish=="q"){ break; } cin>>daywordchinese; if(daywordchinese=="m"||daywordchinese=="q"){ break; } wordEnglish[k]=daywordEnglish; wordchinese[k++]=daywordchinese; } system("cls"); printf("请选择检测类型:\n\n A.检测英文 B.检测中文"); printf("\n\n请输入选择:"); string t; cin>>t; system("cls"); bool vis[50005];//标记单词是否听写 memset(vis,0,sizeof(vis)); int count=0; while(1){ if(t=="A"){//测英文 system("cls"); printf("\n 英文检测开始,本轮共有%d个单词,你有三次机会,错误三次将自动加入词库!!!\n\n\n",k-1); for(int i=1;i//没有点过 count++; vis[flag]=true; cout return 1; } if(answer==wordEnglish[flag]){ chance--; printf(" \n\n答案正确!!"); break; }else{ if(chance==2){ break; } printf("\n答案错误!!你还有%d次机会,请再次输入:",2-chance); } } if(chance>=2){ FILE *fp=fopen("词库.txt","a+"); char e[100],c[100]; //将字符串转为字符数组 strncpy(c,wordchinese[flag].c_str(),wordchinese[flag].length()+1); strncpy(e,wordEnglish[flag].c_str(),wordEnglish[flag].length()+1); //判断是否为第一个单词控制换行 if(English.size() fprintf(fp,"\n%s ",e); fprintf(fp,"%s",c); } fclose(fp); cout if(v==k){ v=1; } if(!vis[v]){ count++; if(count==k)break; vis[v]=true; cout return 1; } if(answer==wordEnglish[v]){ chance--; printf(" \n\n答案正确!!"); break; }else{ if(chance>=2){ break; } printf("\n答案错误!!你还有%d次机会,请再次输入:",2-chance); } } if(chance>=2){ FILE *fp=fopen("词库.txt","a+"); char e[100],c[100]; //将字符串转为字符数组 strncpy(c,wordchinese[v].c_str(),wordchinese[v].length()+1); strncpy(e,wordEnglish[v].c_str(),wordEnglish[v].length()+1); //判断是否为第一个单词控制换行 if(English.size() fprintf(fp,"\n%s ",e); fprintf(fp,"%s",c); } fclose(fp); cout int flag=random(k-1); if(!vis[flag]){//没有点过 count++; vis[flag]=true; cout return 1; } if(answer==wordchinese[flag]){ chance--; printf(" \n\n答案正确!!"); break; }else{ if(chance==2){ break; } printf("\n答案错误!!你还有%d次机会,请再次输入:",2-chance); } } if(chance>=2){ FILE *fp=fopen("词库.txt","a+"); char e[100],c[100]; //将字符串转为字符数组 strncpy(c,wordchinese[flag].c_str(),wordchinese[flag].length()+1); strncpy(e,wordEnglish[flag].c_str(),wordEnglish[flag].length()+1); //判断是否为第一个单词控制换行 if(English.size() fprintf(fp,"\n%s ",e); fprintf(fp,"%s",c); } fclose(fp); cout if(v==k+1){ v=1; } if(!vis[v]){ count++; if(count==k)break; vis[v]=true; cout return 1; } if(answer==wordchinese[v]){ chance--; printf(" \n\n答案正确!!"); break; }else{ if(chance>=2){ break; } printf("\n答案错误!!你还有%d次机会,请再次输入:",2-chance); } } if(chance>=2){ FILE *fp=fopen("词库.txt","a+"); char e[100],c[100]; //将字符串转为字符数组 strncpy(c,wordchinese[v].c_str(),wordchinese[v].length()+1); strncpy(e,wordEnglish[v].c_str(),wordEnglish[v].length()+1); //判断是否为第一个单词控制换行 if(English.size() fprintf(fp,"\n%s ",e); fprintf(fp,"%s",c); } fclose(fp); cout system("cls"); printf(" \n"); printf(" * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * \n\n"); printf(" *操作说明*:"); printf("1.输入m键返回菜单\n\n 2.输入q键退出\n\n 3.回车键下一题或者返回上一步或者返回菜单\n\n\n"); printf(" *功能介绍*:本程序可以实现用户自己录入词库,并且随机抽取词库单词的功能,帮助用户快速掌握单词\n"); printf("\n 1.添加新单词:输入单词的英文 中文,可以自动将单词加入词库中"); printf("\n 2.默写中文:给出英文,用户回答中文,并且判断对错,若错误给出正确答案"); printf("\n 3.默写英文:给出中文,用户回答英文,并且判断对错,若错误给出正确答案"); printf("\n 4.根据中文选择英文:给出中文,题目给出ABCD四个英文选项,用户输入正确选项,并且判断对错,若错误给出正确答案"); printf("\n 5.根据英文选择中文:给出英文文,题目给出ABCD四个中文难选项,用户输入正确选项,并且判断对错,若错误给出正确答案"); printf("\n 6.查看单词列表:用户可以查看自己的单词库的所有单词及个数"); printf("\n 7.查找单词,根据中英文从词库中查找单词"); printf("\n 7.统计分数:用户答对加分,答错不扣分\n\n\n"); printf(" *词库的使用*:"); printf("由于在编译环境中录入单词不方便,所以特提供了词库功能,记事本文件“词库.txt”就是词库,若要添加或者修改删除\n 单词,可以直接在本文件中添加修改删除,但是注意不要出现多余的回车,保存时保证光标在最后一个单词的后面,词库的\n 单词会永久保存,当然在程序中添加也会加入词库"); printf("\n\n\n\n\n\n"); getchar(); getchar(); return 1; } int main(){ while(1){ //文件读入 readfile(); if(mark==1)list();//打开菜单; scanf("%d",&choose); /*if(choose==0){ printf("\n 输入有误,请重新输入!!\n"); getchar(); getchar(); getchar(); continue; }*/ switch(choose){ case 1:{ mark=addwords(); break; } case 2:{ mark=writechinese(); break; } case 3:{ mark=writeEnglish(); break; } case 4:{ mark=choosechinese(); break; } case 5:{ mark=chooseEnglish(); break; } case 7:{ mark=findword(); break; } case 6:{ mark=lookwordlist(); break; } case 8:{ mark=help(); break; } case 9:{ printf("\n\n 本次总共得%d分!!! \n\n",score); return 0; break; } case 0:{ printf("\n 输入有误,请重新输入!!\n"); getchar(); getchar(); getchar(); break; } case 10:{ mark=dayword(); break; } default:{ printf("\n 输入有误,请重新输入!!\n"); getchar(); getchar(); } } } return 0; }

如发现bug,请及时联系我修正!!!(如有不足也请指教)



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有