网络字典课题报告Word文档下载推荐.docx
《网络字典课题报告Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《网络字典课题报告Word文档下载推荐.docx(38页珍藏版)》请在冰豆网上搜索。
2需求分析
了解词典使用者的需求可以不断改进、完善、发展词典的编撰,使词典更好地为使用者服务。
“读者意识”就是指辞书和辞书工作者为读者服务的思想及其表现。
对于处于英语学习阶段的学生来说,英语词典的正确使用对提高学习兴趣、培养良好学习习惯有着不容忽视的作用。
本软件通过用户(多用于学习英语的大学生)在自己的电脑上输入服务器IP地址和端口从而连接服务器,然后用来查询一些英语学习过程中遇到的难以理解的词语的注释,来更加及时的学习并理解该词语。
通过网上查阅资料发现,使用词典的原因查阅词义是中国学生使用词典的最主要原因,这与夸克和格林鲍姆的发现一致。
这表明查阅词义、发音、拼写和用法是中国学生使用词典的主要原因。
而在夸克和格林鲍姆的调查中,被访问者并不觉得发音和用法是很难克服的困难,因为他们是本族语词典用户。
词典编者撰写释义时,使用的词汇或是有限制的或是无限制的。
用有限的简单词汇释义在英语学习词典中较为流行。
专家学者们对这种释义方法的反对意见多于赞成意见。
但大多数学英语的中国学生对此表现出明显的偏好。
2.1可行性分析
1、技术可行性
此在线词典系统可以运行于windowsxp,win7,windowsvista操作系统。
对系统要求只需要装有IIS即可。
对计算机的硬件配置没有太高要求,现在的个人电脑完全可以满足。
数据库运用简单易学的Access来实现。
2、操作可行性
界面设计充分考虑到用户的习惯,输入IP、端口号连接服务器和查询单词给出释义的功能在一个界面内,方便明了、简单实用。
不会让用户感觉使用起来有任何不方便的地方。
2.2实用工具简介
1、VC++6.0简介
Visualc++6.0是微软推出的一款C++编译器,将“高级语言”翻译为“机器语言(低级语言)”的程序。
VisualC++是一个功能强大的可视化软件开发工具。
VisualC++6.0不仅是一个C++
编译器,而且是一个基于Windows操作系统的可视化集成开发环境。
VisualC++6.0由许多组件组成,包括编辑器、调试器以及程序向导AppWizard、类向导ClassWizard等开发工具。
这些组件通过一个名为DeveloperStudio的组件集成为和谐的开发环境。
2、MicrosoftOfficeAccess简介
MicrosoftOfficeAccess是微软把数据库引擎的图形用户界面和软件开发工具结合在一起的一个数据库管理系统。
它是微软OFFICE的一个成员,在包括专业版和更高版本的office版本里面被单独出售。
MSACCESS以它自己的格式将数据存储在基于AccessJet的数据库引擎里。
它还可以直接导入或者链接数据(这些数据存储在其他应用程序和数据库)。
软件开发人员和数据架构师可以使用MicrosoftAccess开发应用软件,“高级用户”可以使用它来构建软件应用程序。
和其他办公应用程序一样,ACCESS支持VisualBasic宏语言,它是一个面向对象的编程语言,可以引用各种对象,包括DAO(数据访问对象),ActiveX数据对象,以及许多其他的ActiveX组件。
可视对象用于显示表和报表,他们的方法和属性是在VBA编程环境下,VBA代码模块可以声明和调用Windows操作系统函数。
3、ODBC简介
一个基于ODBC的应用程序对数据库的操作不依赖任何DBMS,不直接与DBMS打交道,所有的数据库操作由对应的DBMS的ODBC驱动程序完成。
也就是说,不论是FoxPro、Access还是Oracle数据库,均可用ODBCAPI进行访问。
由此可见,ODBC的最大优点是能以统一的方式处理所有的数据库。
ODBC技术以C\S结构为设计基础,它使得应用程序与DBMS之间在逻辑上可以分离,使得应用程序具有数据库无关性。
ODBC定义了一个API,每个应用程序利用相同的源代码就可以访问不同的数据库系统,存取多个数据库中的数据。
与嵌入式SQL相比,ODBC一个最显著的优点是用它生成的应用程序与数据库或数据库引擎无关。
ODBC使应用程序具有良好的互用性和可移植性,并且具备同时访问多种DBS的能力,从而克服了传统数据库应用程序的缺陷。
4、MicrosoftVisio简介
MicrosoftVisio是Windows操作系统下运行的流程图和矢量绘图软件,它是MicrosoftOffice软件的一个部分。
它的竞争者是AdobeIllustrator、MacromediaFreeHand和CorelDraw。
另外,Visio虽然是MicrosoftOffice软件的一个部分。
但通常以单独形式出售,并不捆绑于MicrosoftOffice套装中。
2.3相关术语释义
control控制组件,如Edit、ListBox、Button...
Icon图标(窗口缩小化后的小图样)
linked-list
串行
Listbox列表框、列表清单
notification
通告消息(发生于控制组件)
preemptive
强制性、先占式、优先权式
process
进程(一个执行起来的程序)
queue
队列
windowfocus窗口焦点(拥有焦点之窗口,将可获得键盘输入)
class类别
object对象
constructor构造式
destructor析构式
override改写
Encapsulation封装
Inheritance继承
virtualfunction虚拟函数
memberfunction成员函数
datamember成员变量
BaseClass基础类别
DerivedClass衍生类别
Retrieves取回返回
2.4软件主要实现功能
本软件通过用户(多用于学习英语的大学生)在自己的电脑上输入服务器IP地址和端口从而连接服务器,然后用来查询一些英语学习过程中遇到的难以理解的词语的注释,来更加及时的学习并理解该词语,
服务端内设置有增、删、改、查功能,可以及时的更新新进词汇,以及标注一些难以理解,难以记忆的词语,方便用户理解和记忆。
用户通过客户端查询单词,从而在服务端显示某项或者某些单词的被查询频率,通过这个来计算那些单词用户查询的比较多,让我们更加了解用户对词典的需求方向,来帮助我们改进和优化软件的功能,也可以通过这些数据来改进词典释义的显示顺序以及显示方式,让用户更轻松的找到自己需要的注释或者用法。
当服务器遇到客户端查到的词语未录入数据库的情况时,服务端会出现提醒,从而让编撰者来添加该单词让词典一步步的更加完善。
软件实现需要的一些辅助工具:
WindowsXP;
VC++6.0;
ODBC(数据源);
Access数据库;
Visio工具
2.5系统数据流图
1、系统环境图
环境图也称为顶层数据流图,它仅包括一个数据处理过程,也就是要开发的目标系统。
环境图的作用是确定系统在其环境中的位置,通过确定系统的输入与外部实体的关系确定其边界。
2、系统数据流图
按照系统的层次结构进行逐步分解,并以分层的数据流图反映着中结构关系,能清楚地表达整个系统,也容易理解。
数据流图
词典数据管理流图
3、总体数据流图
4、系统业务流程图
5、E-R图
总体E-R图
3软件开发过程
3.1客户端各个功能的构思与实现
3.1.1客户端大致界面设计
图1-1
设计思路:
最上端为用户打开客户端后登陆服务器入口,放在最上面方便用户第一时间输入服务端IP地址以连接服务器。
中间位置让用户输入需要查询的单词。
最下方显示单词解释。
整个界面简洁明了,使得软件适用于更多的用户,即使对计算机操作没有任何了解的人,只要知道了服务端的地址就可以方便快捷的使用该软件。
3.1.2连接服务器
图1-2
输入服务器IP地址和端口号点击连接服务器,代码实现如下:
voidCClientDlg:
:
OnConnectButton()
{
intnRet;
//定义返回值
UpdateData(TRUE);
//获取数据
//获取服务器IP
DWORDdwServIP;
m_ctlServIP.GetAddress(dwServIP);
if(0==dwServIP)
{
AfxMessageBox("
请填写服务器地址。
"
);
//AfxMessageBox:
输出
return;
}
//服务器端口
if(0==m_sServPort)
请填写服务器端口。
//服务器地址
SOCKADDR_INservAddr;
servAddr.sin_family=AF_INET;
servAddr.sin_addr.S_un.S_addr=htonl(dwServIP);
servAddr.sin_port=htons(m_sServPort);
intnServLen=sizeof(servAddr);
nRet=connect(m_sHost,(SOCKADDR*)&
servAddr,nServLen);
if(SOCKET_ERROR==nRet)
AfxMessageBox(_T("
连接服务器失败!
));
3.1.3查询单词
图1-3
输入要查询的单词,点击查询按钮,代码实现如下:
OnLookupButton()
if(NULL!
=m_pLookupSocket)//CLookupSocket指针
CStringstrWord;
m_ctlWord.GetWindowText(strWord);
//获取单词
if(strWord.IsEmpty())//若用户未输入单词,则弹出提示
{
m_ctlMeaning.SetWindowText(_T("
请输入单词。
return;
}
CStringstrWordLookup;
if(IsWord((char*)(LPCSTR)strWord,strWordLookup))
//判断是否为单词
if(FALSE==m_pLookupSocket->
Lookup(strWordLookup))
//发送数据
{
AfxMessageBox(_T("
查询单词失败!
}
}else
//若输入的不是单词则弹出提示
不要包含汉字和其他符号。
}
}
3.1.4显示单词含义
图1-4
代码实现如下:
ShowMeaning(TCHAR*pMeaning)
if(NULL==pMeaning)//字符串为空
CStringstrMeaning(pMeaning);
//单词含义
m_ctlMeaning.SetWindowText(_T("
//清空原来字符串
//解析字符串
CStringmeaning1;
//第一个含义
CStringmeaning2;
//第二个含义
intnIndex=strMeaning.Find("
>
if(-1==nIndex)
meaning1=strMeaning.Mid(1,nIndex-1);
intnLen=strMeaning.GetLength();
meaning2=strMeaning.Mid(nIndex+2,nLen-meaning1.GetLength()-4);
CStringmeaning;
//显示含义字符串
if(!
meaning2.IsEmpty())//第二个含义不为空
meaning="
◇"
+
meaning1+
"
\r\n"
+//换行
meaning2;
}else//第二个含义为空
meaning1;
m_ctlMeaning.SetWindowText(meaning);
//显示含义
3.1.5判断输入是否为单词
BOOLCClientDlg:
IsWord(char*pExp,CString&
strWord)
intnCount=strlen(pExp);
//字符长度
intnLen=0;
char*pTemp=pExp;
while(*pTemp=='
'
)//剔除前面的空格
nLen++;
pTemp++;
char*pStartWord=pTemp;
//字符开始位置
//结束循环的条件:
1.遇到空格2.字符串结束
while(*pTemp!
='
&
&
nLen!
=nCount)
if(*pTemp<
65)
returnFALSE;
}elseif(*pTemp>
90&
*pTemp<
97)
122)
pTemp++;
nLen++;
intnNum=pTemp-pStartWord;
//有效字符数量
CStringstrTemp(pStartWord,nNum);
//临时变量
strWord=strTemp;
returnTRUE;
OnOK()
OnLookupButton();
3.1.6退出
图1-5
点击红叉或者取消按钮推出客户端,代码实现如下:
OnCancel()
m_bRunning=FALSE;
//设置客户端运行状态
WaitForSingleObject(m_hWorkerThread,INFINITE);
//等待工作线程退出
deletem_pLookupSocket;
//删除CLookupSocket指针
m_pLookupSocket=NULL;
WSACleanup();
//释放套接字资源
CDialog:
OnCancel();
//销毁对话框
3.2服务端的构思与实现
3.2.1服务端大致界面设计
图2-1
菜单栏包含操作查看和帮助功能,操作子菜单栏在管理员选中单词后可以实现对该单词的删除和修改功能,也可直接增加单词,列表中单词按首字母顺序排列。
查看菜单中包含查看用户查询了但是没有输入在数据库中的单词,方便管理员及时对数据库的更新和查看用户对常用单词的查询概率。
查看菜单的第二个子菜单为显示在线人数功能,管理员可以通过它来查看当前连接到服务端的用户人数来计算用户使用词典的时间密度。
3.2.2处理客户端请求
voidCClientSocket:
HandleData(void)
if(m_hdrRecv.len!
=0)//接收包头完毕
RecvPacket();
//接收数据包体
ZeroMemory(&
m_hdrRecv,HEADERLEN);
//包头置0
}else//接收数据体完毕
ASSERT(m_hdrRecv.len==0&
m_hdrRecv.type==ETOC);
//在数据库中查找单词的含义
m_strMeaning.Empty();
CStringstrMeanging1;
CStringstrMeanging2;
Lookup((char*)(LPCSTR)m_strWord,strMeanging1,strMeanging2);
//打包数据
m_strMeaning="
<
+strMeanging1+"
+"
+strMeanging2+"
;
m_strWord.ReleaseBuffer();
m_strWord.Empty();
//向客户端发送数据
Send();
//投递另一个异步IO
RecvHeader();
3.2.3查询数据
Lookup(char*pWord,CString&
strMeaning1,CString&
strMeaning2)
BOOLbFinder=TRUE;
//找到该单词
CStringstrSQL="
select*fromEToCwhereword="
//SQL语句
strSQL+="
'
CStringstrTemp=pWord;
strTemp+="
strSQL+=strTemp;
//select*fromEToCwhereword='
***'
try
//查询单词的含义
m_pRecordSet->
Open(_variant_t(strSQL),theApp.m_pConnection.GetInterfacePtr(),
adOpenStatic,
adLockOptimistic,
adCmdText);
intn=m_pRecordSet->
GetRecordCount();
//判断是否找到该单词
if(0==n)//该单词未存在于数据库中
strMeaning1="
在词典中没有查找到该单词!
bFinder=FALSE;
}else//该单词存在于数据库中
{
//含义1
_variant_tvar;
var=m_pRecordSet->
GetCollect("
meaning1"
if(var.vt!
=VT_NULL)
strMeaning1=(LPCSTR)_bstr_t(var);
}else
//含义2
meaning2"
strMeaning2=(LPCSTR)_bstr_t(var);
strMeaning2="
}
Close();
//关闭
catch(_com_error*e)
AfxMessageBox(e->
ErrorMessage());
return;
catch(...)
访问数据库服务器时发生异常。
3.2.4设置服务器地址及端口号,初始化变量
图2-2
在此处输入服务端IP地址和端口号,点击”OK”确定,代码实现如下:
voidCServerAddrDlg:
CStringstrServPort;
m_ctlServPort.GetWindowText(strServPort);
//端口字符串
if(strServPort.IsEmpty())
m_ctlServIP.GetAddress(m_dwServIP);
if(0==m_dwServIP)
//获取服务器端口
m_shServPort=atoi(strServPor