能不能给我一份背单词软件 备忘录之类的 c++源码?

C++备忘录源代码_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
C++备忘录源代码
上传于||暂无简介
阅读已结束,如果下载本文需要使用2下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩8页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢&&&&c++MFC编写备忘录,编译运行通过
&c++MFC编写备忘录,编译运行通过
基于MFC用C++编写的备忘录,可以添加事件提醒,删除事件提醒。自行设置提醒时间,时间到后在桌面弹出提醒窗口
若举报审核通过,可奖励20下载分
被举报人:
Dreamershi
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
Q.为什么我点的下载下不了,但积分却被扣了
A. 由于下载人数众多,下载服务器做了并发的限制。若发现下载不了,请稍后再试,多次下载是不会重复扣分的。
Q.我的积分不多了,如何获取积分?
A. 获得积分,详细见。
完成任务获取积分。
论坛可用分兑换下载积分。
第一次绑定手机,将获得5个C币,C币可。
关注并绑定CSDNID,送10个下载分
下载资源意味着您已经同意遵守以下协议
资源的所有权益归上传用户所有
未经权益所有人同意,不得将资源中的内容挪作商业或盈利用途
CSDN下载频道仅提供交流平台,并不能对任何下载资源负责
下载资源中如有侵权或不适当内容,
本站不保证本站提供的资源的准确性,安全性和完整性,同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
开发技术下载排行
您当前C币:0&&&可兑换 0 下载积分
兑换下载分:&
消耗C币:0&
立即兑换&&
兑换成功你当前的下载分为 。前去下载资源
你下载资源过于频繁,请输入验证码
如何快速获得积分?
你已经下载过该资源,再次下载不需要扣除积分
c++MFC编写备忘录,编译运行通过
所需积分:2
剩余积分:0
扫描微信二维码精彩活动、课程更新抢先知
VIP会员,免积分下载
会员到期时间:日
剩余下载次数:1000
c++MFC编写备忘录,编译运行通过
剩余次数:&&&&有效期截止到:
你还不是VIP会员VIP会员享免积分 . 专属通道极速下载
VIP下载次数已满VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员
你的VIP会员已过期VIP会员享免积分 . 专属通道极速下载,请继续开通VIP会员本帖子已过去太久远了,不再提供回复功能。&&&&背单词软件,C++实现
背单词软件,C++实现
压缩包中是C++编写的一个背单词软件,包括所有源代码和一个单词文件(txt),支持记录用户使用情况,帮助记忆单词
若举报审核通过,可奖励20下载分
被举报人:
winifredlong
举报的资源分:
请选择类型
资源无法下载
资源无法使用
标题与实际内容不符
含有危害国家安全内容
含有反动色情等内容
含广告内容
版权问题,侵犯个人或公司的版权
*详细原因:
VIP下载&&免积分60元/年(1200次)
您可能还需要
开发技术下载排行3033人阅读
我承认里面有些话简直就是废话,可还是得写。。。
有些内容粘贴过来格式发生了变化。。。比如少空格啥的,大家心里知道就行了。。。
1&&& 概况:
1.1&&&需求分析
现在中国英语学习者的数量每年都在不断增加,英语在各种场合的重要性也与日俱增,出现了很多英语学习软件。一个基本的英语学习软件要求能够方便学习者练习、模拟考试来查看自己当前的水平,同时还应该能够根据特定的要求来进行动态增删,界面也应当足够简洁友好。
本设计尝试设计一个简单的背单词程序,基本上可以实现增删、练习、考试等功能,但由于时间有限,加之本人水平有限,未能实现图形化界面,功能相对简单。
1.2&&&开发设计思路
首先应当弄清楚程序所要实现的基本功能,也就是上面所列出来的增加单词、删除单词、修改单词、背单词练习、浏览词库、模拟考试等;
其次是要设计针对特定功能的数据结构和类,在本设计中,单词采用一个类节点WordNode来进行存储,整个词库则使用STL中的vector向量来存储,为了保持每个类的功能清晰、简洁,在单个类内部实现的功能应当有一定的联系,非对外的接口最好设置为private属性;
然后是程序的具体实现,算法的东西主要包括二分查找单词、词库排序等,相对简单,而且也有STL可以使用。其余的部分基本没有算法的难度,但要保证程序的清晰,包括注释、变量合理命名等;
最后是程序的测试。针对测试出来的bug或者用户友好性不足的地方进行进一步的改正,得到最终的代码。
2&&&&&&&具体实现过程:
2.1& 类设计
针对本设计的特点,可以用四个类来实现,分别为WordNode、DataBase、myless、MyFrame类,下面分别说明这四个类的具体功能:
■WordNode类
WordNode类用来表示一条单词记录。对于词典中的每条单词记录,有英语单词和中文解释两个数据域,因此可用两个私有数据成员来进行表示:
//英文单词
&&& &&&&&&&
&&& &&&&&&&//对应的中文语义
&&&&同时为了方便其他类对单词记录进行操作,还需要提供一系列的公有方法:
&&&&&&&&&&&& //默认空构造函数
&&& &&&&&&&&WordNode();
&&& &&&&&&&&//给出英文单词和中文解释的构造函数
&&& &&&&&&&&WordNode(string english, string chinese);&&
&&& &&&&&&&&//获取英文内容
&&& &&&&&&&&string getEnglish();
&&& &&&&&&&//获取中文内容
&&& &&&&&&&string getChinese();
&&& &&&&&&&//重新设置英文内容
&& &&& voidsetEnglish(string english);
&& //重新设置中文内容
voidsetChinese(string chinese);
这些公有方法主要是用来获取某字段的内容以及设置相应字段的内容,实现较为简单,不在赘述。
■DataBase类
DataBase是一个数据库类,用来盛装词典的内容,以及提供一系列的操作功能。词典记录是被放在一个vector&WordNode&中的,该数据段被定义为private。
提供的对外接口大致如下:
//默认构造函数
&&&&&& &&& DataBase();
&&&&&& &&& //返回单词的总数目
&&&&&& &&& int getDicSize();
&&&&&& &&& //判断字典是否为空
&&&&&& &&& bool isEmpty();
&&&&&& &&& //返回下标为i的单词,i不合法则返回空
&&&&&& &&& WordNodegetWordNode(int i);
&&&&&& &&& //修改第i个WordNode节点,失败则返回值为负数
&&&&&& &&& int setWordNode(inti,WordNode newWordNode);
&&&&&& &&& //添加一个新单词
&&&&&& &&& int addWordNode(WordNode wordNode);
&&&&&& &&& //删除第i个WordNode节点,失败则返回值为负数
&&&&&& &&& int deleteWordNode(inti);
&&&&&& &&& //根据单词二分查找相应的条目,查找失败返回负数
&&&&&& &&& int binarySearch(string word);&
&&&&&& &&& //重新对单词按字典序进行排序
voidsortWords();
具体的功能都可以参见注释,主要用来进行对相关单词节点的操作。由于词典的规模相对比较大(10000左右记录),采用线性查找的方法会大大降低效率,因此采用二分查找,将算法的复杂度由O(N)降低为O(lgN)。当然,代价是当词典的内容发生变化时必须重新进行排序,考虑到实际情况中词典内容并不是经常变化,这个方法还是会显著提高系统效率的。
■myless类
Myless类是为了方便调用STL中的sort()函数而写的,仅仅是重载了()运算符,作为一个函数对象,保证词典中的记录是按照字典序来进行排列的。
实现如下:
//用来辅助排序
class myless{
&&&&&&&&&& &&& //重载运算符,为排序做准备
&&& bool operator()(WordNode a, WordNode b) {
&&&&&&&&&&&&& &&& & //按照字典序排列
&&&&&&&&&&&&& &&& & returna.getEnglish() & b.getEnglish();
&&&&&&&参数是两个WordNode类的对象,按照英文单词的字典序排列。
■MyFrame类
MyFrame类是和界面相关的,虽然只是字符界面……格式的控制主要是通过换行来实现的,必须承认,这种格式控制方式并不具有普适性,但在dos窗口下也只能这样了。
Myframe类中只有一个private数据成员,就是DataBase的一个实例,来保存所有的词典记录数据。
同时MyFrame类提供了一系列的公有方法来实现与背单词相关的功能,列表如下:
//空构造函数
&&& &&& MyFrame();
&&& &&& //初始化整个界面
&&& &&& void initialize();
&&& &&& //添加新单词
&&& &&& void addWord();
&&& &&& //删除已有的单词
&&& &&& void deleteWord();
&&& &&& //修改现有的单词
&&& &&& void modifyWord();
&&& &&& //浏览词典
&&& &&& void browseDic();
&&& &&& //退出系统
&&& &&& void exitSystem();
&&& &&& //模拟考试
&&& &&& void exam();
&&& &&& //背单词练习
&&& &&& void exercise();
&&& &&& //控制格式,输出一些空行
voidprintBlankLines(int n);
由以上成员函数可以清楚看出整个设计所提供的各种功能。
2.2& 单词节点及词典的实现
单词节点主要是通过WordNode类来实现的,每一条单词记录对应于一个WordNode类的实例,在上一部分已经详细列出,所提供的对外接口也足够简单,不再详细讨论。
词典的文本文件dic.txt中存储着接近10000条单词记录,每条记录都遵循严格的格式:英文单词&& 中文解释。因此可以通过C++中的文件操作来在初始化时构建整个单词库。
DataBase类的构造函数中借助于ifstream实现了这一功能:
//打开词典文件
&&& &&& ifstreamfile(&dic.txt&);
&&& &&& while(file&&english&&chinese){
&&&&&& &&& this-&wordNode.setChinese(chinese);
&&& &&&&&& this-&wordNode.setEnglish(english);
&&& &&& &&& //将相应节点插入数据库中
&&&&&& &&& (this-&words).push_back(this-&wordNode);
&&& &&& //关闭文件
file.close();
这段代码首先实例化一个ifstream类,然后打开文件,读入相应单词记录并实例化一个WordNode类,最后将该对象放入vector容器中并关闭文件。
2.3& 增、删、改功能的实现
一般说来使用者并不经常需要对词典本身进行修改,但在个别情况下用户可能需要把自己平时碰到的词典中又没有的生词加进去,或者删去一些已经熟练掌握的单词,这种情况下增、删、改的功能就很有用处。
增加单词节点对应于DataBase类中的addWordNode(WordNode wordNode)函数,是通过将节点放到容器vector中并重新排序实现的;
删除节点首先需要根据给出的单词进行二分查找,然后通过DataBase类中的deleteWordNode(int i)函数实现,二分查找的基本原理是利用序列的有序性,每次讲查找范围折半,直到确定找到目标或者目标不存在。二分查找的实现如下:
//根据单词二分查找相应的条目,查找失败返回空
intDataBase::binarySearch(string word){
&&&&&& &&& int left=0;
&&&&&& &&& int right=this-&getDicSize()-1;
&&&&&& &&& //进行二分查找
&&&&&& &&& while(left&=right){
&&&&&& &&&&&& //中间元素
&&&&&& &&&&&& int middle=(left+right)/2;
&&&&&& &&&&&& //找到目标
&&&&&& &&&&&& if(this-&words[middle].getEnglish()== word)
&&&&&& &&&&&& &&& return
&&&&&& &&&&&& //目标在左半部分
&&&&&& &&&&&& else if(this-&words[middle].getEnglish() & word)
&&&&&& &&&&&&&&&& right=middle-1;
&&&&&& &&&&&& //目标在右半部分
&&&&&& &&&&&& else left=middle+1;
&&&&&& &&& }
&&&&&& &&& return -1;
通过对有序序列的二分查找,可大大提高查找效率,对于具有10000个节点的情形,大约需要15次查找即可。
修改单词的功能只需要找到对应的节点,然后修改解释部分的内容即可,由于单词内容并没有发生变化,因此也不需要重新排序。
2.4& 模拟练习与考试功能的实现
模拟练习和考试功能是最为常见的使用方式,练习的目标在于通过浏览单词来进行记忆;本设计中考试的功能是通过随机从数据库中选择20个单词来测试,以选择题的形式呈现。考试结束之后会给出一个简单的反馈,帮助使用者的学习。
在模拟练习的功能中,通过srand(unsigned(time(0)))设置时间种子,然后生成随机数取出相应单词呈现给用户。
int number=rand()%(this-&dataBase.getDicSize());
&&& && cout&&&单词:&&& dataBase.getWordNode(number).getEnglish()&&
cout&&&解释:&&&dataBase.getWordNode(number).getChinese()&&
上述代码比较简单,不再解释。
在模拟考试功能中,基本的设计思想是类似的,但需要进行考试规则的简单说明;除此之外,还需要设置score变量来记录用户的得分并根据得分来给出反馈。
& 题库的选择是通过随机过程得到的,选项也是随机打乱的,尤其要注意的一点是:不能选择重复的单词,也不能选择重复的解释。因此有一个去重的过程。实现如下:
srand(unsigned(time(0)));
&&&&&& //随机选取个单词
&&& &&& for(inti=0;i&20;i++){
&&&&&& &&& int tmp=rand()%(this-&dataBase.getDicSize());
&&& &&&&&& bool repeat=false;
&&& &&& &&& //检查随机生成的单词是否重复
&&&&&& &&& for(intj=0;j&i;j++){
&&& &&&&&& &&& if(number[j]== tmp)
&&&&&&&&&&&&& &&& repeat=true;
&&& &&&&&& }
&&& &&& &&& if(repeat ==true)
&&&&&& &&& &&& i--;
&&& &&&&&& else
&&& &&& &&&&&& number[i]=
第一个for循环用来随机挑选20个单词,第二个for循环用来判重。
3&&& 使用说明:
&&&&3.1& 软件所具有的功能概述
从主菜单也可以看出,本设计共提供了6项功能:
1.添加单词
2.删除单词
3.修改单词
4.单词练习
5.模拟考试
6.查看词典
&&&&&&&&& 功能的具体内容应该是一目了然的,不再赘述。
&&&&3.2& 软件的使用说明
使用上最大的缺陷就是没有友好的图形界面,除此之外还是比较容易的。
运行之后首先是初始化界面:
单词练习界面:
模拟考试说明界面:
考试的具体过程:
考试结束后的反馈:
添加单词界面:
删除单词界面:
修改单词界面:
查看词典:
以上是所有功能的界面展示,还有一些错误处理的部分在里面,限于篇幅,没有一一列出。
4&&& 设计开发总结:
通过本次C++课程设计实践,一方面锻炼了需求分析、类设计的能力,另一方面对于STL中提供的库函数使用有了更深的了解。背单词的软件有很多,其中不乏非常出色地软件,本设计基本实现了背单词的功能,但仍然还有很多改进的余地。比如设计成友好的图形界面、提供多种考试模式等,由于临近期末,时间有限,这些构想尚未实现。
总体来说,收获还是比较大的,进一步体会到了C++作为一门程序设计语言在较大项目管理中的优势,清晰地组织结构非常有助于提高系统的可扩展性,也能够大大增强代码的易读性。
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:314969次
积分:4580
积分:4580
排名:第5103名
原创:135篇
转载:89篇
评论:83条
北大小硕,各种渣。。。
我的github账号:
长期混迹于各种算法竞赛平台,包括:
handle一律为BananaTree.
(1)(1)(1)(4)(4)(3)(2)(2)(2)(1)(1)(2)(4)(1)(1)(11)(5)(5)(2)(4)(4)(2)(3)(4)(2)(3)(3)(4)(3)(6)(8)(4)(6)(13)(2)(6)(8)(6)(13)(5)(12)(4)(6)(12)(13)(6)(11)(1)}

我要回帖

更多关于 背单词软件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信