




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、.课 程 设 计 报 告 课程名称:面向对象程序设计C+ 设计题目:单词学习软件 专 业:计算机科学与技术 姓 名: 学 号: 指导教师:李 晓 虹 2016 年 1 月 10 日(1) 系统需求分析 过英语四、六级是现在大学生的一个难题,有一个可以管理自己学习英语的软件是很有必要的。所以单词学习软件对单词(中英文)可以录入、修改、删除管理、提供多种(至少三种、例如,给出英文选中文,给出中文写英文等)单词学习方法,对出错单词能够进行查询、统计、排序。首先它是个软件要有登入用户,其次要有对单词的操作(增删改),再是单词学习方法三种以上以及对学习方法过程中出错的单词能够进行存储查询、统计、排序等。
2、(2) 总体设计整个系统分为三大模块,先是用户登入模块供用户登入还包括了整个系统的界面的设计,这里设了一个用户类class userpublic:char username20;char password20;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 );主要有用户注册use
3、rregister()、用户判断userjudge(),第一个主菜单界面custom()、二个子菜单界面server1()server2()等成员函数;再是对单词的一系列操作增删改及额外添加的翻译模块,这里设计了一个单词类class wordspublic:char english20;char chinese40;void words_get(char en,char ch);void words_add();void words_delete();void words_revise();void words_translate(); friend int words_long(long ,
4、char aa);friend long words_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 wordsgamepublic:void game
5、_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 );friend int wrongwords_long(long ,char aa);fri
6、end struct word *creat(); friend void print(struct word * );friend int suiji(int num);主要有给出英文单词选中文(三选一)game_abc()、给出中文写英文(对中文单词进行翻译)game_tran()、增加错误单词wrongwords_add()、查看错词本(里面全是game_tran()过程中翻译错了的单词记录在里面)wrongwords_examine()、在错词本中查找出错单词并统记出错次数wrongwords_search()等成员函数及一些友元供调用的函数。(3) 详细设计描述系统各模块的实现方法,
7、程序流程、系统界面等。(重点叙述自己的详细设计)首先用户登入及系统界面模块通过类user来实现的,用户先通过成员函数void user:userregister()ofstream jq;jq.open("f:user.txt",ios:app); if(find(username)=1)cout<<"用户名已存在"<<endl;exit(-1);elsejq.write(username,strlen(username);jq.put(' ');jq.write(password,strlen(password)
8、;jq.put('n');system("cls");cout<<"nntttt注册成功!"<<endl;注册一个自己的号其中用户注册的账号和密码用了一个txt格式的文件user.txt来存储的,然后输入注册了的帐号和密码通过成员函数void user:userjudge()if(find(username)!=1)cout<<"用户名不存在!"<<endl;exit(-1);else if(find(username)=1&&find(password)
9、!=2)cout<<"用户密码错误!"<<endl;exit(-1);elsesystem("cls");for(int i=10;i>=1;i-) cout<<"nnttt欢迎您使用该软件"<<'n'<<"ttt 制作人:jq"<<endl; cout<<"nnnnnttt 初始化中."<<i<<endl; _sleep(500); system("cls
10、"); system("color 2b"); /system("cls");/system("color 2b"); cout<<"nnnnnnnnttt初始化成功.!"<<endl;_sleep(3000);/system("pause");来判定用户是否可以继续下面的操作,如果判定通过则跳入到第一个主菜单custom()char user:custom() /主菜单界面char A10;char b;char i;int k=0;system("
11、cls");cout<<"n n"<<"tt#n"<<"tt# 学习方式: #n"<<"tt# 1.单词操作 #n"<<"tt# 2.单词游戏 #n"<<"tt# 0.退出系统 #n"<<"tt#n"<<endl;while(1)cout<<"tt请选择学习方式:"cin>>A;if(strlen(A)=1)
12、for(i='0'i<='2'i+)b=i;if(b=A0)return b;cout<<"nttt输入有误!n"<<endl;k+;if(k>4)system("cls");cout<<"nnttt提示:错误输入超过5次!您将被强制退出!n"<<endl;/cout<<"tt按任意键继续"<<endl;exit(-1);有二个选项分通向二个子菜单server1()char user:server1(
13、)Char A10;Char b;char i;int k=0; system("cls");cout<<"n n"<<"tt$n"<<"tt$ $n"<<"tt$ 功能 $n"<<"tt$ 1.中英文的录入 $n"<<"tt$ 2.中英文的删除 $n"<<"tt$ 3.中英文的修改 $n"<<"tt$ 4.中英文的翻译 $n&qu
14、ot;<<"tt$ 5.返回上一层菜单 $n"<<"tt$ 0.退出 $n"<<"tt$n"<<endl;while(1)cout<<"tt 请选择操作方式:"cin>>A;if(strlen(A)=1)for(i='0'i<='5'i+)b=i;if(b=A0)return b;cout<<"ntttt输入有误!n"<<endl;k+;if(k>4)cou
15、t<<"错误输入超过5次!n"exit(-1);和server2()Char user:server2() char A10;char b;char i;int k=0;system("cls");cout<<" n"<<"tt$n"<<"tt$ 单词游戏 $n"<<"tt$ 1.给出英文选中文 $n"<<"tt$ 2.给出中文写英文 $n"<<"tt$ 3.查看
16、错词本 $n"<<"tt$ 4.查找错误单词 $n"<<"tt$ 5.返回上一层菜单 $n"<<"tt$ 0.退出 $n"<<"tt$n"<<endl;while(1)cout<<"tt 请选择操作方式:"cin>>A;if(strlen(A)=1)for(i='0'i<='5'i+)b=i;if(b=A0)return b;cout<<"nt
17、ttt输入有误!n"<<endl;k+;if(k>4)cout<<"错误输入超过5次!n"exit(-1);分别对应着其他二个模块;server1()界面对应着单词的增删改及翻译模块通过类words来实现,有单词的增加、单词的删除、单词的修改及单词的翻译功能;单词的增加通过words_add()void words:words_add() char en20,ch40; cout<<"请输入要添加的英文单词和中文意思"<<endl; cin>>en>>ch; word
18、s_get(en,ch); ofstream jq; if(words_seek(english)=-1) jq.open("f:ciku.txt",ios:app,0); jq.write(english,strlen(english); jq.put(' '); jq.write(chinese,strlen(chinese); jq.put('n'); jq.close(); cout<<"单词添加成功"<<endl; else cout<<"要添加的英文单词已存在,单词
19、添加失败!"<<endl;把用户输入的要添加的英文单词及中文意思存入ciku.txt文件中,单词的删除通过words_delete()void words:words_delete() /删除单词 /long z=0;/int j=0;char ch40;struct word *head,*p1,*p2; cout<<"请输入要删除的中英文单词"<<endl; cin>>ch; head=creat();p2=p1=head;if(strcmp(p1->yw,ch)=0|strcmp(p1->zw,ch
20、)=0)head=p1->next;while(p1!=NULL)if(strcmp(p1->yw,ch)=0|strcmp(p1->zw,ch)=0)cout<<p1->yw<<":"<<p1->zw<<endl;p2->next=p1->next;cout<<"单词删除成功!"<<endl;writefile(head);break;elsep2=p1;p1=p1->next;if(p1=NULL)cout<<"
21、;您要删除的单词找不到!"<<endl;把用户要删除的单词先通过调用友元函数creat()struct word *creat()/创建链表并把单词放入链表中int i=0;long z=0;char ch;n=0;struct word *head;word *p1=new struct word;p1->next=NULL; struct word *p2; p2=p1;fstream jq;jq.open("f:ciku.txt",ios:in|ios:out);if(!jq)cout<<"cannot open ou
22、tput" i=words_long(z,' ');jq.read(p1->yw,i);p1->ywi='0'z=z+i+1;i=words_long(z,'n');jq.seekg(z,ios:beg); jq.read(p1->zw,i);p1->zwi='0'z=z+i+1;z+;while(jq.get(ch) n+;if(n=1)head=p1;else p2->next=p1;word *p1=new struct word;p1->next=NULL; p2->ne
23、xt=p1;p2=p1;i=words_long(z,' ');jq.seekg(z,ios:beg); jq.read(p1->yw,i); p1->ywi='0' z=z+i+1; i=words_long(z,'n'); jq.seekg(z,ios:beg); jq.read(p1->zw,i); p1->zwi='0'z=z+i+1; z+;jq.seekg(z,ios:beg);p2->next=NULL;return head;创建一个链表并把ciku.txt文件里的数据全存进链表里再从
24、表里找到它删除该单词所在结点最后再通过调用writefile(struct word * )void writefile(struct word *head)struct word *p;ofstream jq("f:ciku.txt");p=head;while(p!=NULL)jq.write(p->yw,strlen(p->yw);jq.put(' ');jq.write(p->zw,strlen(p->zw);jq.put('n');p=p->next;delete p,head;把新链表写入ciku.t
25、xt文件中保存来完成,单词的修改通过成员函数words_revise()void words:words_revise() long z=0;int k=0;char en40,ch40;struct word *head,*p1; cout<<"请先输入要修改的单词再输入要改为的单词"<<endl; cin>>en>>ch; /words_get(en,ch);head=creat();p1=head;while(p1!=NULL)if(strcmp(p1->yw,en)=0|strcmp(p1->zw,en)=
26、0)if(strcmp(p1->yw,en)=0)cout<<p1->yw<<"->"<<ch<<endl;strcpy(p1->yw,ch);cout<<"单词修改成功!"<<endl;elsecout<<p1->zw<<"->"<<ch<<endl;strcpy(p1->zw,ch);cout<<"中文单词修改成功!"<<end
27、l;writefile(head);break;else p1=p1->next;if(p1=NULL) cout<<"您要修改的单词找不到!"<<endl;把用户输入的要修改的单词通过调用友元创建链表把ciku.txt里的数据存进链表中再通过对链表的操作查找找到它并把它改为用户需要改为的单词再通过调用友元函数writefile()再把链表写回ciku.txt文件中来完成;单词翻译words_translate()int wordsgame:game_tran() int i=0,k,m;char en20;struct word *p;cha
28、r abc240;p=creat(); m=n+1;k=suiji(m);while(p!=NULL)i+;if(i=k)strcpy(abc0,p->yw);strcpy(abc1,p->zw);break;p=p->next;elsep=p->next; cout<<abc1<<'n'<<"请翻译"<<endl;cin>>en;/game_get(en);if(strcmp(abc0,en)=0) cout<<"翻译正确"<<e
29、ndl;elsecout<<"翻译错误"<<endl;ofstream jq("f:wrongwords.txt",ios:app);jq.write(abc0,strlen(abc0);jq.put(' ');jq.write(abc1,strlen(abc1);jq.put(' ');jq.write(en,strlen(en);jq.put('n');cout<<"错误的单词已加入到错词本中"<<endl;delete p;retur
30、n 0;有三种翻译方式:中英文单词一翻译、单独翻译中文单词和单独翻译英文单词。它根据用户的选择和输入通过调用友元words_seek()直接在文件ciku.txt中寻找用户输入的单词,再根据word_seek()的返回值输出用户需要的翻译来实现单词的翻译等功能的;Server2()界面对应着单词游戏模块通过类wordsgame来实现,有单词选择题(给出英文选中文)game_abc()int wordsgame:game_abc() int k; int en; char abczw340,abcyw320; struct word *p; int i=1,j=0,l=0; p=creat();
31、 n=n+1; k=suiji(n-2); while(i<=k+2) if(i<k) p=p->next; else strcpy(abczwj,p->zw); strcpy(abcywj,p->yw); j+; p=p->next; i+; l=suiji(3); cout<<abcywl-1<<endl; for(int t=0;t<3;t+) cout<<t+1<<"."<<abczwt<<' ' cout<<"请输
32、入你的选择"<<endl; cin>>en; if(en>=1&&en<=3) if(en=l) cout<<"选择正确"<<endl; else cout<<"选择错误!"<<endl; else cout<<"输入错误" delete p; return l; 通过调用随机函数产生随机数来输出随机数在链表结点中对应的三个单词再根据判断用户输入的正确与否来实现单词的选择,给出中文写英文game_tran()int
33、 wordsgame:game_tran() int i=0,k,m;char en20;struct word *p;char abc240;p=creat(); m=n+1;k=suiji(m);while(p!=NULL)i+;if(i=k)strcpy(abc0,p->yw);strcpy(abc1,p->zw);break;p=p->next;elsep=p->next; cout<<abc1<<'n'<<"请翻译"<<endl;cin>>en;/game_get(
34、en);if(strcmp(abc0,en)=0) cout<<"翻译正确"<<endl;elsecout<<"翻译错误"<<endl;ofstream jq("f:wrongwords.txt",ios:app);jq.write(abc0,strlen(abc0);jq.put(' ');jq.write(abc1,strlen(abc1);jq.put(' ');jq.write(en,strlen(en);jq.put('n');c
35、out<<"错误的单词已加入到错词本中"<<endl;delete p;return 0;通过调用随机函数来随机的读取链表结点中的中文单词再判断用户的输入与否,若否则把错误和对应的正确中英文单词一起存入错词本wrongwords.txt中,查看错词本game_examine()void wordsgame:wrongwords_examine()struct wrongword *p;p=wrongwords_creat();while(p!=NULL)cout<<p->en<<":"<<
36、p->ch<<" "<<"wrongwords:"<<p->wrong<<endl;p=p->next;delete p;通调用wrongwords_creat()struct wrongword * wordsgame:wrongwords_creat()char hh;long z=0;int r=0,k=0; wrongword *p1=new struct wrongword;struct wrongword *head,*p2;p2=p1;ifstream jq("f:
37、wrongwords.txt");if(!jq) cout<<"cannot open the file"<<endl; jq.seekg(z,ios:beg);k=wrongwords_long(z,' ');jq.read(p1->en,k);p1->enk='0'z=z+k+1;jq.seekg(z,ios:beg);k=wrongwords_long(z,' ');jq.read(p1->ch,k);p1->chk='0'z=z+k+1;jq.s
38、eekg(z,ios:beg);k=wrongwords_long(z,'n');jq.read(p1->wrong,k);p1->wrongk='0' z=z+k+2;while(jq.get(hh)r+;jq.seekg(z,ios:beg);if(r=1) head=p1;wrongword *p1=new struct wrongword;p1->next=NULL;p2->next=p1;p2=p1;k=wrongwords_long(z,' '); jq.read(p1->en,k); p1->en
39、k='0' z=z+k+1; jq.seekg(z,ios:beg); k=wrongwords_long(z,' '); jq.read(p1->ch,k); p1->chk='0' z=z+k+1; jq.seekg(z,ios:beg); k=wrongwords_long(z,'n'); jq.read(p1->wrong,k); p1->wrongk='0'z=z+k+2;jq.seekg(z,ios:beg);p2->next=NULL;jq.close();return
40、head;创建一个链表并把错词本中的数据存入其中再读取链表中的数据输出到屏幕上,查找错误单词wrongwords_serach()void wordsgame:wrongwords_search()char en20;char ch40;char wr2020;long z=0;struct wrongword *p;p=wrongwords_creat();cout<<"请输入要差找的单词"<<endl;cin>>en;while(p!=NULL)if(strcmp(p->en,en)=0)strcpy(ch,p->ch);
41、strcpy(wrz,p->wrong);z+;p=p->next;cout<<"查找完毕!"<<endl;if(z!=0) cout<<en<<":"<<ch<<endl; cout<<"wrongnum:"<<z<<endl; /cout<<"t wrongwords:" cout<<"wrongword:" for(;z>=1;z-) cou
42、t<<wrz-1<<" "else cout<<"n您要查找的单词找不到!"<<endl;cout<<endl;delete p;/delete wr;通过调用wrongwords_creat()创建链表读取错词本wrongwords.txt中全部数据根据用户的输入单词与链表中的每个结点中的英文单词一个个对比是否相同,是就输出该结点等功能。 cout<<"输入错误" delete p; return l; 通过调用随机函数产生随机数来输出随机数在链表结点中对应的三
43、个单词再根据判断用户输入的正确与否来实现单词的选择,给出中文写英文game_tran()int wordsgame:game_tran() int i=0,k,m;char en20;struct word *p;char abc240;p=creat(); m=n+1;k=suiji(m);while(p!=NULL)i+;if(i=k)strcpy(abc0,p->yw);strcpy(abc1,p->zw);break;p=p->next;elsep=p->next; cout<<abc1<<'n'<<"
44、;请翻译"<<endl;cin>>en;/game_get(en);if(strcmp(abc0,en)=0) cout<<"翻译正确"<<endl;elsecout<<"翻译错误"<<endl;ofstream jq("f:wrongwords.txt",ios:app);jq.write(abc0,strlen(abc0);jq.put(' ');jq.write(abc1,strlen(abc1);jq.put(' '
45、;);jq.write(en,strlen(en);jq.put('n');cout<<"错误的单词已加入到错词本中"<<endl;delete p;return 0;通过调用随机函数来随机的读取链表结点中的中文单词再判断用户的输入与否,若否则把错误和对应的正确中英文单词一起存入错词本wrongwords.txt中,查看错词本game_examine()void wordsgame:wrongwords_examine()struct wrongword *p;p=wrongwords_creat();while(p!=NULL)co
46、ut<<p->en<<":"<<p->ch<<" "<<"wrongwords:"<<p->wrong<<endl;p=p->next;delete p;通调用wrongwords_creat()struct wrongword * wordsgame:wrongwords_creat()char hh;long z=0;int r=0,k=0; wrongword *p1=new struct wrongword;struct
47、 wrongword *head,*p2;p2=p1;ifstream jq("f:wrongwords.txt");if(!jq) cout<<"cannot open the file"<<endl; jq.seekg(z,ios:beg);k=wrongwords_long(z,' ');jq.read(p1->en,k);p1->enk='0'z=z+k+1;jq.seekg(z,ios:beg);k=wrongwords_long(z,' ');jq.read(
48、p1->ch,k);p1->chk='0'z=z+k+1;jq.seekg(z,ios:beg);k=wrongwords_long(z,'n');jq.read(p1->wrong,k);p1->wrongk='0' z=z+k+2;while(jq.get(hh)r+;jq.seekg(z,ios:beg);if(r=1) head=p1;wrongword *p1=new struct wrongword;p1->next=NULL;p2->next=p1;p2=p1;k=wrongwords_long(
49、z,' '); jq.read(p1->en,k); p1->enk='0' z=z+k+1; jq.seekg(z,ios:beg); k=wrongwords_long(z,' '); jq.read(p1->ch,k); p1->chk='0' z=z+k+1; jq.seekg(z,ios:beg); k=wrongwords_long(z,'n'); jq.read(p1->wrong,k); p1->wrongk='0'z=z+k+2;jq.seekg
50、(z,ios:beg);p2->next=NULL;jq.close();return head;创建一个链表并把错词本中的数据存入其中再读取链表中的数据输出到屏幕上,查找错误单词wrongwords_serach()void wordsgame:wrongwords_search()char en20;char ch40;char wr2020;long z=0;struct wrongword *p;p=wrongwords_creat();cout<<"请输入要差找的单词"<<endl;cin>>en;while(p!=NUL
51、L)if(strcmp(p->en,en)=0)strcpy(ch,p->ch);strcpy(wrz,p->wrong);z+;p=p->next;cout<<"查找完毕!"<<endl;if(z!=0) cout<<en<<":"<<ch<<endl; cout<<"wrongnum:"<<z<<endl; /cout<<"t wrongwords:" cout<
52、<"wrongword:" for(;z>=1;z-) cout<<wrz-1<<" "else cout<<"n您要查找的单词找不到!"<<endl;cout<<endl;delete p;/delete wr;通过调用wrongwords_creat()创建链表读取错词本wrongwords.txt中全部数据根据用户的输入单词与链表中的每个结点中的英文单词一个个对比是否相同,是就输出该结点等功能。(4)系统调试 调试过程中经常会应为程序太长,找不出错误在哪里,
53、后我我学会了把程序分割成成一个个小函数再调出来调试,虽然可能你觉得这方法很复杂化,但是只要你掌握了分割技巧就会觉得简单而且效率高,百分百的能找到出错的地方。(5)结果分析 图 5.1图 5.2图 5.3图 图5.4 图5.5(6)总结这次课程设计历经一个星期左右,通过这一个星期的学习,发现了自己的很多不足,自己知识的很多漏洞,也有很多闻所未闻的东西,从而更加明白知识扎实的重要性,理解实践能力的重要性!因为基础知识的不扎实让我在这次课程设计中走了许多弯路,不过我认为是值得的,它大大的补充了我知识不足的那一面,我始终相信付出必有收获。 这次的课程设计,可以说是苦乐交加。在程序设计过程中,不仅检验、
54、巩固了我所学的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。 它为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生运用所学知识解决实际问题的能力。课程设计这类实践训练是我们迈向社会,从事职业工作前一个必不少的过程。“千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义。我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。通过这次单词学习软件的设计,我在多方面都有所提高。首先,整体与局部的把握,在系统设计前,需要整体思考单词学习所包含的信息及其实现的功能,在设计过程中,再思考局部功能实现的完整性与
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 北京化工大学《组合数学》2023-2024学年第二学期期末试卷
- 青海省海南市重点中学2025年高三第二次诊断性考试提前模拟物理试题试卷含解析
- 山东省藁城市第一中学2025年高三下学期5月调研考试化学试题含解析
- 吉林城市职业技术学院《泰语二》2023-2024学年第二学期期末试卷
- 2024-2025学年湖南省桃江县高三下学期高考模拟(三)生物试题含解析
- 扬州环境资源职业技术学院《西方文化概况》2023-2024学年第二学期期末试卷
- 2025年保安证考试解惑经验试题及答案
- 保安证考试复习策略及试题及答案
- 2025年保安证考试温习试题及答案
- 15 深化家园共育的有效措施:试题及答案
- 鞘内药物输注治疗慢性疼痛课件
- 中国古代四大发明(小学课件)
- 事故隐患报告举报奖励制度培训
- 广西壮族风俗演示文稿课件
- 新生儿疼痛管理指南2028
- 三年级下册口算天天100题(A4打印版)
- 医院安全生产问题分析报告
- 物权法教案完整版本
- 辅警必考题库以及结构化面试题及答案(2024年完整版)
- 财务用发票分割单原始凭证 发票分割单范本
- 《数字电子技术基础》 题库 各章测试题习题答案
评论
0/150
提交评论