背单词软件

1ˎ问题描述

设计一个程序,能实现将单词存入文件,并能随机及顺序显示英文或汉语意思,能判断回答的正确与否,并统计个数,可以利用英文或汉语意思查找。

2ˎ功能要求

1).录入单词

China 中国
Japan 日本
…….
使用文件存放。

2).随机测试

系统随机显示单词(用户可以选择中译英,或英译中),对回答错误的单词应该可再回答一次。能够统计回答的正确单词的个数。

3). 顺序测验

4).查找单词的汉语或英语意思

(输入中文查对应的英语意思,输入英文查对应汉语意思)

3ˎ功能实现

在这里插入图片描述

1)

struct word                                 //定义结构体
{   char Chinese[20];
	char English[20];
};	word w[N];                       //结构体数组

定义结构体数组,每个结构体分为w[i].English与w[i].Chinese两部分,并且在每个函数中定义FILE类型指针变量fp,fp=fopen(“word.dat”,“wb+” )通过fp指向结构体变量w[i]而访问定义的文件word.dat。

2)录入函数

{   cout<<"请输入英语单词:"<<endl;
	cin>>w[i].English;
	cout<<"请输入相应的汉语意思:"<<endl;
	cin>>w[i].Chinese;
	i++;}

重新录入以wb+方式打开文件,分别将英语及汉语意思赋值给结构体数组;

for(q=0;q<i;q++)
	{	fwrite(&w[q],sizeof(word),1,fp);} 

再将结构体数组内容用一个for循环顺序写入文件,并替换原有文件。
而继续录入以ab+方式打开fp=fopen(“word.dat”,“ab+” ),将结构体数组顺序写入原有内容的后边。

3)测试函数

以只读的方式打开文件,用while循环实现持续的测试,若选择退出测试,则break推出循环。以j记录共答题个数,m与s分别记录汉译英与英译汉答对个数,(以选择英译汉为例)

srand(time(0));
k=rand()%(q+1);
cout<<w[k].Chinese<<"的英文单词是:"<<endl;

随机测试利用time函数作为rand()的种子值,随机产生一个不大于结构体个数的整数k,输出w[k].English;

{K1=0;
cout<<w[k1].English<<"的中文意思是:"<<endl;
K1++;}

顺序测试则是从第一个开始输出w[k1].English,并指向下一个结构体。待用户输入之后利用strcmp比较输入字符与所产生单词对应汉语意思比较,相同strcmp(w[k].Chinese,c)==0回答正确,两次未答对输出w[k2].Chinese。

4)查找函数

cin>>c;
for(k=0;k<=q;k++)
{if(strcmp(c,w[k].English)==0)
	{cout<<"相应的汉语意思是:"<<w[k].Chinese<<endl;
		break;}  }
			if(k>q)              //将输入字符与每个w[k].English比较过后没有相同的
			{cout<<"你要查找的单词不存在!"<<endl;}

以只读方式打开文件,(以英译汉为例)输入单词,用for循环strcmp函数将w[i].English与输入单词比较,若相同输出对应的w[i].Chinese,利用一个if语句判断查找次数大于单词个数显示没有找到。

4ˎ源代码及注释说明

#include<iostream>
#include<time.h>
#include<stdlib.h>
#include<stdio.h>
#include<string.h>
using namespace std; 
#define N 100
char c[20];
struct word                                 //定义结构体
{
	char Chinese[20];
	char English[20];
};	word w[N];                                   //定义结构体数组
void luru1()                                       //重新录入函数
{
	FILE *fp;
	int i=0,n,q;
	if((fp=fopen("word.dat","wb+"))==NULL)             //可读可写方式打开
	{
		cout<<"此文件打不开"<<endl;
		exit(0);
	} 
	while(1)
	{
		cout<<"请输入英语单词:"<<endl;
		cin>>w[i].English;
		cout<<"请输入相应的汉语意思:"<<endl;
		cin>>w[i].Chinese;
		i++;
		cout<<"继续录入请按1,退出录入请按0"<<endl;
		cin>>n;
			if(n==0)
			{cout<<"请选择:0-退出系统;1-重新录入;2-随机测试;3-顺序测试;4-查找单词;5-继续录入;"<<endl;
			break;}
	}	
	for(q=0;q<i;q++)
	{	fwrite(&w[q],sizeof(word),1,fp);}                    //将数组数据写入文件
   fclose(fp);
}
void luru2()                                          //继续录入函数
{
	FILE *fp;
	int i=0,n,q;
	if((fp=fopen("word.dat","ab+"))==NULL)
	{
		cout<<"此文件打不开"<<endl;
		exit(0);
	} 
	while(1)
	{
		cout<<"请输入英语单词:"<<endl;
		cin>>w[i].English;
		cout<<"请输入相应的汉语意思:"<<endl;
		cin>>w[i].Chinese;
		i++;
		cout<<"继续录入请按1,退出录入请按0"<<endl;
		cin>>n;
			if(n==0)
			{cout<<"请选择:0-退出系统;1-重新录入;2-随机测试;3-顺序测试;4-查找单词;5-继续录入;"<<endl;
			break;}
	}
	for(q=0;q<i;q++)                                           
	{	fwrite(&w[q],sizeof(word),1,fp);}                               
   fclose(fp);
}
void suiji()                                              //随机测试函数
{
	int i,n,q,k,m=0,j=0,s=0;
	FILE *fp;
	if((fp=fopen("word.dat","rb"))==NULL)            //以只读方式打开文件
	{
		cout<<"此文件打不开"<<endl;
		exit(0);
	}
	for(i=0;fread(&w[i],sizeof(word),1,fp)!=0;i++)
		q=i;                                   //结构体个数
	while(1)
	{  
		cout<<"请选择测试方式:1 英译汉 2 汉译英 0 退出测试"<<endl;
	    cin>>n;
		if(n==0)
		{cout<<"共做了"<<j<<"道题,"<<"答对"<<m+s<<"道"<<endl;
cout<<"请选择:0-退出系统;1-重新录入;2-随机测试;3-顺序测试;4-查找单词;5-继续录入;"<<endl;
		break;}
	    else if(n==1)
		{
			srand(time(0));                             //时间函数
			k=rand()%(q+1);                           //随机产生一个0-q的整数
			cout<<w[k].English<<"的中文意思是:";
            cin>>c;
            J++;                   
            if(strcmp(w[k].Chinese,c)==0)                     //字符比较
			{    m++;
				cout<<"回答正确"<<endl;   
			}
			else
			{
				cout<<"回答错误!再试一次"<<endl;
	            cin>>c;
	            if(strcmp(w[k].Chinese,c)==0)
				{   m++;                             
					cout<<"回答正确"<<endl;  
				}
                else
					cout<<"回答错误!正确答案是"<<w[k].Chinese<<endl;
			}
		}
		else if(n==2)
		{
			srand(time(0));
			k=rand()%(q+1);
			cout<<w[k].Chinese<<"的英文单词是:"<<endl;
            cin>>c;
            J++;
			if(strcmp(w[k].English,c)==0)
			{    s++;
				cout<<"回答正确"<<endl;   
			}
            else
			{
				cout<<"回答错误!再试一次"<<endl;
	            cin>>c;
	            if(strcmp(w[k].English,c)==0)
				{
					cout<<"回答正确"<<endl;
		            S++;
				}
				else
					cout<<"回答错误,正确答案是"<<w[k].English<<endl;
			}
		}
	}
}
void shunxu()                                      //顺序测试函数
{
	int i,n,q,m=0,k1=0,k2=0,j=0,s=0;
	FILE*fp;
	if((fp=fopen("word.dat","rb"))==NULL)
	{
		cout<<"此文件打不开"<<endl;
		exit(0);
	}
	for(i=0;fread(&w[i],sizeof(word),1,fp)!=0;i++)
	q=i;
	while(1)
	{
		cout<<"1英译汉 2 汉译英 0退出测试"<<endl;
		cin>>n;
		if(n==0)
		{cout<<"共做了"<<j<<"道题,"<<"答对"<<m+s<<"道"<<endl;
cout<<"请选择:0-退出系统;1-重新录入;2-随机测试;3-顺序测试;4-查找单词;5-继续录入;"<<endl;
		break;}
        else if(n==1)
		{
			cout<<w[k1].English<<"的中文意思是:"<<endl;
            cin>>c;
            J++;
            if(strcmp(w[k1].Chinese,c)==0)
			{    s++;
				cout<<"回答正确"<<endl;    
			}
			else
			{
				cout<<"回答错误,再试一次"<<endl;
	            cin>>c;
	            if(strcmp(w[k1].Chinese,c)==0)
				{    s++;
					cout<<"回答正确!"<<endl;    
				}
				else
					cout<<"回答错误!正确答案是"<<w[k1].Chinese<<endl;
			}
			k1++;
			if(k1>q)                         //测试到最后一个
		    k1=0;                        //返回第一个单词
	   }
		else if(n==2)
		{
			cout<<w[k2].Chinese<<"的英文单词是:"<<endl;
            cin>>c;
            J++;
            if(strcmp(w[k2].English,c)==0)
			{   m++;
				cout<<"回答正确"<<endl;  
			}
			else
			{
				cout<<"回答错误,再试一次"<<endl;
	            cin>>c;
				if(strcmp(w[k2].English,c)==0)
				{   m++;
					cout<<"回答正确"<<endl;    
				}
				else
					cout<<"回答错误!正确答案是"<<w[k2].English<<endl;
								}
		k2++;
		if(k2>q)
		k2=0;	
		}
	}			
}
void chazhao()                                       //查找函数
{
	int i,n,q,k=0;
	FILE*fp;
	if((fp=fopen("word.dat","rb"))==NULL)
	{
		cout<<"此文件打不开"<<endl;
		exit(0);
	}
	for(i=0;fread(&w[i],sizeof(word),1,fp)!=0;i++)
	q=i;
	while(1)
	{
		cout<<"请选择查找方式:1 英译汉 2 汉译英 0 退出查找"<<endl;
	    cin>>n;
		if(n==0)
		{cout<<"请选择:0-退出系统;1-重新录入;2-随机测试;3-顺序测试;4-查找单词;5-继续录入;"<<endl;
		break;}
	    else if(n==1)
		{
			cout<<"请输入英语单词:"<<endl;
	        cin>>c;
		
			for(k=0;k<=q;k++)
			{
				if(strcmp(c,w[k].English)==0)
				{
					cout<<"相应的汉语意思是:"<<w[k].Chinese<<endl;
					break;
				}
			}
			if(k>q)              //将输入字符与每个w[k].English比较过后没有相同的
			{cout<<"你要查找的单词不存在!"<<endl;}
		}
	    else if(n==2)
		{
			cout<<"请输入汉语意思:"<<endl;
	        cin>>c;
		  
		    for(k=0;k<=q;k++)
			{
				if(strcmp(c,w[k].Chinese)==0)
				{
					cout<<"相应的英语单词是:"<<w[k].English<<endl;
					break;
				}
			}
			if(k>q)
			{cout<<"你要查找的单词不存在!"<<endl;}
		}
	}
}
int main()
{
	int a;
	cout<<"******欢迎进入背单词系统,请选择操作******"<<endl;
cout<<"          "<<endl;
		cout<<"          1.重新录入"<<endl;
	    cout<<"          2.随机测试"<<endl;
	    cout<<"          3.顺序测试"<<endl;
	    cout<<"          4.查找单词"<<endl;
        cout<<"          5.继续录入"<<endl;
	    cout<<"          0.退出系统"<<endl;

	while(1)
	{
       while(1)                        //函数选项
		{cin>>a;
			if(a>=0&&a<=5)
				{break;
				cout<<"输入错误,请重新输入"<<endl;    
				}   
		}
		if(a==0)
			break;
		else if(a==1)
			luru1();
        else if(a==2)
			suiji();
	    else if(a==3)
		    shunxu();
	    else if(a==4)
		    chazhao();
	    else if(a==5)
			luru2();
	}
	cout<<"<<谢谢使用本系统!>>"<<endl;
	return 0;
}
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值