VC通讯录管理系统Word下载.docx
《VC通讯录管理系统Word下载.docx》由会员分享,可在线阅读,更多相关《VC通讯录管理系统Word下载.docx(21页珍藏版)》请在冰豆网上搜索。
2.2.2主窗体界面控件设计3
2.2.3添加组界面设计4
2.2.4查询界面设计4
2.3详细设计及功能实现4
2.3.1对数据库表及操作界面的操作设计4
2.3.2功能实现7
3.系统的测试12
3.1添加组的测试12
3.2查询操作的测试13
3.3删除组及组内成员测试13
4.总结14
参考文献14
通讯录管理系统
1.选题背景及设计
1.1选题背景
对于即将走入社会的人群,已经认识的或者将要认识的人会越来越多,更新麻烦、查询困难等缺点,是纸质通讯录所不能克服的。
因此,现实中,纸质的通讯录已经不能满足我们的要求。
在此情况下,迫切需要一个电子版的通讯录来满足我们的需求。
1.2通讯录制作的要求
通讯录管理系统采用ODBC、Access数据库作为软件的后台,用微软公司的快速开发工具MicrosoftVisualC++6.0/MFC开发软件的前台界面及功能实现部分,制作的通讯录能够用SQL(结构化查询语言)实现对数据库中的数据的多功能查询,插入,以及删除等操作,而且要求界面良好。
通讯录内的人员信息要按组进行分类,方便查询、管理。
用户可以随时对组内成员很方便地进行增、删、改、查操作,实现方便地管理。
通讯录制作的内容包括以下部分:
1)要求通讯录界面中要包含组
组名有“我的好友”、“朋友”、“同学”、“同事”和“未分组”等信息;
2)成员信息内容的信息展示
成员信息内容的信息包括“姓名”、“性别”、“工作单位”、“办公电话”、“住址”、“住宅电话”、“手机”、“邮箱”、“QQ”、“MSN”和“备注”等信息;
3)通讯录的操作功能
通讯录的操作功能有“增加组”、“查询”、“增加”、“更新”、“删除”和“退出”等信息通讯录分组列表显示以及单击组名后,显示该列表内的成员名;
其中,当单击“增加组”按钮时,系统弹出一个“创建新组”对话框;
当单击“查询”
2.项目设计及实现
2.1设计概述
用MicrosoftAccess创建的联系人信息数据库address.mdb结构如下:
2.1.1分组信息表groupInfo的结构及数据
1)分组信息表的结构如下:
图1groupInfo表结构
2)相关测试数据如下:
图2相关测试数据
2.1.2组内成员信息表People的结构及数据
组内成员住处表的结构如下:
图3组内成员表
相关测试数据,如下:
图4相关测试数据
2.2项目总体设计
2.2.1界面设计
图5主界面
2.2.2主窗体界面控件设计
添加十个静态文本框,标题分别设为“姓名”、“性别”、“工作单位”、“办公电话”、“住址”、“住宅电话”、“手机号码”、“邮箱”、“QQ”、“MSN”,ID号不变,另添加9个编辑框和2个单选按钮,其控件ID号及变量名设置如下表所示:
控件类型或功能
控件ID号
变量类型
变量名
编辑框
IDC_EDIT_NAME
CString
m_name
IDC_EDIT_COMPANY
m_company
IDC_EDIT_PHONEINCOMPANY
m_phoneInCompany
IDC_EDIT_ADDRESS
m_address
IDC_EDIT_PHONEATHOME
m_phoneInHome
IDC_EDIT_MOBILE
m_mobile
IDC_EDIT_MAIL
m_mail
IDC_EDIT_QQ
m_qq
IDC_EDIT_MSN
m_msn
单选按钮
IDC_RADIO_MAN
int
m_sex
IDC_RADIO_WEMAN
-
无
表1
添加一个树状控件和6个Button按钮,按钮控件ID号及功能如下表所示:
按钮名称
按钮ID号
添加组
IDC_BUTTON_APPENDGROUP
查询
IDOK
添加
IDC_BUTTON_APPEND
修改
IDC_BUTTON_EDIT
删除
IDC_BUTTON_REMOVE
退出
IDCANCEL
表2
2.2.3添加组界面设计
图6创建新组界面
2.2.4查询界面设计
图7查询界面
2.3详细设计及功能实现
2.3.1对数据库表及操作界面的操作设计
1)CGroupInfo类绑定操作
新建一个基类为CRecordSet的类CGroupInfo,绑定数据库的groupInfo表,数据表的字段名和类变量的对应关系设计如下表所示:
数据表字段名
变量名称
groupName
m_groupName
id
long
m_id
表3
2)CPeolpe类绑定操作
新建一个基类为CRecordSet的类CPeople,绑定数据库的People表,数据表的字段名和类变量的对应关系设计如下:
3)INTERFACECTRLODATA类
将界面的变量定义成一个结构体:
/*界面编辑信息*/
typedefstruct
{
CStringstrName;
boolbSex;
CStringstrCompany;
CStringstrPhoneInCompany;
CStringstrHomeAddress;
CStringstrPhoneInHome;
CStringstrMobile;
CStringstrMail;
CStringstrQq;
CStringstrMsn;
CStringstrMemory;
}INTERFACECTRLDATA;
//interfacectrldata
classCMy113_306_Dlg:
publicCDialog
//Construction
public:
CMy113_306_Dlg(CWnd*pParent=NULL);
//standardconstructor
//DialogData
//{{AFX_DATA(CMy113_306_Dlg)
enum{IDD=IDD_MY113_306__DIALOG};
CTreeCtrlm_tree_list;
CStringm_address;
CStringm_company;
CStringm_mail;
CStringm_memory;
CStringm_mobile;
CStringm_msn;
CStringm_phoneInHome;
CStringm_phoneInCompany;
CStringm_qq;
intm_sex;
CStringm_name;
//}}AFX_DATA
//ClassWizardgeneratedvirtualfunctionoverrides
//{{AFX_VIRTUAL(CMy113_306_Dlg)
protected:
virtualvoidDoDataExchange(CDataExchange*pDX);
//DDX/DDVsupport
//}}AFX_VIRTUAL
//Implementation
protected:
HICONm_hIcon;
//Generatedmessagemapfunctions
//{{AFX_MSG(CMy113_306_Dlg)
virtualBOOLOnInitDialog();
afx_msgvoidOnSysCommand(UINTnID,LPARAMlParam);
afx_msgvoidOnPaint();
afx_msgHCURSOROnQueryDragIcon();
virtualvoidOnCancel();
afx_msgvoidOnButtonAppend();
afx_msgvoidOnSelchangedTreeList(NMHDR*pNMHDR,LRESULT*pResult);
afx_msgvoidOnClickTreeList(NMHDR*pNMHDR,LRESULT*pResult);
afx_msgvoidOnButtonRemove();
afx_msgvoidOnButtonAppendgroup();
afx_msgvoidOnButtonEdit();
virtualvoidOnOK();
afx_msgvoidOnRadioMan();
afx_msgvoidOnRadioWeman();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
private:
boolRemovePeople(intid);
boolRemoveGroup(intid);
voidRefurTree();
intGetCurrentSelGroupId();
voidCollapseTree();
voidInitTreeList();
voidSwitchData(INTERFACECTRLDATA&
info,boolflag);
CDatabasem_database;
boolCheckInputInfo();
};
2.3.2功能实现
1)添加组功能的实现
//功能:
增加组
voidCMy113_306_Dlg:
:
OnButtonAppendgroup()
CAppendNewGroupDialogdlg;
if(dlg.DoModal()==IDOK)
{
RefurTree();
}
}
2)查询功能的实现
//功能:
查询按钮响应
OnOK()
CQueryPeopleDialogdlg;
//取得待查询联系人名
CStringstrPeopleName=dlg.m_peopleName;
//执行查询
CDatabasedb;
CPeoplepeople(&
db);
CStringstrSql;
strSql.Format("
SELECT*FROMpeopleWHEREfullName='
%s'
\
ORDERBYgroupIdDESC,id"
strPeopleName);
people.Open(AFX_DB_USE_DEFAULT_TYPE,strSql);
if(people.GetRecordCount()==0)
{
MessageBox("
没有找到要查询的联系人!
"
"
提示"
\
MB_OK|MB_ICONINFORMATION);
return;
}
//显示结果
while(!
people.IsEOF())
//取得联系人ID
intnId;
nId=people.m_id;
HTREEITEMhtiItem=m_tree_list.GetRootItem();
while(NULL!
=htiItem)
{
m_tree_list.GetItemData(htiItem);
m_tree_list.Select(htiItem,TVGN_CARET);
//清空联系人信息
INTERFACECTRLDATAtemp;
SwitchData(temp,true);
//选中组下的联系人
HTREEITEMhPeople=m_tree_list.GetChildItem(htiItem);
while(NULL!
=hPeople)
{
if(nId==m_tree_list.GetItemData(hPeople))
{
m_tree_list.Select(hPeople,TVGN_CARET);
gotoSEEKEND;
}
hPeople=m_tree_list.GetNextSiblingItem(hPeople);
}
htiItem=m_tree_list.GetNextSiblingItem(htiItem);
}
SEEKEND:
//移至下条记录
people.MoveNext();
if(!
if(MessageBox("
还有满足条件的联系人,继续查看下一条吗?
确认"
MB_YESNO|MB_ICONQUESTION)==IDNO)
break;
//中断查询,跳出循环
}
people.Close();
db.Close();
3)添加功能的实现
/*增加按钮*/
OnButtonAppend()
//输入合法
if(CheckInputInfo())
//取得当前选定组
intnGroupId=GetCurrentSelGroupId();
//取得界面数据
INTERFACECTRLDATAinterfaceCtrlData;
SwitchData(interfaceCtrlData,false);
CDatabasedatabase;
database.Open(_T("
address"
));
//生成插入指令
if(nGroupId==-1)
CStringstrFormat="
INSERTINTOpeople(fullName,sex,company,\
phoneInCompany,homeAddress,phineInHome,mobile,mail,qq,\
msn,memory)VALUES('
%d,'
'
)"
;
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);
else
INSERTINTOpeople(groupId,fullName,sex,company,\
phoneInCompany,homeAddress,phineInHome,mobile,mail,qq,\
msn,memory)VALUES(%d,'
nGroupId,
}
//执行插入
database.ExecuteSQL(strSql);
database.Close();
//清空界面显示
INTERFACECTRLDATAtemp;
SwitchData(temp,true);
//刷新Tree
}
4)查询功能的实现
更新当前联系人信息
OnButtonEdit()
//取得当前联系人ID
HTREEITEMhSelItem=m_tree_list.GetSelectedItem();
intnID;
nID=m_tree_list.GetItemData(hSelItem);
//更新数据
db.Open("
);
UPDATEpeopleSETfullName='
sex='
%d'
company='
phoneInCompany='
homeAddress='
phineInHome='
mobile='
mail='
qq='
msn='
memory='
WHEREid=%d"
interfaceCtrlData.strName,\
interfaceCtrlData.bSex,\
interfaceCtrlData.strCompany,\
interfaceCtrlData.strPhoneInCompany,\
interfaceCtrlData.strHomeAddress,\
interfaceCtrlData.strPhoneInHome,\
interfaceCtrlData.strMobile,\
interfaceCtrlData.strMail,\
interfaceCtrlData.strQq,\
interfaceCtrlData.strMsn,\
interfaceCtrlData.strMemory,\
nID
);
db.ExecuteSQL(strSql);
5)修改功能的实现