当前位置:文档之家› 简明英汉字典

简明英汉字典

简明英汉字典一、需求分析1.用例图2.用例说明(1)查询与显示:用户可查询某一单词,显示单词信息(2)选择查询方式:用户可选择英汉、汉英、字典结构、模糊查询等查询方式(3)编辑、修改已有单词:用户可以修改查询到的英文单词。

(4)创建新单词:用户可以创建一个新的英文单词。

(5)删除已有单词:用户可以删除查询到的单词(6)打印和打印预览:用户可以在当前查询方式下,按格式打印和打印预览全部单词二、总体设计1.MFC程序的项目模式选择归纳需求分析中的功能要求,该程序的工作特点是:选种某一单词并显示该单词信息;编辑修改单词信息。

因此,选用MFC的文档–视图结构能方便地实现合理程序结构,有利于模块化的MVC层次结构的实现。

同时,为了能满足选种单词并显示的功能,所以决定选择MFC的单文档–视图(SDI)项目模式,并使用静态切分视图,并且采用CtreeView和CeditView分别为两个视图的基类创建“简明英汉词典程序”。

程序的项目名命名为“Dictionary”2.类的静态设计组成“简单绘图程序”的类可以分为程序框架类、数据类和交互界面类⑴程序框架类·应用程序类·主框架类·文档类·视图类·CWordView的派生关系图·CDicTreeView的派生关系图·CDicTreeView与CwordView的关联图⑵数据类·基本数据库类·单词记录集类·词义记录集类·词类记录集类·数据类的派生关系图⑶ 交互界面类·单词输入工具类·修改单词信息类·交互界面类的派生关系图·交互界面类与CMainFrame 的关联图3.类的动态设计(1)查询与显示(2)选择查询方式(3)编辑、修改已有单词(4)创建新单词(5)删除已有单词(6)打印和打印预览三、详细设计1.应用程序类CDictionaryApp(1)类的详细定义2.框架类CMainFrame(1)类的详细设计3.文档类CDictionaryDoc4.视图类CDicTreeDraw(4)关键算法解析①查询单词并显示信息void OnSelchanged([INOUT] NMHDR* pNMHDR, [INOUT] LRESULT* pResult)参数说明:[INOUT] pNMHDR 描述消息详细信息的结构指针。

[INOUT] pResult 返回结果的指针返回说明:无返回值BEGIN...CTreeCtrl& treeCtrl=GetTreeCtrl();HTREEITEM hitem=treeCtrl.GetSelectedItem();if((选中的结点的父结点不是根结点||当前查询方式为精确匹配||查询方式为模糊查询||查询方式为汉英||查询方式为单词类型)&&非删除结点状态)then str=treeCtrl.GetItemText(hitem);if(str!="简明英汉字典"&&str!="简明汉英字典")thenif(bEnglish==0 即英汉查询)then CString where="Name=";where+="'";where+=str+"'";通过单词名查询Words数据表找到该单词索引,通过索引查询Acceptation数据表找到该单词每条词义对应的类型索引,通过索引查询Types数据表找到类型名。

将查询到的单词名、类型、词义加入到字符串pDoc->s=str1;else if(bEnglish==1 即汉英查询)then CString where="Chinese=";where+="'";where+=str+"'";通过词义查询Acceptation数据表找到符合该词义的每个单词,通过单词索引查询Words数据表找到单词。

将查询到的中文单词、英文单词、同义词加入到字符串。

pDoc->s=str1;elseCString where="Name=";where+="'";where+=str+"'";通过类型名查询Types数据表找到类型索引,通过类型索引查找Acceptation数据表找到每一个符合该类型的记录,通过单词索引查找Words数据表找到该单词。

将查询到的类型名、单词名、词义加入到字符串。

pDoc->s=str1;endif::SendMessage(pview->GetSafeHwnd(),WM_VIEW,0,0);endifendifEND②修改单词算法void OnEditChange()参数说明:无参数返回说明:无返回BEGINCEDITDLG dlg;int i=IDOK;CTreeCtrl& treeCtrl=GetTreeCtrl();HTREEITEM hitem=treeCtrl.GetSelectedItem();if((选中的结点的父结点不是根结点||当前查询方式为精确匹配||查询方式为模糊查询)&&非删除结点状态)then CString str;str=treeCtrl.GetItemText(hitem);if(str!="简明英汉字典"&&str!="简明汉英字典")then CString where="Name=";where+="'";where+=str+"'";根据单词名查找Words数据表,找到当前单词的索引,根据索引查找Acceptation表查找该单词的信息。

while(i==IDOK)if(未到记录集尾)then 查找到该单词的所有信息将该单词的信息加入到对话框变量中UpdateData(FALSE);if(dlg.DoModal()==IDOK)thenif(不删除该单词信息)then 将对话框中的信息寸入数据库else acceSet.delete_cur_record();endifi=MessageBox("是否修改下一条");if(i==IDOK&&!(acceSet.is_NULL()))then acceSet.MoveNext();endifelse break;endifendwhileendifendifEND③创建新单词的算法void OnEditNew()参数说明:无参数返回说明:无返回BEGINint i=IDOK;CTreeCtrl& treeCtrl=GetTreeCtrl();while(i==IDOK)if(dlg.DoModal()==IDOK)then 查找Words数据表看是否为已有单词if(Words中无此单词)then 在单词表中加入该单词,并在树形控件上加入该单词。

endifendifi=MessageBox("是否添加下一条",NULL,MB_OKCANCEL);endwhileEND④删除单词的算法void OnEditDelete()参数说明:无参数返回说明:无返回BEGINint i=MessageBox("确定删除吗?",NULL,MB_OKCANCEL);if((父结点不是根结点||精确匹配||模糊查询)&&i==IDOK)then CString str;str=treeCtrl.GetItemText(hitem);if(str!="简明英汉字典"&&str!="简明汉英字典")then 在Words表中删除该单词,并在Acceptation表中删除该单词的所有词义treeCtrl.DeleteItem(hitem);endifendifEND5.视图类CwordView(1)类的详细定义6.基本数据类(1)类的详细定义7.单词记录集类(1)类的详细定义(2)关键算法解析①读取当前记录的算法bool get_cur_record([INOUT] Words* record)参数说明:[INOUT] record 存放记录信息的结构体返回说明:是否读取成功BEGINif(!is_NULL()&&!bof()&&!eof())then_variant_t var;var=m_pRecordset->GetCollect("Index");record->Index=var.lVal;var=m_pRecordset->GetCollect("Name");if(var.vt!=VT_NULL)then record->Name=(LPCTSTR)(_bstr_t)var;endifreturn TRUE;elsereturn FALSE;endifEND②编辑当前记录的算法bool edit_cur_record([IN] Words record)参数说明:[IN] record 存放记录信息的结构体返回说明:是否修改成功BEGINif(!is_NULL())then try{m_pRecordset->PutCollect("Name",_variant_t());m_pRecordset->Update();}catch(_com_error *e){AfxMessageBox(e->ErrorMessage());return FALSE;}return TRUE;elsereturn FALSE;endifEND③插入新记录的算法bool new_cur_record([IN]Words record)参数说明:[IN] record 存放记录信息的结构体返回说明:是否修改成功BEGINtry{m_pRecordset->AddNew();m_pRecordset->PutCollect("Name",_variant_t());m_pRecordset->Update();}catch(_com_error *e){AfxMessageBox(e->ErrorMessage());return FALSE;}return TRUE;END8.词类记录集类(1)类的详细定义9.词义记录集类(1)类的详细定义10.单词输入工具类(2)类的响应消息表(3)关键算法解析文本框中的信息改变的算法void OnChangeEdit1()参数说明:无参数返回说明:无返回BEGIN获得CDicTreeView的树形控件的引用获得当前的状态if((精确匹配||模糊查询)&&不在删除结点)then 删除原有结点if(英汉查询)then UpdateData(TRUE);CString str=m_word;if(str=="")then wordSet.lookup("","Name ASC");else CString str1;if(精确匹配)then str1="Name like '";else str1="Name like '%";endifstr1+=str;str1+="%'";wordSet.lookup(str1,"Name ASC");endif查询满足条件的所有单词并加入到树形控件中else if(汉英查询)then UpdateData(TRUE);CString str=m_word;if(str=="")then acceSet.lookup("","Chinese ASC");else CString str1;if(精确匹配)then str1="Chinese like '";else str1="Chinese like '%";endifstr1+=str;str1+="%'";wordSet.lookup(str1,"Name ASC");endif查找所有单词,并加入到树形控件中endifendifEND11.输入单词信息类CEDITDLG。

相关主题