c++面对对象课程设计报告通讯应用程序.docx
《c++面对对象课程设计报告通讯应用程序.docx》由会员分享,可在线阅读,更多相关《c++面对对象课程设计报告通讯应用程序.docx(30页珍藏版)》请在冰豆网上搜索。
![c++面对对象课程设计报告通讯应用程序.docx](https://file1.bdocx.com/fileroot1/2023-2/28/de3388b1-de60-4ab6-a76b-05af43b37cc7/de3388b1-de60-4ab6-a76b-05af43b37cc71.gif)
c++面对对象课程设计报告通讯应用程序
《面向对象课程设计》
报告
设计(论文)题目:
通讯录应用程序
学院名称:
电子与信息工程学院
专业:
计算机科学与技术
班级:
计科11-4班
姓名:
薛祥清
学号:
11401010410
指导教师:
周林华
2012年9月17日
通讯录应用程序
目录
1、目标与要求………………………………………………………<2>
2、程序操作要求及说明……………………………………………<2>
2.1按钮要求………………………………………………………<2>
2.2输入要求………………………………………………………<2>
3、程序设计分析………………………………………………………<2>
3.1程序框架流程图………………………………………………<3>
3.2设计思路………………………………………………………<3>
3.3类声明与主要算法实现代码………………………………………<4>
4、实现步骤……………………………………………………………<6>
4.1程序项目创建…………………………………………………<7>
4.2界面及控件设计………………………………………………<8>
4.3按钮及编辑框属性……………………………………………<9>
4.4编辑框绑定变量………………………………………………<9>
5、程序模块设计代码与调试…………………………………………<10>
5.1浏览……………………………………………………………<10>
5.2添加……………………………………………………………<12>
5.3修改……………………………………………………………<13>
5.4保存……………………………………………………………<13>
5.5删除……………………………………………………………<18>
5.6▲、▼…………………………………………………………<20>
六、课程设计总结………………………………………………………<21>
目标与要求:
写通讯录应用程序
要求:
(1)能够实现通讯录中数据的浏览、删除和添加以及修能。
(2)利用文件存储通讯录中的数据。
程序操作要求:
2.1按钮:
程序共有七个操作按钮:
【浏览】、【添加】、【修改】、【保存】、【删除】、【▲】(上一页)、【▼】(下一页)。
操作需遵守以下规则:
1、先点击按钮【浏览】,再进行其他操作。
2、进行添加、修改时候输入结束后必须点击【保存】进行联系人的信息保存,否则会造成添加、修改信息丢失。
2.2输入:
该程序输入部分包括姓名、电话号码、邮箱地址、现住地址(其中包括省份、城市、街道)、所属群组。
输入要求:
1、姓名、所属群组输入可以使任意字符。
2、现住地址包括三部分从左到右为:
省份、城市、街道。
3、电话号码栏只能输入数字,输入其他字符程序会提示输入错误。
4、邮箱地址输入包括字母、数字、符号【@】和【.】,输入其他时程序会提醒输入错误。
程序设计分析:
3.1程序框架流程图:
3.2设计思路:
如上流程图所示为该程序的使用流程。
打开通讯录程序点击浏览,利用fstream类读取文件中联系人的个数,赋予m_total在编辑框里显示。
再利用CFile类读取文件联系人具体信息,并写入双向队列dequep中。
并显示队列中第一个元素。
接下来可分为五种操作:
1.[▲]:
将队尾的元素加入队列头部,删除队尾元素,并显示第一个元素。
2.[▼]:
将队首的元素加入队列尾部,删除队首元素,并显示第一个元素。
3.[添加]:
点击浏览按编辑框里的提示输入联系人的具体信息。
4.[修改]:
点击修改跳出提示对话框,关闭后进行修改。
5.[保存]:
修改和添加后的操作,先判断输入有没错误,再将队列的元素个数写进文件中,再进行循环的联系人信息保存:
将队首元素写进文件,再将队首元素添到队尾,最后删除队首元素。
6.[删除]:
删除队首元素后进行文件的保存。
3.3类声明与主要算法实现代码:
//街道类------------------------------------------------------
classsite
{
private:
CStringsheng;
CStringshi;
CStringstreet;
public:
voidgetsite(CStringsheng,CStringshi,CStringstreet);
~site(){}
CStringshowsheng();
CStringshowshi();
CStringshowstreet();
};
voidsite:
:
getsite(CStringshe,CStringsh,CStringstr)//构造函数
{
sheng=she;
shi=sh;
street=str;
};
CStringsite:
:
showsheng()
{
returnsheng;
};
CStringsite:
:
showshi()
{
returnshi;
};
CStringsite:
:
showstreet()
{
returnstreet;
};
//信息类继承街道类--------------------------------------
classpeople:
publicsite
{
private:
CStringname;
CStringnum;
CStringemail;
CStringzhu;
public:
people(CStringna,CStringnu,CStringem,CStringshe,CStringsh,CStringstr,CStringzh);
CStringshowname();
CStringshownum();
CStringshowemail();
CStringshowzhu();
~people(){}
};
people:
:
people(CStringna,CStringnu,CStringem,CStringshe,CStringsh,CStringstr,CStringzh)//构造函数
{
getsite(she,sh,str);
name=na;
num=nu;
email=em;
zhu=zh;
};
CStringpeople:
:
showname()
{
returnname;
};
CStringpeople:
:
shownum()
{
returnnum;
};
CStringpeople:
:
showemail()
{
returnemail;
};
CStringpeople:
:
showzhu()
{
returnzhu;
};
实现步骤:
4.1程序项目创建:
打开MicrosofVisualC++6.0,在文件中点击新建,在弹出框内选择MFCAppWizard[exe]工程,输入工程名:
通讯录及保存位置,点击确定,如下图。
将弹出的对话框MFCAppWizard-step1对话框,选择基本对话框,点击完成,如下图。
这样,MFCAppWizard就建立了一个基本对话窗口的程序框架,如下图。
4.2界面及控件设计:
按钮:
以按钮【浏览】为例:
点击控件上图标
在对话框的合适位置制作一个按钮,并将按钮的标题改为(浏览)。
双击按钮就可以进行后台代码的编写。
其他按钮均可以按这种方法制作。
编辑框:
以【姓名】编辑框为例:
点击控件上图标
在对话框的合适位置制作一个编辑框,然后绑定变量:
右击—建立类向导—MemberVariables—AddVariable…—输入变量名,选好变量类型—OK。
提示对话框:
右击工作区间
—插入Dialog—弹出新建的对话框—双击新建对话框—OK—输入类名aa—OK—确定。
主对话框跳转到提示对话框代码:
类名变量名;
变量名.DoModal();
界面及控件完成后如图所示:
4.3按钮及编辑框属性:
对象
ID
标题或说明
编辑框
IDC_EDIT1
姓名
编辑框
IDC_EDIT2
电话号码
编辑框
IDC_EDIT3
邮箱地址
编辑框
IDC_EDIT4
住址省份
编辑框
IDC_EDIT5
群组
编辑框
IDC_EDIT6
人数
编辑框
IDC_EDIT7
城市
编辑框
IDC_EDIT8
街道
按钮
IDC_BUTTON1
浏览
按钮
IDC_BUTTON2
添加
按钮
IDC_BUTTON3
修改
按钮
IDC_BUTTON4
保存
按钮
IDC_BUTTON5
删除
按钮
IDC_BUTTON6
▲
按钮
IDC_BUTTON7
▼
4.4编辑框绑定变量:
程序模块设计代码与调试:
5.1浏览:
//按钮“浏览”将文件中的信息读取到队列中,并显示队列头一个类的信息
voidCMyDlg:
:
OnButton1()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
ifstreammy("data.txt",ios_base:
:
in);
inttt;
my.read(reinterpret_cast(&tt),sizeof(int));
my.close();
while(!
p.empty())p.pop_front();
CFilemFile;
TCHAR*pszFileName=_T("date.txt");
mFile.Open(pszFileName,CFile:
:
modeRead);
CArchivear(&mFile,CArchive:
:
load);
for(inti=0;i
{
ar>>a.name>>a.num>>a.email>>a.sheng>>a.shi>>a.street>>a.zhu;
peopleaa(a.name,a.num,a.email,a.sheng,a.shi,a.street,a.zhu);
p.push_front(aa);
}
ar.Close();
mFile.Close();
m_total=tt;
//如果文件中没有存入任何信息则显示“无”-------------------
if(tt==0)
{
wuxinxiassa;
assa.DoModal();
m_name="无";
m_num="无";
m_email="无";
m_add="无";
m_add1="无";
m_add2="无";
m_zhu="无";
}
else
{
m_name=p.front().showname();
m_num=p.front().shownum();
m_email=p.front().showemail();
m_add=p.front().showsheng();
m_add1=p.front().showshi();
m_add2=p.front().showstreet();
m_zhu=p.front().showzhu();
}
UpdateData(false);
}
5.2添加:
//按钮“添加”,输出提示文字---------------------------------------
inttian=0;
voidCMyDlg:
:
OnButton2()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
tian=1;
m_name="姓名";
m_num="电话号码";
m_email="邮箱地址";
m_add="省/直辖市/自治区";
m_add1="城市";
m_add2="街道";
m_zhu="分类";
UpdateData(false);
}
5.3修改:
//按钮“修改”,跳出一个对话框提示“修改”---------------------------
voidCMyDlg:
:
OnButton3()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
xiugaisa;
sa.DoModal();
}
5.4保存:
//按钮“保存”添加、修改后都要进行保存,进行文件的写入------------------
voidCMyDlg:
:
OnButton4()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
//检查添加、修改后的电话号码、邮箱地址格式有没错误。
(电话只允许数字、邮箱可以有字母,数字“@”和“.”)---------
intff=0,gg=0;
for(intii=0;ii{
if(m_num[ii]<'0'||m_num[ii]>'9')
{
ff=1;
break;
}
}
for(intiii=0;iii{
if((m_email[iii]>='0'&&m_email[iii]<='9')||(m_email[iii]>='A'&&m_email[iii]<='Z')||(m_email[iii]>='a'&&m_email[iii]<='z')||(m_email[iii]=='@')||(m_email[iii]=='.'))
{
}
else
{
gg=1;
break;
}
}
//输入电话号码邮箱格式错误时跳出对话框提示--------------------------
if(ff==1&&gg==0)
{
npeopledlg;
dlg.DoModal();
}
elseif(gg==1&&ff==0)
{
xemaildaa;
daa.DoModal();
}
elseif(ff==1&&gg==1)
{
xnumemailddd;
ddd.DoModal();
}
if(tian==1)
{
peopleaa(m_name,m_num,m_email,m_add,m_add1,m_add2,m_zhu);
p.push_front(aa);
m_total=p.size();
}
else
{
peopleaa(m_name,m_num,m_email,m_add,m_add1,m_add2,m_zhu);
p.pop_front();
p.push_front(aa);
}
tian=0;
inttotal;
//将队列的头一个类写入文件,再利用函数push_brak()、pop_front()进行循环保存-----------
ofstreammyfile("data.txt",ios_base:
:
out);
total=p.size();
myfile.write(reinterpret_cast(&total),sizeof(int));
myfile.close();
TCHAR*pszFileName=_T("date.txt");
CFilemFile;
mFile.Open(pszFileName,CFile:
:
modeCreate|CFile:
:
modeNoTruncate|CFile:
:
modeWrite);
CArchivear(&mFile,CArchive:
:
store);
for(inti=0;i{
ar<
p.push_back(p.front());
p.pop_front();
}
ar.Close();
mFile.Close();
//跳出对话框提示保存成功----------------------------------------
if(ff==0&&gg==0)
{
bokdd;
dd.DoModal();
}
ff=gg=0;
UpdateData(false);
}
保存成功提示:
电话号码输错提示:
邮箱地址输错提示:
邮箱及电话号码输错提示:
5.5删除:
//按钮“删除”,利用队列函数pop_front()删除头一个类---------------
voidCMyDlg:
:
OnButton5()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
inttt;
p.pop_front();
//删除后判断队列是否为空。
若空则显示“无”,否则显示队列头一个类----
if(p.empty())
{
m_total=0;
m_name="无";
m_num="无";
m_email="无";
m_add="无";
m_zhu="无";
tt=0;
}
else
{
m_name=p.front().showname();
m_num=p.front().shownum();
m_email=p.front().showemail();
m_add=p.front().showsheng();
m_add1=p.front().showshi();
m_add2=p.front().showstreet();
m_total=p.size();
m_zhu=p.front().showzhu();
tt=p.size();
}
//将队列的头一个类写入文件,再利用函数push_brak()、pop_front()进行循环保存------------
ofstreammyfile("data.txt",ios_base:
:
out);
myfile.write(reinterpret_cast(&tt),sizeof(int));
myfile.close();
TCHAR*pszFileName=_T("date.txt");
CFilemFile;
mFile.Open(pszFileName,CFile:
:
modeCreate|CFile:
:
modeNoTruncate|CFile:
:
modeWrite);
CArchivear(&mFile,CArchive:
:
store);
for(inti=0;i
{
ar<
p.push_back(p.front());
p.pop_front();
}
ar.Close();
mFile.Close();
//跳出对话框提示删除成功----------------------------------------
sokdd;
dd.DoModal();
UpdateData(false);
}
5.6▲、▼:
//利用函数push_front()、pop_break()进行循环显示------------------
voidCMyDlg:
:
OnButton6()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
p.push_front(p.back());
p.pop_back();
m_name=p.front().showname();
m_num=p.front().shownum();
m_email=p.front().showemail();
m_add=p.front().showsheng();
m_add1=p.front().showshi();
m_add2=p.front().showstreet();
m_zhu=p.front().showzhu();
UpdateData(false);
}
//利用函数push_brak()、pop_front()进行循环显示---------------------
voidCMyDlg:
:
OnButton7()
{
//TODO:
Addyourcontrolnotificationhandlercodehere
UpdateData(true);
p.p