首页 > 代码库 > 团队作业二

团队作业二

关于英语字典的开发文档

1 概述

1.1开发背景

  英语作为一种通用语言,部分单词已成为公共词汇,并直接应用到汉语中来。但新引入的或是涉及到某种专业领域的专业术语,对于不常关注新闻,网络或是一些非专业领域人员而言,阅读较为困难。传统的纸质英汉词典更新周期久,不便于携带,价格昂贵。不适合生活节奏快的现代人群。相反,电子词典便于携带,查询方便,高效,更能满足现代人的使用需要。随着科技的不断进步,Android系统逐渐的成为现阶段的主流软件,电子词典也逐渐的将该系统应用到自身的设计中,并取得了很好的效果。

1.2开发目标

系统基本功能:

1.登录系统。分为用户登录与管理员登录。用户登录功能主要方便用户保留使用痕迹,管理个人的单词应用。管理员登录是为了让开发者能及时更新英语词汇,更新系统,修复系统漏洞与错误。

2.自定义词汇。支持已登录用户的自定义的单词,用于记录该系统未录入过的单词或单词释义。

3.查询功能。支持英译汉功能。用户输入想要查询的单词,点击查询后即可展示该单词的释义,例句,读音。

4.单词本功能。支持已登录用户建立新的单词列表。用户可以在此功能下对个人创建的单词列表中的单词进行删除,增加或写入自定义词汇。

1.3参考资料

  英语词典软件——有道词典。该软件是一个开源项目。源码可被公众使用的软件,且此软件的使用,修改与发行不受许可证的限制。提高了我们开发此项软件的效率。有道词典作为免费的翻译软件,界面朴素,功能强大,所以此次团队作业主要借鉴了单词查询的功能代码。

1.4设计原则

  电子词典的应用前景是很广阔的。为了方便用户使用,取得较好效果在软件设计过程中,设计者要考虑多方面问题。因此数据库结构设计的好坏直接对应用系统的效率及实现的效果产生影响。该数据库系统要求具有以下方面的特点:结构合理,所建立的数据冗余度小,独立性强。建档,修改,查询快而准确。

商业化的软件开发要求有很好的移植性。而PowerBuilder可以跨平台开发,也可以发行跨平台软件。

  AdaptiveServerAnywhere是PowerBuilder自带的数据库管理系统,有如下好处:

  AdaptiveServerAnywhere本身已经是一个完整的数据库管理系统,所以在项目开发阶段,单机即可开发大型数据库应用,而不必在网络状态下与大型数据库管理系统连接起来开发。

2.需求分析

2.1需求陈述

目前,市场上的一些常见的电子词典主要分为如下几种:

1.基于PC的电子词典。此种电子词典,可移动性差,对于使用有很大的局限性。

2.专用电子词典。此种电子词典使用人群主要局限于青少年。该类产品为独立的电子产品,较少随身携带。而且中老年人极少有人使用此类产品。

3.嵌入式电子词典。此种电子词典可以安装到我们平时使用频率极高的移动设备中,例如手机,平板电脑等。方便携带与查询。

因此,此次团队作业项目为适应用户需求,开发了电子词典的单词查询显示功能,新词添加功能。

1.用户打开该软件界面可选择功能:单词查询,单词本创建。

1.单词查询。当用户需要查询时,软件需提供这个单词的所有信息:释义,例句,读音。以便用户获得所需要的信息。

2.单词本创建。当用户创建一个单词本后,可添加系统中所录入的单词及释义也可添加用户自定义的单词与释义。

2.2操作用例

  用户在登录窗口,填入用户名与密码,登录完毕后。可选择单词选择模块,例如“apple”,在单词查询处填入“apple”,点击查询,软件界面则显示 “apple  n.苹果;珍宝;家伙。”

  当选择单词本功能时,进入此项功能界面,可选择“添加”“删除”。选择“添加”后,可在系统录入单词进行选择添加,也可直接在此页面进行自定义单词添加操作。例如添加“apple”。可进行上一步操作,再点击添加键,则该界面会显示出“apple  n.苹果;珍宝;家伙。”执行删除操作时,可直接点击删除键,对需要删除的单词进行删除即可。

 

2.3功能划分

1.汉译英功能:可以实现对英文单词对中文单词的查询功能。当用户在输入第一个字符时,以这个字符作为开头的单词会显示在下边的数据窗口中,用户可以直接点击便可显示单词的中文解释。也就是说,不需要完全输入用户想要找的单词,系统会根据输入的提示显示所有用户可能要查询的单词。

2.新用户注册:可以注册新的用户,但不允许已存在用户注册。若注册用户俩次密码输入不一致,系统无法通过验证。

3.用户登录:用户验证界面。正确的用户登录后,可进入功能选择窗口。且历史记录窗口会显示相应的历史记录。

4.单词本设置:用户可以在这里设置单词本。用户刚登录时的单词本为空,必须在单词本设置里添加单词后才可进行浏览。

2.4运行环境

操作系统:WINDOWS  7

编程工具:Visual Studio 2013

运行要求配置:

  处理器:AMD A8-7100 Radeon R5,8 Compute Cores 4C+4G 1.80GHZ

  安装内存:4.00GB

  系统类型:64位操作系统

3 总体设计

3.1 系统建模

3.1.1 层次方框图

技术分享 

3.1.2  ER图(实体-联系图)

技术分享

 

3.1.3 类图设计

技术分享

 

3.2 接口设计

内部接口设计

  为了实现系统内部各个类之间和各个元素之间的有机连接,在内部接口方面,各个模块之间采用了函数调用、参数传递、返回值的方式进行信息传递。接口传递的信息通过结构体指针来对各个数据进行操作,来实现各种功能。

3.3 数据库结构设计

  本软件的设计共有三个数据库,一个本地数据库用来存储用户个人的生词,还有账户数据库是用来存储各个用户的帐号信息,再有一个数据库是软件的核心,用来存储单词。各个数据库均是通过文件的形式进行数据的存储。当软件运行的时候,通过调用函数打开文件来进行数据的交换。

3.3.1 数据库E-R图

技术分享

 

3.3.2 数据库逻辑设计

 

名称

类型

长度

主键

帐号

String

20

密码

Char

16

单词

String

——

释义

String

——

 

2.5 出错处理

   当用户在使用该软件时,一旦发生了未知的错误可以选择上传错误信息至管理员,之后管理员会定期处理各种错误,修补bug,然后在合适的时间发布新版本,对软件进行升级。

2.6 安全保密设计

  对于用户信息的安全保护,我们采用了密码登陆,并且对于帐号信息的管理设置了严格的权限限制。对于数据库的安全设计,我们将采用独特的数据加密措施,将数据加密后再录入数据库,同样在提取数据时,也需要独特的解密方式,对数据进行解密,极大限度的保护了数据的安全。

4 详细设计

4.1 程序流程图

1.登录部分

  本词典使用前需登录,根据登录账户类型,用户或是管理员再使用其对应功能。

技术分享

2.管理员部分

  管理员的职责即是对单词库和账号库这两大数据库进行有效合理的管理。

技术分享

3.用户部分

  用户可使用注册、登录、查词、增添本地(即个人的)单词本等功能。

技术分享

 

 

4.2 伪代码编写

1.头文件

#include <iostream>

#include <stdlib.h>  

#include "User.h"  

#include "Administrator.h"

using namespace std;

 

2.节点和类的封装

存储词条的节点:

typedef struct LNode{

  string word;

  string phonogram;

  string meaning;

  struct LNode *next;

}LNode,*LinkList;

 

基类class Base

{

private:

  string account;

  char password[16];

public:

  void serachC();

}

子类class User : public Base

{

public:

  void add1();

}

子类class Administrator : public Base

{

public:

  void addC();

  void deleteC();

  void changeC();

 

  void addZ();

  void deleteZ();

  void changeZ();

  void serachZ();

}

3.主程序Dictionary.cpp

int main(void)  

{     

    cout<<"          欢迎使用haha英汉字典         "<<endl;  

    cout<<"====================================================="<<endl;

 

//程序运行,将单词库中的词条取出存入链表中,以待后续使用

FILE *fp1,*fp2,*fp3;

fp1 = fopen("单词库.txt","r+");

L = (LinkList)malloc(sizeof(LNode));

 

char t = fget(fp);

//再根据t的ASCII码判断单词、音标和释义的边界

//每个节点存储四个信息

word phonogram meaning *next

 

cout<<"登录or注册?"<<endl;

//登录:

if(strcmp(输入账户名,某库存账户) == 0

&&

   strcmp(输入账号密码,对应的库存密码) == 0)

{

登录成功

}

else

{

  登录失败

  return 0;

}

//注册

cin>>"账户名和密码";

//向管理员提交注册账户申请,并将已申请的账户信息存入

fp2 = fopen("账户信息.txt","w+");

 

用户接口User.h

管理员接口Administrator.h

 

fclose(fp);

    return 0;

}

 

4.User.h

void Base :: serachC(LinkList L)

{

cout<<要查询的单词;

//从L的头节点起,用strcmp()函数比较每个节点的word和要查的单词

//用指针*p指向匹配节点

cin>>p->word,p->phonogram,p->meaning

}

void User :: add1()

{

  fp3 = fopen("我的单词本.txt","w+")

  //每个用户对应一个本地单词本,此文本文件可以看成是单词库的一小部分

  fwrite(新单词的word、phonogram、meaning,fp3);

}

 

5.Administrator.h

(1)单词库的管理:

void Administrator :: addC(LinkList &L)

{

  //按字母的排列顺序找到添加的单词的添加位置

  fwrite(添加单词的word、phonogram、meaning,fp1);

}

void Administrator :: deleteC(LinkList &L)

{

  //用serachC()函数找到要删除的单词

  删除链表中对应节点

  利用fp1删除单词库中该单词

}

void Administrator :: changeC(LinkList &L)

{

  //用serachC()函数找到要修改的单词

  修改链表中对应节点

  利用fp1重新写入单词库中该单词

}

(2)账户的管理:

  void Administrator :: addZ(){}

  void Administrator :: deleteZ(){}

  void Administrator :: changeZ(){}

  void Administrator :: serachZ(){}

  此管理功能的实现和对单词库的管理较相似,要注意的就是,这里的四个功能函数增删改查必须都在“账户信息.txt”中进行,否则账户管理就会出现大漏洞。

5 实现

5.1 编码

5.1.1 代码约定

1)存储词条的节点

word:单词库里的英语单词

Phonogram:单词的音标

meaning:中文翻译

2)基类

account:用户账户名

password:账户密码

serachC( ):查询单词函数

3)用户

add1( ):用户对自己单词本的操作

4)管理员

addC( ):管理员向单词库中增加单词

deleteC( ):管理员将某个单词从单词库中删除

changeC( ):管理员对单词库中的某个词条进行修改

addZ( ):管理员向账户信息库中增加一个新的账户

deleteZ( ):管理员将某个账户从账户信息库中删除

changeZ( ):管理员对某个账户的信息进行修改

serachZ( ):管理员在账户信息库中搜索某个账户的信息

5.1.2 代码编写原则

1)代码简单明了、容易阅读、无二义性;

2)代码格式规范,同一级代码的缩进要统一,这也是方便代码的阅读;

3)不要将多余的语句放到一行上,将其分行放置;

4)对变量的命名要注意易懂且不容易与本程序中其他变量名混淆。

5.2 测试要点

登录测试要点

1)用户注册:测试用户是否可以自定义用户名及密码,是否将申请提交至管理员处,以及管理员通过后用户是否可以用其登陆。

2)用户登陆:测试用户是否可以正常登陆,如果密码错误程序是否有后续反应。

3)查询单词:测试输入规范的单词后,是否可以正常显示该词条的信息,如:输入apple,是否显示[‘?p?l] n.苹果;输入规范单词但单词库中没有该词条时,是否可以提醒本词库没有该词条;输入不规范的单词时,是否可以提醒用户输入的格式错误,重新输入,如:输入wye6t

4)用户单词本管理:测试用户是否可以正常对单词本进行增删。

5)单词库的管理:测试管理员是否可以对单词库的单词进行增删改查,可在操作后由用户身份验证操作结果。

6)用户信息库的管理:测试是否可以接收用户的注册及修改信息申请,是否可以对用户信息库进行增删改查。

5.3 测试结果和总结

  通过测试,我们对程序进行了一定程度的完善,在测试的过程中,我们发现了自己的不足之处,从不足中积累了经验,代码编写的能力得到了提高。同时由于测试对代码的完善提供了很多帮助,我们认识到了测试对一个程序的重要性,测试是必不可少的,它会让我们更清楚的认识自己的代码,以及团队合作编程时代码的整合情况,可以说只有通过了测试才算是对代码的肯定。

6 维护

6.1 维护方法

  软件维护(Software maintenance)是一个软件工程名词,是指在软件产品发布后,因修正错误、提升性能或其他属性而进行的软件修改。软件维护主要是指根据需求变化或硬件环境的变化对应用程序进行部分或全部的修改,修改时应充分利用源程序。

  软件维护活动类型总起来大概有四种:

1)改正性维护

  改正型维护是指改正在系统开发阶段已发生而系统测试阶段尚未发现的错误。这方面的维护工作量要占整个维护工作量的17%~21%。所发现的错误有的不太重要,不影响系统的正常运行,其维护工作可随时进行:而有的错误非常重要,甚至影响整个系统的正常运行,其维护工作必须制定计划,进行修改,并且要进行复查和控制。

2)适应性维护

  适应性维护是指使用软件适应信息技术变化和管理需求变化而进行的修改。这方面的维护工作量占整个维护工作量的18%~25%。由于计算机硬件价格的不断下降,各类系统软件屡出不穷,人们常常为改善系统硬件环境和运行环境而产生系统更新换代的需求;企业的外部市场环境和管理需求的不断变化也使得各级管理人员不断提出新的信息需求。这些因素都将导致适应性维护工作的产生。进行这方面的维护工作也要像系统开发一样,有计划、有步骤地进行。

3)完善性维护

  完善性维护是为扩充功能和改善性能而进行的修改,主要是指对已有的软件系统增加一些在系统分析和设计阶段中没有规定的功能与性能特征。这些功能对完善系统功能是非常必要的。另外,还包括对处理效率和编写程序的改进,这方面的维护占整个维护工作的50%~60%,比重较大.也是关系到系统开发质量的重要方面。这方面的维护除了要有计划、有步骤地完成外.还要注意将相关的文档资料加入到前面相应的文档中去。

4)预防性维护

  预防性维护为了改进应用软件的可靠性和可维护性,为了适应未来的软硬件环境的变化,应主动增加预防性的新的功能,以使应用系统适应各类变化而不被淘汰。例如将专用报表功能改成通用报表生成功能,以适应将来报表格式的变化。这方面的维护工作量占整个维护工作量的4%左右。

6.2 维护文档

  维护内容包括程序名称、源程序语句条数、机器代码指令条数、所用的程序设计语言、程序安装的日期、程序安装后的运行次数、与程序安装后运行次数有关的处理故障次数、程序改变的层次及名称、修改程序所增加的源程序语句条数、修改程序所减少的源程序语句条数、每次修改所付出的“人时”数、修改程序的日期、软件维护人员的姓名、维护申请报告的名称、维护类型、维护开始时间和维护结束时间、花费在维护上的累计“人时”数、维护工作的净收益等。

  本英语词典软件除上述需维护处之外,还需花费大量“人时”在单词数据库的维护上,单词库内大量词条的增删和修改都是十分复杂的过程。还有用户的账户密码数据库的管理也得十分谨慎严密,管理员的工作量也十分繁杂。

 

团队总结:

  队长:牟鑫明

  成员:杨建华、王林峰、刘阳、曾洪鑫

  分工:每人负责自己力所能及的一部分,最后由队长将各部分整合在一起,虽能力有限,但每人都尽自己最大努力完成此次团队作业。

  合作愉快!!!^_^

团队作业二