课程设计单词学习软件_第1页
课程设计单词学习软件_第2页
课程设计单词学习软件_第3页
课程设计单词学习软件_第4页
课程设计单词学习软件_第5页
已阅读5页,还剩48页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

课 程 设 计 报 告 课程名称:面向对象程序设计C+ 设计题目:单词学习软件 专 业:计算机科学与技术 姓 名: 学 号: 指导教师:李 晓 虹 2016 年 1 月 10 日(1) 系统需求分析 过英语四、六级是现在大学生的一个难题,有一个可以管理自己学习英语的软件是很有必要的。所以单词学习软件对单词(中英文)可以录入、修改、删除管理、提供多种(至少三种、例如,给出英文选中文,给出中文写英文等)单词学习方法,对出错单词能够进行查询、统计、排序。首先它是个软件要有登入用户,其次要有对单词的操作(增删改),再是单词学习方法三种以上以及对学习方法过程中出错的单词能够进行存储查询、统计、排序等。(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 );主要有用户注册userregister()、用户判断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 ,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_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);friend 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) 详细设计描述系统各模块的实现方法,程序流程、系统界面等。(重点叙述自己的详细设计)首先用户登入及系统界面模块通过类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);jq.put(n);system(cls);coutnntttt注册成功!endl;注册一个自己的号其中用户注册的账号和密码用了一个txt格式的文件user.txt来存储的,然后输入注册了的帐号和密码通过成员函数void user:userjudge()if(find(username)!=1)cout用户名不存在!endl;exit(-1);else if(find(username)=1&find(password)!=2)cout用户密码错误!=1;i-) coutnnttt欢迎您使用该软件nttt 制作人:jqendl; coutnnnnnttt 初始化中.iendl; _sleep(500); system(cls); system(color 2b); /system(cls);/system(color 2b); coutnnnnnnnnttt初始化成功.!endl;_sleep(3000);/system(pause);来判定用户是否可以继续下面的操作,如果判定通过则跳入到第一个主菜单custom()char user:custom() /主菜单界面char A10;char b;char i;int k=0;system(cls);coutn ntt#ntt# 学习方式: #ntt# 1.单词操作 #ntt# 2.单词游戏 #ntt# 0.退出系统 #ntt#nendl;while(1)coutA;if(strlen(A)=1)for(i=0;i=2;i+)b=i;if(b=A0)return b;coutnttt输入有误!n4)system(cls);coutnnttt提示:错误输入超过5次!您将被强制退出!nendl;/couttt按任意键继续endl;exit(-1);有二个选项分通向二个子菜单server1()char user:server1()Char A10;Char b;char i;int k=0; system(cls);coutn ntt$ntt$ $ntt$ 功能 $ntt$ 1.中英文的录入 $ntt$ 2.中英文的删除 $ntt$ 3.中英文的修改 $ntt$ 4.中英文的翻译 $ntt$ 5.返回上一层菜单 $ntt$ 0.退出 $ntt$nendl;while(1)coutA;if(strlen(A)=1)for(i=0;i=5;i+)b=i;if(b=A0)return b;coutntttt输入有误!n4)cout错误输入超过5次!n;exit(-1);和server2()Char user:server2() char A10;char b;char i;int k=0;system(cls);cout ntt$ntt$ 单词游戏 $ntt$ 1.给出英文选中文 $ntt$ 2.给出中文写英文 $ntt$ 3.查看错词本 $ntt$ 4.查找错误单词 $ntt$ 5.返回上一层菜单 $ntt$ 0.退出 $ntt$nendl;while(1)coutA;if(strlen(A)=1)for(i=0;i=5;i+)b=i;if(b=A0)return b;coutntttt输入有误!n4)cout错误输入超过5次!n;exit(-1);分别对应着其他二个模块;server1()界面对应着单词的增删改及翻译模块通过类words来实现,有单词的增加、单词的删除、单词的修改及单词的翻译功能;单词的增加通过words_add()void words:words_add() char en20,ch40; cout请输入要添加的英文单词和中文意思ench; words_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要添加的英文单词已存在,单词添加失败!endl;把用户输入的要添加的英文单词及中文意思存入ciku.txt文件中,单词的删除通过words_delete()void words:words_delete() /删除单词 /long z=0;/int j=0;char ch40;struct word *head,*p1,*p2; cout请输入要删除的中英文单词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)coutyw:zwnext=p1-next;cout单词删除成功!next;if(p1=NULL)cout您要删除的单词找不到!next=NULL; struct word *p2; p2=p1;fstream jq;jq.open(f:ciku.txt,ios:in|ios:out);if(!jq)coutyw,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-next=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文件里的数据全存进链表里再从表里找到它删除该单词所在结点最后再通过调用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.txt文件中保存来完成,单词的修改通过成员函数words_revise()void words:words_revise() long z=0;int k=0;char en40,ch40;struct word *head,*p1; cout请先输入要修改的单词再输入要改为的单词ench; /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)coutywchyw,ch);cout单词修改成功!endl;elsecoutzwchzw,ch);cout中文单词修改成功!next;if(p1=NULL) cout您要修改的单词找不到!yw);strcpy(abc1,p-zw);break;p=p-next;elsep=p-next; coutabc1n请翻译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( );jq.write(en,strlen(en);jq.put(n);cout错误的单词已加入到错词本中endl;delete p;return 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(); n=n+1; k=suiji(n-2); while(i=k+2) if(inext; else strcpy(abczwj,p-zw); strcpy(abcywj,p-yw); j+; p=p-next; i+; l=suiji(3); coutabcywl-1endl; for(int t=0;t3;t+) coutt+1.abczwt ; cout请输入你的选择en; if(en=1&en=3) if(en=l) cout选择正确endl; else cout选择错误!endl; else coutyw);strcpy(abc1,p-zw);break;p=p-next;elsep=p-next; coutabc1n请翻译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( );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)couten:ch wrongwords:wrongnext;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:wrongwords.txt);if(!jq) coutcannot open the fileen,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;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-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(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请输入要差找的单词en;while(p!=NULL)if(strcmp(p-en,en)=0)strcpy(ch,p-ch);strcpy(wrz,p-wrong);z+;p=p-next;cout查找完毕!endl;if(z!=0) couten:chendl; coutwrongnum:zendl; /coutt wrongwords:; cout=1;z-) coutwrz-1 ;else coutn您要查找的单词找不到!endl;coutendl;delete p;/delete wr;通过调用wrongwords_creat()创建链表读取错词本wrongwords.txt中全部数据根据用户的输入单词与链表中的每个结点中的英文单词一个个对比是否相同,是就输出该结点等功能。 coutyw);strcpy(abc1,p-zw);break;p=p-next;elsep=p-next; coutabc1n请翻译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( );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)couten:ch wrongwords:wrongnext;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:wrongwords.txt);if(!jq) coutcannot open the fileen,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;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-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(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请输入要差找的单词en;while(p!=NULL)if(strcmp(p-en,en)=0)strcpy(ch,p-ch);strcpy(wrz,p-wrong);z+;p=p-next;cout查找完毕!endl;if(z!=0) couten:chendl; coutwrongnum:zendl; /coutt wrongwords:; cout=1;z-) coutwrz-1 ;else coutn您要查找的单词找不到!endl;coutendl;delete p;/delete wr;通过调用wrongwords_creat()创建链表读取错词本wrongwords.txt中全部数据根据用户的输入单词与链表中的每个结点中的英文单词一个个对比是否相同,是就输出该结点等功能。(4)系统调试 调试过程中经常会应为程序太长,找不出错误在哪里,后我我学会了把程序分割成成一个个小函数再调出来调试,虽然可能你觉得这方法很复杂化,但是只要你掌握了分割技巧就会觉得简单而且效率高,百分百的能找到出错的地方。(5)结果分析 图 5.1图 5.2图 5.3图 图5.4 图5.5(6)总结这次课程设计历经一个星期左右,通过这一个星期的学习,发现了自己的很多不足,自己知识的很多漏洞,也有很多闻所未闻的东西,从而更加明白知识扎实的重要性,理解实践能力的重要性!因为基础知识的不扎实让我在这次课程设计中走了许多弯路,不过我认为是值得的,它大大的补充了我知识不足的那一面,我始终相信付出必有收获。 这次的课程设计,可以说是苦乐交加。在程序设计过程中,不仅检验、巩固了我所学的知识,也培养了我如何去把握一件事情,如何去做一件事情,又如何完成一件事情。课程设计是培养学生综合运用所学知识,发现,提出,分析和解决实际问题,锻炼实践能力的重要环节,是对学生实际工作能力的具体训练和考察过程。 它为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。提高学生运用所学知识解决实际问题的能力。课程设计这类实践训练是我们迈向社会,从事职业工作前一个必不少的过程。“千里之行始于足下”,通过这次课程设计,我深深体会到这句千古名言的真正含义。我今天认真的进行课程设计,学会脚踏实地迈开这一步,就是为明天能稳健地在社会大潮中奔跑打下坚实的基础。通过这次单词学习软件的设计,我在多方面都有所提高。首先,整体与局部的把握,在系统设计前,需要整体思考单词学习所包含的信息及其实现的功能,在设计过程中,再思考局部功能实现的完整性与整个程序的结合。其次,在实现用户权限设置这个功能时,通过查阅课本、资料,实践,对字符串的使用(strcmp(mm,1234);)更加熟悉、了解,能够熟练运用字符串,而且加强了对类中参数传值的使用,巩固了类定义,函数成员使用等知识,并通过条件语句实现不同的人设置不同的操作。再者,实现删除功能时,通过查询资料、借鉴前人的经验,明白由于使用的是文件链表操作,可以使用标记实现删除功能,且保证删除和全删的标记不同。然后,在实现查找功能时,更熟练了指针对象的使用。最后,在整个程序运行时,考虑到屏幕出现的效果,查阅资料及其前人的登录系统代码,了解了库函数中的屏幕清零函数(system(cls);),并能正确使用。课程设计使我对c+课程又进行了系统的复习,独立思考的能力也有了提高。在程序设计运行过程中遇到错误,就集思广益,更改代码,不断的尝试实践运行各种方法虽然在这个过程中遇到了很多问题,但程序编辑成功后那种激动,问题解决中遇到挑战自己亲自动手,终于解决那种成就感。通过这次编程使我们认识到

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论