Linux下电子词典的设计与实现.docx
《Linux下电子词典的设计与实现.docx》由会员分享,可在线阅读,更多相关《Linux下电子词典的设计与实现.docx(35页珍藏版)》请在冰豆网上搜索。
![Linux下电子词典的设计与实现.docx](https://file1.bdocx.com/fileroot1/2022-12/1/ce27b250-9856-4954-a2ea-15f0a9d03552/ce27b250-9856-4954-a2ea-15f0a9d035521.gif)
Linux下电子词典的设计与实现
毕业设计(论文)
题目:
Linux下电子词典的设计与实现
学生姓名
学号201022080223
班级通信102202H班
所属院(系)电子信息工程系
指导教师
2014年5月20日
Linux下电子词典的设计与实现
摘要
随着嵌入式技术的发展,智能移动终端的普及,用户对数据处理和管理需求也不断提高,更多的用户群也越来越希望能对嵌入式产品中的数据进行更有效的管理,嵌入式数据库便是一个非常有效的工具。
如何在智能终端中使用嵌入式数据库以及如何让嵌入式数据库在嵌入式设备中充分有效的使用有限的存储资源成为嵌入式系统研究的重要方向。
本文的主要任务是对电子词典的设计,主要功能有英译汉、汉译英、生词库储存等。
本设计主要应用的技术有数据库、Qt、本设计用SQLite的B+树索引机制进行改进,将改进后的SQLite与Qt/Embedded相结合设计和实现智能终端中的电子词典。
本设计的特点是操作简单、快速、实用性强。
关键词:
嵌入式,用户界面,数据库,B+树
TheDesignandImplementationofElectronicDictionaryBasedonLinux
Abstract
Withthedevelopmentofembeddedtechnology,thepopularityofsmartmobiledevices,usersofdataprocessingandmanagementneedsisalsorising,moreandmoreuserswanttobeabletoembeddedproductsformoreefficientdatamanagement,embeddeddatabaseisaveryeffectivetool.Howintelligentterminalusingtheembeddeddatabaseandhowtomakeanembeddeddatabaseinembeddeddevicesfullyeffectiveuseofthelimitedstorageresourceshasbecomeanimportantresearchdirectionofembeddedsystems.Themaintaskistodesignelectronicdictionary,themainfunctionofChineseTranslation,ChinesetoEnglish,rawthesaurusstorage.Themainapplicationofthetechnologyaredesigneddatabase,Qt,thisdesignSQLiteB+treeindexingmechanismtoimprovetheimprovedSQLitewithQt/Embeddedcombiningdesignandimplementationofintelligentterminalelectronicdictionary.Thisdesignischaracterizedbysimple,fast,andpractical.
KeyWords:
Embedded,Qt,SQLite,B+tree
第1章绪论
1.1研究背景和意义
随着计算机技术的飞速发展,嵌入式系统已经成为该领域的一个重要方面,得到了更多的应用。
“嵌入式"对我们来说不再是一个陌生词,早已深入生活的每一个角落,电子词典、自动取款机、电视机顶盒、PDA、MP4、智能手机、电子医疗仪器、电梯等等,嵌入式设备可谓说是在我们日常生活中处处可见。
而且,随着智能移动终端的多样化,嵌入式技术快速发展,用户对管理的需求及数据的处理不断的提高,越来越多的用户渴望对嵌入式产品的数据进行更好的管理,嵌入式数据库可谓说是十分重要。
电子词典是种将传统的印刷词典转成数码方式、进行快速查询的数字学习工具。
电子词典以轻便易捷、查询快捷等特点,成为21世纪学生学习生活、社会人士移动办公的掌上利器。
在中国,电子词典的主要目标客户是英语学习人群,应该说,这个人群庞大的基数和每年数以千万记的增长量,为电子词典市场提供了滚滚而来的商机和极其广阔的发展空间。
电子词典的设计就需要用到数据库,嵌入式数据库大多用于电子产品中,比如智能手机、PDA、车载设备等内存空间比较有限的嵌入式设备。
由于嵌入式系统存储空间有限,所设计的产品需要对某种数据库处理数据时,则需利用的存储容量小,这样才能使效率更高。
怎样让嵌入式数据库在嵌入式设备中更好的被应用及怎样在嵌入式设备中使嵌入式数据库更有效的利用存储资源成为电子产品设计及研究的重要方向。
基于上述原因,对深入研究一种相对成熟、快速、简单易用和能改进空间利用率的电子词典具有重要的意义。
1.2数据库在电子词典中的应用
随着移动计算机时代的到来,数据库技术随着计算机的发展不断的进步,嵌入式数据库的技术已从初步的研究阶段步入应用阶段。
数据库系统对嵌入式的操作系统的贡献为数据库的技术开辟了更广阔的发展空间。
目前已经在移动平台、电子产品比如智能电子词典、数字电视机等领域有了广泛应用。
随着用户对数据的管理要求及实时处理的不断提高,移动智能终端普及,嵌入式数据库的优越性越来越突出,得到了各个国家的青睐。
各个研究机构都对嵌入式数据库展开了更进一步的研究。
在国内,北京网易研制的“有道词典”是网易有道推出的词典相关的服务和软件。
基于有道搜索引擎后台的海量网页数据以及自然语言处理中的数据挖掘术。
数据库在嵌入式操作系统中形成一个数据库环境,在电子词典的设计中嵌入式数据库主要是对其进行数据计算及数据存储管理。
它可以完成数据的查询、修改、增加、删除等功能。
还有国内其他一些研究机构和公司已经推出了自己的嵌入式数据库系统或者正在进行着这方面的研究工作。
第2章系统需求分析
2.1用户需求分析
随着科学技术的不断提高,计算机科学日渐成熟,电子词典也越来越受到人们的欢迎。
纵观传统的文本词典,不仅查询效率不高、不易携带,而且存储容量有限;与此同时,传统词典的单词印刷出错误码率高,同时内容越来越难以满足用户的需求。
而电子词典与传统文本词典相比较,有着无法比拟的优越性:
多种多样的检索方式、便利的查询窗口、灵活的显示界面和连续的参见功能,无一不体现这种知识媒体的智能化和人性化特色;电子多媒体在词典中的应用,更使得单调、呆板的词典变得形象生动在词典中获取知识变得轻松和快捷。
当今社会的发展使人们越来越清楚地看到单词查询方面的重要性,它直接决定查询效率与质量。
所以电子词典软件将在当今个人单词查询中发挥越来越重要的作用。
通过对目前软件市场的分析可知,大多的传统词典,有功能方面不能满足客户的需求。
因此,开发这样一套多功能电子词典系统是一件很有必要的事情。
2.2可行性分析
可行性分析的目的是使用最小的代价在尽可能短的时间里确定问题是否能解决,通过复杂系统的规模与目标,研究与此类似的系统后,我具体从下面几个方面考虑:
(1)技术上的可行性
电子词典的开发已有一定的时期,而且有很多成功的实例,技术基础也已经非常雄厚,因而技术上的准备应该不成问题。
(2)经济上的可行性
由于所开发的是个电子词典,要求并不是很高,普通的计算机都可以实现,所以从各方面来说都是可行的。
(3)操作上的可行性
本系统不要求使用者对开发工具有任何了解,用户仅需按自己的需求点击自己想要进入的界面,在查询模块里输入自己所需要查询的词汇,就可以得到自己所需要的与之相关的信息。
(4)结论
通过各方面条件的调查和研究,对项目的可行性做出结论,电子词典项目的开发是可行的。
第3章相关技术
3.1Qt/Embedded体系结构与框架
Qt/Embedded是著名开发商Trolltech的Qt库,它于2001年发明了嵌入式系统的Qt版本,是个针对嵌入式系统的应用程序的框架与类库。
由于Qt的便携性相当不错,很多基于Qt的Xwindow的程序可以很容易地移植到嵌入式系统。
由于Qt/Embedded被发布在GPL条款下,所以有很多的嵌入式Linux开发人员研究Qt/Embedded系统,如摩托罗拉的Linux手机“A780”和“E680”使用的Qt/Embedded作为其图形用户界面。
就像Qt,对于Qt/Embedded来说,它也是用c++编写的。
虽然它会增加系统的资源消耗,但却为开发人员提供了一个清晰的程序框架,使开发人员快速适应,而且能轻松的编写自定义用户界面程序。
由于Qt/Embedded是作为产品推出的,所以它有良好的技术支持和开发团队。
这是利用Qt/Embedded的开发来促进开发过程的,增加了产品的可靠性。
综上所述Qt/Embedded具有一下特点:
(1)与Qt一样,有相同的API.开发人员只需知道Qt的API,无需关心程序所使用的平台和系统。
它具有良好的便携性。
(2)Qt/Embedded不需要任何额外的图形库,拥有自己的图形引擎,底层的图形驱动frameBuffer可以直接被进行操作。
(3)Qt/Embedded可运行在所有流行的CPU和平台上,与硬件平台无关。
支持所有主要的嵌入式Linux,Qt/Embedded的基本需要。
3.2Qt/Embedded的信号与槽机制
Qt的核心机制是信号和槽,为Qt的程序奠定好了基础。
信号和槽是一个高层次接口,用于对象之间的通信,也是其他工具包与之区别的重要之处。
Qt自己定义的信号和槽,它是一种通信机制。
它独立于标准的C/C++语言,因此要正确的处理信号和槽,必须使用一个被称为moc(MetaObjectCompiler)的Qt工具,这是一个C++的Qt工具预处理程器,它是一个高层次的事件处理自动生成所需要的额外代码。
信号和槽可以携带任何类型的参数和任何数量,它们是完全安全的类型,不会带来系统崩溃的危险。
信号与槽构造了一个很大的组件编程机制,接收信号主要利用槽,槽是普通对象的成员函数。
一开始一个槽不知道自己是否可以与任何信号连接。
此外,一个对象成员并不是了解具体的通信机制。
单个的槽可以与很多信号进行连接,也可以是多个槽与单一的信号进行连接,还可以将单个信号之间进行连接。
这样,当第一个信号传输系统时将立即启动第二个信号。
3.2.1信号与槽的连接与实现
当某一个信号的所有者或拥有者内部状态发生变化,信号由一个对象发送。
这个信号只可以由定义过它的类及派生类进行传输。
若一个信号被传输后,将立刻执行与其相关联的槽,就好像调用一个正常的函数。
所有的槽先返回后,传输函数(emit)才返回。
假若存在多个与一个信号相关联的槽,则发射该信号后,这些槽将一个个被执行,值得注意的是它们执行的顺序是不确定的、随机的。
信号和槽的连接原理如图2.2所示。
图2.2信号和槽的连接原理
3.2.2元对象编译器
moc(metaobjectcompiler)即元对象编译器,它是用来分析C++文件中的类声明并生产C++代码,以便用于初始化元对象。
所有链接到函数的指针以及全部信号和槽的名字都包含在元对象中。
moc是信号与槽机制所必要的。
元对象编译器读C++的源文件时,如果发现有Q_OBJECT宏声明的类,那么它就会生成另外一个C++的源文件,这个新生成的文件中包含有该类的元对象代码。
元对象编译器并没有扩展#define宏定义或#include,它仅仅是跳过所有遇到的任意预处理指令。
用元对象编译器生成的C++源文件必须与类实现一起进行连接和编译,或者用#include语句将其包含到类的源文件中。
3.3SQLite数据库
在2000年时,开发人员开发出一种小型的嵌入式数据库即SQLite。
是一个自身就完全包含数据库引擎功能的小型的C语言链接库,它在嵌入式系统中很方便的可以使用。
SQLtie对SQL92提供了大多数支持,它支持索引、视图、多个表、事务等一系列用户界面和驱动程序。
速度非常快,易于使用,也提供了很多的数据库接口。
这个库具有很强的凝聚力,它是完全开放的源代码可以应用于所有的领域。
SQLite链接库的大部分接口的实现函数都能在main.c源文件中找到,为了避免和其它程序发生冲突,接口函数都以sqlite3为前缀。
SQLite有自己的高度优化的分析器和生成器,它可以快速的生产出高效率的代码,而且它的新颖设计对内存溢出有着特别的抵抗力。
SQLite有以下特点:
(1)源代码完全开放,不管哪个界的用户都可以免费使用;
(2)不受外部的影响,相对独立;
(3)数据库是一个完整的,且储存在单一的磁盘文件中;
(4)附有很好的源代码,并且注释的很清楚,方便用户自己学习,而且准确率达到90%以上;
(5)当电源故障和系统崩溃之后,事务的操作仍是独立的、一致的、持久的;
SQLite的应用程序界面非常好用,数据库的操作也非常简单。
比如排序、删除、插入、修改、查询只需简单的三个用来获得数据和执行SQL的函数。
使用C语言的应用程序界面需三个步骤:
1.提供所需文件以及查询的模式以便调出sqlite3open()来与数据库连接,其中这里有两个参数,一个负责打开数据库的文件名,另外一个是用来返回数据库的。
2.给出一个回调函数,SQLite执行回调函数(Callback)返回到数据库所获得的结果。
3.执行sqtlite3_exec(),将回调函数的指针和SQL查询语句作为函数参数进行传递。
3.4SQLite的索引机制
对于电子词典的设计,查询的速度越快越好,这样我们就研究如何才能使查询单词的效率变得更高。
sqlite3是使用优化的B树即B+进行结构索引。
在关键字的顺序查找方面,数据库的效率得到大大的提升。
这种索引可以进行多种方式进行查询,如随机查询、规范查询等。
3.4.1B+树的概念
(1)有n棵子树的结点中含有n-1个关键字,每个关键字不保存数据,只用来索引,所有数据都保存在叶子结点。
(2)你的全部关键字的数据以及包含着所有关键字的记录指针都包括在叶子结点中,并且依据全部关键字的大小叶子结点自动连接。
(3)凡是非最末端的结点都可以看作是索引部分,他们中只含其子树(根结点)中的最大(或最小)关键字。
3.4.2B+树查找
B+树有两种查找方法:
1.从根结点开始进行随机查找。
2.从最小关键字起顺序查找。
在查找时,若非最末端的结点的关键字等于给已知值时,并非终止,则是要继续查找直到叶子结点。
其次B+树也可以通过由叶子结点所组成的链表来规范查找。
3.4.3B+树插入
n阶B树的插入操作在叶子结点上进行,假设要插入关键值a,找到叶子结点后插入a,做如下算法判别:
1.如果当前结点是根结点并且插入后结点关键字数目小于等于m,则算法结束;
2.如果当前结点是非根结点并且插入后结点关键字数目小于等于m,则判断若a是新索引值时转步骤4后结束,若a不是新索引值则直接结束;
3.如果插入后关键字数目大于n(阶数),则结点先分裂成两个结点X和Y,并且他们各自所含的关键字个数分别为:
u=大于(n+1)/2的最小整数,v=小于(n+1)/2的最大整数;
由于索引值位于结点的最左端或者最右端,不妨假设索引值位于结点最右端,有如下操作:
(1)如果当前分裂成的X和Y结点原来所属的结点是根结点,则从X和Y中取出索引的关键字,将这两个关键字组成新的根结点,并且这个根结点指向X和Y,算法结束;
(2)如果当前分裂成的X和Y结点原来所属的结点是非根结点,依据假设条件判断,如果a成为Y的新索引值,则转步骤4得到Y的双亲结点P,如果a不是Y结点的新索引值,则求出X和Y结点的双亲结点P;然后提取X结点中的新索引值a,在P中插入关键字a,从P开始,继续进行插入算法;
4.提取结点原来的索引值b,自顶向下,先判断根是否含有b,是则需要先将b替换为a,然后从根结点开始,记录结点地址P,判断P的孩子是否含有索引值b而不含有索引值a,是则先将孩子结点中的b替换为a,然后将P的孩子的地址赋值给P,继续搜索,直到发现P的孩子中已经含有a值时,停止搜索,返回地址P。
3.4.4B+树删除
B+树删除也是在叶子结点上操作,当要删除叶子结点中最大的关键字,则在非终端结点中值可以无需删除,一直保持存在。
若因为删除使结点中的关键字的个数小于[n/2]时,则B+树删除方法如下:
(1)被删除关键字所在的结点为叶结点,关键字数目大于或等于[n/2],则只需要直接删去关键字即可;
(2)被删除关键字所在的结点为叶结点,关键字数目等于[n/2]-1,相邻的左右兄弟关键字数目至少有一方大于或者等于[n/2],此时,如果右兄弟关键字数目大于或者等于[n/2],则将右兄弟中最小的关键字向上移动到双亲结点中,然后将其中紧靠在向上移动的关键字左边的一个关键字移动到被删除关键字所在的结点的最右边;否则,如果左兄弟的关键字数目大于或者等于[n/2],则左兄弟中最大的关键字上移到双亲结点中,将紧靠在该上移关键字右边的一个关键字移动到被删除关键字所在的结点的最左边。
这些做法类似于减法的借位运算。
(3)被删除关键字所在的结点为叶结点,关键字数目等于[n/2]-1,相邻的左右兄弟关键字数目均等于[n/2]-1,则从双亲借关键字补充,然后算法进入非叶结点的删除判断。
第4章电子词典的设计与实现
嵌入式系统其中一个主要应用范围是电子产品,为了是用户使用方便,现在开发人员主要生产手持电子类产品。
随着嵌入式技术的前景越来越光明及电子类产品越来越受人们的青睐,对于所需产品的功能及美观提出了更多的要求。
所以为了满足用户,本论文主要以设计电子词典为例,并且增加了应用功能以满足用户需要,本文使用Qt/Embedded和SQLite相结合设计了英语电子词典。
它主要有三大功能:
英汉查询、汉英查询、生词本增删词,下面将主要介绍这些功能的设计与实现。
4.1建立电子词典的开发与运行环境
由于本论文开发电子词典的初衷是用于:
如PDA、手机、车载设备等智能终端中,同时,Trolltech公司提供手机版和PDA版的Qtopia,其中手机版是商业版本,PDA版是免费版。
因此本文选择在PDA版的Qtopia平台上发布应用程序。
Qt/Embedded开放了源代码,为了开发嵌入式Linux应用系统,使开发人员可以在GPL许可协议下随意的利用。
程序要运行在Linux系统上,运行后可获得以下需要创建应用程序的包:
(1)designer是专门设计窗口界面组件的应用程序。
用它来最后生成file.ui文件和main.cpp文件;
(2)qmake工具用来生成file.pro文件;tmake是跨平台MakefiIe生成器。
(3)uic是从XML文件生成代码的用户界面编译器。
其主要作用是将file.ui文件生成file.h和file.cpp文件。
使用这几个工具就可以对电子词典进行运行开发、编译、调试。
4.2使用Qt/Embedded设计运用程序的方法
对界面设计工具Qt来说,在设计的过程中常用的两种设计方法是:
一种设计方法是采用图形化界面设计与源代码编写相结合的方式,可以用Qtdesinger(Qt设计器)设计要求实现的界面,另一种方法是通过采用完全利用编写源代码来实现,这种方法是纯编码,要求完全编写main文件、头文件以及运用文件,相对于Qt来说,就是完成*.cpp和*.h文件。
但是它们有各自的优缺点,比如:
图形化界面设计方法,是根据自己的需求,通过改变组件的属性来完成。
界面中所参与的信号/槽也是用信号/槽的属性窗口来设置。
当界面设计好以后,就会自动生成一个不完整的main文件和*.cpp源文件,每个应用程序名称在信号槽设置中已定义,这时我们只需编写源文件中没有的内容。
这种方法最大的缺点就是受到源程序、图形界面的改变及Qtdesigner的限制的相互影响。
面向对象语言的设计方法很容易使用,无需Qtdesinger的限制,使用的程序或文档库中包含的信号/槽实施更容易。
优点就是你可以根据自己的设计需要采取更好的优势资源。
其次,因为这种方法没有现成的程序需要开发者自己编写所源代码,尤其是对一些已经存在在库中的组件,这就需要个人自己编代码来设置组件的属性,从而开发人员的工作量就会大大增加。
又因为界面只有在整个代码运行编译后才能看见,所以这种方法对工作中的互动与发展速度产生不利影响。
本论文电子词典的设计与实现利用了这两种方法的结合体,而且事实验证表明,巧用纯编码和Qtdesigner的结合体可以很大的提高效率与速度。
4.3电子词典的界面设计与实现
图形用户界面的编码是一件工作量非常大的事情,前面我们已经提到Qt/Embedded可以提供一个非常好的工具,它有自身的特点。
Qt系统特定的界面开发工具是QtDesigner,它只是提供一个可视化界面编辑器不包括任何编辑器。
QtDesigner将编辑完成的界面以XML其保存为.ui文件,然后由专用的uic界面编译器将其转换为标准c++的源文件。
在QtDesigner中,我们可以拖动或通过点击的方式,适当的在空白表单添加一些输入框和按钮等小部件。
这样Designer工具可以自动编写和维护代码。
利用QtDesigner对C++程序进行编制的具体操作如下是:
(1)窗口的建立,并且根据应用的需要添加控件在窗体中。
Qt将会把窗口的建立保存为.ui文件;
(2)使用Qt提供的uic工具将.ui文件转换为.h和.cpp文件,控制的动作则需要手动添加。
(3)应用程序建立.pro工程文件需要使用program工具,工程建立Makefile文件利用tmake工具为主。
(4)运行make,即可得到所需的可执行文件。
为了使用户操作方便简洁,在电子词典的界面设计时在一个窗口中设计了几个标签,每个标签是一个功接口,里面包括行文本框、按钮、编辑框等。
4.4电子词典的功能设计与实现
4.4.1系统的功能模块图
图4.1系统的功能模块图
(1)主界面模块:
进行生词加入生词本、进入生词本、以及退出程序。
(2)加入生词本:
加入一个生单词,并进行保存。
(3)进入生词本:
对加入的生单词进行详细的解释。
(4)添加单词:
对新单词进行添加。
(5)编辑单词:
对已经添加过的单词进行重新编辑。
(6)删除单词:
对没用或者已经很少用到的单词进行删除操作。
(7)保存单词:
对新添加的生单词或编辑过的旧单词进行保存。
4.4.2功能的实现步骤
具体实现上述功能需要具备单词词库、Qt/Embedded开发环境、SQLite。
具体实现步骤如下:
1.创建数据库文件
大多数SQL数据库引擎是作为一个单独的服务终端进程被执行。
使用数据库SQLite时,如果需要访问数据库中的程序,我们直接可以从磁盘中的数据库文件里读写,没有中间的服务终端进程。
所以,我们在调用数据库SQLite时必须创建数据库文件,依据数据库的特点,我们可以根据以下的过程进行创建数据库文件:
(1)调用SQLite的函数sqlite3open()创建一个数据库文件
(2)创建表。
在英语词典中通常需要具备英语单词、单词的解释这几项,所以在此需要创建一个words表。
(3)将词库倒入数据库文件。
在倒入时是以行为单位读取的,每一行的“单词、解释”都是用