c++单词学习软件课程设计报告内附程序源代码.docx
《c++单词学习软件课程设计报告内附程序源代码.docx》由会员分享,可在线阅读,更多相关《c++单词学习软件课程设计报告内附程序源代码.docx(69页珍藏版)》请在冰豆网上搜索。

c++单词学习软件课程设计报告内附程序源代码
c++单词学习软件课程设计报告(内附程序源代码)
课程设计报告
需求分析:
题目:
单词学习软件
单词(中英文)录入、修改、删除管理、提供多种(至少三种、例如,给出英文选中文,给出中文写英文等)单词学习方法以,对出错单词能够进行查询、统计、排序。
首先它是个软件要有登入用户,其次要有对单词的操作(增删改),再是单词学习方法三种以上以及对学习方法过程中出错的单词能够进行存储查询、统计、排序等。
概要设计:
整个系统分为三大模块,先是用户登入模块供用户登入还包括了整个系统的界面的设计,这里设了一个用户类classuser{
public:
charusername[20];
charpassword[20];
user(charname[],charmm[]);
intfind(charname[]);
voiduserregister();
voiduserjudge();
charcustom();
charserver1();
charserver2();
friendcharcontinueif();
friendintuser_long(long,char);
};
主要有用户注册userregister()、用户判断userjudge(),第一个主菜单界面custom()、二个子菜单界面server1()\server2()等成员函数;
再是对单词的一系列操作增删改及额外添加的翻译模块,这里设计了一个单词类classwords{
public:
charenglish[20];
charchinese[40];
voidwords_get(charen[],charch[]);
voidwords_add();
voidwords_delete();
voidwords_revise();
voidwords_translate();
friendintwords_long(long,charaa[]);
friendlongwords_seek(charch[]);
friendintwords_long2(long,charaa[]);//倒数
friendstructword*creat();
friendvoidwritefile(structword*);
};
主要有单词增加words_add()、单词删除words_delete()、单词修改words_revise()、单词翻译words_translate()等成员函数及一些友元函数;
最后一个模块是单词学习方法,这里设计了个单词游戏类classwordsgame{
public:
voidgame_get(charen[]);
intgame_abc();
intgame_tran();
voidgame_judge();
voidwrongwords_add();
voidwrongwords_examine();
voidwordsgame:
:
wrongwords_search();
structwrongword*wrongwords_creat();
friendlongwrongwords_seek(charen[]);
friendintwords_long(long,char);
friendintwrongwords_long(long,charaa);
friendstructword*creat();
friendvoidprint(structword*);
friendintsuiji(intnum);
};
主要有给出英文单词选中文(三选一)game_abc()、给出中文写英文(对中文单词进行翻译)game_tran()、增加错误单词wrongwords_add()、查看错词本(里面全是game_tran()过程中翻译错了的单词记录在里面)wrongwords_examine()、在错词本中查找出错单词并统记出错次数wrongwords_search()等成员函数及一些友元供调用的函数。
详细设计:
描述系统各模块的实现方法,程序流程、系统界面等。
(重点叙述自己的详细设计)
首先用户登入及系统界面模块通过类user来实现的,用户先通过成员函数
voiduser:
:
userregister()
{
ofstreamllw;
llw.open("f:
\\user.txt",ios:
:
app);
if(find(username)==1)
{
cout<<"用户名已存在"<exit(-1);
}
else
{
llw.write(username,strlen(username));
llw.put('');
llw.write(password,strlen(password));
llw.put('\n');
system("cls");
cout<<"\n\n\t\t\t\t注册成功!
"<}
}
注册一个自己的号其中用户注册的账号和密码用了一个txt格式的文件user.txt来存储的,然后输入注册了的帐号和密码通过成员函数
voiduser:
:
userjudge()
{
if(find(username)!
=1)
{
cout<<"用户名不存在!
"<exit(-1);
}
elseif(find(username)==1&&find(password)!
=2)
{
cout<<"用户密码错误!
"<exit(-1);
}
else
{
system("cls");
for(inti=10;i>=1;i--)
{
cout<<"\n\n\t\t\t欢迎您使用该软件"<<'\n'<<"\t\t\t制作人:
llw"<cout<<"\n\n\n\n\n\t\t\t初始化中......"<
_sleep(500);
system("cls");
}
system("color2b");
//system("cls");
//system("color2b");
cout<<"\n\n\n\n\n\n\n\n\t\t\t初始化成功...!
"<_sleep(3000);
//system("pause");
}
}
来判定用户是否可以继续下面的操作,如果判定通过则跳入到第一个主菜单custom()
charuser:
:
custom()//主菜单界面
{
charA[10];
charb;chari;
intk=0;
system("cls");
cout<<"\n\n"
<<"\t\t#####################################\n"
<<"\t\t#学习方式:
#\n"
<<"\t\t#1.单词操作#\n"
<<"\t\t#2.单词游戏#\n"
<<"\t\t#0.退出系统#\n"
<<"\t\t#####################################\n"<while
(1)
{
cout<<"\t\t请选择学习方式:
";
cin>>A;
if(strlen(A)==1)
{
for(i='0';i<='2';i++)
{
b=i;
if(b==A[0])
returnb;
}
}
cout<<"\n\t\t\t输入有误!
\n"<k++;
if(k>4)
{
system("cls");
cout<<"\n\n\t\t\t提示:
错误输入超过5次!
您将被强制退出!
!
\n"<//cout<<"\t\t按任意键继续"<exit(-1);
}
}
}
有二个选项分通向二个子菜单server1()
charuser:
:
server1()
{
CharA[10];
Charb;
chari;
intk=0;
system("cls");
cout<<"\n\n"
<<"\t\t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
<<"\t\t$$\n"
<<"\t\t$功能$\n"
<<"\t\t$1.中英文的录入$\n"
<<"\t\t$2.中英文的删除$\n"
<<"\t\t$3.中英文的修改$\n"
<<"\t\t$4.中英文的翻译$\n"
<<"\t\t$5.返回上一层菜单$\n"
<<"\t\t$0.退出$\n"
<<"\t\t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"<while
(1)
{
cout<<"\t\t请选择操作方式:
";
cin>>A;
if(strlen(A)==1)
{
for(i='0';i<='5';i++)
{
b=i;
if(b==A[0])
returnb;
}
}
cout<<"\n\t\t\t\t输入有误!
\n"<k++;
}
if(k>4)
{
cout<<"错误输入超过5次!
\n";
exit(-1);
}
}
和server2()
Charuser:
:
server2()
{
charA[10];
charb;
chari;
intk=0;
system("cls");
cout<<"\n"
<<"\t\t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
<<"\t\t$单词游戏$\n"
<<"\t\t$1.给出英文选中文$\n"
<<"\t\t$2.给出中文写英文$\n"
<<"\t\t$3.查看错词本$\n"
<<"\t\t$4.查找错误单词$\n"
<<"\t\t$5.返回上一层菜单$\n"
<<"\t\t$0.退出$\n"
<<"\t\t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"<while
(1)
{
cout<<"\t\t请选择操作方式:
";
cin>>A;
if(strlen(A)==1)
{
for(i='0';i<='5';i++)
{
b=i;
if(b==A[0])
returnb;
}
}
cout<<"\n\t\t\t\t输入有误!
\n"<k++;
}
if(k>4)
{
cout<<"错误输入超过5次!
\n";
exit(-1);
}
}
分别对应着其他二个模块;server1()界面对应着单词的增删改及翻译模块通过类words来实现,有单词的增加、单词的删除、单词的修改及单词的翻译功能;单词的增加通过words_add()
voidwords:
:
words_add()
{
charen[20],ch[40];
cout<<"请输入要添加的英文单词和中文意思"<cin>>en>>ch;
words_get(en,ch);
ofstreamllw;
if(words_seek(english)==-1)
{
llw.open("f:
\\ciku.txt",ios:
:
app,0);
llw.write(english,strlen(english));
llw.put('');
llw.write(chinese,strlen(chinese));
llw.put('\n');
llw.close();
cout<<"单词添加成功"<}
else
cout<<"要添加的英文单词已存在,单词添加失败!
"<}
把用户输入的要添加的英文单词及中文意思存入ciku.txt文件中,单词的删除通过words_delete()
voidwords:
:
words_delete()//删除单词
{
//longz=0;
//intj=0;
charch[40];
structword*head,*p1,*p2;
cout<<"请输入要删除的中英文单词"<cin>>ch;
head=creat();
p2=p1=head;
if(strcmp(p1->yw,ch)==0||strcmp(p1->zw,ch)==0)
head=p1->next;
while(p1!
=NULL)
{
if(strcmp(p1->yw,ch)==0||strcmp(p1->zw,ch)==0)
{
cout<yw<<":
"<zw<p2->next=p1->next;
cout<<"单词删除成功!
"<writefile(head);
break;
}
else
{
p2=p1;
p1=p1->next;
}
}
if(p1==NULL)
cout<<"您要删除的单词找不到!
"<}
把用户要删除的单词先通过调用友元函数creat()
structword*creat()//创建链表并把单词放入链表中
{
inti=0;
longz=0;
charch;
n=0;
structword*head;
word*p1=newstructword;
p1->next=NULL;
structword*p2;
p2=p1;
fstreamllw;
llw.open("f:
\\ciku.txt",ios:
:
in|ios:
:
out);
if(!
llw)
cout<<"cannotopenoutput";
i=words_long(z,'');
llw.read(p1->yw,i);
p1->yw[i]='\0';
z=z+i+1;
i=words_long(z,'\n');
llw.seekg(z,ios:
:
beg);
llw.read(p1->zw,i);
p1->zw[i]='\0';
z=z+i+1;
z++;
while(llw.get(ch))
{
n++;
if(n==1)head=p1;
else
p2->next=p1;
word*p1=newstructword;
p1->next=NULL;
p2->next=p1;
p2=p1;
i=words_long(z,'');
llw.seekg(z,ios:
:
beg);
llw.read(p1->yw,i);
p1->yw[i]='\0';
z=z+i+1;
i=words_long(z,'\n');
llw.seekg(z,ios:
:
beg);
llw.read(p1->zw,i);
p1->zw[i]='\0';
z=z+i+1;
z++;
llw.seekg(z,ios:
:
beg);
}
p2->next=NULL;
returnhead;
}
创建一个链表并把ciku.txt文件里的数据全存进链表里再从表里找到它删除该单词所在结点最后再通过调用writefile(structword*)
voidwritefile(structword*head)
{
structword*p;
ofstreamllw("f:
\\ciku.txt");
p=head;
while(p!
=NULL)
{
llw.write(p->yw,strlen(p->yw));
llw.put('');
llw.write(p->zw,strlen(p->zw));
llw.put('\n');
p=p->next;
}
deletep,head;
}
把新链表写入ciku.txt文件中保存来完成,单词的修改通过成员函数words_revise()
voidwords:
:
words_revise()
{
longz=0;
intk=0;
charen[40],ch[40];
structword*head,*p1;
cout<<"请先输入要修改的单词再输入要改为的单词"<cin>>en>>ch;
//words_get(en,ch);
head=creat();
p1=head;
while(p1!
=NULL)
{
if(strcmp(p1->yw,en)==0||strcmp(p1->zw,en)==0)
{
if(strcmp(p1->yw,en)==0)
{
cout<yw<<"->"<strcpy(p1->yw,ch);
cout<<"单词修改成功!
"<}
else
{
cout<zw<<"->"<strcpy(p1->zw,ch);
cout<<"中文单词修改成功!
"<}
writefile(head);
break;
}
elsep1=p1->next;
}
if(p1==NULL)cout<<"您要修改的单词找不到!
"<}
把用户输入的要修改的单词通过调用友元创建链表把ciku.txt里的数据存进链表中再通过对链表的操作查找找到它并把它改为用户需要改为的单词再通过调用友元函数writefile()再把链表写回ciku.txt文件中来完成;单词翻译words_translate()
intwordsgame:
:
game_tran()
{
inti=0,k,m;
charen[20];
structword*p;
charabc[2][40];
p=creat();
m=n+1;
k=suiji(m);
while(p!
=NULL)
{
i++;
if(i==k)
{
strcpy(abc[0],p->yw);
strcpy(abc[1],p->zw);
break;
p=p->next;
}
else
p=p->next;
}
cout<cin>>en;
//game_get(en);
if(strcmp(abc[0],en)==0)
cout<<"翻译正确"<else
{
cout<<"翻译错误"<ofstreamllw("f:
\\wrongwords.txt",ios:
:
app);
llw.write(abc[0],strlen(abc[0]));
llw.put('');
llw.write(abc[1],strlen(abc[1]));
llw.put('');
llw.write(en,strlen(en));
llw.put('\n');
cout<<"错误的单词已加入到错词本中"<}
deletep;
return0;
}
有三种翻译方式:
中英文单词一翻译、单独翻译中文单词和单独翻译英文单词。
它根据用户的选择和输入通过调用友元words_seek()直接在文件ciku.txt中寻找用户输入的单词,再根据word_seek()的返回值输出用户需要的翻译来实现单词的翻译
等功能的;
Server2()界面对应着单词游戏模块通过类wordsgame来实现,有单词选择题(给出英文选中文)game_abc()
intwordsgame:
:
game_abc()
{
intk;
inten;
charabczw[3][40],abcyw[3][20];
structword*p;
inti=1,j=0,l=0;
p=creat();
n=n+1;
k=suiji(n-2);
while(i<=k+2)
{
if(ip=p->next;
else
{
strcpy(abczw[j],p->zw);
strcpy(abcyw[j],p->yw);
j++;
p=p->next;
}
i++;
}
l=suiji(3);
cout<for(intt=0;t<3;t++)
cout<cout<<"请输入你的选择"<cin>>en;
if(en>=1&&en<=3)
{
if(en==l)
cout<<"选择正确"<elsecout<<"选择错误!
"<}
else
cout<<"输入错误";
deletep;
returnl;
}
通过调用随机函数产生随机数来输出随机数在链表结点中对应的三个单词再根据判断用户输入的正确与否来实现单词的选择,给出中文写英文game_tran()
intwordsgame:
:
game_tran()
{
inti=0,k,m;
charen[20];
structword*p;
charabc[2][40];
p=creat();
m=n+1;
k=suiji(m);
while(p!
=NULL)
{
i++;
if(i==k)
{
strcpy(abc[0],p->yw);
strcpy(abc[1],p->zw);
break;