VC结合Access制作通讯录程序
VC++课程设计报告--手机通讯录

Visual C++课程设计题目名称:手机通讯录班级:姓名:学号:指导教师:完成时间:2013.1.18题目描述利用Visual C++实现一个手机通讯录,能够进行简单的操作管理。
1功能分析主要功能包括:(1)分组管理能够进行组别添加、删除、修改。
(2)用户管理能够实现联系人的添加、删除、修改,联系人信息包括姓名、手机、办公室电话、电子邮箱、QQ、微博。
(3)用户查询能够通过输入姓名或手机号码进行查询。
(4)功能模拟当选中一个联系人的时候,可以通过操作进行通话和发送短信。
2软件设计2.1 软件整体结构2.1.1总体框架图1 总体框架2.1.2联系人操作用户可以通过操作修改联系人信息或与联系人进行通话或短信联系。
图2 联系人操作2.2 模块功能添加组别:可以添加新的组别删除组别:选中欲删除的组别后,会自动删除该小组以及该组包含的人员记录添加人员:可以添加联系人记录,依次输入姓名、手机、办公室电话、电子邮箱、QQ、微博删除人员:选中欲删除的联系人的名字后,会自动删除他(她)的记录内容查找信息:可以选择用姓名、手机号两种查询方式图形基类的设计2.3 程序界面设计界面环境作为人机信息交流的通道,主要是辅助用户完成工作。
为了方便用户使用,在系统实现中进行了工具栏设计、光标设计和状态栏设计。
2.4 类与函数的设计与实现2.4.1定义一个类CPeople程序中处理的学生信息是一个数据序列,即线性表结构。
class CPeople{public:CString m_strNumber;CString m_strTelephone;CString m_strEmail;CString m_strQq;CString m_strMircoblog;void SetPeople(char *strNumber,char *strTelephone,char *strEmail,char *strQq,char *strMircoblog){m_strNumber=strNumber;m_strTelephone=strTelephone;m_strEmail=strEmail;m_strQq=strQq;m_strMircoblog=strMircoblog;}};2.4.2主要函数的设计与实现(1)联系人的添加void CMy11011111220113Dlg::OnAdd(){HTREEITEM selItem = m_treePhone.GetSelectedItem();//获得树中选中节点if(selItem == NULL) //如果没有选中节点,返回return;if(selItem == m_treePhone.GetRootItem()) //如果选中了根节点,返回return;DWORD data = m_treePhone.GetItemData(selItem); //获得选中节点关联数据if(data == NULL) //如果为空,是分组节点{CAddDlg dlg;if(dlg.DoModal() == IDOK)//显示添加人员对话框,并判断是否单击确定按钮{//在选中节点下添加新节点HTREEITEM item = m_treePhone.InsertItem(dlg.m_strName,2,2,selItem);CPeople *pString;pString=new CPeople;pString->m_strNumber=dlg.m_strNumber;pString->m_strTelephone=dlg.m_strTelephone;pString->m_strEmail=dlg.m_strEmail;pString->m_strQq=dlg.m_strQq;pString->m_strMircoblog=dlg.m_strMircoblog;m_treePhone.SetItemData(item,(DWORD)pString); //设置关联数据refreshList(selItem);}}}(2)联系人的删除void CMy11011111220113Dlg::OnDelete(){HTREEITEM selItem = m_treePhone.GetSelectedItem(); //获得树中选中节点if(selItem == NULL) //如果没有选中节点,返回return;if(selItem == m_treePhone.GetRootItem()) //如果选中了根节点,返回return;DWORD m = m_treePhone.GetItemData(selItem); //获得选中节点关联数据if(m != NULL) //如果不为空,是人员节点{if(AfxMessageBox("确定要删除" + m_treePhone.GetItemText(selItem) + "?",MB_OKCANCEL) == IDOK){HTREEITEM parent = m_treePhone.GetParentItem(selItem);CString *pString = (CString*)m; //删除关联数据delete pString;m_treePhone.DeleteItem(selItem); //删除节点refreshList(parent);}}}(3)联系人的修改void CMy11011111220113Dlg::OnModify()(4)信息查询void CMy11011111220113Dlg::OnFind()(5)组别的添加void CMy11011111220113Dlg::OnAddg()(6)组别的删除void CMy11011111220113Dlg::OnDeleteg()(7)组别的修改void CMy11011111220113Dlg::OnModifyg()3运行与测试结果3.1 程序主要运行界面3.1.1编译并连接源程序,执行程序后显示的主界面3.1.2添加联系人姐姐的界面3.1.2删除联系人哥哥的界面3.1.3查找联系人妹妹的界面3.1.4修改联系人李强的界面3.1.5呼叫界面3.1.6编辑短信界面3.1.7短信发送界面3.2 系统测试3.2.1界面操作测试通过操作各个菜单项,检查各部分的功能是否与菜单提示一致。
用c语言编写一个通讯录代码详解

⽤c语⾔编写⼀个通讯录代码详解⽬录实现通讯录的思路如下:总结实现通讯录的思路如下:1.程序运⾏起来时⽤户⾸先要看到菜单栏选项并且对应菜单栏所给出的选项做出选择,这⾥我们简单设计⼀个Menu()函数可以让⽤户看见可选项⽬;2.⽤户可选的范围应该是1~7,为了避免⽤户做出超出范围的选择我们可以⽤switch语句来判断⽤户的选择若⽤户输⼊的数字⾮法还可以让⽤户继续选择,⽽继续选择这个动作需要⽤到while语句,⽤户对通讯录的不断操作也需要⽤到while语句;3.⽤户选择不同的选项,程序就要调⽤对应的函数来实现其功能并且我们对switch语句进⾏优化,如果直接对输⼊的数字进⾏判断的话我们还需要对照直接设计的菜单栏选项对捕捉到的⽤户选择做出判断需要不是参考菜单栏,为了解决这个问题,我们⽤枚举的⽅法来提⾼代码的可读性;enum menu{ADD = 1,SHOW,MODIFIES,FIND,DELETE,SORT,EXITS,};4.接下来我们对通讯录的功能⼀⼀实现,不难想到要对通讯录中的联系⼈信息进⾏操作就必须要有存放联系⼈信息的载体,⽽每个联系⼈信息则⼜包含姓名,年龄,性别,电话号码,地址这些信息,所以我们⾸先⾃定义⼀个message类型,然后创建⼀个message数组来存放联系⼈信息,数组的⼤⼩由我们⾃⾏设定最好⽤#define来设定num的⼤⼩可以做到⼀改全改。
#define num 100typedef struct s{int age;char name[10];char number[20];char sex[5];char adress[20];}message;5.添加联系⼈功能:要想添加联系⼈就得对保存所有联系⼈信息的数组进⾏操作并且还要知道把新建的联系⼈信息存⼊数组的第⼏个元素中,所以这个AddMessage函数应该接收这两个参数,考虑到要统计通讯录中联系⼈的个数并且在添加联系⼈成功后该个数应该++,所以在创建联系⼈数组的同时应该同时定义⼀个变量来告诉⼀些功能函数通讯录中联系⼈的个数并且在addMessage这个函数中还需要对这个变量的值进⾏+1操作所以我们应该向这个函数传⼊该变量的地址达到修改变量值的⽬的。
C语言实现简单通讯录功能

C语⾔实现简单通讯录功能本⽂实例为⼤家分享了C语⾔实现简单通讯录功能的具体代码,供⼤家参考,具体内容如下1.存放联系⼈信息2.信息:名字+年龄+性别+电话+住址3.增加联系⼈4.删除联系⼈5.查找联系⼈6.修改联系⼈7.排序test.c源⽂件代码如下:#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"void menu(){printf("#####################################\n");printf("##### 1. add 2. del #####\n");printf("##### 3. search 4. modify #####\n");printf("##### 5. show 6. sort #####\n");printf("##### 0. exit #####\n");printf("#####################################\n");}//创建⼀个枚举类型,分别对应菜单选项enum Option{EXIT,ADD,DEL,SEARCH,MODIFY,SHOW,SORT,};int main(){int input = 0;//创建⼀个通讯录struct Contact con;//初始化通讯录InitContact(&con);//最多可以放3个联系⼈信息//空间不够再增容do{menu();//进⼊循环,先打印菜单printf("请选择:>");scanf("%d", &input);//⽤户选择操作switch (input){case ADD:AddContact(&con);break;case DEL:DelContact(&con);break;case SEARCH:SearchContact(&con);break;case MODIFY:ModifyContact(&con);break;case SHOW:ShowContact(&con);break;case SORT:SortContact(&con);break;case EXIT:SaveContact(&con);//销毁通讯录DestroyContact(&con);printf("退出\n");break;default:printf("选择错误\n");break;}} while (input);return 0;}contact.c源⽂件代码如下:#define _CRT_SECURE_NO_WARNINGS 1#include "contact.h"//检测通讯录容量void CheckCapacity(struct Contact* pc){//断⾔assert(pc);if (pc->sz == pc->capacity)//如果有效联系⼈等于最⼤容纳量{//增加容量struct PeoInfo* ptr = realloc(pc->data, (pc->capacity + 2) * sizeof(struct PeoInfo)); if (ptr != NULL)//如果不为空,表⽰增容成功{pc->data = ptr;pc->capacity += 2;printf("增容成功\n");}else{perror("AddContact::realloc");return;}}}//加载有效联系⼈信息void LoadContact(struct Contact* pc){assert(pc);struct PeoInfo tmp = { 0 };//临时空间FILE* pfRead = fopen("contact.txt", "rb");//打开⽂件,读取数据if (NULL == pfRead){perror("open file for reading");return;}//加载数据//每次读取⼀个联系⼈信息,直到frea返回值⼩于1,表⽰读取完毕,循环结束while (fread(&tmp, sizeof(struct PeoInfo), 1, pfRead)){CheckCapacity(pc);pc->data[pc->sz] = tmp;pc->sz++;}//关闭⽂件fclose(pfRead);pfRead = NULL;//置空,防⽌变成野指针}//初始化通讯录void InitContact(struct Contact* pc){assert(pc);pc->sz = 0;pc->capacity = DEFAULT;pc->data = (struct PeoInfo*)malloc(DEFAULT * sizeof(struct PeoInfo));//动态申请空间 if (pc->data == NULL){perror("InitContact::malloc");return;}LoadContact(pc);//加载通讯录的信息}//增加联系⼈void AddContact(struct Contact* pc){assert(pc);CheckCapacity(pc);//检查容量是否为满,是则进⾏增容//输⼊增加指定联系⼈的信息printf("请输⼊名字:>");scanf("%s", pc->data[pc->sz].name);printf("请输⼊年龄:>");scanf("%d", &(pc->data[pc->sz].age));printf("请输⼊性别:>");scanf("%s", pc->data[pc->sz].sex);printf("请输⼊电话:>");scanf("%s", pc->data[pc->sz].tele);printf("请输⼊地址:>");scanf("%s", pc->data[pc->sz].addr);printf("添加成功\n");pc->sz++;//有效联系⼈加1}//销毁通讯录void DestroyContact(struct Contact* pc){assert(pc);free(pc->data);//释放申请的动态内存空间pc->data = NULL;//置为空指针pc->capacity = 0;//容量置0pc->sz = 0;//有效联系⼈置0}//显⽰通讯录信息void ShowContact(const struct Contact* pc){assert(pc);int i = 0;printf("%20s\t%5s\t%10s\t%12s\t%50s\n\n", "name", "age", "sex", "tele", "addr");for (i = 0; i < pc->sz; i++){//打印每⼀个数据printf("%20s\t%5d\t%10s\t%12s\t%50s\n",pc->data[i].name,pc->data[i].age,pc->data[i].sex,pc->data[i].tele,pc->data[i].addr);}}//查找指定联系⼈int FindContactByName(const struct Contact* pc, const char* name){assert(pc && name);int i = 0;for (i = 0; i < pc->sz; i++){if (strcmp(pc->data[i].name, name) == 0){return i;}}//找不到return -1;}//删除指定联系⼈void DelContact(struct Contact* pc){assert(pc);if (pc->sz == 0){printf("通讯录为空,⽆法删除\n");return;}char name[NAME_MAX] = { 0 };printf("请输⼊要删除联系⼈的名字:>");scanf("%s", name);//查找到删除的⼈int pos = FindContactByName(pc, name);if (pos == -1)printf("指定联系⼈不存在\n");else{//删除int i = 0;for (i = pos; i < pc->sz-1; i++){pc->data[i] = pc->data[i + 1];}pc->sz--;printf("成功删除\n");}}//查找指定联系⼈void SearchContact(const struct Contact* pc){assert(pc);char name[NAME_MAX] = { 0 };if (pc->sz == 0){printf("通讯录为空,⽆法查找\n");return;}printf("请输⼊要查找的联系⼈名字:>");scanf("%s", name);int pos = FindContactByName(pc, name);if (-1 == pos)printf("查⽆此⼈\n");else{printf("%15s\t%5s\t%8s\t%15s\t%30s\n\n", "name", "age", "sex", "tele", "addr"); printf("%15s\t%5d\t%8s\t%15s\t%30s\n",pc->data[pos].name,pc->data[pos].age,pc->data[pos].sex,pc->data[pos].tele,pc->data[pos].addr);}}//修改指定联系⼈void ModifyContact(struct Contact* pc){assert(pc);char name[NAME_MAX] = { 0 };if (pc->sz == 0){printf("通讯录为空,⽆法修改\n");return;}printf("请输⼊要修改的联系⼈名字:>");scanf("%s", name);int pos = FindContactByName(pc, name);printf("要修改的⼈不存在\n");else{printf("请输⼊新的名字:>");scanf("%s", pc->data[pos].name);printf("请输⼊新的年龄:>");scanf("%d", &(pc->data[pos].age));printf("请输⼊新的性别:>");scanf("%s", pc->data[pos].sex);printf("请输⼊新的电话:>");scanf("%s", pc->data[pos].tele);printf("请输⼊新的地址:>");scanf("%s", pc->data[pos].addr);}}//按照名字排序->升序int cmp_by_name(const void* e1, const void* e2){return strcmp((((struct PeoInfo*)e1)->name), (((struct PeoInfo*)e2)->name)); }//按照年龄排序->升序int cmp_by_age(const void* e1, const void* e2){return ((struct PeoInfo*)e1)->age - ((struct PeoInfo*)e2)->age;}//排序通讯录void SortContact(struct Contact* pc){assert(pc);int input = 0;if (pc->sz == 0){printf("通讯录为空,⽆法排序\n");return;}printf("按名字排序请输⼊1,年龄排序请输⼊2:>");scanf("%d", &input);if (1 == input){//名字排序qsort(pc->data, pc->sz, sizeof(struct PeoInfo), cmp_by_name);}else{//年龄排序qsort(pc->data, pc->sz, sizeof(struct PeoInfo), cmp_by_age);}}//保存通讯录void SaveContact(struct Contact* pc){assert(pc);int i = 0;FILE* pfWrite = fopen("contact.txt", "wb");把当前程序的有效联系⼈写⼊⽂件 if (NULL == pfWrite)//判断是否为空指针{perror("open file for writting");return;}//写数据for (i = 0; i < pc->sz; i++){fwrite(pc->data+i, sizeof(struct PeoInfo), 1, pfWrite);//进⾏写⼊}fclose(pfWrite);//关闭⽂件pfWrite = NULL;//置为空指针}contact.h头⽂件代码如下:#include <string.h>#include <stdio.h>#include <stdlib.h>#include <assert.h>#define DEFAULT 3#define NAME_MAX 20#define SEX_MAX 10#define TELE_MAX 12#define ADDR_MAX 50#define MAX 1000//描述联系⼈的信息struct PeoInfo{char name[NAME_MAX];int age;char sex[SEX_MAX];char tele[TELE_MAX];char addr[ADDR_MAX];};//通讯录-动态增长版本struct Contact{struct PeoInfo* data;int sz;//通讯录中当前有效元素个数int capacity;//通讯录的当前最⼤容量};//增容void CheckCapacity(struct Contact* pc);//初始化通讯录void InitContact(struct Contact* pc);//销毁通讯录void DestroyContact(struct Contact* pc);//增加联系⼈void AddContact(struct Contact* pc);//显⽰通讯录void ShowContact(const struct Contact* pc); //删除指定联系⼈void DelContact(struct Contact* pc);//查找指定联系⼈void SearchContact(const struct Contact* pc); //修改指定联系⼈void ModifyContact(struct Contact* pc);//排序通讯录void SortContact(struct Contact* pc);//保存通讯录到⽂件void SaveContact(struct Contact* pc);//加载通讯录void LoadContact(struct Contact* pc);程序运⾏:重新运⾏程序并显⽰之前添加的联系⼈会存放在指定⽂件中,再次运⾏程序会加载进去,增容成功是因为默认容纳的联系⼈有3位,要加载4位联系⼈,所以⾃动进⾏增容。
C语言通讯录程序设计

}
break;
}
if(mark>0)
{
printf("\t\t请输入修改联系人信息\n\n");
printf("\t\t请输入联系人姓名:");
scanf("%s",p->name);
printf("\t\t请输入联系人电话:");
scanf("%s",p->phone);
printf("\t\t请输入联系人地址:");
printf("\n*************************************************************************\n\n");
printf ("\t\t输入要修改联系人的姓名:");
gets(name);
if(p!=NULL)
{
for(i=1;i<=len;++i,p=p->pNext)
printf("请按Enter键继续");
printf ("\n*************************************************************************\n");
getchar();
return 0;
}
int len=number(pHead);
《程序设计综合实习[软]》
实 习报告
学 号
姓 名
班 级
指导教师
*******大学
2016年9月
课程设计题目:个人通讯录管理系统
课程设计vc通讯录

课程设计vc 通讯录一、课程目标知识目标:1. 让学生掌握通讯录的基本概念和功能,了解其在日常生活和工作中的应用。
2. 使学生了解并掌握VC++编程环境中创建、存储、读取和删除通讯录信息的基本方法。
3. 帮助学生理解通讯录数据的组织方式,如数组、链表等。
技能目标:1. 培养学生运用VC++编程环境进行通讯录程序设计的能力。
2. 培养学生分析问题、设计算法和编写代码解决实际问题的能力。
3. 提高学生在团队项目中沟通、协作和解决问题的能力。
情感态度价值观目标:1. 培养学生热爱编程,对计算机技术产生浓厚的兴趣。
2. 培养学生具有积极的学习态度,勇于面对困难和挑战。
3. 培养学生认识到科技对社会发展的作用,增强社会责任感和使命感。
本课程针对高年级学生,结合学科特点,注重理论与实践相结合,使学生能够在掌握基本知识的基础上,提高实际操作能力和团队协作能力。
通过本课程的学习,学生将能够独立设计并实现一个功能完善的通讯录程序,为以后的学习和工作打下坚实的基础。
同时,课程强调情感态度价值观的培养,引导学生形成正确的价值观和积极的学习态度。
二、教学内容1. 通讯录基本概念:介绍通讯录的定义、功能以及在日常生活和工作中发挥的作用。
相关教材章节:第一章第一节2. VC++编程环境:讲解VC++的安装、配置和使用方法,为学生编写通讯录程序奠定基础。
相关教材章节:第一章第二节3. 数据存储结构:介绍数组、链表等常见数据结构,分析其在通讯录中的应用。
相关教材章节:第二章4. 通讯录程序设计:讲解如何使用VC++编程环境设计通讯录程序,包括创建、存储、读取和删除等功能。
相关教材章节:第三章5. 算法设计与实现:分析通讯录程序中的查找、排序等算法,并指导学生编写相应代码。
相关教材章节:第四章6. 项目实践:组织学生分组进行项目实践,完成一个具有实际应用价值的通讯录程序。
相关教材章节:第五章7. 课堂讲解与演示:安排课时进行教学内容讲解和示范操作,帮助学生理解并掌握知识点。
C++程序设计_通讯录程序

C++程序设计_通讯录程序在当今数字化的时代,通讯录程序成为了我们日常生活和工作中不可或缺的工具。
无论是与亲朋好友保持联系,还是在工作中与同事协作沟通,一个高效、便捷的通讯录程序都能发挥重要作用。
接下来,让我们一起深入了解如何使用 C++来设计一个实用的通讯录程序。
首先,我们需要明确通讯录程序的基本功能。
它应该能够实现联系人信息的存储、查找、添加、修改和删除等操作。
为了实现这些功能,我们可以使用结构体来定义联系人的数据类型。
```c++struct Contact {std::string name;std::string phoneNumber;std::string email;};```上述代码中,我们定义了一个名为`Contact`的结构体,其中包含了联系人的姓名、电话号码和电子邮件等信息。
接下来,我们可以使用数组或者链表来存储联系人信息。
这里为了简单起见,我们先使用数组来实现。
```c++const int MAX_CONTACTS = 100; //假设最多存储 100 个联系人Contact contactsMAX_CONTACTS;int numContacts = 0; //记录当前联系人数量```有了数据存储的结构,下面我们来实现添加联系人的功能。
```c++void addContact(){if (numContacts < MAX_CONTACTS) {Contact newContact;std::cout <<"请输入联系人姓名: ";std::cin >> newContactname;std::cout <<"请输入联系人电话号码: ";std::cin >> newContactphoneNumber;std::cout <<"请输入联系人电子邮件: ";std::cin >> newContactemail;contactsnumContacts++= newContact;std::cout <<"联系人添加成功!"<< std::endl;} else {std::cout <<"通讯录已满,无法添加新联系人!"<< std::endl;}}```在添加联系人时,我们首先检查通讯录是否已满。
通讯录的制作c语言

通讯录的制作1. 介绍通讯录是一种管理联系人信息的工具,能够存储和查找联系人的姓名、电话号码、邮箱等信息。
在现代社会中,通讯录已经成为人们日常生活中必备的工具之一。
本文将介绍如何使用C语言编写一个简单的通讯录程序。
2. 功能需求通讯录程序应该具备以下功能: - 添加联系人:用户可以输入联系人的姓名、电话号码和邮箱,将其添加到通讯录中。
- 删除联系人:用户可以根据姓名或电话号码删除已存在的联系人。
- 修改联系人信息:用户可以根据姓名或电话号码修改已存在联系人的信息。
- 查找联系人:用户可以根据姓名或电话号码查找已存在的联系人,并显示其详细信息。
- 显示所有联系人:用户可以显示通讯录中所有联系人的列表。
3. 数据结构设计为了实现上述功能,我们需要设计合适的数据结构来存储联系人信息。
在C语言中,可以使用结构体来表示一个联系人。
typedef struct {char name[50];char phone[20];char email[50];} Contact;以上代码定义了一个名为Contact的结构体,包含了三个字段:姓名、电话号码和邮箱。
每个字段都使用字符数组来表示。
同时,我们需要定义一个数据结构来存储多个联系人,可以使用数组或链表。
在本文中,我们将使用数组来实现通讯录。
#define MAX_CONTACTS 100Contact contacts[MAX_CONTACTS];int numContacts = 0;以上代码定义了一个名为contacts的数组,用于存储所有联系人的信息。
numContacts变量用于记录当前通讯录中联系人的数量。
4. 功能实现4.1 添加联系人添加联系人功能允许用户输入联系人的姓名、电话号码和邮箱,并将其添加到通讯录中。
void addContact() {if (numContacts >= MAX_CONTACTS) {printf("通讯录已满,无法添加更多联系人。
用C语言实现简易通讯录

⽤C语⾔实现简易通讯录C语⾔实现⼀个通讯录,通讯录可以⽤来存储1000个⼈的信息,每个⼈的信息包括:姓名、性别、年龄、电话、住址**提供⽅法:1. 添加联系⼈信息2. 删除指定联系⼈信息3. 查找指定联系⼈信息4. 修改指定联系⼈信息5. 显⽰所有联系⼈信息6. 清空所有联系⼈7. 以名字排序所有联系⼈**思路分析:⾸先我们可以分三个模块来解决这个问题,第⼀个模块我们需要⼀个头⽂件,这个头⽂件⾥可以包含⼀些相应信息,当实现⽂件和测试⽂件包含⾃⼰定义的头⽂件时便可以获得⼀些相关的信息。
所以头⽂件⾥应该包括⼀个结构体,这个结构体⾥应包含姓名,性别,年龄,电话,住址。
同时还可以定义⼀个结构体,这个结构体⾥包含通讯录,同时通讯录⾥⼈员的计数变量,将通讯录的地址传到别的地⽅便可以实现对它遍历或者其他操作。
第⼆个模块便是我们的测试函数,测试函数便可以实现我们的菜单打印,同时由我们接收不同的值便可以实现不同的操作,就是相应的⽅法的实现,这⾥很明显可以通过⼀个switch语句来进⾏控制。
第三个模块便是我们的⽅法实现的函数,将模块2⾥定义的类型为通讯录的地址传到各个⽅法⾥,这样便可以实现对通讯录的操作。
1.linkman.h(头⽂件)#ifndef __LINKMAN_H__#define __LINKMAN_H__#include<stdio.h>#include<windows.h>#include<string.h>#pragma warning (disable:4996)typedef struct LINKMAN//建⽴结构体,存放联系⼈信息{char name[20];char sex[10];int age;int tel[12];char addr[50];}LINKMAN;typedef struct Statis //把通讯录和⼈员统计放在结构体内{LINKMAN num[1000];int count;}Statis;void inint_linkman(Statis *p);//初始化数组void Add_linkman(Statis *p);// 添加联系⼈信息void Dele_linkman(Statis *p);//删除指定联系⼈信息void Find_linkman(Statis *p);//查找指定联系⼈信息void Revise_linkman(Statis *p);//修改指定联系⼈信息void Display_linkman(Statis *p);//显⽰所有联系⼈信息void Empty_linkman(Statis *p);//清空所有联系⼈void sort_linkman(Statis *p);//以名字排序所有联系⼈#endif2.test.c(测试)#include "linkman.h"Statis sta;void menu()//菜单{printf("***********************************\n");printf("********1.添加联系⼈信息***********\n");printf("********2.删除指定联系⼈信息*******\n");printf("********3.查找指定联系⼈信息*******\n");printf("********4.修改指定联系⼈信息*******\n");printf("********5.显⽰所有联系⼈信息*******\n");printf("********6.清空所有联系⼈***********\n");printf("********7.以名字排序所有联系⼈*****\n");printf("**************按0退出程序**********\n");printf("***********************************\n");}void test(){int i = 0;do{menu();printf("请输⼊你要进⾏的选项:");scanf("%d", &i);switch (i){case 1:Add_linkman(&sta);break;case 2:Dele_linkman(&sta);break;case 3:Find_linkman(&sta);break;case 4:Revise_linkman(&sta);break;case 5:Display_linkman(&sta);break;case 6:Empty_linkman(&sta);break;case 7:sort_linkman(&sta);break;case 0:exit(1);break;default:printf("输⼊错误\n");break;}} while (i);}int main(){inint_linkman(&sta);test();system("pause");return 0;}3.game.c(实现)#include "linkman.h"void inint_linkman(Statis *p){int count = sizeof(p->num);p->count = 0;memset(p->num, 0,count);}int Find(Statis *p, char *pname)//对于⼀个联系⼈是否存在封装⼀个函数,在后⾯的修改、删除、查找可以⽤到{int i = 0;for (i = 0; i < (p->count); i++){if (strcmp(p->num[i].name, pname) == 0) return i;}return -1;}void menu1()//修改联系⼈时所⽤到的菜单{printf("*********************\n");printf("****1.姓名*2.性别****\n");printf("****3.年龄*4.电话****\n");printf("****5.地址*6.返回****\n");printf("*********************\n");}void Add_linkman(Statis *p)//添加联系⼈{printf("请输⼊你要添加的联系⼈姓名:\n"); scanf("%s", p->num[p->count].name);printf("请输⼊你要添加的联系⼈性别:\n"); scanf("%s", p->num[p->count].sex);printf("请输⼊你要添加的联系⼈年龄:\n"); scanf("%d", &(p->num[p->count].age)); printf("请输⼊你要添加的联系⼈电话:\n"); scanf("%s", p->num[p->count].tel);printf("请输⼊你要添加的联系⼈地址:\n"); scanf("%s", p->num[p->count].addr);if ((p->count) > 1000){printf("联系⼈上限\n");}else{printf("添加成功\n");p->count++;}}void Dele_linkman(Statis *p)//删除联系⼈{char name[20] = { 0 };int result = 0;int n = 0;int i = 0;printf("请输⼊要删除⼈的姓名:\n");scanf("%s", name);result = Find(p, name);if (result != -1){printf("你是否要删除该联系⼈?\n");printf("删除请按1,不删除请按0\n");scanf("%d", &n);if (n == 1){for (i = 0; i < (p->count)-1; i++){p->num[i] = p->num[i + 1];}p->count --;printf("删除成功\n");}else{printf("删除失败\n");}}else{printf("你要删除的联系⼈不存在\n");}}void Find_linkman(Statis *p)//查找联系⼈{char name[20] = { 0 };int result = 0;printf("请输⼊要查找联系⼈的姓名:\n");scanf("%s", name);result = Find(p, name);if (result != -1){printf("姓名:%s\n", p->num[result].name);printf("性别:%s\n", p->num[result].sex);printf("年龄:%d\n", p->num[result].age);printf("电话:%s\n", p->num[result].tel);printf("地址:%s\n", p->num[result].addr);}else{printf("你要查找的联系⼈不存在\n");}}void Revise_linkman(Statis *p)//修改联系⼈{char name[20] = {0};int result = 0;printf("请输⼊你要修改联系⼈的姓名:\n");scanf("%s", name);result = Find(p, name);if (result != -1){printf("姓名:%s\n", p->num[result].name);printf("性别:%s\n", p->num[result].sex);printf("年龄:%d\n", p->num[result].age);printf("电话:%s\n", p->num[result].tel);printf("地址:%s\n", p->num[result].addr);int i = 0;do{menu1();printf("输⼊你要修改的选项:\n");scanf("%d", &i);switch (i){case 1:printf("请把姓名修改成:");scanf("%s", p->num[result].name);break;case 2:printf("请把性别修改成:");scanf("%s", p->num[result].sex);break;case 3:printf("请把年龄修改成:");scanf("%d", &(p->num[result].age));break;case 4:printf("请把电话修改成:");scanf("%s", p->num[result].tel);break;case 5:printf("请把地址修改成:");scanf("%s", p->num[result].addr);break;case 0:break;default:printf("输⼊错误");break;}} while (i);}else{printf("你要修改的联系⼈不存在\n");}}void Display_linkman(Statis *p)//打印所有联系⼈信息{int i = 0;printf("输出所有⼈的信息:\n");printf("%10s%7s%6s%8s%10s\n","名字","性别","年龄","电话","住址"); for (i = 0; i <(p->count); i++){printf("%11s", p->num[i].name);printf("%5s", p->num[i].sex);printf("%5d", p->num[i].age);printf("%10s", p->num[i].tel);printf("%12s", p->num[i].addr);printf("\n");}}void Empty_linkman(Statis *p)//清空联系⼈{p->count = 0;}void sort_linkman(Statis *p)//以名字排序所有联系⼈(冒泡){int i = 0;int j = 0;for (i = 0; i < p->count - 1; i++)for (j = 0; j < p->count - 1 - i; j++){if (strcmp(p->num[j].name, p->num[j + 1].name)>0){LINKMAN tmp;tmp = p->num[j];p->num[j] = p->num[j + 1];p->num[j + 1] = tmp;}}}程序运⾏结果部分⽰范:到此为⽌,我们的简易通讯录就实现啦。
VC连接ACCESS数据库的代码

VC连接ACCESS数据库的代码2007-02-07 21:17:51#include "stdafx.h"#include <iostream.h>#import "c:\program files\common files\system\ado\msado15.dll" \no_namespace rename ("EOF", "adoEOF")int main(){//使用ADO连接数据库...//---------------------------------------------------------------------------------_ConnectionPtr m_pConnection;CoInitialize(NULL);m_pConnection.CreateInstance(__uuidof(Connection));// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,// 因为它有时会经常出现一些想不到的错误。
try{// 打开本地Access库db1.mdbm_pConnection->Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=db1.mdb","","",adMode Unknown);}catch(_com_error e){cout<<"数据库连接失败,确认数据库db1.mdb是否在当前路径下!"<<endl;return FALSE;}//-------------------------------------------------------------------------------------//建立数据集//-------------------------------------------------------------------------------------_RecordsetPtr m_pR ecordset;m_pR ecordset.CreateInstance(__uuidof(Recordset));// 在ADO操作中建议语句中要常用try...catch()来捕获错误信息,// 因为它有时会经常出现一些意想不到的错误。
通讯录的制作c语言

通讯录的制作c语言一、前言通讯录是一个常见的管理工具,它可以帮助我们更好地组织和管理联系人信息。
在日常生活中,我们经常需要制作通讯录来保存联系人信息。
本文将介绍如何使用C语言来制作一个简单的通讯录程序。
二、需求分析在开始编写程序之前,我们需要先确定程序的需求。
通讯录程序需要具备以下功能:1. 添加联系人:输入联系人信息并保存到文件中。
2. 显示所有联系人:从文件中读取所有联系人信息并显示。
3. 查找联系人:根据姓名查找并显示相应的联系人信息。
4. 修改联系人:根据姓名修改相应的联系人信息。
5. 删除联系人:根据姓名删除相应的联系人信息。
三、程序设计1. 文件结构设计为了实现通讯录数据的持久化存储,我们可以将所有联系人信息保存在一个文件中。
文件结构可以设计为以下格式:struct Contact {char name[20]; // 姓名char phone[20]; // 电话号码char email[30]; // 邮箱地址};2. 界面设计为了方便用户操作,我们可以设计一个简单的命令行界面,通过输入数字选择相应功能。
界面可以设计为以下格式:*********************** 通讯录管理系统 ** 1. 添加联系人 ** 2. 显示所有联系人 ** 3. 查找联系人 ** 4. 修改联系人 ** 5. 删除联系人 ** 0. 退出系统 ***********************请选择功能:3. 功能实现根据需求分析,我们需要实现以下功能:1. 添加联系人添加联系人需要输入姓名、电话号码和邮箱地址,并将数据保存到文件中。
可以使用以下代码实现:void addContact() {struct Contact contact;printf("请输入姓名:");scanf("%s", );printf("请输入电话号码:");scanf("%s", contact.phone);printf("请输入邮箱地址:");scanf("%s", contact.email);FILE *fp = fopen("contacts.dat", "ab");fwrite(&contact, sizeof(struct Contact), 1, fp);fclose(fp);printf("添加成功!\n");}2. 显示所有联系人显示所有联系人需要从文件中读取数据并输出到屏幕上。
VC++通讯录管理系统——课程设计报告

Vc++设计与开发题目:通讯录管理系统班级:11级计算机科学与技术1班学号:2013ZSB040105姓名:李鹏翔摘要通讯录使我们每个人必不可少的一个工具,此通讯录系统利用VC++设计完成,ACCESS数据库。
本着人性化的设计,此系统包括了联系人的学号,姓名、电话、家庭住址、E-mail、qq、和宿舍等信息,利用此系统可以对联系人进行查询、增加、修改、删除等操作,基本上可以满足我们对通讯录的所需。
对于通讯录功能的实现采用添加控件的方法,在程序设计中,采用了面向对象解决问题的方法。
程序通过调试运行,初步实现了设计目标,并且经过适当完善后,将可以应用在商业中解决实际问题。
针对以上要求,简易通讯管理系统具有以下特点:1,操作简单,所有人不需学习就可以用的系统。
2,输入简单,输入框都有相关提示,我们可以按照提示输入相关信息。
3界面显示信息完整,界面上每一个编辑框显示一条联系人信息,很清楚地显示了联系人的全部信息。
关键字:VC++,通讯录管理系统,acesss数据库.一引言计算机有着广泛的应用,通讯录是它的应用之一。
计算机本身有着许多传统系统文件无法超越的优点,比如检索迅速、查找方便、可靠性高、存储量大、保密性好、寿命长、成本低等。
利用这些优点提高通信录管理的效率,是企业的高效化、正规化正确选择与世界接轨的重要条件。
本次设计主要实现通讯录的查询、添加、修改、删除等功能,进行控件添加、编写代码的程序设计。
人际交往是非常普遍,同时也非常重要的,大量的人员交往和联系,能够达到信息的交流,共同完成合作项目,随着各种信息量的剧增,单独处理好联系通讯录有非常重要的意义,信息分类能使事务处理条理清晰,通讯录可以单独处理人力资源信息,提高管理工作效率。
通过通讯录这样的系统,可以做到信息的规范管理、科学统计和快速的查询,从而减少管理方面的工作量。
二数据库设计用Microsoft Access创建的联系人信息数据student.accdb结构如下。
C语言实现通讯录程序

C语⾔实现通讯录程序本⽂实例为⼤家分享了C语⾔实现通讯录程序的具体代码,供⼤家参考,具体内容如下设计要求:可以存放1000个⼈的信息,每个⼈的信息包括姓名、年龄、性别、电话、住址通讯录功能包括:1.增加联系⼈2.删除指定联系⼈3.查找指定联系⼈4.修改指定联系⼈5.显⽰所有联系⼈6.退出通讯录思路分析:⾸先我们需要创建3个⽂件,分别是源⽂件(test.c)、通讯录⽂件(contact.c)、通讯录头⽂件(contact.h),其中头⽂件⽤来包含头⽂件、声名信息、结构体、创建全局变量以及宏。
我们⼀步⼀步完成这个程序:1.在源程序中写⼀个菜单函数menu()以及联合体Option,当然这个时候还没有引头⽂件,不可以运⾏。
菜单函数menu()中清楚的标明每个数字对应的功能,分别是 1.增加联系⼈2.删除指定联系⼈3.查找指定联系⼈4.修改指定联系⼈5.显⽰所有联系⼈ 0.退出通讯录。
在联合体中相应的成员对应数字0~5。
void menu(){printf("\n");printf("**************************************\n");printf("****** 1. add 2. del ******\n");printf("****** 3. search 4.modify ******\n");printf("****** 5. show 0. exit ******\n");printf("**************************************\n");}enum Option{EXIT, //0ADD, //1DEL, //2SEARCH, //3MODIFY, //4SHOW //5};2.写主函数main(),定义input代表要输⼊的数,在do while循环中⾸先调⽤菜单函数menu(),然后请你输⼊⼀个数字,再⽤switch语句对应相应的功能,在之前我们说过联合体的成员就代表数字0~5,所以case ADD == case case 1,以此类推。
au3源码之ACCESS版的通讯录

#include <GUIConstants.au3>#include <GuiListView.au3>Opt('GUIResizeMode', 802)$AForm1 = GUICreate("电话号码查询_GTO250 V1.0", 264, 252, 196, 199)$Group1 = GUICtrlCreateGroup("搜索", 0, 0, 257, 153)$ser = GUICtrlCreateInput("", 16, 24, 121, 24)GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")$Button1 = GUICtrlCreateButton("搜索", 160, 24, 75, 25, 0)$Label1 = GUICtrlCreateLabel("结果反馈:", 16, 56, 140, 17)GUICtrlSetFont(-1, 10, 400, 0, "仿宋_GB2312")GUICtrlSetColor(-1, 0x0000FF)$show = GUICtrlCreateLabel("", 16, 80, 220, 50)GUICtrlCreateGroup("", -99, -99, 1, 1)$Group2 = GUICtrlCreateGroup("记录添加", 0, 160, 257, 89)$Label3 = GUICtrlCreateLabel("姓名:", 8, 184, 40, 17)$name = GUICtrlCreateInput("", 48, 176, 121, 21)$Button2 = GUICtrlCreateButton("添加", 176, 176, 75, 25, 0)$Label4 = GUICtrlCreateLabel("电话:", 8, 224, 40, 17)$tel = GUICtrlCreateInput("", 48, 216, 121, 21, BitOR($ES_AUTOHSCROLL, $ES_NOHIDESEL, $ES_NUMBER))$Button4 = GUICtrlCreateButton("-->", 176, 216, 75, 25, 0)GUICtrlCreateGroup("", -99, -99, 1, 1)$Group3 = GUICtrlCreateGroup("通讯列表", 264, 0, 345, 249)$ListView1 = GUICtrlCreateListView("姓名|电话", 272, 16, 330, 198)GUICtrlSendMsg(-1, 0x101E, 0, 100)GUICtrlSendMsg(-1, 0x101E, 1, 160)$Button3 = GUICtrlCreateButton("删除", 400, 216, 75, 25, 0)$Button5 = GUICtrlCreateButton("关于", 495, 216, 75, 25, 0)GUICtrlCreateGroup("", -99, -99, 1, 1)show()GUISetState(@SW_SHOW)While 1$nMsg = GUIGetMsg()Switch $nMsgCase $GUI_EVENT_CLOSEExitCase $Button1 ;查询$read=GUICtrlRead($ser)If StringIsDigit($read) = 1 Then_search(1)Else_search(0)EndIfCase $Button2 ;输入myadd()Case $Button3 ;删除mydel()Case $Button4 ;伸缩myext()Case $Button5 ;关于MsgBox(96,"关于","看了‘pcbar’的通讯录后。
c语言通讯录设计与实现

C 语言通讯录设计与实现本文主要介绍了如何使用 C 语言设计并实现一个通讯录程序,包括通讯录的存储、添加、查找、修改和删除等基本操作,同时考虑了数据的持久化存储问题。
下面是本店铺为大家精心编写的4篇《C 语言通讯录设计与实现》,供大家借鉴与参考,希望对大家有所帮助。
《C 语言通讯录设计与实现》篇1引言通讯录是一个常见的应用程序,用于存储和管理联系人的信息,包括姓名、电话号码、电子邮件地址等。
在现代智能手机中,通讯录已经成为了一个不可或缺的应用程序。
在本文中,我们将使用 C 语言来设计和实现一个简单的通讯录程序。
通讯录的设计通讯录程序需要存储联系人的信息,包括姓名和电话号码等。
我们可以使用结构体来存储联系人的信息,如下所示:```struct contact {char name[20];char phone[20];};```通讯录程序需要具有添加、查找、修改和删除联系人信息的功能。
我们可以使用数组来存储联系人的信息,并使用索引来标识每个联系人。
以下是通讯录程序的基本设计:```#define MAX_CONTACTS 100 // 通讯录最大容量struct contact contacts[MAX_CONTACTS]; // 通讯录数组int num_contacts; // 当前通讯录中的联系人数量// 添加联系人信息void add_contact(char *name, char *phone) {if (num_contacts == MAX_CONTACTS) {printf("通讯录已满,无法添加联系人");return;}contacts[num_contacts].name = name;strcpy(contacts[num_contacts].phone, phone);num_contacts++;}// 查找联系人信息void find_contact(char *name) {int i;for (i = 0; i < num_contacts; i++) {if (strcmp(contacts[i].name, name) == 0) {printf("找到联系人 %s,电话号码为 %s", name, contacts[i].phone);return;}}printf("未找到联系人 %s", name);}// 修改联系人信息void modify_contact(char *name, char *phone) { int i;for (i = 0; i < num_contacts; i++) {if (strcmp(contacts[i].name, name) == 0) {contacts[i].phone = phone;printf("修改联系人 %s的电话号码为 %s", name, phone);return;}}printf("未找到联系人 %s", name);}// 删除联系人信息void delete_contact(char *name) {int i, j;for (i = 0; i < num_contacts; i++) {if (strcmp(contacts[i].name, name) == 0) { for (j = i; j < num_contacts - 1; j++) { contacts[j] = contacts[j + 1];}num_contacts--;printf("删除联系人 %s成功", name);return;}}printf("未找到联系人 %s", name);}```通讯录的实现为了实现通讯录程序,我们需要将设计转化为代码。
c++通讯录程序设计

C++程序设计课程设计报告——通讯录管理系统班级:1120551学号:03姓名:一课程设计题目与要求1.1题目通讯录管理系统1.2系统功能要求:(1)录入通讯录(2)修改通讯录(3)查询通讯录(可按姓名、电话、联系人类别查询)(4)删除通讯录(5)按姓名对通讯录进行排序一课程设计题目与要求1.1题目通讯录管理系统1.2系统功能要求:(1)录入通讯录(2)修改通讯录(3)查询通讯录(可按姓名、电话、联系人类别查询)(4)删除通讯录(5)按姓名对通讯录进行排序二需求分析2.1问题描述根据需求,该系统所应包含的信息有以下一些:通讯录的基本信息:姓名、地址、电话根据需求,该系统所应实现的功能有以下一些:各种基本数据的录入。
如:通讯录基本信息录入。
各种基本数据的修改。
即:允许对已经录入的数据重新进行编辑、修改。
例如修改通讯录中张三的电话信息各种基本数据的删除。
例如将张三的信息从通讯录中删除基于各种数据的查询。
例如输入张三姓名,查询张三的电话和地址。
数据导出:将通讯录中信息导出到指定文件。
数据导入:从指定文件导入通讯录信息到。
2.2系统环境采用C++语言实现,开发环境为VC++6.0,可以运行在操作系统windows98及以上皆可。
2.3运行要求能不受限制的录入通讯录信息界面友好,操作方便,例如删除前需要提示用户是否删除三概要设计3.1系统流程设计根据系统要求,设计如下的系统流程。
3.2系统模块设计根据系统的功能设计,如下模块1.主界面模块:完成系统菜单的显示2.功能选择模块:根据用户的选择,完成其相应的功能(1)通讯录信息录入:完成用户从界面输入通讯录,保存入系统的功能(2)通讯录信息修改:完成用户从界面输入通讯录,在系统中查询定位,并将录入的数据保存入系统的功能(3)通讯录信息查询:完成用户从界面输入查询条件,在系统查询符合条件的通讯录信息,并在界面上显示的功能。
(4)通讯录信息导入:完成用户从界面输入需要导入的文件路径名称,读取该文件的内容,保存入系统,并在界面上显示导入内容的功能。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
VC结合Access制作通讯录程序
设计思路:
分层:界面层,数据访问层,数据库;数据访问层的作用是为界面层提供一个数据访问接口,隔离界面层和数据库;界面层不需要知道采用的哪种数据库,只需要调用数据访问层提供的接口来完成各种操作;
1.新建一个基于对话框的MFC程序,命名CallList
2.设计程序界面如下图:
图片看不清楚?请点击这里查看原图(大图)。
3.数据访问层的实现:
在StdAfx.h中添加#import "c:\Program Files\Common
Files\System\ADO\msado15.dll"no_namespace rename("EOF", "EndOfFile")
新建一个类CDataSource,作用是封装数据层,定义如下
该类对外提供的方法是一些基本数据库操作,用户可根据需要进行添加。
4.对各种方法的实现,本例中采用的是ADO访问,所以定义了m_pConn和m_pRecordset 两个对象。
实现InitData,作用是初始化数据库访问模块,包括数据库连接的初始化、记录集的初始化和当前数据库中最大ID的初始化,实现代码为:
和InitData方法对应的是FreeData方法,作用是关闭打开的记录集和数据库并释放到记录集和数据库指针,注意该函数在CDataSource的析构函数中调用,实现代码为:
接来下实现数据指针移动函数,这些函数是对ADO数据指针移动操作的封装:
下面实现的是当前记录指针位置的函数:
其中IsBOF和IsEOF函数是对ADO的直接封装,很容易理解,接来下实现设置和返回记录值的函数
最后要实现的是记录集的新建、更新和删除函数,代码如下:
至此,数据访问层类CDataSource已经实现了。
整体上看,是对ADO操作的封装,更改数据库时,只需重写InitData函数即可。
5.界面层的实现
界面层是对界面显示控制的封装,本例模块比较简单,可将代码直接写入CCallList 类中,在CCallList类中定义一个CDataSource类对象: CDataSource m_ds;在对话框初始化函数OnIninDialog中初始化m_ds的数据,添加:m_ds.InitData();
为每个编辑框定义一个CEdit类型的对象,如图
图片看不清楚?请点击这里查看原图(大图)。
为CCaiiListDlg类添加函数void LoadData,作用是将当前记录的内容装载到界面中
为CCaiiListDlg类添加函数BOOL IsNeedUpdate(),作用是判断用户对界面上的数据是否进行了修改,判断的方法是使用记录中的字段和当前界面中数据比较,如有不同,说明用户修改了具体代码为:
为每个按钮定义一个CButton类型的对象,如上图2中为CCallListDlg类添加函数void RefreshUpdateBtn(),作用是刷新“更新”按钮的可用与否;添加void RefreshView(),作用是刷新界面各控件的可用性,两个函数的代码如下:
为每一个按钮定义一个 BN_CLICKED 事件,编辑代码如下:
为每个编辑框定义一个EN_CHARGE事件,编辑代码为:
至此基本信息和按钮部分已经设定完毕,对数据库的表格显示部分操作为:
在对话框编辑窗口右键单击,选择 Insert ActiveX Control ,插入 Microsoft ADO Data Control 6.0 (SP6) 控件,设置其属性选中Control页签——Use Connection String ,按Build按钮,本例中选择 Microsoft Jet 4.0 OLE DB Provider,点击下一步,写入
C:\\Demo.mdb ; 选中RecordSource页签,在Command Type中选择 2-adCmdTable ,在下面的表中选择储存通讯录的表名;
插入Microsoft Hierarchical FlexGrid Control控件
在其属性的ALL标签页中将DataSourcr属性设置为 IDC_ADODC1
编译运行该程序吧!。