MFC制作一个简单的通讯录
课程设计MFC通信录

通信录MFC课程设计说明书目录设计总说明 ......................................................................................................................... I I 第1章绪论 (1)选题背景 (1)目的和意义 (1)第2章系统设计 (2)系统总设计 (2)2.1.1题目要求 (2)2.1.2系统功能结构 (2)2.1.3通信录系统流程图 (3)数据库设计 (4)2.2.1数据库需求分析和设计 (4)信息表:用于对用户的大体信息的管理。
(4)E-R图 (4)2.2.1创建数据库 (5)2.2.2创建数据表 (6)系统详细设计 (6)2.3.1创建工程 (6)2.3.2公共类设计 (7)参考文献 (13)设计总说明通信录管理系统是典型的管理系统,其开发主要包括数据库的成立和保护前端应用程序的开发两个方面。
对于前者要求成立起数据库一致性和完整性强、数据安全性好的库。
而对于后者则要求应用程序功能完备,易利用等特点。
通过度析,咱们利用MICROSOFT公司的VISUAL C++开发工具,利用其提供的各类面向对象的开发工具,尤其是MFC界面编程,运用对话框、控件等资源,实现界面化的通信录,使其不但具有美观的界面,同时方面用户的操作。
关键词:通信录;Visual C++;数据库选题背景现今时期,网络已经成为人们生活中不可缺少的一部份,世界上的第三媒体—Internet ,它打破了地域时间限制,改变了人们的工作和生活方式,,随着网络用户要求的不断提高及计算机科学的迅速发展,特别是数据库技术在Internet中的普遍应用,Web站点向用户提供的服务将愈来愈丰硕,愈来愈人性化.计算机在管理中应用的普及,利用计算机实现各类管理势在必行,那咱们此刻如何管理与咱们联系的人的信息呢?有多种方式,比如说,有贮存电话号码得电话上的,有记录电话等信息到本子上的,还有效名片夹寄存名片的,也有记录在WORD文档中或打印出来的,等等很多种形式。
实验二 电话簿的设计

实验二电话簿的设计一、实验目的:使用MFC编写一个具有添加、删除、显示、选择等基本功能的电话簿。
二、实验过程:首先打开C++软件,新建MFC AppWizard[exe],创建基本对话框类型的应用程序,其余选项保持其默认值不变。
在新建立的对话框中添加Button、EditBox,ComboBox,CheckBox,分别编辑名字和排布。
具体如图:其中性别默认为男,关系和职业默认第一项,且只可选一项。
typedef struct info{CString name;名字CString sex;性别CString tel;电话号码int age;年龄BOOL vip;是否vipint relation;关系int job;职业} INFO;建立结构体INFO,保存对话框各控件传递的参数。
在CAddressBook11Dlg中,增加public变量CListBox m_info,CString m_sex,BOOLm_vip,CString m_name,int m_relation,int m_job,int m_age,CString m_tel,增加private变量vector<INFO> vinfo,int curpos。
在头文件中包含#include <vector>,#include <fstream>。
在程序初始化调用CAddressBook11Dlg构造函数时curpos = 0首先编写添加功能,创建添加按钮响应函数void CAddrBook11Dlg::OnInsert(){// TODO: Add your control notification handler code hereUpdateData(TRUE);传入信息INFO info;创建结构体 = m_name;info.sex = m_sex;info.tel = m_tel;info.age = m_age;info.vip = m_vip;info.relation = m_relation;info.job = m_job;把输入的各项信息传入结构体中vinfo.push_back(info); 把结构体压入数组curpos = vinfo.size()-1;把项数传给curposm_list_info.AddString(m_name);在屏幕上显示m_list_info.SetCurSel(curpos);保存项数}编写删除函数,添加删除键响应函数void CAddrBook11Dlg::OnDelete(){// TODO: Add your control notification handler code here if(curpos <0 || curpos >= vinfo.size())如果不在范围内return;m_list_info.DeleteString(curpos);删除curpos对应项vinfo.erase(vinfo.begin()+curpos);if(vinfo.size() == 0)如果所有对象都已经删除{m_sex = _T("男");m_vip = FALSE;m_name = _T("");m_relation = 0;m_job = 0;m_age = 0;m_tel = _T("");UpdateData(FALSE);恢复初始值并且清空屏幕}if(curpos >= vinfo.size())如果选中项超过范围则回至第一项curpos = 0;m_list_info.SetCurSel(curpos);保存项数OnSelchangeListInfo();}下面编写如何通过“上一条”按键使屏幕选中上一条void CAddrBookDlg11::OnLast(){// TODO: Add your control notification handler code here int size = vinfo.size();把数组大小传给sizeif(size == 0) return;为空则返回curpos--;当前项项数减1if(curpos < 0)若小于0则返回至最后一项curpos = size -1;INFO info = vinfo.at(curpos);m_name = ;m_sex = info.sex;m_teleph = info.tel;m_vip = info.vip;m_relation = info.relation;m_job = info.job;把选中项上一项的信息传给当前参数m_list_info.SetCurSel(curpos);保存项数UpdateData(FALSE);显示信息}“下一条”按钮编写原理类似:void CAddrBookDlg11::OnNext(){// TODO: Add your control notification handler code here int size = vinfo.size();if(size == 0) return;curpos++;当前所在项项数加1if(curpos >= size)若超出范围curpos = 0;返回至第一条INFO info = vinfo.at(curpos);m_name = ;m_sex = info.sex;m_telephone = info.telephone;m_vip = info.vip;m_relationship = info.relationship;m_job = info.job;m_list_info.SetCurSel(curpos);UpdateData(FALSE);}下面是鼠标点击选中void CAddrBookDlg11::OnSelchangeListInfo(){// TODO: Add your control notification handler code here curpos = m_list_info.GetCurSel();获得当前鼠标选中项项数INFO info = vinfo.at(curpos);m_name = ;m_sex = info.sex;m_tel = info.tel;m_vip = info.vip;m_relation = info.relation;m_job = info.job;UpdateData(FALSE);}然后编写保存功能void CAddressBook11Dlg::OnSave(){// TODO: Add your control notification handler code here ofstream fout("info.txt");创建文件fout << vinfo.size() << "\n";输出大小for(int i=0;i<vinfo.size();i++)对于每一项{fout << vinfo.at(i).name.GetBuffer(0) <<"\n";fout << vinfo.at(i).sex.GetBuffer(0) <<"\n";fout << vinfo.at(i).age <<"\n";fout << vinfo.at(i).tel.GetBuffer(0) <<"\n";fout << vinfo.at(i).vip <<"\n";fout << vinfo.at(i).relation <<"\n";fout << vinfo.at(i).job <<"\n";输出各信息}fout.close();输出完毕}最后在OnInitDialog中加入:ifstream fin("info.txt");输入info.txt中内容if(fin.fail())如果文件不存在return TRUE;int size = 0;fin>>size;INFO info;char buffer[256];设置缓冲fin.getline(buffer,256);for(int i=0;i<size;i++)输入每一项信息{fin.getline(buffer,256); = CString(buffer);fin.getline(buffer,256);info.sex = CString(buffer);fin.getline(buffer,256);info.tel = CString(buffer);fin>>info.age;fin>>info.vip;fin>>info.relation;fin>>info.job;输入至info结构体fin.getline(buffer,256);vinfo.push_back(info);将此项压入数组m_info.AddString();在屏幕上显示该项姓名}fin.close();输入完毕if(vinfo.size()<=0) return TRUE;数组为空curpos = 0;默认选中第一项info = vinfo.at(curpos);m_name = ;m_sex = info.sex;m_age = info.age;m_tel = info.tel;m_vip = info.vip;m_relation = info.relation;m_job = info.job;将当前项信息传递m_info.SetCurSel(curpos);保存项数UpdateData(FALSE);输出信息return TRUE;三、实验总结:第二个实验比起第一个要稍微复杂些,但是上课时老师仔细讲过编写方法,所以虽然耗时更长,而且费了很大劲回忆,但还是有惊无险地编完了。
简单的通讯录管理系统设计与实现MFC通讯录报告

//将指针指向需要插入的记录处
while(curp->next && k<pos)
{
curp=curp->next;
k++;
//记录当前记录数
}
node *p=new node("","","",0);
//增加一个新节点
// 插入新节点 p->prev=curp->prev; curp->prev->next=p; p->next=curp; curp->prev=p;
(三)高级功能
(1)增加以电话号码为关键字,查找并显示该记录;
(2)在追加记录的函数中,增加:若追加记录中姓名与通讯录中已有记录同名,则不能追 加;
(3)插入记录:给出插入位置,执行插入后,查询并显示是否被插入。
二、程序运行界面截图及其说明 (一)基本功能界面
(1)开启界面
按钮仅追加和退出可使用。编辑框均为灰色,处于只读状态,当前记录为 0/0。
// 在指定位置完成插入
1、单击“追加”按钮,调用追加函数 OnBtinsert();
2、单击“追加搜索”按钮,调用 OnBtsure() 函数。
3、查找追加记录的名字是否重复(参考“按姓名查找”函数)。
将 curp 指针从头指针开始向后移,保存当前记录数 k。
4、找到姓名时,如果 (k >= 总记录数),则表明:遍历了所有记录,没有找到重复 姓名。否则,表明:未遍历完就找到相同姓名。
5、若重复姓名,删除追加的记录。
将 curp 指针移到最后,删除节点。
附:
//============== 追加查询,同名不能追加 ===============
mfc界面的通讯录管理系统

课程设计(论文)题目:通讯录管理系统院(系):__________________ 专业班级:姓名:学号:指导教师:年月日设计总说明我的题目是“通讯录管理系统”,具有对联系人进行增删改查等功能,只有一个窗口,窗口左边是联系人的详细信息,右边是联系人姓名列表。
窗口上列出所有的“通讯录管理系统”的操作。
例如:增加联系人,删除联系人,插入联系人,按姓名查找联系人,按电话查找联系人等,界面简洁方便,功能齐全。
本程序利用MFC界面编程,运用对话框,控件等资源实现界面化的通讯录,使其不但具有美观的界面,同时方便了用户的操作。
关键字:通讯录,信息管理系统方便效率目录设计总说明 (2)1.设计目的 (3)2.问题描述 (4)3.需求分析 (4)3.1 数据需求 (4)3.2 基本功能需求 (4)3.3 非功能性需求 (4)4.概要设计 (5)4.1 数据结构 (5)4.2 系统包含的函数 (5)4.3 函数间的关系 (6)4.4 系统功能模块图 (7)5.详细设计 (8)5.1 结构体的详细定义 (8)5.2 系统函数详细介绍 (8)5.3 系统功能模块介绍 (10)5.4 具体模块设计 (10)5.4.1增加联系人: (11)5.4.2:插入联系人 (12)5.4.3:删除联系人 (13)5.4.4:保存联系人 (14)5.4.5:查找联系人 (15)5.4.6:其它辅助功能 (15)6.调试分析 (16)7.使用说明 (17)8.设计总结 (20)9.参考文献 (21)《数据结构》课程设计通讯录管理系统1.设计目的“数据结构”是计算机科学与技术专业一门十分重要的专业技术基础课,计算机科学各领域及有关的应用软件都要使用到各种数据结构。
对于从事计算机科学及其应用的科技工作者来说,数据结构与算法是必须透彻地掌握的重要基础。
学习数据结构与算法的最终目的是解决实际的应用问题,特别是非数值计算类型的应用问题。
课程设计是加强学生实践能力的一个强有力手段。
基于MFC的通讯录设计(含源文件)

基于MFC的通讯录设计学院:通信与信息工程学院专业:通信与信息系统基于MFC的通讯录设计摘要本设计实现一个简单电子通讯录。
该通讯录通过对学生的姓名,学号,电话,EMAIL的记录,便于信息的高效利用。
它的设计过程严格遵从软件工程的方法进行,系统具有良好的界面、必要的交互信息和较好的健壮性。
使用人员能快捷简单地进行操作。
即时准确地获得需要的查询的结果,充分降低了查找的难度和节约了时间,对人们的生活有一定的帮助。
在课程设计中,系统开发平台为Windows XP,程序设计环境采用Visual C++6.0,在程序设计中,采用了面向对象解决问题的方法。
关键词 Visual C++;通讯录;MFC;按钮控件The design of the address bookbased on the MFCfanzhong(Grade 2010 class 4in Communication College S100101025)Abstract: the aim of the design is a simple electronic address book, which is the realization of the efficient use of the information through the records of the names, the students’ numbers, telephone numbers and EMAIL of students. The procedures of its design must comply with the methods of the software engineering strictly. Its system is provided with a good interface, necessary interactive information and a better stability. The users can have operation quickly and simply on it and acquire the results of searching which is needed timely and accurately, so that the difficulties of searching, reduced and the time is saved and some help is offered for the people. In the design of the project, the development platform of system is Windows XP, the design circumstance of program is Visual C++6.0, the method adopted is the object-orientedly solving the problems.Key words: Visual C++; the address book; MFC; button control0引言本课程通过设计一个简单通讯录,来减少查询通信信息的时间,提高工作效率。
MFC《个人通讯录》课程设计报告

前言21世纪是IT普及的世界,到处都存在IT的身影,身处其中,实时通讯已是占据它不可或缺的地位。
因此,一个好的、强大的通讯录系统已成为企业、个人通讯工作的好坏不但可以直接影响到企业、个人人际关系,而且会间接的影响到企业、个人经济利益和社会地位。
随着社会的发展,科技的进步,计算机的应用在社会各领域中都得到了普及,越来越多的人都感受到利用计算机进行各类管理的科学和便捷;认识到通讯信息系统对于通讯工作的重要性。
利用计算机进行通讯管理是必然趋势,通讯录系统是各类工作中不可缺少的。
所以在这次课程设计中,我选择开发通讯录管理系统。
通讯录管理系统的功能主要有增加记录,删除记录。
这就要求它应该能够为用户提供有好美观的窗口界面、充足可靠的信息数据、简单方便的维护手段和灵活多变的查询方式以及快捷而准确的查询结果。
所以,对于通讯录管理系统的设计主要包括数据库的建立、维护以及应用程序的开发两个方面。
对于前者而言要求建立起数据一致性及完整性强、数据安全性好的数据库。
对于后者而言则要求具备应用程序功能全,易使用等,运行稳定等特点。
因此,拟选用的开发软件是Microsoft公司出品的Visual C++6.0 MFC平台进行系统的开发。
目录1 课题综述 (1)1.1通讯录管理信息系统来源 (1)1.2通讯录管理系统的意义 (1)1.3预期目标 (1)1.4面对的问题 (2)1.5需解决的关键技术等 (2)2 通讯录管理系统分析 (2)2.1涉及的基础知识 (2)2.2解决问题的基本思路 (8)2.3总体方案 (8)2.4功能模块框图 (8)3 通讯录管理系统设计 (9)3.1部署连接(图) (9)3.2算法描述 (9)3.3详细流程图 (10)4 代码编写 (11)4.1插入记录的代码 (11)4.2删除记录的代码 (11)4.3刷新记录的代码 (12)4.4修改记录的代码 (12)5 运行与测试 (12)1 课题综述通讯录管理系统是一个数据库应用系统,员工的所有信息都是保存在数据库中。
c语言课程设计通讯录

c语言课程设计通讯录好的,我可以帮助您设计一个简单的通讯录程序。
下面是一个示例代码,实现了通讯录的基本功能,包括添加联系人、显示联系人列表、查找联系人、删除联系人和修改联系人信息。
c复制代码:#include <stdio.h>#include <stdlib.h>#include <string.h>#define MAX_CONTACTS 100 // 通讯录最大容量// 定义联系人结构体typedef struct {char name[20]; // 姓名char phone[15]; // 电话号码char email[30]; // 邮箱地址} Contact;// 定义通讯录结构体typedef struct {Contact contacts[MAX_CONTACTS]; // 联系人数组int size; // 当前联系人数量} AddressBook;// 添加联系人void add_contact(AddressBook *book) {if (book->size >= MAX_CONTACTS) {printf("通讯录已满,无法添加联系人。
\n"); return;}printf("请输入联系人姓名:");scanf("%s", book->contacts[book->size].name); printf("请输入联系人电话号码:");scanf("%s", book->contacts[book->size].phone); printf("请输入联系人邮箱地址:");scanf("%s", book->contacts[book->size].email); book->size++;printf("联系人已添加。
C语言简单通讯录

C语言简单通讯录#include<stdio.h>#include<stdlib.h>#include<conio.h>#include<string.h>#include<windows.h>#define LEN sizeof(struct student)#define TITLE_T "╔═══════════════╗\n"#define NAME "║※姓名: 号码: ║\n"#define GESHI "║※%-15s %-11s ║\n"#define BOTTOM_B "╚═══════════════╝\n"#define NEIRONG stu[i].name,stu[i].numstruct student //定义通讯录结构体{char name[15]; //姓名char num[12]; //号码};struct student stu[50]; //定义结构体数组void in(); //添加联系人void show(); //显示联系人void order(); //按字符排序void del(); //删除联系人void modify(); //修改联系人void menu(); //主菜单void total(); //计算总人数void search(); //查找联系人void main() //主函数{system("title 某某某通讯录"); //设置cmd窗口标题system("mode con cols=85 lines=35");break;case 5:modify();break;case 6:total();break;default:printf("输入编码有误!正在返回...");Sleep(3000);break;}menu(); //执行完功能再次显示菜单界面scanf("%d",&n);}}void menu() //自定义函数实现菜单功能{system("cls");system("date /t");system("time /t");printf("\n\n\n\n\n");printf("\t\t╔══════════某某某通讯录══════════╗\n");printf("\t\t║※0. 退出║\n");printf("\t\t║※ 1. 添加║\n");printf("\t\t║※ 2. 查看║\n");printf("\t\t║※ 3. 查找║\n");printf("\t\t║※ 4. 删除║\n");printf("\t\t║※ 5. 修改║\n");printf("\t\t║※ 6. 联系人总数║\n");printf("\t\t╚══════════════════════════╝\n\n");printf("\t\t请选择(0-6):");}void in() //添加联系人{int i,m=0; //m是记录的条数char ch[2];FILE *fp; //定义文件指针if((fp=fopen("data","ab+"))==NULL) //打开指定文件{printf("打开文件失败!正在返回...");Sleep(3000);return;}while(!feof(fp)){if(fread(&stu[m] ,LEN,1,fp)==1)m++;//统计当前记录条数}fclose(fp);if(m==0)printf("当前无记录!\n");else{system("cls");printf(TITLE_T);printf(NAME);for(i=0;i<m;i++)printf(GESHI,NEIRONG);//将信息按指定格式输出printf(BOTTOM_B);}if((fp=fopen("data","wb"))==NULL) //以只写二进制方式打开文件{printf("打开文件失败!正在返回...");Sleep(3000);return;}for(i=0;i<m;i++)fwrite(&stu[i] ,LEN,1,fp); //如果原来有记录,就将记录写入到磁盘文件中printf("是否添加?(y/n):");scanf("%s",ch);while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) //判断是否要添加联系人{back: printf("请输入联系人姓名:");scanf("%s",&stu[m].name); //输入姓名for(i=0;i<m;i++)if(strcmp(stu[i].name,stu[m].name)==0){printf("您输入的联系人已存在!\n");goto back;}printf("请输入联系人号码:");scanf("%s",stu[m].num);if(fwrite(&stu[m],LEN,1,fp)!=1) //将新录入的信息写入指定的磁盘文件{printf("保存'%s'失败!是否继续?(y/n):",stu[m].name);scanf("%s",ch);continue;}else{printf("添加'%s'成功!\n",stu[m].name);m++;}printf("是否继续?(y/n):"); //询问是否继续scanf("%s",ch);}printf("正在返回...");fclose(fp);order();return;}void show() //显示联系人{FILE *fp;int i,m=0;if((fp=fopen("data","ab+"))==NULL) //打开指定文件{printf("打开文件失败!正在返回...");Sleep(3000);return;}while(!feof(fp)){if(fread(&stu[m] ,LEN,1,fp)==1)m++;}fclose(fp);if(m>0){printf(TITLE_T);printf(NAME);for(i=0;i<m;i++)printf(GESHI,NEIRONG);//将信息按指定格式输出printf(BOTTOM_B);}elseprintf("当前无记录!");printf("按任意键返回...");getch();}void del() //删除联系人函数{FILE *fp;int i,j,m=0;char sname[15];char ch[2];if((fp=fopen("data","ab+"))==NULL){printf("不能打开文件,正在返回...\n");return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("当前无记录!正在返回...\n");Sleep(3000);return;}printf("请输入联系人姓名:");scanf("%s",sname);for(i=0;i<m;i++)if(strcmp(sname,stu[i].name)==0) break;if(i==m){printf("找不到'%s'!正在返回...",sname);return;}printf("已找到'%s',是否删除?(y/n)",sname);scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) //判断是否要进行删除{for(j=i;j<m;j++)stu[j]=stu[j+1];//将后一个记录移到前一个记录的位置m--;//记录的总个数减1printf("删除'%s'成功!\n",sname);}if((fp=fopen("data","wb"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}for(j=0;j<m;j++)//将更改后的记录重新写入指定的磁盘文件中if(fwrite(&stu[j] ,LEN,1,fp)!=1){printf("保存失败!正在返回...\n");Sleep(3000);}fclose(fp);show();}void search() //自定义查找函数{FILE *fp;int i,m=0;char sname[15];char ch[2];if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("当前无记录!正在返回...\n");Sleep(3000);return;}back1: printf("请输入联系人姓名:");scanf("%s",&sname);for(i=0;i<m;i++)if(strcmp(sname,stu[i].name)==0) //查找输入的号码是否在记录中{printf("已找到'%s',是否显示?(y/n)",sname);scanf("%s",ch);if(strcmp(ch,"Y")==0||strcmp(ch,"y")==0){printf(TITLE_T);printf(NAME);printf(GESHI,NEIRONG); //将查找出的结果按指定格式输出printf(BOTTOM_B);}else{printf("正在返回...");Sleep(3000);return;}}if(i==m+1){printf("找不到'%s',是否继续?(y/n):",sname); //未找到要查找的信息scanf("%s",ch);while(strcmp(ch,"Y")==0||strcmp(ch,"y")==0) //判断是否要继续查找联系人goto back1;printf("正在返回...");Sleep(3000);return;}printf("按任意键返回...\n");getch();}void modify(){ FILE *fp;int i,j,m=0;char sname[15];if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;fclose(fp);if(m==0){printf("当前无记录!正在返回...\n");Sleep(3000);return;}printf("请输入联系人姓名:\n");scanf("%s",&sname);for(i=0;i<m;i++)if(strcmp(sname,stu[i].name)==0) //检索记录中是否有要修改的信息break;if(i<m){printf("已找到'%s',请修改!\n",sname);printf("请输入联系人姓名:\n");scanf("%s",stu[i].name);//输入名字printf("请输入联系人号码:\n"); //输入号码scanf("%s",stu[i].num);}else{printf("找不到'%s'!正在返回...",sname);Sleep(3000);return;}if((fp=fopen("data","wb"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}for(j=0;j<m;j++) //将新修改的信息写入指定的磁盘文件中if(fwrite(&stu[j] ,LEN,1,fp)!=1){printf("保存'%s'失败!正在返回...",sname);Sleep(3000);return;}fclose(fp);order();show();}void total() //自定义计算总人数函数{FILE *fp;int m=0;if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...\n");Sleep(3000);return;}while(!feof(fp))if(fread(&stu[m],LEN,1,fp)==1)m++;printf("此通讯录总共有%d名联系人!\n",m); //将统计的个数输出fclose(fp);printf("\n按任意键返回...\n");getch(); //输入任意键返回}void order() //自动排序函数{FILE *fp;struct student t; //用于交换信息int i=0,j=0,m=0; //i,j用于循环if((fp=fopen("data","ab+"))==NULL){printf("打开文件失败!正在返回...");Sleep(3000);return;}while(!feof(fp))if(fread(&stu[m] ,LEN,1,fp)==1)m++;for(i=0;i<m-1;i++)for(j=i+1;j<m;j++) //双重循环实现联系人比较并交换if((strcmp(stu[i].name,stu[j].name))>0){t=stu[i];stu[i]=stu[j];stu[j]=t;}if((fp=fopen("data","wb"))==NULL){printf("文件打开失败!正在返回...\n");Sleep(3000);return;}for(i=0;i<m;i++)//将重新排好序的内容重新写入指定的磁盘文件中if(fwrite(&stu[i],LEN,1,fp)!=1){printf("排序失败!正在返回...");Sleep(3000);return;}fclose(fp);}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
目录
目录 退出
三、案例设计
1.“通讯录”对话框的设计 从控件列表框中【选择】按钮控件和列 表控件置于对话框上,【修改】按钮控 件的属性,其设计结果如图所示。
第6页 共46页
目录
目录 退出
对话框的设计结果
第7页 共46页
目录
目录 退出
在“查看”菜单中选择Class
Wizard命令,在打 开的对话框中切换到Member Variable选项卡。 选中列表控件的IDC_LIST1,单击【Add Variable】按钮,添加成员变量的名称为m_list, 类型为CListCtrl,单击【OK】按钮返回,设计 结果如图所示。
第12页 共46页
目录
目录 退出
输入对话框设计结果
第13页 共46页
目录
目录 退出
在“通讯录”对话框中,双击【插入记录】按
钮,弹出对话框,如图所示,保持函数名默认 值为OnBUTTONinsert(),单击【OK】按钮进 行代码编辑。依此类推,处理其他按钮。
添加成员函数
第14页 共46页
目录
目录
目录 退出
第33页 共46页
目录
目录 退出
第34页 共46页
目录
目录 退出
第35页 共46页
目录
目录 退出
第36页 共46页
目录
目录 退出
第37页 共46页
目录
目录 退出
第38页 共46页
目录
目录 退出
第39页 共46页
目录
目录 退出
第40页 共46页
目录
目录 退出
第41页 共46页
第15页 共46页
目录
目录 退出
四、案例实现
第16页 共46页
目录
目录 退出
第17页 共46页
目录
目录 退出
第18页 共46页
目录
目录 退出
第19页 共46页
目录
目录 退出
第20页 共46页
目录
目录 退出
第21页 共46页
目录
目录 退出
第22页 共46页
目录
目录 退出
第23页 共46页
目录 退出
(1)【插入记录】按钮的成员函数为: void CExample5Dlg::OnBUTTONinsert() (2)【删除记录】按钮的成员函数为: void CExample5Dlg::OnBUTTONdelete() (3)【修改记录】按钮的成员函数为: void CExample5Dlg::OnBUTTONmodify() (4)【保存记录】按钮的成员函数为: void CExample5Dlg::OnBUTTONsave() (5)【导入】按钮的成员函数为: void CExample5Dlg::OnBUTTONload()
目录
目录 退出
第24页 共46页
目录
目录 退出
第25页 共46页
目录
目录 退出
第26页 共46页
目录
目录 退出
第27页 共46页
目录
目录 退出
第28页 共46页
目录
目录 退出
第29页 共46页
目录
目录 退出
第30页 共46页
目录
目录 退出
第31页 共46页
目录
目录 退出
第32页 共46页
第8页 共46页
目录
目录 退出
对话框类成员变量的设计结果
第9页 共46页
目录
目录 退出
在文件视图FileView中单击Source Files目录,双击 Example5Dlg.cpp选项打开该文件。在文件中找到 OnInitDialog()函数,在// TODO: Add extra initialization here的提示下,添加以下代码: m_list.ModifyStyle(0,LVS_REPORT); //修改显示风格 m_list.InsertColumn(0,"姓名 ",LVCFMT_CENTER,70,NULL); //添加“姓名”列 m_list.InsertColumn(1,"电话 ",LVCFMT_CENTER,100,NULL); //添加“电话”列 m_list.InsertColumn(2,"Email",LVCFMT_CENTER ,150,NULL); //添加“Email”列
目录
目b)“通讯录”对话框 目录 目录 退出
功能说明
插入记录:用于输入个人信息,包括姓名、电
话和E-mail。 删除记录:用于删除一条选定的记录。 修改记录:用于修改个人信息。 保存记录:用于将个人信息写入文件。 导入:用于将个人信息从文件中导入。 退出:退出应用程序。
目录 目录 退出
第10页 共46页
2.“输入信息”对话框设计
添加对话框,双击该对话框,创建一个新类,添加类名为Inputdlg, 如图所示。
创建输入对话框类1
第11页 共46页
目录
目录 退出
在“查看”菜单中选择Class
Wizard命令, 在打开的对话框中切换到Member Variable选项卡。选中列表控件的 IDC_EDIT1选项,单击【Add Variable】 按钮,添加Member variable name为 m_name,类型为CString,单击【OK】 按钮返回,依次处理IDC_EDIT2、 IDC_EDIT3,最终设计结果如图所示。
案例三十 通讯录
本案例知识要点 文件操作 对话框设计 CListCtrl的使用
第1页 共46页
目录
目录 退出
一、案例需求
案例描述
使用C++输入/输出流设计一个基于对话框的通
讯录,用于编辑和保存用户的姓名、电话和Email信息。
案例效果图
本案例的效果如图(a)和图(b)所示。
第2页 共46页
目录
目录 退出
第42页 共46页
目录
目录 退出
第43页 共46页
目录
目录 退出
第44页 共46页
目录
目录 退出
五、案例总结与提高
案例总结
本案例重点在于ListView控件的使用,如果读
者感觉有难度,那么只要理解【插入记录】按 钮和【导入】按钮函数的实现就可以了,要认 真体会本案例是如何读入和存储数据的。 本案例在输入个人信息时,在Email的EDIT控 件中检查了是否有“@”字符的存在。 通讯录是以book.txt文件保存在当前目录下的, 请读者打开观看,同时也可以直接在book.txt文 件中添加人员,并在程序中导入。
第4页 共46页
目录
目录 退出
二、案例分析
根据案例需求,需要利用MFC环境定义一个对话框类, 提供程序的初始界面,其中包括一个列表控件用于显 示通讯录的信息,同时还包括【插入记录】单击、 【删除记录】单击、【修改记录】按钮、【保存记录】 按钮、【导入数据】按钮和【退出】按钮;另外定义 了一个用于插入记录和修改记录的对话框,其中包括 用于编辑通讯录信息的文本框等控件。 案例的核心是列表控件的使用,记录的插入、删除、 修改、判断是否为空等功能都直接利用了列表控件本 身的方法。案例没有使用数据库进行系统的开发,记 录的保存是基于输入/输出流使用文件实现了信息的存 储。
第45页 共46页
目录
目录 退出
案例提高 修改【退出】按钮,使其具有检查插入内容 是否保存的功能,如果没有保存,则进行提 示。 修改【保存】和【导入】按钮,在单击时调 用系统的“保存”和“打开”对话框,可以 由用户选择保存和导入路径。
第46页 共46页
目录
目录 退出