wxWidgets+wxSmith版电子词典
课程首页在:http://blog.csdn.net/sxhelijian/article/details/11890759,内有完整教学方案及资源链接
【项目3-OOP版电子词典】(本程序须要的相关文件,请到http://pan.baidu.com/s/1qW59HTi下载。
)
做一个简单的电子词典。
在文件dictionary.txt中,保存的是英汉对比的一个词典,词汇量近8000个,英文、中文释义与词性间用’\t’隔开。
编程序。由用户输入英文词,显示词性和中文释义。
【项目3拓展1(选做)】使这个词典。读入一篇文章,输出对当中的所词的解释。比如。对aboutcpp.txt,输出例如以下左图结果所看到的(也能够看到当中待改进的地方)。
【项目3拓展2(选做)】试用wxwidgets做一个窗体版的电子词典,例如以下右图所看到的:
本文是拓展2的參考解答:
第一部分工作:编写业务逻辑
一个程序中。最主要的是其业务。
先定义词(Word)类和字典(Dictionary)类例如以下:
dict.h
#ifndef DICT_H_INCLUDED
#define DICT_H_INCLUDED
using namespace std;
//定义词条类
class Word
{
public:void set(string e, string c, string wc);int compare(string); //英语部分与给定字符串比較。等于返回,大于返回。小于返回-1string getChinese();string getWord_class();
private:string english;string chinese;string word_class;
};//定义字典类
class Dictionary
{
public:Dictionary();string searchWord(string k);
private:int BinSeareh(int low, int high, string k);int wordsNum;Word words[8000]; //用于保存词库
};#endif // DICT_H_INCLUDED
dict.cpp
#include <fstream>
#include <cstdlib>
#include "dict.h"
using namespace std;
void Word::set(string e, string c, string wc)
{english=e;chinese=c;word_class=wc;
}int Word::compare(string k)
{return english.compare(k);
}string Word::getChinese()
{return chinese;
}string Word::getWord_class()
{return word_class;
}Dictionary::Dictionary()
{string e,c,wc;wordsNum=0;//将文件里的数据读入到对象数组中ifstream infile("dictionary.txt",ios::in); //以输入的方式打开文件if(!infile) //測试是否成功打开{//cout<<"dictionary open error!"<<endl;exit(1);}while (!infile.eof()){infile>>e>>c>>wc;words[wordsNum].set(e, c, wc);++wordsNum;}infile.close();
}int Dictionary::BinSeareh(int low, int high, string key)
{int mid;while(low<=high){mid=(low + high) / 2;if(words[mid].compare(key)==0){return mid; //查找成功返回}if(words[mid].compare(key)>0)high=mid-1; //继续在w[low..mid-1]中查找elselow=mid+1; //继续在w[mid+1..high]中查找}return -1; //当low>high时表示查找区间为空,查找失败
}string Dictionary::searchWord(string key)
{int low=0,high=wordsNum-1; //置当前查找区间上、下界的初值int index=BinSeareh(low, high, key);if(index>=0)return words[index].getWord_class()+words[index].getChinese();elsereturn "查无此词";
}
这部分工作能够先行进行測试。測试工作不须要窗体,建立console application来完毕更靠谱。见链接http://blog.csdn.net/sxhelijian/article/details/28230293和http://blog.csdn.net/sxhelijian/article/details/28231661。
第二部分工作 用wxSmith制作界面
能够按wxWidgets教程(见http://blog.csdn.net/sxhelijian/article/details/26158709),通过代码制作界面,简单的办法是用wxSmith。作为专业学生,应该学会代码。以掌握类库工作的原理,但要高速开发,wxSmith也提倡使用。
在code::Blocks中,点菜单wxSmith-->Add wxFrame。制作好的界面例如以下。本文中,相应的资源文件名称是dictFrame.wxs:
第三部分工作 为界面上的元素配备代码
在生成如上界面的同一时候,产生两个文件:dictFrame.h和dictFrame.cpp。
.wxs文件资源文件的目标也就是生成这两个文件。这是应用程序中的代码部分。
以下列出的是这两个文件里的内容。大部分由框架提供,须要自加的部分,给出了凝视。
dictFrame.h
#ifndef DICTFRAME_H
#define DICTFRAME_H//(*Headers(dictFrame)
#include <wx/stattext.h>
#include <wx/textctrl.h>
#include <wx/panel.h>
#include <wx/button.h>
#include <wx/frame.h>
//*)#include "dict.h" //自己加,要用到字典类class dictFrame: public wxFrame
{public:dictFrame(wxWindow* parent,wxWindowID id=wxID_ANY,const wxPoint& pos=wxDefaultPosition,const wxSize& size=wxDefaultSize);virtual ~dictFrame();//(*Declarations(dictFrame)wxStaticText* StaticText2;wxButton* Button1;wxPanel* Panel1;wxStaticText* StaticText1;wxTextCtrl* TextCtrl2;wxTextCtrl* TextCtrl1;//*)protected://(*Identifiers(dictFrame)static const long ID_TEXTCTRL1;static const long ID_BUTTON1;static const long ID_STATICTEXT1;static const long ID_TEXTCTRL2;static const long ID_STATICTEXT2;static const long ID_PANEL1;//*)private:Dictionary dict; //自己加:将字典类对象作为Frame类的成员//(*Handlers(dictFrame)void OnButton1Click(wxCommandEvent& event);void OnClose(wxCloseEvent& event);//*)DECLARE_EVENT_TABLE()
};#endif
dictFrame.cpp
#include "dictFrame.h"
#include "dict.h"//(*InternalHeaders(dictFrame)
#include <wx/intl.h>
#include <wx/string.h>
//*)//(*IdInit(dictFrame)
const long dictFrame::ID_TEXTCTRL1 = wxNewId();
const long dictFrame::ID_BUTTON1 = wxNewId();
const long dictFrame::ID_STATICTEXT1 = wxNewId();
const long dictFrame::ID_TEXTCTRL2 = wxNewId();
const long dictFrame::ID_STATICTEXT2 = wxNewId();
const long dictFrame::ID_PANEL1 = wxNewId();
//*)BEGIN_EVENT_TABLE(dictFrame,wxFrame)//(*EventTable(dictFrame)//*)
END_EVENT_TABLE()dictFrame::dictFrame(wxWindow* parent,wxWindowID id,const wxPoint& pos,const wxSize& size):dict() //加上对子对象dict的初始化,读入字典
{//(*Initialize(dictFrame)Create(parent, id, _("我的字典"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_FRAME_STYLE, _T("id"));SetClientSize(wxSize(354,111));Move(wxDefaultPosition);Panel1 = new wxPanel(this, ID_PANEL1, wxPoint(64,56), wxDefaultSize, wxTAB_TRAVERSAL, _T("ID_PANEL1"));TextCtrl1 = new wxTextCtrl(Panel1, ID_TEXTCTRL1, wxEmptyString, wxPoint(64,32), wxSize(192,22), 0, wxDefaultValidator, _T("ID_TEXTCTRL1"));Button1 = new wxButton(Panel1, ID_BUTTON1, _("查字典"), wxPoint(264,32), wxSize(51,24), 0, wxDefaultValidator, _T("ID_BUTTON1"));StaticText1 = new wxStaticText(Panel1, ID_STATICTEXT1, _("释义"), wxPoint(32,72), wxDefaultSize, 0, _T("ID_STATICTEXT1"));TextCtrl2 = new wxTextCtrl(Panel1, ID_TEXTCTRL2, wxEmptyString, wxPoint(64,64), wxSize(192,22), 0, wxDefaultValidator, _T("ID_TEXTCTRL2"));TextCtrl2->Disable();StaticText2 = new wxStaticText(Panel1, ID_STATICTEXT2, _("英文"), wxPoint(32,40), wxDefaultSize, 0, _T("ID_STATICTEXT2"));Connect(ID_BUTTON1,wxEVT_COMMAND_BUTTON_CLICKED,(wxObjectEventFunction)&dictFrame::OnButton1Click);//*)TextCtrl1->SetFocus (); //自己加:希望输入英文的文本框获得“焦点”
}dictFrame::~dictFrame()
{//(*Destroy(dictFrame)//*)
}void dictFrame::OnButton1Click(wxCommandEvent& event)
{ //函数由添加事件处理生成,但函数体要自己实现string s=string(TextCtrl1->GetLineText(0)); //获得文本框中文字wxString ws = dict.searchWord(s); //查字典TextCtrl2->SetLabelText(ws); //在还有一个文本框中显示查询结果
}
第四部分工作 写主控程序
每个wxWidgets程序都要写以下的代码。按套路来即可:
MyApp.h
#include <wx/wx.h>class MyApp : public wxApp
{public:virtual bool OnInit();
};
MyApp.cpp
#include "MyApp.h"
#include "dictFrame.h"IMPLEMENT_APP(MyApp)bool MyApp::OnInit()
{dictFrame *mydict = new dictFrame(NULL);mydict->Show(true);return true;
}
本文程序的执行截图:
附录:可能错误的处理
关于wxWidgets的入门知识及学习方法指导,见:http://blog.csdn.net/sxhelijian/article/details/26158709
假设在编译和连接中遇到问题,见:http://blog.csdn.net/sxhelijian/article/details/26164181
关于wxSmith,见http://blog.csdn.net/sxhelijian/article/details/26165237
程序执行不出现窗体直接结束。最大的可能是:字典文件不能读入。注意这个应用须要用到字典文件dictionary.txt。从 下载,并将这个文件拷贝到项目所在文件夹中。
================= 迂者 贺利坚 CSDN博客专栏================= |== IT学子成长指导专栏 专栏文章的分类文件夹(不定期更新) ==| |== C++ 课堂在线专栏 贺利坚课程教学链接(分课程年级) ==| |== 我写的书——《逆袭大学——传给IT学子的正能量》 ==| ===== 为IT菜鸟起飞铺跑道。和学生一起享受快乐和激情的大学 ===== |
转载于:https://www.cnblogs.com/mengfanrong/p/5080632.html
wxWidgets+wxSmith版电子词典相关推荐
- C++实践参考——OOP版电子词典
[项目-OOP版电子词典] 做一个简单的电子词典.在文件dictionary.txt中,保存的是英汉对照的一个词典,词汇量近8000个,英文.中文释义与词性间用'\t'隔开. (1)编程序,由用户输入 ...
- 项目-OOP版电子词典
问题及代码: /* *Copyright (c) 2016,烟台大学计算机学院 *All rights reserved. *文件名称:main.cpp *作 者:李磊涛 *完成时间:2016年6月2 ...
- Qt版电子词典(qss)
代码内有注释 源码:https://github.com/qingyiz/Dict_qt 效果图:
- 实现电子词典_它是一部电子词典,一部翻译机,一部口语机还是一部出游的随身WiFi...
科技扒爷带你看 有了小爱老师,一定程度上解决了英语学习的问题.它是一部电子词典.一部翻译机,一部口语机.还是一部出游的随身WiFi. 外观上,全白配色,磨砂质感的塑料机身,3.97英寸LCD触摸屏,操 ...
- android电子英语词典背景介绍,实现基于Android的英文电子词典
本文为原创,如需转载,请注明作者和出处,谢谢! 英文词典是手机中经常使用的应用.因此,在本文将结合Android来讨论如何实现一个Android版的英文词典.实现英文词典的方法很多.在本文使用了SQL ...
- CodeBlock速配wxWidgets[U版]
CodeBlock速配wxWidgets[U版] MD版起稿时间:2/1/2016 4:15:45 AM by Jimbowhy CSDN发布地址:http://blog.csdn.net/Winse ...
- 电子词典中鼠标取词的原理
2000年11月27日 09:19:00 -- ※ 来源:·BBS 水木清华站 bbs.net.tsinghua.edu.cn·[FROM: 202.117.20.17] 发信人: Dreammy ( ...
- 电子词典软件也能跨平台--介绍我创造的LAVA
(一)LAVA简史 在2003年9月,我打算为文曲星写一种编程语言.在此之前,文曲星上的编程语言存在或多或少的缺点.我需要这样一种语言,它不象basic那样功能有限,运行不稳定,也不象汇编那样 ...
- 我为什么要用电子词典
电子词典刚刚出现的那会儿,大概是10年以前,品牌比较少,大概主要有快译通和文曲星的一些早期版本.英语学习者奔走相告,为终于能够放下大部头的词典而欢欣鼓舞. 可也是在那时,但凡英语专家和真正高水准的英语 ...
- 电子词典软件也能跨平台--简单介绍我创造的LAVA
在2003年9月,我打算为文曲星写一种编程语言.在此之前,文曲星上的编程语言存在或多或少的缺点.我需要这样一种语言,它不象basic那样功能有限,运行不稳定,也不象汇编那样烦琐,开发周期长.c是最接近 ...
最新文章
- Ubuntu命令行连接wifi热点
- MIT霸气护学生:你换导师,我替你买单!
- SAP HU上面的'Obj.to Which HU Belongs'栏位初探
- pyqt qscrollarea 设置滚动位置
- 【多线程】1.条件变量--std::condition_variable
- MySQL乐观锁、共享锁、排他锁、行锁、表锁区别和使用方法
- 《江南百景图》游戏设计小思考:留边占角“小烦恼”
- 英特尔表示:元宇宙的路还很长
- python并发编程6-协程
- Linux文件查找命令find用法整理(locate/find)
- border-radius导致overflow:auto 或者 overflow:hidden失效,溢出问题解决方法
- word光标一直闪动_搞清楚啥是回车符,Word格式问题就解决了92.5%
- [RTMP协议]常用直播流地址
- flash插件java_[Java教程]SWFObject Flash 增强插件
- java实现MongoDB中unwind与match用法
- HTML基础常识问答(二)
- 将Flutter添加到现有应用——过程中遇到的问题
- 软件测试面试题:请对这个系统做出测试用例:一个系统,多个摄像头,抓拍车牌,识别车牌,上传网上,网上展示?
- 成功男友因具备的品质
- 浪涌-雷击浪涌的防护