详细版C++MFC通讯录课程设计文档格式.docx
《详细版C++MFC通讯录课程设计文档格式.docx》由会员分享,可在线阅读,更多相关《详细版C++MFC通讯录课程设计文档格式.docx(26页珍藏版)》请在冰豆网上搜索。
1、设计一个简易的通讯录管理软件,能够维护、查询、管理通讯录的基本信息。
2、具有信息维护功能:
通讯录名单及相关信息的添加、删除等功能。
其中通讯录名单的信息包括姓名、电话号码、工作单位、称呼、通信地址等。
3、具有信息查询功能:
实现按姓名、电话号码、工作单位、称呼、通信地址等信息进行查询。
4、定义一个通讯类,其中包含姓名、电话号码、工作单位、称呼、通信地址等数据成员,同时包含修改,删除等成员函数。
三、设计内容。
1、任务概况。
系统将每个学生的基本信息可以实现添加、删除、修改、查询功能。
2、具备功能。
(1)分类显示联系人信息
(2)添加、删除、修改联系人信息
(3)可以按关键字查找联系人
3、整体框图。
4、主要模块代码。
1,登录模块:
在voidCTest_323Dlg:
:
OnPaint()/////////添加新的代码用于美化登录////界面
CPaintDCdc(this);
CBitmapbitmap;
bitmap.LoadBitmap(IDB_BITMAP1);
//
if(pWnd->
GetDlgCtrlID()==IDC_STATIC1)
{
pDC->
SetTextColor(RGB(255,0,0));
//字体颜色
SetBkColor(RGB(0,0,255));
//字体背景色
return(HBRUSH):
GetStockObject(WHITE_BRUSH);
//设置背景色
}
else
GetDlgCtrlID()==IDC_STATIC2||pWnd->
GetDlgCtrlID()==IDC_STATIC3)
{
pDC->
SetTextColor(RGB(0,0,0));
return(HBRUSH):
}
returnhbr;
}
///////////////////////登录按钮/////////////////////////////////////////////////////////////
voidCTest_323Dlg:
OnEnter()
{
UpdateData(TRUE);
CTest_323Dlgpt;
if(m_user.IsEmpty()||m_password.IsEmpty())
MessageBox("
用户名或密码不能为空"
"
用户登录信息"
);
else
if(m_user==pt.m_user1&
&
m_password==pt.m_password1)
OnReset();
UpdateData(FALSE);
CDialog:
OnOK();
////////////调用低层OnOK()函数,销毁对话框
CInterfaceinface;
inface.DoModal();
else
if(m_user==pt.m_user1&
m_password!
=pt.m_password1)
MessageBox("
密码不正确!
"
else
if(m_user!
=pt.m_user1&
MessageBox("
用户名和密码都不正确!
else
用户名不正确!
//////////////////////////置零////////////////////////////////////////////////////////
OnReset()////置零按钮
m_user="
;
m_password="
UpdateData(FALSE);
///////////////////////////////////////////////////////////////////////////
2主界面模块:
/////////////////各个按钮的响应函数///////////////////////////////////////////////
voidCInterface:
OnChangcode()//修改密码
CChangcodecode;
code.DoModal();
OnChangname()//修改用户名
CChangnamename;
name.DoModal();
OnBnClickedLogout()//注销
{
CTest_323Dlgdlg1;
dlg1.DoModal();
OnBnClickedAddone()//响应添加新的成员
CAddNumberaddnumber;
addnumber.DoModal();
OnBnClickedSeekone()//查询信息
{flag=0;
CResearchresearch;
research.DoModal();
OnBnClickedChangone()//修改成员按钮的响应
OnBnClickedDelone()//删除成员的按钮响应
//////////////////////////////////////////////////////////////////////////////////////
3添加成员模块:
//////////////////////////添加成员函数//////////////////////////
voidCAddNumber:
OnBnClickedAddnewnumber()//添加新的成员
if(m_address01.IsEmpty()||m_cwork01.IsEmpty()||m_name01.IsEmpty()||m_sex01.IsEmpty()||m_tellphone01.IsEmpty())
MessageBox("
添加的成员信息不能有空!
//判断添加的信息是否有空
CNewsletterst;
//自己定义的信息通信类
intn_st=0;
//联系人的个数
intsize=0;
inti;
ints=0;
CStringstr3;
CFilefile;
//建立一个文件类,关于其用法,请baidu。
file.Open("
Test_323.dat"
CFile:
modeReadWrite);
//打开文件
size=GetFileSize((void*)file.m_hFile,NULL);
//读取文件大小,size==0表示是空文件
if(size>
0)//如果文件不空,则读取文件前面4个字节(表示联系人记录数量的),为空则不读,默认为0个了。
file.SeekToBegin();
file.Read(&
n_st,sizeof(n_st));
if(n_st>
0&
n_st<
100)//实验中限定为0~100个联系人记录,5*20=100个字节
m_num_01=n_st;
for(i=0;
i<
(size-4)/100;
i++)//去掉记录联系人的个数的字节,然后/100即是联系人编号或行数
{
//请注意与写入数据的顺序要保持一样,否则会读错数据。
(m_st[i].m_name),sizeof(m_st[i].m_name));
(m_st[i].m_sex),sizeof(m_st[i].m_sex));
(m_st[i].m_cwork),sizeof(m_st[i].m_cwork));
(m_st[i].m_tellphone),sizeof(m_st[i].m_tellphone));
(m_st[i].m_address),sizeof(m_st[i].m_address));
str3=m_st[i].m_name;
//判断删除的
if(str3=="
)//把后面赋值为空
{
n_st=i;
s=i;
break;
}
}//以下代码主要还是把这条记录写入文件,注意写入的格式:
文件的前四个字节是保持联系人记录数,
//后面依次保持联系人记录注意,写联系人的每个信息的顺序要与读取时的顺序一致。
n_st+=1;
file.SeekToBegin();
file.Write(&
//写联系人记录个数
memcpy(st.m_name,m_name01.GetBuffer(m_name01.GetLength()),m_name01.GetLength());
st.m_name[m_name01.GetLength()]='
\0'
//在数组末尾加结束符号
memcpy(st.m_sex,m_sex01.GetBuffer(m_sex01.GetLength()),m_sex01.GetLength());
//把类CString对象的内容赋值到字符数组中
st.m_sex[m_sex01.GetLength()]='
memcpy(st.m_cwork,m_cwork01.GetBuffer(m_cwork01.GetLength()),m_cwork01.GetLength());
st.m_cwork[m_cwork01.GetLen