MFC课程设计报告一个简单的通讯录应用程序.docx
- 文档编号:10218521
- 上传时间:2023-02-09
- 格式:DOCX
- 页数:14
- 大小:58.81KB
MFC课程设计报告一个简单的通讯录应用程序.docx
《MFC课程设计报告一个简单的通讯录应用程序.docx》由会员分享,可在线阅读,更多相关《MFC课程设计报告一个简单的通讯录应用程序.docx(14页珍藏版)》请在冰豆网上搜索。
MFC课程设计报告一个简单的通讯录应用程序
一、设计目标与内容
1.了解Windows编程的基础知识,掌握MFC应用程序的基本知识;
2.基本掌握面向对象程序设计的基本思路和方法;
3.掌握用VC++开发应用程序的的一般步骤和方法;
4.能够利用所学的基本知识,设计一个简单的通讯录应用程序,具有以下功能:
①用文件来保存通讯录信息(必须实现的功能)②编程实现通讯录记录的添加、删除、修改、浏览和查询(必须实现的功能)。
二、设计要求
1.用VC++进行编码,实现应用程序的功能。
注重编码质量,代码要有适当的注释;
2.提交设计报告一份(课程设计任务书、目录、主要的数据结构、设计的基本思路、设计的步骤及主要代码、心得体会、参考文献)。
总体设计
通讯录应用程序,是一个基于单文档单视图的应用程序。
我们在基于但文档视图开发的同时,通过对文档菜单的操作和相应函数的响应实现一个简单的通讯录功能。
在通讯录中,我们能够添加学生信息、修改学生信息、删除学生信息、预览学生信息和保存学生信息。
进行一系列简单的操作。
详细设计
◆新建工程COM_book2
新建工程COM_kook2,默认选择单文档应用程序,完成。
在COM_book2View.cpp中初始化文档视图界面
添加函数如下:
voidCCOM_book2View:
:
OnInitialUpdate()
{
CListView:
:
OnInitialUpdate();
CListCtrl&m_ListCtrl=GetListCtrl();
CStringstrHeader[5]={"姓名","专业","电话","QQ","生日"};
intnLong[]={150,200,250,200,200};
for(intnCol=0;nCol<5;nCol++)
m_ListCtrl.InsertColumn(nCol,strHeader[nCol],LVCFMT_LEFT,nLong[nCol]);
UpdateData(FALSE);
}
程序运行后,界面如下
◆程序运行主界面
图1-1
在这里,我们可以看到通过我们单文档视图中菜单“通讯录操作”可以进行相应的学生信息的添加、删除、修改、查询、浏览、保存和打开。
而这里,下来菜单中的每一个选项我们将通过对话框的形式进行呈现。
为了便于对学生信息进行操作和保存,我们这里用到了数组集合类。
先给工程添加一个学生信息类,用来保存学生的信息。
类定义如下:
CStudentinfo
CStringstrName:
public
CStringstrSpecial:
public
CStringstrPhone:
public
CStringstrQQ:
public
CStringstrBirth:
public
DECLARE_SERIAL(CStudentInfo):
public//序列化声明
CStudentInfo(){}:
public
CStudentInfo(CStringname,CStringspecial,CStringphone,CStringqq,CStringbirth):
public
◆学生信息添加对话框
图1-2
给工程添加一个对话框,然后给该对话框建立类向导
添加CStudentInfoDlg类
CStudentInfoDlg
CStringm_add_name:
public
CStringm_add_special:
public
CStringm_add_birth:
public
CStringm_add_phone:
public
CStringm_add_qq:
public
然后为菜单选项中“添加”选项添加响应函数OnStuinfoAdd()。
代码如下:
voidCCOM_book2Doc:
:
OnStuinfoAdd()
{
CStudentInfoDlgdlg;
BOOLflag=true;
if(dlg.DoModal()!
=IDOK)return;
for(inti=0;i { CStudentInfo*p=(CStudentInfo*)m_stuObArray.GetAt(i); if(p->strName==dlg.m_add_name) { flag=false; AfxMessageBox("该学生已存在! "); } } if(flag) { CStudentInfo*pStudent=newCStudentInfo(dlg.m_add_name,dlg.m_add_special,dlg.m_add_phone,dlg.m_add_qq,dlg.m_add_birth); m_stuObArray.Add(pStudent); //SetModifiedFlag(); this->UpdateAllViews(NULL,1,pStudent); } } ◆学生信息删除对话框 由于删除学生信息前要查询这个学生是否存在,所以这里我们要添加一个对话框类Del_StudentInfoDlg CDel_StudentInfoDlg CStringm_stu_del: public 运行时对话框如图 图1-3 根据学生姓名来查询看学生是否存在,若存在则进行删除,若不存在则提示该学生不存在 为菜单选项中的“删除”添加相应函数OnStuinfoDel() 代码如下: voidCCOM_book2Doc: : OnStuinfoDel() { CDel_StudentInfoDlgdlg1; BOOLflag=true; if(dlg1.DoModal()! =IDOK)return; for(inti=0;i { CStudentInfo*p=(CStudentInfo*)m_stuObArray.GetAt(i); if(p->strName==dlg1.m_stu_del) { deletem_stuObArray.GetAt(i); flag=false; } } if(flag) AfxMessageBox("学生不存在,不能进行删除! "); if(flag==false) { for(inti=0;i { CStudentInfo*p=(CStudentInfo*)m_stuObArray.GetAt(i); p->k=i+1; this->UpdateAllViews(NULL,2,p); } } } ◆学生信息修改 由于在修改学生信息之前我们要先查询学生是否存在,若存在我们对其信息进行修改,这时候要重新调用另一个对话框来对学生信息进行修改。 这是需添加两个对话框对话框对话框MOD_StudentInfoDlg1和MOD_StudentInfoDlg2并为它们建立相应的类CMOD_StudentInfoDlg1和CMOD_StudentInfoDlg2 CMOD_StudentInfoDlg1 CStringm_mod_name1: public CMOD_StudentInfoDlg2 CStringm_name2: public CStringm_birth2: public CStringm_qq2: public CStringm_phone2: public CStringm_spe2: public 添加菜单选项中“修改”的响应函数OnStuinfoMod(),先调用对话框MOD_StudentInfoDlg1来判断该学生是否存在,若存在则调用对话框MOD_StudentInfoDlg2对学生信息进行修改若不存在则提示该学生不存在。 代码如下: voidCCOM_book2Doc: : OnStuinfoMod() { CMOD_StudentInfoDlg1dlg2; CMOD_StudentImfoDlg2dlg3; BOOLflag=true; CStudentInfo*p1,*p2; if(dlg2.DoModal()! =IDOK)return; for(inti=0;i { p1=(CStudentInfo*)m_stuObArray.GetAt(i); if(p1->strName==dlg2.m_mod_name1) { if(dlg3.DoModal()! =IDOK)return; p1->strName=dlg3.m_name2; p1->strSpecial=dlg3.m_spe2; p1->strQQ=dlg3.m_qq2; p1->strPhone=dlg3.m_phone2; p1->strBirth=dlg3.m_birth2; p2=p1; flag=false; } } if(flag) AfxMessageBox("学生不存在! "); if(flag==false) { this->UpdateAllViews(NULL,3,p2); AfxMessageBox("修改成功! "); } } ◆学生信息查询对话框 学生信息查询对话框和删除学生信息对话框基本上是一样的,都是通过查询学生是否存在,若存在则显示该学生的信息,若不存在则提示学生不存在。 为菜单选项中的“查询”添加相应函数OnStuinfoSer() 代码如下: voidCCOM_book2Doc: : OnStuinfoSer() { CSER_StudentInfoDlgdlg4; BOOLflag=true; CStudentInfo*p3; if(dlg4.DoModal()! =IDOK)return; for(inti=0;i { CStudentInfo*p=(CStudentInfo*)m_stuObArray.GetAt(i); if(p->strName==dlg4.m_ser_name) { p3=(CStudentInfo*)m_stuObArray.GetAt(i); flag=false; } } if(flag==false) this->UpdateAllViews(NULL,3,p3); else AfxMessageBox("学生不存在! "); } ◆学生信息查预览 学生信息预览,顾名思义就是显示现有全部学生的信息。 这里添加菜单选项中“预览”的函数响应OnStuinfoLook() 代码如下: voidCCOM_book2Doc: : OnStuinfoLook() { for(inti=0;i { CStudentInfo*p=(CStudentInfo*)m_stuObArray.GetAt(i); p->k=i+1; this->UpdateAllViews(NULL,2,p); } } ◆学生信息查保存和打开 虽然我们使用了数组集合类,系统能够自动的为我们保存添加过的学生信息,但是他本村的时候是乱码,所以这里我又重新写了函数进行学生信息的保存 为菜单选项中的“保存”和“打开”添加相应的函数响应OnStuinfoSave1()和OnStuinfoOpen1() 代码如下: voidCCOM_book2Doc: : OnStuinfoSave1() { //设置保存的文件,后缀名txt Cdlg(FALSE,"txt",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"(*.TXT)|*.txt|AllFiles|*.*||",NULL); //如果公共类对话框为确定 if(dlg.DoModal()==IDOK) //获取文件名 dlg.Get(); //否则,退出 else return; CStdio; //如果有问题,退出 if((dlg.Get(),C)==0) { AfxMessageBox("saveerror! "); return; } for(inti=0;i { CStudentInfo*p=(CStudentInfo*)m_stuObArray.GetAt(i); (p->strName); (p->strSpecial); (p->strPhone); (p->strQQ); (p->strBirth); ("\n"); } (); } voidCCOM_book2Doc: : OnStuinfoOpen1() { Cdlg(TRUE,"txt",NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,"(*.TXT)|*.wzq|AllFiles|*.*||",NULL); if(dlg.DoModal()==IDOK) dlg.Get(); else return; CStdio; CStudentInfo*P; inti,j; CStringstr; if((dlg.Get(),C)==0) { AfxMessageBox("openerror! "); return; } CArchivear(&); for(i=0;i<10;i++) { for(j=0;j<5;j++) { ar.ReadString(str); if(j==0){P->strName=str;} if(j==1){P->strSpecial=str;} if(j==2){P->strPhone=str;} if(j==3){P->strQQ=str;} if(j==4){P->strBirth=str;} } this->UpdateAllViews(NULL,1,P); } (); ar.Close(); } ◆文档和在视图的关联 在Windows程序设计中,文档和视图的关联是很重要的,所以我们要弄明白他们之间互动的机制。 在这个程序中,我们每一次在文档类里更改学生信息都要把信息传递到视图里面进行更新,在这里我们会用到UpdateAllViews()函数通过这个函数把信息的改变传递给视图,然后对视图进行更新。 UpdateAllViews函数的原型如下: voidUpdateAllViews(CView*pSender,LPARAMlHint=0L,CObiect*pHint=NULL); 其中,参数pSender表示试图指针,若在派生文档类的成员函数中调用该函数,侧此参数应为NULL,若被派生视图中的成员函数调用,侧此参数应为this。 lHint表示更新视图是发送的相关消息,pHint表示存储信息的对象指针。 当UpdateAllViews函数被调用时,如果参数pSender指向某个特定的试图对象,那么除了该指定的视图之外,文档的所有其他视图的OnUpdate函数就会被调用。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MFC 课程设计 报告 一个 简单 通讯录 应用程序
![提示](https://static.bdocx.com/images/bang_tan.gif)