课程设计MFC通讯录.docx
- 文档编号:8957326
- 上传时间:2023-05-16
- 格式:DOCX
- 页数:42
- 大小:2.17MB
课程设计MFC通讯录.docx
《课程设计MFC通讯录.docx》由会员分享,可在线阅读,更多相关《课程设计MFC通讯录.docx(42页珍藏版)》请在冰点文库上搜索。
课程设计MFC通讯录
课程设计说明书
班级:
计算B101姓名:
肖圣龙(201009014122)
设计题目:
__________通讯录_______
设计时间:
2012.12.23至2013.1.4
指导教师:
丁智斌丁
评语:
_________________________________
_________________________________________
_________________________________________
_________________________________________
_________________________________________
评阅成绩:
____评阅教师:
_____
设计总说明
通讯录管理系统是典型的管理系统,其开发主要包括数据库的建立和维护前端应用程序的开发两个方面。
对于前者要求建立起数据库一致性和完整性强、数据安全性好的库。
而对于后者则要求应用程序功能完备,易使用等特点。
经过分析,我们使用MICROSOFT公司的VISUALC++开发工具,利用其提供的各种面向对象的开发工具,尤其是MFC界面编程,运用对话框、控件等资源,实现界面化的通讯录,使其不但具有美观的界面,同时方面用户的操作。
关键词:
通讯录;VisualC++;数据库
第1章绪论
1.1选题背景
当今时代,网络已经成为人们生活中不可缺少的一部分,世界上的第三媒体—Internet,它打破了地域时间限制,改变了人们的工作和生活方式,,随着网络用户要求的不断提高及计算机科学的迅速发展,特别是数据库技术在Internet中的广泛应用,Web站点向用户提供的服务将越来越丰富,越来越人性化.计算机在管理中应用的普及,利用计算机实现各种管理势在必行,那我们现在如何管理与我们联系的人的信息呢?
有多种方式,比如说,有储存电话号码到手机上的,有记录电话等信息到本子上的,还有用名片夹存放名片的,也有记录在WORD文档中或打印出来的,等等很多种形式。
对于存储电话号码到手机上的方式,比较方便,随时随地可以联系,不过只能通过电话联系,没有记录其他的联系方式,如果手机丢了可能就谁也联系不上了;对于记录电话等信息到本子上的方式,第一也可能丢失本子,第二是查找起来比较困难,需要人工查找,而且更新时不容易,需要涂改以前记录的信息,第三格式比较死板,不利于跟随用户的需求扩展;对于用名片夹存放名片的形式也是查找起来不方便,有丢失的危险;对于记录到WORD文档或打印出来的,也是扩展性不强,查找起来不方便。
如此多的方式我们都感觉有一定的缺陷,我们通过界面编程和数据库技术相结合,界面操作使使用和维护通讯录更加简单、方便,数据库的使用可以使数据的保存更加安全,而且数据库也可以对数据进行导入、导出、打印等功能的实现更加方便。
1.2目的和意义
当今时代,是一个信息的时代,对数据的维护,成为一个越来越复杂的问题,如何使数据的保存和维护不成为一种负担呢?
MFC界面编程和数据库的结合使数据的维护效率大大提高和降低维护成本。
一个班级、一个学校、一个公司等,对人员基本信息的维护,都是一个庞大的工作。
本系统中的用户注册,人员信息添加、人员信息修改、人员信息删除等功能,使得管理员对信息的维护更加简单,使得用户对自己的信息维护和其他人员信息的查询更加方便。
数据库的使用让数据的大量传输、备份更高效,数据的安全性更高。
第2章系统设计
2.1系统总设计
2.1.1题目要求
1、用户权限管理,管理人员可以对用户信息进行维护。
2、学生信息维护,管理人员可以对班级学生信息进行维护。
3、各种统计查询,根据各种组合查询条件对学生信息进行查询。
4、提供最新的记录变更提醒等高级功能(选做)。
通讯录系统
2.1.2系统功能结构
普通用户管理
管理员管理
普通用户注册
退出
注销
修改密码
查询新信
退出
注销
修改密码
查询新信
删除成员
修改成员
添加新成员
图1通讯录系统功能结构图
2.1.3通讯录系统流程图
用户
退出
登录
否
注册
注册普通用户
是
普通用户
权限
通讯录系统
管理员
通讯录系统
修改密码
查询信息
修改密码
查询成员
删除成员
添加成员
修改密码
注销
退出
退出
注销
图2通讯录系统流程图
2.2数据库设计
2.2.1数据库需求分析和设计
数据字典:
表1密码表
字段名
数据类型
主键
是否允许为NULL
用户
nchar(10)
是
否
密码
nchar(10)
否
权限
nchar(10)
否
密码表,用于管理用户、密码、权限
表2信息表
字段名
数据类型
主键
是否允许为NULL
昵称
nchar(20)
是
否
姓名
nchar(10)
是
性别
nchar
(2)
是
出生日期
datetime
是
nchar(11)
是
nchar(20)
是
联系方式
nchar(11)
是
地址
nchar(30)
是
照片
varbinary(MAX)
是
信息表:
用于对用户的基本信息的管理。
E-R图
(1)密码表:
用户、密码、权限。
密码表
权限
密码
用户
图3密码表E-R图
(2)信息表:
昵称、姓名、性别、出生日期、QQ、Email、联系方式、地址、照片。
昵称
照片
信息表
姓名
地址
性别
出生日期
联系方式
图4信息表E-R
2.2.1创建数据库
创建一个数据库名称为mowang的数据库。
图5数据库创建
2.2.2创建数据表
创建两个表,一个是密码表,用于对用户的用户号、密码、权限进行管理。
一个是信息表,用于对用户的信息进行管理。
图6密码表的创建
图7信息表的设计
2.3系统详细设计
2.3.1创建工程
启动VisualC++6.0,创建一个名为mowang的对话框的MFCAppWizard[exe]的运用程序。
2.3.2公共类设计
在工程里建立一个MYADO的类,用于连接数据库。
MYADO类的设计代码如下:
MYADO.h的代码:
classMYADO
{
public:
UINTGetRecordCount(_RecordsetPtrpRecordset);
MYADO();
virtual~MYADO();
voidOnInitADOConn();
_RecordsetPtr&GetRecordSet(_bstr_tbstrSQL);
BOOLExecuteSQL(_bstr_tbstrSQL);
voidExitConnect();
_ConnectionPtrm_pConnection;
_RecordsetPtrm_pRecordset;
};
MYADO.cpp的代码:
初始化函数代码:
voidMYADO:
:
OnInitADOConn()
{
:
:
CoInitialize(NULL);//初始化OLE/COM库环境
try
{
//m_pConnection为指向Connection对象的指针:
//创建Connection对象
m_pConnection.CreateInstance(__uuidof(Connection));
//设置连接字符串,必须是BSTR型或者_bstr_t类型
//该系统使用的是文件数据源
m_pConnection->Open("Provider=SQLOLEDB.1;IntegratedSecurity=SSPI;PersistSecurityInfo=False;InitialCatalog=mowang;DataSource=PC2012110811BMC","","",adModeUnknown);
}
//捕捉异常
catch(_com_errore)
{
//显示错误信息
AfxMessageBox(e.Description());
}
}
执行查询函数代码:
_RecordsetPtr&MYADO:
:
GetRecordSet(_bstr_tbstrSQL)
{
try
{
//连接数据库,如果Connection对象为空,则重新连接数据库
if(m_pConnection==NULL)
OnInitADOConn();
//创建记录集对象
m_pRecordset.CreateInstance(__uuidof(Recordset));
//取得表中的记录
m_pRecordset->Open(bstrSQL,m_pConnection.GetInterfacePtr(),adOpenDynamic,adLockOptimistic,adCmdText);
}
//捕捉异常
catch(_com_errore)
{
//显示错误信息
AfxMessageBox(e.Description());
}
//返回记录集
returnm_pRecordset;
}
执行SQL语句的函数代码:
BOOLMYADO:
:
ExecuteSQL(_bstr_tbstrSQL)
{
try
{
//是否已经连接数据库
if(m_pConnection==NULL)
OnInitADOConn();
//Connection对象的Execute方法:
(_bstr_tCommandText,VARIANT*RecordsAffected,longOptions)
//其中CommandText是命令字串,通常是SQL命令。
//参数RecordsAffected是操作完成后所影响的行数,
//参数Options表示CommandText的类型:
adCmdText-文本命令;adCmdTable-表名adCmdProc-存储过程;adCmdUnknown-未知
m_pConnection->Execute(bstrSQL,NULL,adCmdText);
returntrue;
}
catch(_com_errore)
{
AfxMessageBox(e.Description());
returnfalse;
}
}
计算记录集数量的函数代码:
UINTMYADO:
:
GetRecordCount(_RecordsetPtrpRecordset)
{
intnCount=0;
try{
pRecordset->MoveFirst();
}
catch(...)
{
return0;
}
if(pRecordset->adoEOF)
return0;
while(!
pRecordset->adoEOF)
{
pRecordset->MoveNext();
nCount++;
}
pRecordset->MoveFirst();
returnnCount;
}
断开数据库连接代码:
voidMYADO:
:
ExitConnect()
{
//关闭记录集和连接
if(m_pRecordset!
=NULL)
m_pRecordset->Close();
m_pConnection->Close();
//释放环境
:
:
CoUninitialize();
}
2.3.3登录窗口的设计
图8登录窗口界面
登录模块中设置“登录”按钮功能的代码:
voidCMowangDlg:
:
OnEnter()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
PlaySound(MAKEINTRESOURCE(IDR_WAVE1),AfxGetResourceHandle(),SND_ASYNC|SND_RESOURCE|SND_NODEFAULT);
_RecordsetPtrm_pRs;
_ConnectionPtrm_pC;
:
:
CoInitialize(NULL);
UpdateData(true);
CStringSqlStr;
intindex=m_leixing.GetCurSel();
m_leixing.GetLBText(index,m_leixing1);
CMowangApp*App=(CMowangApp*)AfxGetApp();
App->m_LeiXing=m_leixing1;
App->m_name=m_user;
SqlStr.Format("select*from密码表where用户='%s'and密码='%s'and权限='%s'",m_user,m_mima,m_leixing1);
m_pC.CreateInstance(__uuidof(Connection));
m_pC->Open("Provider=SQLOLEDB.1;IntegratedSecurity=SSPI;PersistSecurityInfo=False;InitialCatalog=mowang;DataSource=PC2012110811BMC","","",adModeUnknown);
try{
m_pRs.CreateInstance(__uuidof(Recordset));
//取得表中的记录
m_pRs->Open((_variant_t)SqlStr,m_pC.GetInterfacePtr(),adOpenKeyset,adLockOptimistic,adCmdText);
}
catch(_com_errore)
{
//显示错误信息
AfxMessageBox(e.Description());
}
if(m_user.IsEmpty()||m_mima.IsEmpty()||m_leixing1.IsEmpty())
{
m_user="";
m_mima="";
MessageBox("用户名、密码、权限不能为空");
UpdateData(false);
return;
}
if(m_pRs->RecordCount>0)
{
Cmaincmaindlg;
EndDialog(0);
cmaindlg.DoModal();
}
else
{m_user="";
m_mima="";
MessageBox("用户名、密码、权限错误");
UpdateData(false);
return;
}
}
登录模块中设置“注册普通用户”按钮功能
voidCMowangDlg:
:
OnBUTTON1zhuce()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CZHUCEzhuce;
zhuce.DoModal();
}
2.3.4注册普通用户设计
图9注册窗口界面
注册窗口模块中注册函数的实现代码:
voidCZHUCE:
:
OnBUTTON1zhuce()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
if(m_mima.IsEmpty()||m_name.IsEmpty())
{
MessageBox("用户名或密码不能为空!
");
m_mima="";
m_name="";
UpdateData(false);
}
else
{
MYADOado;
ado.OnInitADOConn();
CStringSQL;
SQL.Format("insertinto密码表(用户,密码,权限)values('%s','%s','普通用户')",m_name,m_mima);
ado.ExecuteSQL(_bstr_t(SQL));
MessageBox("记录添加成功","添加");
m_mima="";
m_name="";
UpdateData(false);
}
}
2.3.5主窗体设计
图10主窗体界面
主窗体中“添加新成员”,“修改成员”,“删除成员”,“查询信息”,“修改密码”,“注销”,“退出”全部功能只对管理员开发,当进入主界面的是普通用户,“添加新成员”,“修改成员”,“删除成员”功能无法操作,弹出该用户无此权限。
各功能的详细代码如下:
voidCmain:
:
OnAddmember()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CMowangApp*App=(CMowangApp*)AfxGetApp();
if(strcmp(App->m_LeiXing,"管理员")==0)
{
CNEWADDadd;
add.DoModal();
}
else
{
MessageBox("该用户不是管理员,无此权限");
return;
}
}
voidCmain:
:
OnUpdatemember()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CMowangApp*App=(CMowangApp*)AfxGetApp();
if(strcmp(App->m_LeiXing,"管理员")==0)
{
CNEWUPDATEupdate;
update.DoModal();
}
else
{
MessageBox("该用户不是管理员,无此权限");
return;
}
}
voidCmain:
:
OnDeletemember()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CMowangApp*App=(CMowangApp*)AfxGetApp();
if(strcmp(App->m_LeiXing,"管理员")==0)
{
CDELETEdelete1;
delete1.DoModal();
}
else
{
MessageBox("该用户不是管理员,无此权限");
return;
}
}
voidCmain:
:
OnSelectmember()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CSELECTselect;
select.DoModal();
}
voidCmain:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
exit(0);
}
voidCmain:
:
Onreturn()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
EndDialog(0);
CMowangDlgg;
g.DoModal();
}
voidCmain:
:
Onupdatemima()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CUPDATE_MIMAc;
c.DoModal();
}
2.3.6“添加信息”模块设计
图11添加信息界面
添加信息模块信息添加函数代码:
voidCNEWADD:
:
OnButton1Add1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CStringm_xingbie2;
CButton*Radiobutton=(CButton*)GetDlgItem(IDC_RADIO1+m_Radio-1);
Radiobutton->GetWindowText(m_xingbie2);
UpdateData(true);
if(!
m_nicheng1.IsEmpty()){
MYADOado;
ado.OnInitADOConn();
CStringstr;
str.Format("insertinto信息表(昵称,姓名,出生日期,性别,QQ,Email,联系方式,地址)values('%s','%s','%s','%s','%s','%s','%s','%s')",m_nicheng1,m_name1,m_birthday1,m_xingbie2,m_QQ1,m_email1,m_telephone1,m_address1);
//m_nicheng1,m_name1,m_xingbie2,m_birthday1,m_QQ1,m_email1,m_telephone1,m_address1
ado.ExecuteSQL(_bstr_t(str));
MessageBox("记录添加成功","添加");
m_nicheng1="",m_name1="",m_birthday1="",m_QQ1="",m_email1="",m_telephone1="",m_address1="";
UpdateData(false);
}
else
{MessageBox("昵称不能为空!
","提示");}
}
添加信息模块图片载入函数代码实现:
voidCNEWADD:
:
OnBUTTON1zrPicture()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
CFileStatusfstatus;
CFilefile;
LONGcb;
CFileDialogdlg(TRUE,"jpg","*jpg",OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"JPEG(*.jpg)|*.jpg,GIF(*.
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 课程设计 MFC 通讯录
![提示](https://static.bingdoc.com/images/bang_tan.gif)