先上效果图;

1.设计目的

同学通讯录管理程序是为了更好地管理学生信息而开发的数据管理软件。如今,同学与同学、老师与同学联系都是通过电话联系。但是,通常这些数据与其他人的信息混合在一起,同学信息并不方便被整理。
所以,同学通讯录管理程序为用户提供充足的信息和快捷的查询手段,实现学生基本信息的录入,删除,查询,修改,存到文件等几方面的功能,这样能对同学之间的信息进行更好的管理,使老师能更好地管理学生信息,对学生信息出现的变动也能及时进行修改。
与此同时,对所学面向对象的程序设计中所学知识加以利用和巩固:
1) 学习Visual C++的MFC开发程序的步骤。 
2) 综合运用所学的类、继承和多态的知识。
3) 进一步掌握程序的调试方法。

2. 设计内容

1 利用MFC的向导,创建基于对话框的应用程序,添加按钮、编辑框等控件;
2 设计通讯录的数据结构(如:以数组或者动态链表)和相应的类;
3 完成对通讯录中记录的增加、修改、删除和显示。
4 将通讯录存入文件。能够打开并显示其中所存的同学信息,并可以进行后续的操作。
在设计同学通讯录管理程序时,我们小组采用对话框形式来进行处理,因为对话框窗口操作简单,更重要的是能更好的向使用者表达程序所要表达的信息。
在主界面进行设计时,我们小组分别设计了学号,姓名,系别,邮箱,电话等五个输入输出框,分别对学生的信息进行输入与输出。其次,设计了一个列表框使学生信息能更好的向用户展示,同时也更加方便了以后的操作。
最后,分别设计了添加记录、查询记录、删除记录、修改记录、保存信息、读取信息、清空所有数据和退出八个按钮,分别实现各自所对应的功能。

3.基本功能描述

3.1. 编辑框

**学号,姓名,系别,邮箱,电话静态文本后的输入输出框实现了对学生信息数据的输入输出。

3.2. 列表框

实现了对学生各个信息的显示,同时通过点击列表中的某一项来实现查看、修改等功能。

3.3. 按钮

1) 添加记录:用户在输入输出框中输入信息,然后通过点击添加记录按钮,添加到列表框中。
2) 查询记录:在除了系别这一信息外任意输入某一项或某几项信息后,点击查询记录按钮,程序将以姓名、电话、邮箱、学号的优先级递减顺序来查找符合条件的学生并将查询到的学生信息显示在输入输出框中。
3) 删除记录:通过选中列表框中某一项,点击删除记录按钮删除所对应的学生数据,但不影响文件中的数据。
4) 修改记录:通过选中列表框中某一项,在对话框中修改所对应的学生某项数据,然后点击修改记录按钮,修改列表框中所对应的数据信息,但不影响文件中的数据。
5) 保存信息:将列表框中的信息全部保存到,目录下的“学生信息.txt”文件中,只有生成文件按钮才会通过程序影响文件中的内容。
6) 读取信息:首先将列表中的已经显示的信息全部清空,再将储存在文件中的信息读取中列表中。
7) 清空所有数据:删除全部学生信息,清空所有记录,同时也将文件中的信息清空。
8) 退出:点击退出后弹出消息框“是否确认退出?”,若点击确认则退出程序,点击取消则返回当前程序
**

4.设计思路

4.1. 窗口的设计

新建对话框程序,在对话框程序中添加各个控件,实现各个功能。

  1. 首先创建一般Student类,其中有共有CString公有数据成员name,number,phone,email,yuanxi,分别实现对学生邮箱,姓名,学号,电话,系别的存储。
    class Student{
    public:
    CString name;
    CString number;
    CString phone;
    CString email;
    CString yuanxi;
    };
  2. 再声明自定义类型Student的向量stu(初始容量为零)和用以确定列表控件行数的全局变量n(初始值为-1)。
  3. 为对话框创建CClassAddresslistDlg类,并设置各个变量与对话框各个窗口相关联。
    通过编写点击各个按钮对应函数来完成各个按钮的功能:
    添加记录:void CClassAddresslistDlg::OnBUTTONincrease();
    查询记录:void CClassAddresslistDlg::OnBUTTONSearch();
    删除记录:void CClassAddresslistDlg::OnBUTTONdelete();
    修改记录:void CClassAddresslistDlg::OnBUTTONchange();
    保存信息:void CClassAddresslistDlg::OnBUTTONpreserve();
    读取信息:void CClassAddresslistDlg::OnBUTTONduqu();
    清空所有数据:void CClassAddresslistDlg::OnBUTTONqingkong();
    退出:void CClassAddresslistDlg::OnButtontuichu();

5.软件设计

5.1. 设计步骤

1) 打开VC++6.0,新建MFC AppWizard[EXE]工程,在对话框中添加各个控件,完成程序窗口外观设计
2) 在MFC ClassWizard中建立对话框类,并命名为CClassAddresslistDlg
3) 在MFC ClassWizard中建立一般类,并命名为Student
4) 在CStudentDlg类编写时,创建全局变量int n = -1(代表行数),通过n的值来方便为列表和按钮建立联系
5) 在MFC ClassWizard为CStudentDlg中添加各个控件,并通过函数编写,实现具体的功能
6) 调试与运行

5.2界面设计

界面由选项框区、通讯录信息区以及列表控件区三个区域组成。其中,通讯录信息区由有五个静态控件用来显示“学号”“姓名”“系别”“邮箱”“电话”字样,与各个静态控件相对应的是五个编辑框,实现了对学生信息的输入输出。列表框区用来显示当前已经存储的学生信息,选项框区有八个按钮,分别对应各自的功能。

6.关键功能的实现

*添加纪录:
首先用户需要在五个编辑框中分别输入信息。点击“添加纪录”按钮后,对应的函数首先声明将编辑框控件中的内容同步到变量中,接着声明了一个变量int flag = 1,用来选择性地执行接下来的if语句。接下来判断当前状态下用户是否输入了信息以及用户输入的信息是否已经在列表中,如果输入了合理的信息则执行接下来的if语句进行查找,反之则改变flag的值以避开用于加入新元素的if语句。随后将信息栏当中的关联变量置零,进行下一次操作时信息栏当中不再显示上次学生的信息。
保存信息:
将保存信息按钮与Dlg类相关联,用户点击保存信息后,利用IO流对数据进行输入和输入,采用ofstream新建一个对象out来打开一个文本文档,采取ios::trunc对文本文件中已有数据进行覆盖,并将变量中的信息利用out来储存到文本文件当中去,每输入一个学生的信息进行换行操作。由于CString是MFC中,而ofstream是ATL中,ofstream能写入的需要char ,因此需要进行类型的转化,来实现信息的保存。
读取信息:
将读取信息按钮与Dlg类相关联,用户点击读取信息后利用IO流对数据进行输入和输入,采用ifstream新建一个对象fin来打开一个文本文档,先利用list控件中的函数将列表清空,
同样需要进行类型的转化,再利用fin将文档中的内容输出到列表中,并与变量的数据相关联,将其同步到变量当中去,来实现信息的读取。
列表控件:
单击列表中的某一行,再左侧信息栏中对应出现相应的学生信息。将列表栏与Dlg类相关联,获得相应的学生信息后将其同步到信息栏的关联变量当中,实现列表栏与信息栏的同步。

7.核心代码实现

7.1列表控件与编辑框控件的关联:

void CClassAddresslistDlg::OnClickList1(NMHDR* pNMHDR, LRESULT* pResult)   //使选中哪一行的信息编辑框出现哪一行的信息
{POSITION pos=m_list.GetFirstSelectedItemPosition(); //获得选中元素的位置n=m_list.GetNextSelectedItem(pos); //获得选中元素的索引CString x;x=m_list.GetItemText(n,0);m_Number=x;x=m_list.GetItemText(n,1);m_Name=x;x=m_list.GetItemText(n,2);m_Xibie=x;x=m_list.GetItemText(n,3);m_Email=x;x=m_list.GetItemText(n,4);m_Phone=x;UpdateData(false);*pResult = 0;
}

7.2 添加纪录:

void CClassAddresslistDlg::OnBUTTONincrease()
{int flag = 0;//以便于选择性执行if语句UpdateData(true);if(m_Name==""||m_Number==""||m_Xibie==""||m_Phone==""||m_Email==""){flag = 1;MessageBox("输入信息不完善,请重新输入!");}if (flag==0)for (int i = 0;i < stu.size();i++){if ( stu[i].name == m_Name&&stu[i].phone == m_Phone&&stu[i].email == m_Email&&stu[i].number == m_Number&&stu[i].yuanxi == m_Xibie)      {   flag = 1;MessageBox("该学生信息已经添加!");break;}}if (flag==0){int n=m_list.GetItemCount();m_list.InsertItem(n,"");m_list.SetItemText(n,0,m_Number);m_list.SetItemText(n,1,m_Name);m_list.SetItemText(n,2,m_Xibie);m_list.SetItemText(n,3,m_Email);m_list.SetItemText(n,4,m_Phone);stu.reserve(stu.size()+1);//增加容量以防止溢出Student s1;s1.name = m_Name;s1.number = m_Number;s1.yuanxi = m_Xibie;s1.email = m_Email;s1.phone = m_Phone;stu.push_back(s1);//往向量末尾加新信息MessageBox("添加成功!");m_Name="";m_Number="";m_Xibie="";m_Phone="";m_Email="";  //清空编辑框UpdateData(false);}
}

7.3 保存信息:

void CClassAddresslistDlg::OnBUTTONpreserve()
{ofstream fout("ZHM.txt",ios::trunc);int n=m_list.GetItemCount();for(int i=0;i<n;++i){string str = CString(stu[i].number);   //由于CString是MFC中,而ofstream是ATL中,ofstream能写入的需要char *string str1 = CString(stu[i].name); string str2 = CString(stu[i].yuanxi); string str3 = CString(stu[i].email); string str4 = CString(stu[i].phone); fout<<str.c_str()<<" "<<str1.c_str()<<" "<<str2.c_str()<<" "<<str3.c_str()<<" "<<str4.c_str()<<endl;if (fout.fail())  break;}fout.close();MessageBox("保存成功!");
}

7.4 读取信息:

void CClassAddresslistDlg::OnBUTTONduqu()
{m_list.DeleteAllItems(); // 全部清空 ifstream fin("ZHM.txt",ios_base::in); string a,b,c,d,e;fin>>a>>b>>c>>d>>e;for(int i=0;!fin.fail();++i){int n=m_list.GetItemCount();m_list.InsertItem(n,a.data());m_list.SetItemText(n,1,b.data());m_list.SetItemText(n,2,c.data());m_list.SetItemText(n,3,d.data());m_list.SetItemText(n,4,e.data());MessageBox("读取成功!");Student s1;s1.number=a.data();s1.name=b.data();s1.yuanxi=c.data();s1.email=d.data();s1.phone=e.data(); stu.reserve(stu.size()+1);//增加容量以防止溢出stu.push_back(s1);fin>>a>>b>>c>>d>>e;}fin.close();
}

完整代码可添加QQ获取

1173953942 备注通讯录即可

有chang

面向对象程序设计课程设计——MFC实现同学通讯录管理系统相关推荐

  1. C++《面向对象程序设计课程设计》

    C++<面向对象程序设计课程设计> <面向对象程序设计课程设计>课程说明 适用专业:计算机科学与技术 课程周数:5周 一.根据计算机科学与技术专业人才培养方案制订. (一)课程 ...

  2. c语言程序设计超市会员卡管理系统,C语言程序设计课程设计报告超市水果信息管理系统...

    <C语言程序设计课程设计报告超市水果信息管理系统>由会员分享,可在线阅读,更多相关<C语言程序设计课程设计报告超市水果信息管理系统(28页珍藏版)>请在人人文库网上搜索. 1. ...

  3. 水果超市c语言程序设计,C语言程序设计课程设计报告-超市水果信息管理系统_精品.doc...

    C语言程序设计课程设计报告-超市水果信息管理系统_精品 西 安 邮 电 大 学 (计算机学院) 高级语言课程设计报告 题 目: 超市水果信息管理系统 专业名称: XXXX 班 级: XXXX 学生姓名 ...

  4. c语言程序设计课程设计水果,C语言程序设计课程设计报告超市水果信息管理系统...

    C语言程序设计课程设计报告超市水果信息管理系统 西 安 邮 电 大 学(计算机学院)高级语言课程设计报告题 目: 超市水果信息管理系统专业名称: XXXX班 级: XXXX学生姓名: XXXX学号(8 ...

  5. 面向对象程序设计课程设计:利用决策树方法判定西瓜质量

    目录 第一章课程设计的目的及要求 1.1课程设计目标 1.2课程设计实验环境 1.3课程设计的预备知识 1.4课程设计要求 第二章课程设计的内容 2.1c++语言程序设计--<利用决策树方法判定 ...

  6. c++面向对象程序设计------课程设计

    课程设计要求 本次考试可以选择使用的理论知识点罗列如下: 常量.new/delete.引用.构造函数.析构函数.拷贝构造.静态成员.友元.组合类.重载函数.虚函数.运算符重载.模板.错误异常处理.格式 ...

  7. 武汉工程大学信息与计算科学专业面向对象程序设计课程设计题

    课程设计内容(从以下任务中任选一个) 1  售票处的服务系统 设计民航售票处的计算机系统可以为客户提供以下各项服务: (1)查询航线:根据旅客提出的终点站名输出以下信息:航班号.飞机号.星期几飞行.最 ...

  8. 数据结构员工通讯录管理系统 C语言,数据结构课程设计报告单位员工通讯录管理系统.doc...

    班级:计科112 学号: 201100814203 姓名:冯贵阳 PAGE PAGE 42 数 据 结 构 课 程 设 计 实 验 报 告 目录 1.单位员工通讯录管理系统(线性表的应用)---- - ...

  9. 数据结构课程设计报告 单位员工通讯录管理系统(线性表的应用)

    题目1.单位员工通讯录管理系统(线性表的应用) [问题描述] 为某个单位建立一个员工通讯录管理系统,可以方便查询每一个员工的办公室电话.手机号.及电子邮箱.其功能包括通讯录链表的建立.员工通讯信息的查 ...

最新文章

  1. (转)[翻译] ASP.NET MVC Tip #1 - 使用扩展方法创建新的HTML Helper
  2. python response.json()报错_python:解析requests返回的response(json格式)说明
  3. AIX系统maxuproc太小导致ORA-27300错
  4. sourcetree 拉取 一直让输入密码
  5. 编译py-faster-rcnn全过程
  6. Web项目练习总结(错误校正篇)
  7. 一般筛法和快速线性筛法求素数 求素数的一点总结
  8. DotNetNuke 框架总揽
  9. uboot源码——gd_t和bd_t数据结构
  10. mybatis 详解------ 一级缓存、二级缓存(九)
  11. 第十六:Allure-pytest功能特性介绍
  12. 办公技巧分享:如何编辑PDF文件内容
  13. 光继电器一体化控制实训系统
  14. 【密码学相关】常用的期刊,会议,实验室
  15. pixi 小游戏_pixi2d小游戏跳一跳源码/pixi教程,基于pixi-spine的2d游戏
  16. c语言程序书写遵循的规则,C程序书写时应遵循的规则
  17. AD(altium designer)15原理图与PCB设计教程(七)——印制电路板的布局设计
  18. 设计模式之禅【状态模式】
  19. 如何在GitHub上传并更新项目
  20. Vundle.vim管理插件的插件安装问题

热门文章

  1. 弹性域报表实例(四)
  2. AD7190的小总结
  3. 突发:陆奇出任拼多多技术顾问委员会负责人
  4. 送给大家一个把阿拉伯数字与罗马数字互换的代码 -.- 仅支持4000以下的转化
  5. STM32f103+protues仿真(一) 点亮led
  6. 自然语言处理思维导图
  7. 前端web项目使用electron和electron-builder生成桌面应用
  8. lazarus lpk包在codetyphon下的使用
  9. Internet标准时间RFC3339格式说明
  10. 利用Java游戏引擎开发坦克大战