1、课程设计报告 需求分析: 题目:单词学习软件 单词(中英文)录入、修改、删除管理、提供多种(至少三种、例如,给出英文选中文,给出中文写英文等)单词学习方法以,对出错单词能够进行查询、统计、排序。 首先它是个软件要有登入用户,其次要有对单词的操作(增删改),再是单词学习方法三种以上以及对学习方法过程中出错的单词能够进行存储查询、统计、排序等。 概要设计: 整个系统分为三大模块,先是用户登入模块供用户登入还包括了整个系统的界面的设计,这里设了一个用户类class user{ public: char username[20]; char password[20];
2、 user(char name[],char mm[]); int find(char name[]); void userregister(); void userjudge(); char custom(); char server1(); char server2(); friend char continueif(); friend int user_long(long ,char ); }; 主要有用户注册userregister()、用户判断userjudge(),第一个主菜单界面custom()、二个子菜单界面server1()\server
3、2()等成员函数; 再是对单词的一系列操作增删改及额外添加的翻译模块,这里设计了一个单词类class words{ public: char english[20]; char chinese[40]; void words_get(char en[],char ch[]); void words_add(); void words_delete(); void words_revise(); void words_translate(); friend int words_long(long ,char aa[]); friend long wo
4、rds_seek(char ch[]); friend int words_long2(long ,char aa[]); //倒数 friend struct word * creat(); friend void writefile(struct word * ); }; 主要有单词增加words_add()、单词删除words_delete()、单词修改words_revise()、单 词翻译words_translate()等成员函数及一些友元函数; 最后一个模块是单词学习方法,这里设计了个单词游戏类class wordsgame{ public:
5、void game_get(char en[]); int game_abc(); int game_tran(); void game_judge(); void wrongwords_add(); void wrongwords_examine(); void wordsgame::wrongwords_search(); struct wrongword *wrongwords_creat(); friend long wrongwords_seek(char en[]); friend int words_long(long ,char ); f
6、riend int wrongwords_long(long ,char aa); friend struct word *creat(); friend void print(struct word * ); friend int suiji(int num); }; 主要有给出英文单词选中文(三选一)game_abc()、给出中文写英文(对中文单词进行翻译)game_tran()、增加错误单词wrongwords_add()、查看错词本(里面全是game_tran()过程中翻译错了的单词记录在里面)wrongwords_examine()、
7、在错词本中查找出错单词并统记出错次数wrongwords_search()等成员函数及一些友元供调用的函数。
详细设计:
描述系统各模块的实现方法,程序流程、系统界面等。(重点叙述自己的详细设计)
首先用户登入及系统界面模块通过类user来实现的,用户先通过成员函数
void user::userregister()
{
ofstream llw;
llw.open("f:\\user.txt",ios::app);
if(find(username)==1)
{
cout<<"用户名已存在"< 8、
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注册成功!"< 9、)!=1)
{
cout<<"用户名不存在!"< 10、n\n\n\t\t\t 初始化中......"< 11、r user::custom() //主菜单界面
{
char A[10];
char b;char i;
int k=0;
system("cls");
cout<<"\n \n"
<<"\t\t#####################################\n"
<<"\t\t# 学习方式: #\n"
<<"\t\t 12、 1.单词操作 #\n"
<<"\t\t# 2.单词游戏 #\n"
<<"\t\t# 0.退出系统 #\n"
<<"\t\t#####################################\n"< 13、 b=i;
if(b==A[0])
return b;
}
}
cout<<"\n\t\t\t输入有误!\n"< 14、0];
Char b;
char i;
int k=0;
system("cls");
cout<<"\n \n"
<<"\t\t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"
<<"\t\t$ $\n"
<<"\t\t$ 功能 $\n"
<<"\t\t$ 15、 1.中英文的录入 $\n"
<<"\t\t$ 2.中英文的删除 $\n"
<<"\t\t$ 3.中英文的修改 $\n"
<<"\t\t$ 4.中英文的翻译 $\n"
<<"\t\t$ 5.返回上一层菜单 $\n"
<<"\t\t$ 0.退出 $\n"
<<"\t\t$$$$$$$$ 16、\n"< 17、t(-1);
}
}
和server2()
Char user::server2()
{
char A[10];
char b;
char i;
int k=0;
system("cls");
cout<<" \n"
<<"\t\t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\ 18、n"
<<"\t\t$ 单词游戏 $\n"
<<"\t\t$ 1.给出英文选中文 $\n"
<<"\t\t$ 2.给出中文写英文 $\n"
<<"\t\t$ 3.查看错词本 $\n"
<<"\t\t$ 4.查找错误单词 $\n"
<<"\t\t$ 5.返回上一层菜单 $\ 19、n"
<<"\t\t$ 0.退出 $\n"
<<"\t\t$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$\n"< 20、t\t输入有误!\n"< 21、s_get(en,ch);
ofstream llw;
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<<"单词添加成功"< 22、ut<<"要添加的英文单词已存在,单词添加失败!"< 23、 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< 24、reak;
}
else
{
p2=p1;
p1=p1->next;
}
}
if(p1==NULL)
cout<<"您要删除的单词找不到!"< 25、p2;
p2=p1;
fstream llw;
llw.open("f:\\ciku.txt",ios::in|ios::out);
if(!llw)
cout<<"cannot open output";
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;
26、
z++;
while(llw.get(ch))
{
n++;
if(n==1)head=p1;
else
p2->next=p1;
word *p1=new struct word;
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, 27、'\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;
return head;
}
创建一个链表并把ciku.txt文件里的数据全存进链表里再从表里找到它删除该单词所在结点最后再通过调用writefile(struct word * )
void writefile(struct word *head)
{
s 28、truct word *p;
ofstream llw("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;
}
delete p,head;
}
把新链表写入ciku.txt文件中保存来完成,单词的修改通过成员函数words_revise()
void words::words_revise() 29、
{
long z=0;
int k=0;
char en[40],ch[40];
struct word *head,*p1;
cout<<"请先输入要修改的单词再输入要改为的单词"< 30、0||strcmp(p1->zw,en)==0)
{
if(strcmp(p1->yw,en)==0)
{
cout< 31、
}
else p1=p1->next;
}
if(p1==NULL) cout<<"您要修改的单词找不到!"< 32、c[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< 33、)==0)
cout<<"翻译正确"< 34、
}
delete p;
return 0;
}
有三种翻译方式:中英文单词一翻译、单独翻译中文单词和单独翻译英文单词。它根据用户的选择和输入通过调用友元words_seek()直接在文件ciku.txt中寻找用户输入的单词,再根据word_seek()的返回值输出用户需要的翻译来实现单词的翻译
等功能的;
Server2()界面对应着单词游戏模块通过类wordsgame来实现,有单词选择题(给出英文选中文)game_abc()
int wordsgame::game_abc()
{
int k;
int en;
char abczw[3][ 35、40],abcyw[3][20];
struct word *p;
int i=1,j=0,l=0;
p=creat();
n=n+1;
k=suiji(n-2);
while(i<=k+2)
{
if(i 36、 l=suiji(3);
cout< 37、 delete p;
return l;
}
通过调用随机函数产生随机数来输出随机数在链表结点中对应的三个单词再根据判断用户输入的正确与否来实现单词的选择,给出中文写英文game_tran()
int wordsgame::game_tran()
{
int i=0,k,m;
char en[20];
struct word *p;
char abc[2][40];
p=creat();
m=n+1;
k=suiji(m);
while(p!=NULL)
{
i++;
if(i==k)
{
38、 strcpy(abc[0],p->yw);
strcpy(abc[1],p->zw);
break;
p=p->next;
}
else
p=p->next;
}
cout< 39、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<<"错误的单词已加入到错词本中"< 40、rds.txt中,查看错词本game_examine()
void wordsgame::wrongwords_examine()
{
struct wrongword *p;
p=wrongwords_creat();
while(p!=NULL)
{
cout< 41、rds_creat()
{
char hh;
long z=0;
int r=0,k=0;
wrongword *p1=new struct wrongword;
struct wrongword *head,*p2;
p2=p1;
ifstream llw("f:\\wrongwords.txt");
if(!llw) cout<<"cannot open the file"< 42、>en[k]='\0';
z=z+k+1;
llw.seekg(z,ios::beg);
k=wrongwords_long(z,' ');
llw.read(p1->ch,k);
p1->ch[k]='\0';
z=z+k+1;
llw.seekg(z,ios::beg);
k=wrongwords_long(z,'\n');
llw.read(p1->wrong,k);
p1->wrong[k]='\0';
z=z+k+2;
while(llw.get(hh))
{
r++;
llw.seekg(z,ios::beg) 43、
if(r==1) head=p1;
wrongword *p1=new struct wrongword;
p1->next=NULL;
p2->next=p1;
p2=p1;
k=wrongwords_long(z,' ');
llw.read(p1->en,k);
p1->en[k]='\0';
z=z+k+1;
llw.seekg(z,ios::beg);
k=wrongwords_long(z,' ');
llw.read(p1->ch,k);
p1->ch[k] 44、'\0';
z=z+k+1;
llw.seekg(z,ios::beg);
k=wrongwords_long(z,'\n');
llw.read(p1->wrong,k);
p1->wrong[k]='\0';
z=z+k+2;
llw.seekg(z,ios::beg);
}
p2->next=NULL;
llw.close();
return head;
}
创建一个链表并把错词本中的数据存入其中再读取链表中的数据输出到屏幕上,查找错误单词wrongwords_serach()
void wo 45、rdsgame::wrongwords_search()
{
char en[20];
char ch[40];
char wr[20][20];
long z=0;
struct wrongword *p;
p=wrongwords_creat();
cout<<"请输入要差找的单词"< 46、p->next;
}
cout<<"查找完毕!"< 47、ngwords_creat()创建链表读取错词本wrongwords.txt中全部数据根据用户的输入单词与链表中的每个结点中的英文单词一个个对比是否相同,是就输出该结点等功能。
调试分析:
调试过程中经常会应为程序太长,找不出错误在哪里,后我我学会了把程序分割成成一个个小函数再调出来调试,虽然可能你觉得这方法很复杂化,但是只要你掌握了分割技巧就会觉得简单而且效率高,百分百的能找到出错的地方。
用户使用说明:
先在f:\目录下创建三个txt文件分别为user.txt、ciku.txt、wrongwords.txt 至于内容可以把附录里面的内容输进去,注意:内容末尾必须有且 48、只有一个换行不然查找会出错,然后可以打开exe应用程序先注册再登入,进入后自然会用。
测试结果:
附录:
源代码
#include 49、
struct word *next;
};
struct wrongword
{
char en[20];
char ch[40];
char wrong[20];
struct wrongword *next;
};
class user{
public:
char username[20];
char password[20];
user(char name[],char mm[]);
int find(char name[]);
void userregister();
void userjudge();
c 50、har custom();
char server1();
char server2();
friend char continueif();
friend int user_long(long ,char );
};
class words{
public:
char english[20];
char chinese[40];
void words_get(char en[],char ch[]);
void words_add();
void words_delete();
void words_revise();
void word






