《面向对象程序设计》课程设计报告同学通讯录管理程序.docx
《《面向对象程序设计》课程设计报告同学通讯录管理程序.docx》由会员分享,可在线阅读,更多相关《《面向对象程序设计》课程设计报告同学通讯录管理程序.docx(17页珍藏版)》请在冰豆网上搜索。
《面向对象程序设计》课程设计报告同学通讯录管理程序
1.设计题目
同学通讯录管理程序
2.设计目的和内容
2.1设计目的
1)学习VisualC++的MFC开发程序的步骤。
.
2)综合运用所学的类、继承和多态的知识。
3)进一步掌握程序的调试方法。
2.2设计内容
1)利用MFC的向导,创建基于对话框的应用程序,添加按钮、编辑框等控件;
2)设计通讯录的数据结构(如:
以数组或者动态链表)和相应的类;
3)完成对通讯录中记录的增加、修改、删除和显示;
4)将通讯录存入文本文件。
3.基本功能描述
可以实现学生信息(姓名、学号、系别、邮箱、电话)的添加、显示、选中修改、删除选中和保存并退出程序的功能。
4.设计思路
1)创建基于对话框的MFC应用程序,添加控件:
5个EditControl、6个Button、1个ListControl;
2)在5个EditControl分别输入相应信息,点击“添加记录”Button可在ListControl中显示相应信息,同时清空五个EditControl以便下一个学生信息的输入;
3)点中ListControl选中已有一组学生信息,点击“删除记录”Button可删除该组信息;
4)点中ListControl选中已有一组学生信息,点击“选择该列”Button将该列信息返回到5个EditControl。
修改完成后点击“确认修改”Button,对ListControl中选中列完成修改;
5)点击“确认保存”将信息保存到文本文档;
6)点击“退出”退出程序。
7)可在D盘查看保存的信息。
5.软件设计
5.1设计步骤
1)建立程序,添加变量和函数
打开MicrosoftVisualStudio2010,新建一个基于对话框的MFC应用程序。
添加5个StaticText、5个EditControl、6个Button、1个ListControl。
在各控件属性中修改Caption,见表1。
选择项目→类向导,添加成员变量(表2)和成员函数(表3)。
表1Caption
控件ID
Caption
控件ID
Caption
IDC_STATIC
姓名
IDC_BUTTON1
添加记录
IDC_STATIC
学号
IDC_BUTTON2
删除记录
IDC_STATIC
系别
IDC_BUTTON3
选择该列
IDC_STATIC
邮箱
IDC_BUTTON4
确认保存
IDC_STATIC
电话
IDCANCEL
退出
IDOK
确认修改
表2成员变量
控件ID
类型
成员
IDC_EDIT1
CString
m_name
IDC_EDIT2
CString
m_num
IDC_EDIT3
CString
m_ins
IDC_EDIT4
CString
m_email
IDC_EDIT5
CString
m_call
IDC_LIST1
CListCtrl
m_list
表3成员函数
函数名称
命令ID
消息
OnBnClickedCancel
IDCANCEL
BN_CLICKED
OnBnClickedOk
IDOK
BN_CLICKED
OnClickedButton1add
IDC_BUTTON1
BN_CLICKED
OnClickedButton2delete
IDC_BUTTON2
BN_CLICKED
OnClickedButton3modify
IDC_BUTTON3
BN_CLICKED
OnClickedButton3keep
IDC_BUTTON4
BN_CLICKED
2)添加一个Student类,在Ctry2Dlg.cpp中定义Student类的对象数组emily和一个全局变量i。
3)初始化ListControl
在类视图→try2→Ctry2Dlg→OnInitialog()添加初始化的代码
4)实现添加、删除、修改和保存功能
在类视图→try2→Ctry2Dlg中:
OnClickedButton1add()实现添加记录到ListControl功能;
OnClickedButton2delete()实现删除记录功能;
OnClickedButton3modify()实现选中记录返回到相应EditControl功能;
OnBnClickedOk()实现在OnClickedButton3modify()功能后替换ListControl中原有内容确认修改;
OnClickedButton4keep()实现在保存功能;
OnBnClickedCancel()退出程序。
5.2界面设计
界面见图1
图1界面
5.3关键功能的实现
5.3.1添加记录
利用EditControl关联的成员变量取其中的值存到对象数组中,再将对象数组中的值显示到ListControl,同时清空EditControl以便下一组学生记录的输入。
i自增1,这样下一个记录便会存储在下一个数组元素中。
5.3.2删除记录
调用m_list.GetSelectionMark选中点击了ListControl中的一行;
再调用m_list.DeleteItem删除该行;
调用Student类的delete函数删除数组中的该组信息。
5.3.3选中记录
调用m_list.GetSelectionMark获取点击的那一行;
m_list.GetItemText获取想要的单元格返回到相应的EditControl。
5.3.4确认修改
结合删除和添加功能即可。
5.3.5保存记录
建立CFile文件类的对象txt,文件路径为d:
//student.txt;
CFile:
:
modeCreate|CFile:
:
modeWrite为文件操作类型参数设置;
利用GetLength函数字符串长度,再调用Write写入到文本文档;
5.3.6退出
OnBnClickedCancel()退出程序。
6.结论与心得体会
在这个同学通讯录管理程序设计中,通过上网搜索,我学会并使用了很多编写MFC应用程序的函数。
在这个过程中,我觉得用msdn进行查询很重要。
MFC中有很多函数,功能非常强大,网上有人说“在MFC中只有想不到,没有做不到”。
设计过程中虽然遇到了很多次困难,在每次通过查阅资料后解决难题的过程中都有很多意想不到的收获。
全力投入后运行成功是无比喜悦的,
C++作为MFC等其他很多程序编写的基础,是非常重要的。
这次课程设计过程我发现自己没有好好掌握C++,很多基本的概念没有彻底理解,需要再多看看书,查查资料。
通过这次课程设计,我初步学会了基于对话框的MFC应用程序的设计,我发现原来枯燥的程序编写也有很多快乐,我对编程产生了浓厚兴趣。
7.参考文献
孙鑫.(2006).VC++深入详解 北京:
电子工业出版社
Visual.C++6.0技术内幕 北京:
希望电子出版社
侯俊杰.(1998).深入浅出MFC
8.附录
8.1调试报告及测试结果
图2运行初始界面
图3键入信息
图4点击“添加记录”
图5再添加一个学生信息
图6点击第一行后点击“选择该列”取出信息到EditControl
图7修改信息
图8点击“确认修改”
图9点击emily行后点击“删除记录”
图10点击yukaiyuan行后点击“选择该列”
图11点击“确认保存”
图12D盘自动生产student.txt
8.2关键源代码
8.2.1Student类
classStudent{
public:
Student(void);
~Student(void);
CStringname;
CStringnum;
CStringins;
CStringemail;
CStringcall;
voidDelete();
};
8.2.2全局
Studentemily[15];
inti=0;
8.2.3ListControl初始化
BOOLCtry2Dlg:
:
OnInitDialog()
{
……
//TODO:
在此添加控件通知处理程序代码
DWORDdwStyle=m_list.GetExtendedStyle();
m_list.SetExtendedStyle(dwStyle|LVS_EX_FULLROWSELECT|LVS_EX_GRIDLINES);
m_list.InsertColumn(0,_T("姓名"));
m_list.InsertColumn(1,_T("学号"));
m_list.InsertColumn(2,_T("院系"));
m_list.InsertColumn(3,_T("邮箱"));
m_list.InsertColumn(4,_T("电话"));
m_list.SetColumnWidth(0,80);
m_list.SetColumnWidth(1,80);
m_list.SetColumnWidth(2,120);
m_list.SetColumnWidth(3,120);
m_list.SetColumnWidth(4,120);
returnTRUE;
}
8.2.4添加记录
voidCtry2Dlg:
:
OnClickedButton1add()
{
//TODO:
在此添加控件通知处理程序代码?
UpdateData();
emily[i].name=m_name;
emily[i].num=m_num;
emily[i].ins=m_ins;
emily[i].email=m_email;
emily[i].call=m_call;
intnCurItem=m_list.InsertItem(0,emily[i].name);
m_list.SetItemText(nCurItem,1,emily[i].num);
m_list.SetItemText(nCurItem,2,emily[i].ins);
m_list.SetItemText(nCurItem,3,emily[i].email);
m_list.SetItemText(nCurItem,4,emily[i].call);
m_name="";
m_num="";
m_ins="";
m_email="";
m_call="";
UpdateData(FALSE);
i=i+1;
}
8.2.5删除记录
voidCtry2Dlg:
:
OnClickedButton2delete()
{
//TODO:
i=m_list.GetSelectionMark();
m_list.DeleteItem(i);
emily[i].Delete();
}
8.2.6选中记录
voidCtry2Dlg:
:
OnClickedButton3modify()
{
//TODO:
在此添加控件通知处理程序代码
i=m_list.GetSelectionMark();//获取点击的那一行
emily[i].name=m_list.GetItemText(i,0);//获得已被选择的行
SetDlgItemText(IDC_EDIT1,emily[i].name);
emily[i].num=m_list.GetItemText(i,1);
SetDlgItemText(IDC_EDIT2,emily[i].num);
emily[i].ins=m_list.GetItemText(i,2);
SetDlgItemText(IDC_EDIT3,emily[i].ins);
emily[i].email=m_list.GetItemText(i,3);
SetDlgItemText(IDC_EDIT4,emily[i].email);
emily[i].call=m_list.GetItemText(i,4);
SetDlgItemText(IDC_EDIT5,emily[i].call);
}
8.2.7修改记录
voidCtry2Dlg:
:
OnBnClickedOk()
{
//TODO:
在此添加控件通知处理程序代码?
i=m_list.GetSelectionMark();
m_list.DeleteItem(i);
emily[i].Delete();
UpdateData();
emily[i].name=m_name;
emily[i].num=m_num;
emily[i].ins=m_ins;
emily[i].email=m_email;
emily[i].call=m_call;
intnCurItem=m_list.InsertItem(i,emily[i].name);
m_list.SetItemText(nCurItem,1,emily[i].num);
m_list.SetItemText(nCurItem,2,emily[i].ins);
m_list.SetItemText(nCurItem,3,emily[i].email);
m_list.SetItemText(nCurItem,4,emily[i].call);
m_name="";
m_num="";
m_ins="";
m_email="";
m_call="";
UpdateData(FALSE);
}
8.2.8保存记录
//TODO:
在此添加控件通知处理程序代码
CFiletxt;
intj;
txt.Open(_T("d:
//student.txt"),CFile:
:
modeCreate|CFile:
:
modeWrite);
for(inti=0;i<15;i++){
j=emily[i].name.GetLength();
txt.Write(emily[i].name,2*j);
j=emily[i].num.GetLength();
txt.Write(emily[i].num,2*j);
j=emily[i].ins.GetLength();
txt.Write(emily[i].ins,2*j);
j=emily[i].email.GetLength();
txt.Write(emily[i].email,2*j);
j=emily[i].call.GetLength();
txt.Write(emily[i].call,2*j);
}
txt.Close();
}}
8.2.9退出程序
voidCtry2Dlg:
:
OnBnClickedCancel()
{
//TODO:
在此添加控件通知处理程序代码
CDialogEx:
:
OnCancel();
}