动态通讯录:
**提供方法:
1. 添加联系人信息
2. 删除指定联系人信息
3. 查找指定联系人信息
4. 修改指定联系人信息
5. 显示所有联系人信息
6. 清空所有联系人
7. 以名字排序所有联系人**
具体实现如下:
头文件:contact.h
#ifndef __CONTACT_H__
#define __CONTACT_H__
#define BIG 100
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <Windows.h>
typedef struct Man
{
char name[20];
char sex[10];
int age;
char address[30];
char tel[20];
}Man;
typedef struct Contact
{
Man* start;
int count;
int info;
}Contact;
void menu();
void init_con(Contact* pcon);
int cmp_con(Contact* pcon,char* name);
void check_con(Contact* pcon);
void add_con(Contact* pcon);
void del_con(Contact* pcon);
void find_con(Contact* pcon);
void mod_con(Contact* pcon);
void show_con(Contact* pcon);
void empty_con(Contact* pcon);
void sort_con(Contact* pcon);
#endif //CONTACT_H__
contact.c :
#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
void menu()
{
printf("***********************************\n");
printf("**********1:添加 2:删除**********\n");
printf("**********3:查找 4:修改**********\n");
printf("**********5:显示 6:清空**********\n");
printf("**********7:排序 0:退出**********\n");
printf("***********************************\n");
}
void init_con(Contact* pcon)
{
pcon->start = (Man*)malloc(20 * sizeof(Man));
if(pcon->start == NULL)
{
printf("空间不足\n");
return;
}
pcon->count = 0;
pcon->info = BIG;
}
void check_con(Contact* pcon)
{
Contact *temp;
if(pcon->count == pcon->info)
{
temp = (Contact *)realloc(pcon->start,BIG*sizeof(Man));
if(temp == NULL)
{
printf("空间不足\n");
return;
}
else
{
pcon->start = temp;
pcon->info += BIG;
}
}
}
int cmp_con(Contact* pcon,char* name)
{
int i = 0;
for(i=0;i<pcon->count;i++)
{
if(strcmp(pcon->start[i].name,name) == 0)
{
return i;
}
}
return -1;
}
void add_con(Contact* pcon)
{
check_con(pcon);
if(pcon->count == pcon->info)
{
printf("已存满\n");
return;
}
else
{
printf("请输入姓名>");
scanf("%s",pcon->start[pcon->count].name);
printf("请输入性别>");
scanf("%s",pcon->start[pcon->count].sex);
printf("请输入年龄>");
scanf("%d",&pcon->start[pcon->count].age);
printf("请输入地址>");
scanf("%s",pcon->start[pcon->count].address);
printf("请输入电话>");
scanf("%s",pcon->start[pcon->count].tel);
}
printf("信息录入完毕\n");
pcon->count++;
}
void del_con(Contact* pcon)
{
char name[20];
int input = 0;
int ret = 0;
int i = 0;
printf("请输入要删除那个人的姓名>");
scanf("%s",name);
ret = cmp_con(pcon,name);
if(ret == -1)
{
printf("没有此人的信息\n");
return;
}
printf("****** 确定要删除? ******\n");
printf("******1:删除 2:取消******\n");
printf("请选择>");
scanf("%d",input);
if(input == 2)
{
printf("取消成功\n");
return;
}
for(i=ret;i<pcon->count-1;i++)
{
Man temp;
temp = pcon->start[i];
pcon->start[i] = pcon->start[i+1];
pcon->start[i+1] = temp;
}
printf("删除完毕\n");
}
void find_con(Contact* pcon)
{
int ret = 0;
char name[20];
printf("请输入要查找那个人的姓名>");
scanf("%s",name);
ret = cmp_con(pcon,name);
if(ret == -1)
{
printf("没有此人\n");
return;
}
printf("\n");
printf("姓名为: %s\n",pcon->start[ret].name);
printf("性别为: %s\n",pcon->start[ret].sex);
printf("年龄为: %d\n",pcon->start[ret].age);
printf("地址为: %s\n",pcon->start[ret].address);
printf("电话为: %s\n",pcon->start[ret].tel);
printf("\n");
}
void mod_con(Contact* pcon)
{
char name[20];
int ret = 0 ;
printf("请输入要修改那个人的姓名>");
scanf("%s",name);
ret = cmp_con(pcon,name);
if(ret == -1)
{
printf("没有此人\n");
return;
}
printf("请输入姓名>");
scanf("%s",pcon->start[pcon->count].name);
printf("请输入性别>");
scanf("%s",pcon->start[pcon->count].sex);
printf("请输入年龄>");
scanf("%d",&pcon->start[pcon->count].age);
printf("请输入地址>");
scanf("%s",pcon->start[pcon->count].address);
printf("请输入电话>");
scanf("%s",pcon->start[pcon->count].tel);
printf("修改完毕\n");
}
void show_con(Contact* pcon)
{
int i = 0;
for (i = 0; i <(pcon->count); i++)
{
printf("\n");
printf("姓名为:%s\n",pcon->start[i].name);
printf("性别为:%s\n",pcon->start[i].sex);
printf("年龄为:%d\n",pcon->start[i].age);
printf("地址为:%s\n",pcon->start[i].address);
printf("电话:%s\n",pcon->start[i].tel);
printf("\n");
}
printf("输出完毕\n");
}
void empty_con(Contact* pcon)
{
pcon->count = 0;
printf("清空完成\n");
}
void sort_con(Contact* pcon)
{
int i = 0;
int j = 0;
for(i=0;i<pcon->count-1;i++)
{
for(j=0;j<pcon->count-1-i;i++)
{
if(strcmp(pcon->start[j].name,pcon->start[j+1].name)>0)
{
Man temp;
temp = pcon->start[j];
pcon->start[j] = pcon->start[j+1];
pcon->start[j+1] = temp;
}
}
}
printf("排序完成\n");
}
test.c :
#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
int main()
{
Contact my_con;
int input = 0;
void (* p[8])(Contact *pcon) = {NULL,add_con,del_con,find_con,mod_con,show_con,empty_con,sort_con};
init_con(&my_con);
do
{
menu();
printf("请选择>");
scanf("%d",&input);
if((input>0)&&(input<=7))
{
p[input](&my_con);
}
else
{
printf("选择错误\n");
}
} while (input);
free(my_con.start);
return 0;
}