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

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

在这里插入图片描述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<iostream>
#include<algorithm>
#include<ctime>
#include<string>
#include<cstdio>
#include<map>
#include<cstring>
#include<cstdlib>
#include<set>
#include<fstream>
using namespace std;
const int M=9999999;
int choose,wordnumber=0,mark=1,score=0;
map<string,string> English;
map<string,string> 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()<=1){
			fprintf(fp,"%s ",e);
	    	fprintf(fp,"%s",c);
		}else{
			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<string,string>::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<<"请输入单词“"<<it->first<<"”的中文意思(输入m返回菜单):";
				cin>>answer;
				if(answer=="q"){
					printf("\n\n                                本次总共得%d分!!!                                \n\n",score);
					exit(0);
				}
				if(answer=="m"){
					return 1;
				}
				if(it->second==answer){
					score++;
					printf("\n恭喜你答对了!!!,分数:%d\n\n",score);
				}else{
					cout<<endl<<"答错了“"<<it->first<<"”的中文意思是:"<<it->second<<endl<<endl;
				}
				break;
			}
		}
		printf("<回车下一题>");
	       getchar();
	       getchar();
	      system("cls");
	}
		
}
//默写英文
int writeEnglish(){
	system("cls");
	string answer;
	//保证有单词记 
	if(English.size()==0){
		printf("\n                                   词库为空,请先添加单词!!!\n\n");
		printf("<按回车键返回菜单>");
		getchar();
		getchar();
		return 1;
	}
	while(1){
     	map<string,string>::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<<"请输入单词“"<<it->second<<"”的英文意思(输入m返回菜单):";
				cin>>answer;
				if(answer=="q"){
					printf("\n\n                                本次总共得%d分!!!                                \n\n",score);
					exit(0);
				}
				if(answer=="m"){
					return 1;
				}
				if(it->first==answer){
					score++;
					printf("\n恭喜你答对了!!!,分数:%d \n\n",score);
				}else{
					cout<<endl<<"答错了“"<<it->second<<"”的英文是:"<<it->first<<endl<<endl;
				}
				break;
			}
    	}
    	printf("<回车下一题>");
	       getchar();
	       getchar();
	      system("cls");
			
	}
} 
//根据中文选择英文 
int  choosechinese(){
	system("cls");
	if(English.size()<4){
		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<<"请选择单词“"<<words[t].wchinese<<"”的英文意思(输入m返回菜单):";
		
		string wer=words[t].wEnglish;//存好答案; 
		//依次顺序取下标 
		int j=1;
		t++;
		while(1){
			if(t>English.size()-1){
				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<<endl<<endl;
		for(int i=0;i<4;i++){
			printf("%c.",'A'+i);
			cout<<words[book[i]].wEnglish<<"     ";
		}
		cout<<endl<<"答案:"; 
		//输入答案
		string answer;
		cin>>answer;
		if(answer=="m"){
			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<<wer<<endl<<endl; 
				}	
		}else if(answer=="B"){
			    if(words[book[1]].wEnglish==wer){
					score++;
					printf("\n恭喜你答对了!!!,分数:%d\n\n",score);
				}else{
					printf("\n答案错误,正确答案是:");
					cout<<wer<<endl<<endl; 
				}	
			
		}else if(answer=="C"){
			    if(words[book[2]].wEnglish==wer){
					score++;
					printf("\n恭喜你答对了!!!,分数:%d\n\n",score);
				}else{
					printf("\n答案错误,正确答案是:");
					cout<<wer<<endl<<endl; 
				}	
		}else if(answer=="D"){
			    if(words[book[3]].wEnglish==wer){
					score++;
					printf("\n恭喜你答对了!!!,分数:%d\n\n",score);
				}else{
					printf("\n答案错误,正确答案是:");
					cout<<wer<<endl<<endl; 
				}	
		}else{
			printf("\n输入有误!!\n\n"); 
		}
		printf("\n<回车下一题>");
		getchar();
		getchar();
		system("cls"); 
	}
	
}
//根据英文选择中文 
int chooseEnglish(){
	system("cls"); 
	if(English.size()<4){
		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<<"请输入单词“"<<words[t].wEnglish<<"”的中文意思(输入m返回菜单):";
		
		string wer=words[t].wchinese;//存好答案; 
		//依次顺序取下标 
		int j=1;
		t++;
		while(1){
			if(t>English.size()-1){
				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<<endl<<endl;
		for(int i=0;i<4;i++){
			printf("%c.",'A'+i);
			cout<<words[book[i]].wchinese<<"     ";
		}
		cout<<endl<<"答案:"; 
		string answer;
		cin>>answer;
		if(answer=="m"){
			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<<wer<<endl<<endl; 
				}	
		}else if(answer=="B"){
			    if(words[book[1]].wchinese==wer){
					score++;
					printf("\n恭喜你答对了!!!,分数:%d\n\n",score);
				}else{
					printf("\n答案错误,正确答案是:");
					cout<<wer<<endl<<endl; 
				}	
			
		}else if(answer=="C"){
			    if(words[book[2]].wchinese==wer){
					score++;
					printf("\n恭喜你答对了!!!,分数:%d\n\n",score);
				}else{
					printf("\n答案错误,正确答案是:");
					cout<<wer<<endl<<endl; 
				}	
		}else if(answer=="D"){
			    if(words[book[3]].wchinese==wer){
					score++;
					printf("\n恭喜你答对了!!!,分数:%d\n\n",score);
				}else{
					printf("\n答案错误,正确答案是:");
					cout<<wer<<endl<<endl; 
				}	
		}else{
			printf("\n\n输入有误!!\n\n"); 
		}
		printf("<回车下一题>");
	 	getchar();
	 	getchar();
		system("cls"); 
	}
}
//计算词库文件行数
int fileline(){
	  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<line;i++){
			string A,B;
			char a[100],b[100];
			fscanf(fp,"%s",a);
			fscanf(fp,"%s",b);
			English[a]=b;
			chinese[b]=a;
			words[wordnumber].wEnglish=a;
			words[wordnumber++].wchinese=b;
	}
	fclose(fp);
} 
//查看词库
int lookwordlist(){
	system("cls");

	FILE *fp = fopen("词库.txt","r");
	//int line=wordnumber;
	for(int i=0;i<English.size();i++){
			string A,B;
			char a[100],b[100];
			fscanf(fp,"%s",a);
			fscanf(fp,"%s",b);
			printf("%s %s\n",a,b);
	}
	printf(" \n总共有%d个词汇!\n\n",English.size());
	printf("\n\n<回车键返回菜单>");
	getchar();
	getchar();
	return 1;
}
//查找单词
int findword(){
	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<string,string>::iterator it=English.begin() ;
			it=English.find(t1);
			if(it!=English.end()){
				cout<<endl<<endl<<"    "<<t1<<"的中文意思是“"<<it->second<<"”"<<endl<<endl<<endl; 
				cout<<"<回车键返回上一步>"; 
			}else{
				printf("\n\n    抱歉,词库中没有这个单词!!\n\n\n");
				cout<<"<回车键返回上一步>";
			}
		}else if(r=='B'){
			system("cls");
			string t2;
			printf("   \n\n请输入中文:");
			cin>>t2;
			map<string,string>::iterator it=chinese.begin() ;
			it=chinese.find(t2);
			if(it!=chinese.end()){
				cout<<endl<<endl<<"    "<<t2<<"的英文是“"<<it->second<<"”"<<endl<<endl<<endl; 
				cout<<"<回车键返回上一步>"; 
			}else{
				printf("\n\n    抱歉,词库中没有这个单词!!\n\n\n");
				cout<<"<回车键返回上一步>";
			}
		}else{
			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<=k;i++){
				int flag=random(k-1);
				if(!vis[flag]){//没有点过 
					count++;
					vis[flag]=true;
					cout<<"请输入单词“"<<wordchinese[flag]<<"”的英文意思(输入m退出检测):";
					string answer;
					int chance;
					//三次机会 
					for(chance=0;chance<3;chance++){
						cin>> answer;
						if(answer=="m"||answer=="q"){ 
							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()<=1){
							fprintf(fp,"%s ",e);
					    	fprintf(fp,"%s",c);
						}else{
							fprintf(fp,"\n%s ",e);
					    	fprintf(fp,"%s",c);
						}
						fclose(fp);
						cout<<"\n\n正确答案是“"<< wordEnglish[flag]<<"”已自动加入词库"; 
					}
					printf("\n\n\n<回车键下一题>"); 
					getchar();
					getchar();
					system("cls");
				
				}else{//点过 
					int v=flag;
					//找到没有点的单词 
					while(++v){
						if(v==k){
							v=1;
						}
						if(!vis[v]){
							count++;
							if(count==k)break;
							vis[v]=true;
							
							cout<<"请输入单词“"<<wordchinese[v]<<"”的英文文意思(输入m退出检测):";
							string answer;
							int chance;
							//三次机会 
							for(chance=0;chance<3;chance++){
								cin>> answer;
								if(answer=="m"||answer=="q"){ 
									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()<=1){
									fprintf(fp,"%s ",e);
							    	fprintf(fp,"%s",c);
								}else{
									fprintf(fp,"\n%s ",e);
							    	fprintf(fp,"%s",c);
								}
								fclose(fp);
								cout<<"\n\n正确答案是“"<< wordEnglish[v]<<"”已自动加入词库"; 
							}
								printf("\n\n\n<回车键下一题>"); 
								getchar();
								getchar();
								system("cls");
								break;
						}
					}
				} 
			}
			printf("\n\n所有单词检测完毕!!!\n\n\n");
			printf("<回车退出>");
			getchar();
			return 1;
		}else if(t=="B"){//测中文 
			system("cls");
			printf("\n    中文检测开始,本轮共有%d个单词,你有三次机会,错误三次将自动加入词库!!!\n\n\n",k-1); 
			for(int i=1;i<=k;i++){
				int flag=random(k-1);
				if(!vis[flag]){//没有点过 
					count++;
					vis[flag]=true;
					cout<<"请输入单词“"<<wordEnglish[flag]<<"”的中文意思(输入m退出检测):";
					string answer;
					int chance;
					//三次机会 
					for(chance=0;chance<3;chance++){
						cin>> answer;
						if(answer=="m"||answer=="q"){ 
							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()<=1){
							fprintf(fp,"%s ",e);
					    	fprintf(fp,"%s",c);
						}else{
							fprintf(fp,"\n%s ",e);
					    	fprintf(fp,"%s",c);
						}
						fclose(fp);
						cout<<"\n\n正确答案是“"<< wordchinese[flag]<<"”已自动加入词库"; 
					}
					printf("\n\n\n<回车键下一题>"); 
					getchar();
					getchar();
					system("cls");
				
				}else{//点过 
					int v=flag;
					while(++v){
						if(v==k+1){
							v=1;
						}
						if(!vis[v]){
							count++;
							if(count==k)break;
							vis[v]=true;
							
							cout<<"请输入单词“"<<wordEnglish[v]<<"”的中文意思(输入m退出检测):";
							string answer;
							int chance;
							//三次机会 
							for(chance=0;chance<3;chance++){
								cin>> answer;
								if(answer=="m"||answer=="q"){ 
									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()<=1){
									fprintf(fp,"%s ",e);
							    	fprintf(fp,"%s",c);
								}else{
									fprintf(fp,"\n%s ",e);
							    	fprintf(fp,"%s",c);
								}
								fclose(fp);
								cout<<"\n\n正确答案是“"<< wordchinese[v]<<"”已自动加入词库"; 
							}
								printf("\n\n\n<回车键下一题>"); 
								getchar();
								getchar();
								system("cls");
								break;
						}
					}
					
				
				
				} 
			}
			printf("\n\n所有单词检测完毕!!!\n\n\n");
			printf("<回车退出>");
			getchar();
			return 1;
		}else{
			system("cls");
			printf("\n\n\n输入有误!!请重新输入:");
			printf("请选择检测类型:\n\n           A.检测英文     B.检测中文");
			printf("\n\n请输入选择:");
			cin>>t;
		}
	}
	
	
	
}
//帮助
int help(){
	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,请及时联系我修正!!!(如有不足也请指教)

  • 17
    点赞
  • 115
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
好的,以下是一个简单的背单词单词小程序实现: ```python import random # 单词类 class Word: def __init__(self, word, meaning): self.word = word self.meaning = meaning # 词类 class Vocabulary: def __init__(self): self.words = [] # 添加单词 def add_word(self, word, meaning): self.words.append(Word(word, meaning)) # 背单词程序类 class WordLearning: def __init__(self, vocabulary): self.vocabulary = vocabulary self.current_word = None self.score = 0 self.wrong_words = [] # 随机选择一个单词 def get_word(self): self.current_word = random.choice(self.vocabulary.words) # 展示单词并获取用户输入 def show_word(self): print("单词:", self.current_word.word) answer = input("请输入单词的意思:") return answer # 检查用户输入的答案是否正确 def check_answer(self, answer): if answer == self.current_word.meaning: self.score += 1 print("回答正确!") else: self.wrong_words.append(self.current_word) print("回答错误!正确答案为:", self.current_word.meaning) # 展示得分情况 def show_score(self): print("本次得分:", self.score) # 展示错词并重新学习 def review_wrong_words(self): if self.wrong_words: print("以下是你错过的单词:") for word in self.wrong_words: print(word.word, word.meaning) print("重新学习!") self.wrong_words = [] self.score = 0 self.start_learning() else: print("没有错过的单词!") # 开始学习 def start_learning(self): print("开始学习!") while True: self.get_word() answer = self.show_word() self.check_answer(answer) another_word = input("是否继续?(y/n)") if another_word.lower() == "n": break self.show_score() self.review_wrong_words() # 示例 vocabulary = Vocabulary() vocabulary.add_word("apple", "苹果") vocabulary.add_word("banana", "香蕉") vocabulary.add_word("cherry", "樱桃") vocabulary.add_word("orange", "橙子") vocabulary.add_word("pear", "梨子") word_learning = WordLearning(vocabulary) word_learning.start_learning() ``` 这个程序很简单,只有一个学习模式,用户输入单词的意思,程序判断是否正确,最后展示得分情况和错词,并可以重新学习错词。如果需要更多的学习模式和功能,可以根据需要进行扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值