通讯录详细设计报告概要
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
软件测试实训-2
详细设计报告
项目名称: 通讯录管理系统(CS04)
负责人:
日期:
注:(按照书上的顺序,每个项目一个编号,附在项目名称后面,如三角形问题CS01)
详细设计说明书
作用范围
该详细设计说明书讨论的是“通讯录管理系统”各模块的详细设计。
系统目标
1.后台数据库设计,后台需要建立Adrress数据库,维护两个
表groupInfo和people。
并且利用windows的ODBC和前台
连接。
2.前台使用MCF 的CRecordset派生类实现和后台通讯。
3.前台利用CDialog派生类实现用户界面,显示系统信息,接
受用户的输入和结果显示。
后台数据库设计
1.组信息表groupInfo结构
2.联系人信息表people结构
3.表关系结构
前台设计描述
数据描述
1.主窗口类CAddressListDlg,关联主用户界面,实现主要的程
序逻辑。
主界面上的主要控件有:
IDC_TREE_LIST,IDC_STATIC,IDC_EDIT,IDC_BUTTON……。
2.CGroupInfo类
成员变量:
long m_id;
CString m_groupName;
3.CPeople类
成员变量:
long m_id;
long m_groupId;
CString m_fullName;
BOOL m_sex;
CString m_company;
CString m_phoneInCompany;
CString m_homeAddress;
CString m_phineInHome;
CString m_mobile;
CString m_mail;
CString m_qq;
CString m_msn;
CString m_memory;
4.界面编辑信息数据结构
typedef struct
{
CString strName;
bool bSex;
CString strCompany;
CString strPhoneInCompany;
CString strHomeAddress;
CString strPhoneInHome;
CString strMobile;
CString strMail;
CString strQq;
CString strMsn;
CString strMemory;
}INTERFACECTRLDATA;
主要功能实现函数
1.添加组
✧函数名OnButtonAppendgroup()
✧主要流程,用户点击“增加组”,输入新组名,选择确认/放弃,
确认后,调用添加联系人组函数CappendNewGroupDialog::OnOk()。
刷新。
✧流程图:
2.添加联系人
✧函数名OnButtonAppend()
✧主要流程,选择对应组输入新联系人信息,点击增加。
CheckInputInfo()验证输入的数据,检查输入是否合法。
如果没输入姓名,提示“输入姓名”;如果输入姓名,未输入其他,提示“至少输入一项”。
输入合法,取得当前选定组,从界面获取数据。
如果组内有多余位置,正常执行插入语句;如果组内无空
位,则插入语句中添加nGroupId,执行插入语句。
断开与数据库连接,调用SwatchData()清空界面,刷新。
流程图:
3.更新联系人
✧函数名OnButtonEdit()
✧主要流程,选择要更新的联系人,更新数据,点击更新。
通过
CheckInputInfo()判断更新是否合法。
如果没输入姓名,提示“输
入姓名”;如果输入姓名,未输入其他,提示“至少输入一项”。
如
果输入合法,取得界面数据,取得当前联系人ID,更新数据,断开数据库连接。
4.查询联系人信息
✧函数名OnOK()
✧主要流程,点击查询按键,输入要查询联系人,确认或放弃。
确认后,如果输入为空,则提示查询不能为空。
如果有输入,
执行查询操作。
若查询对象不存在,返回空。
若查询对象存在,获取所有数据。
如果只有一组数据,显示查询结果;若存在重
名,有多组数据,则通过goto SEEKEND,逐条显示,确认是
否显示下一条或放弃跳出循环。
断开与数据库连接。
5.删除联系人
✧函数名OnButtonRemove()
✧主要流程,选中要删除对象,如果是组,执行删除组操作。
如
果是联系人,确认删除或放弃。
确认后,执行删除人方法REMOVEPEOPLE()。
刷新。
6.删除组
✧函数名OnButtonRemove()
✧主要流程,选中要删除组,如果是联系人,执行删除联系人操
作。
选中组,确认删除或放弃。
确认后,若是【未分组】,提示【未分组】不能删除。
若是其他组,执行删除组方法。
7.通讯录的树形显示
✧函数名RefurTree()
✧主要流程,记录当前选中项,如果选中项是联系人,则保存组
ID,人ID 和hSelItem;如果选中项是组,则保存组ID。
初始
化Tree(InitTreeList();)。
回复选中项。
补充:
8.树控件的选择项改变相应函数
✧函数名CAddressListDlg::OnSelchangedTreeList()
✧所属类CAddressListDlg
✧主要流程,当用户在左侧的树控件中选中某一组时,程序关闭
此前展开的组而打开当前选中的组;而如果用户在左侧的树控
件中选中的是一名联系人时,则在窗口右侧的区域中显示该联系人的详细信息
9.更新窗口控件值
函数名CAddressListDlg::SwitchData (),
在OnSelchangedTreeList()函数中调用
✧所属类CAddressListDlg
✧主要流程,将数据显示于窗口各控件中或从窗口控件中取得当
前输入的值
✧
10.取得当前组ID
✧函数名CAddressListDlg::GetCurrentSelGroupId (),在
OnButtonAppend ()函数中调用
✧所属类CAddressListDlg
✧主要流程,取得当前的组ID,如果当前选中项为组,则通过
GetItemData直接取得其组ID;如果当前选中项为联系人,则先取得其父节点,即当前选中联系人所属的组节点,然后再取得其组ID
✧
11.添加联系人组
✧函数名CAppendNewGroupDialog::OnOK ()
✧所属类CAppendNewGroupDialog
✧主要流程,从界面取得用户设定的组名,并检查组名是否为空,
然后以输入的组名为查询条件查询当前系统中是否已存在该
组名。
如果组名不存在,则调用类CGruopInfo的AddNew方
法添加一条新纪录,并将新组名赋予CGruopInfo的数据成员
m_groupName,最后通过Update方法提交新纪录到数据库中
✧流程图:
12.删除组
✧函数名CAddressListDlg::RemoveGroup (),
在OnButtonRemove ()函数中调用
✧所属类CAddressListDlg
✧主要流程,将参数传入的组ID对应的组从数据库中删除,其
执行机理类同于RemovePeople。
在数据库设计阶段,由于设定表gruopInfo 与表people之间的关系时,选中了“级联删除相关记录”,所以函数RemovePeople删除参数传入的组ID对应的组时,在表people中所有属于该组的记录也讲被全部删除。
(提示:由此可以设计专门的测试用例,查看是否级联删除;以及在数据库设计中加以补充)
处理过程描述和关键技术
1.CRecordSet派生类与ODBC的关联,VC数据库类通
过成员函数跟ODBC进行关联,进而操作后台数据库
的。
CString CPeople::GetDefaultConnect()
{
return _T("ODBC;DSN=address");
}
2.VC中SQL语句的执行的标准步骤是,定义一个SQL
语句原型,并且规范化格式,之后调用相关的接口函数实现对数据库的操作,如:
联系人信息查询的关键语句:
strSql.Format("SELECT * FROM people WHERE fullName='%s' \
ORDER BY groupId DESC, id",
strPeopleName);
people.Open(AFX_DB_USE_DEFAULT_TYPE, strSql);
插入联系人信息的关键语句:
strFormat = "INSERT INTO people(fullName, sex, company,
phoneInCompany, homeAddress, phineInHome, mobile, mail, qq, msn, memory) VALUES('%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s')";
strSql.Format(strFormat,
interfaceCtrlData.strName,
interfaceCtrlData.bSex,
interfaceCtrlData.strCompany,
interfaceCtrlData.strPhoneInCompany,
interfaceCtrlData.strHomeAddress,
interfaceCtrlData.strPhoneInHome,
interfaceCtrlData.strMobile,
interfaceCtrlData.strMail,
interfaceCtrlData.strQq,
interfaceCtrlData.strMsn,
interfaceCtrlData.strMemory);
}
database.ExecuteSQL(strSql);
3.通讯录的树形显示技术
使用“树”控件的成员函数GetItemData和GetChildItem,
先显示选中的根节点,判断如果有叶子节点则继续显示叶
子节点,一直到最后一个叶子节点显示完成。
设计语言描述
C语言,采用MFC进行对话框程序开发,其中对于数据库的访问采用嵌入式SQL语句。
注释
测试准备
测试指南
对于每个模块,分别选定,进入独立的对话框进行测试,对每种控件分别构造测试用例,保证正常值和异常值都被测试。
考量分为两个方面:一、数据库中数据文件应对相应操作做修改;二、窗口中的列表做相应更新。
异常值可能情况有:输入值为空,输入错误,重复输入等等。
特殊考虑
1 添加联系人时,超过10人,可继续添加。
2 添加联系人时,若只输入【姓名】,则不提示错误;如果输入【姓名】、【工作单位】,则提示“至少输入一种联系方式”。
3 输入信息,不提示格式错误问题。
4 删除组操作,若组中无人,则删除不了组。