利用c语言结构体、指针、函数等知识实现一个通讯录,具有基本增删改插等功能:
1.头文件部分:Contact.h
#ifndef __CONTACT_H__
#define __CONTACT_H__
#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define NAME_MAX 20
#define SEX_MAX 5
#define TELE_MAX 20
#define ADD_MAX 50
#define MAX_SIZE 1000
typedef struct peo
{
char name[NAME_MAX];
char sex[SEX_MAX];
int age;
char tele[TELE_MAX];
char address[ADD_MAX];
}peo;
typedef struct contact
{
peo arr[MAX_SIZE];
int count;
}contact;
void Add(contact *pcon); //添加
void print_contact(contact *pcon);//打印
int find_position(contact *pcon);//查找指定联系人所在位置
int delete_contact(contact *pcon);//删除联系人信息
int find_contacts(contact *pcon);//查找并且输出这个找到的信息。
int revise_contact(contact *pcon);//修改指定联系人的信息
void put_empty(contact *pcon);//清空所有联系人
void sort_name(contact *pcon);//以名字排序所有联系人
void init_contact(contact *pcon);//初始化通讯录
void print_menu();//打印菜单
#endif //_CONTACT_H__
2.函数实现部分:
Contact.c
#include "Contact.h"
void print_menu()//打印菜单
{
printf("*******************************************\n");
printf("***** 1.add 2.del 3.clear *****\n");
printf("***** 4.modify 5.show 6.search *****\n");
printf("***** 7.sort 0.exit *****\n");
printf("*******************************************\n");
}
void init_contact(contact *pcon)//初始化
{
pcon->count = 0;
memset(pcon->arr, 0, MAX_SIZE*sizeof(peo));
}
void Add(contact *pcon) //添加
{
printf("请输入名字>");
scanf("%s",pcon->arr[pcon->count].name);
printf("请输入性别>");
scanf("%s",pcon->arr[pcon->count].sex);
printf("请输入年龄>");
scanf("%d",&(pcon->arr[pcon->count].age));
printf("请输入电话>");
scanf("%s",pcon->arr[pcon->count].tele);
printf("请输入住址>");
scanf("%s",pcon->arr[pcon->count].address);
pcon->count++;
}
void print_contact(contact *pcon)
{
int i = 0;
for (i=0; i<pcon->count; i++)
{
printf("姓名:%s性别:%s年龄:%d电话:%s地址:%s\n",
pcon->arr[i].name,
pcon->arr[i].sex,
pcon->arr[i].age,
pcon->arr[i].tele,
pcon->arr[i].address);
}
}
int find_position(contact *pcon)//查找指定联系人所在位置
{
int i = 0;
char name[NAME_MAX];
int ret = 0;
printf("请输入名字:");
scanf("%s",name);
for (i=0; i<pcon->count; i++)
{
ret = strcmp(name,pcon->arr[i].name);
if (ret == 0)
{
return i;
}
}
return -1;
}
int delete_contact(contact *pcon)//删除指定联系人信息
{
int i = 0;
int ret = 0;
printf("删除联系人\n");
ret = find_position(pcon);
if (ret == -1)
{
printf("你要删除的姓名不存在!!!\n");
return -1;
}
else
{
for(i=ret; i<pcon->count-1; i++)
{
pcon->arr[i] = pcon->arr[i+1];
}
pcon->count--;
return 0;
}
}
int revise_contact(contact *pcon)//修改指定联系人的信息
{
int ret = 0;
printf("修改联系人信息>");
ret = find_position(pcon);
if (ret == -1)
{
printf("你要修改的联系人不存在!!!\n");
return -1;
}
else
{
printf("请输入要修改的数据:\n");
printf("请输入名字>");
scanf("%s",pcon->arr[ret].name);
printf("请输入性别>");
scanf("%s",pcon->arr[ret].sex);
printf("请输入年龄>");
scanf("%d",&(pcon->arr[ret].age));
printf("请输入电话>");
scanf("%s",pcon->arr[ret].tele);
printf("请输入住址>");
scanf("%s",pcon->arr[ret].address);
return 0;
}
}
void put_empty(contact *pcon)//清空所有联系人(还原成初始化状态)
{
memset(pcon->arr, 0, MAX_SIZE*sizeof(peo));
pcon->count = 0;
}
int find_contacts(contact *pcon)//查找并且输出这个找到的信息。
{
int ret = 0;
ret = find_position(pcon);
if (ret == -1)
{
printf("你要查找的名字不存在!!!\n");
return -1;
}
else
{
printf("姓名:%s性别:%s年龄:%d电话:%s地址:%s\n",
pcon->arr[ret].name,
pcon->arr[ret].sex,
pcon->arr[ret].age,
pcon->arr[ret].tele,
pcon->arr[ret].address);
return 0;
}
}
void sort_name(contact *pcon)//以名字排序所有联系人
{
int i = 0;
int j = 0;
int flag = 0;
printf("以名字进行排序(a-->z)\n");
while(1)
{
flag = 0;
for (j = 0; j < pcon->count - 1; j++)
{
if (strcmp(pcon->arr[j].name, pcon->arr[j + 1].name)>0)
{
peo tmp = pcon->arr[j];
pcon->arr[j] = pcon->arr[j + 1];
pcon->arr[j + 1] = tmp;
flag = 1;
}
}
if (flag == 0)
break;
}
}
3.测试部分:test.c
#include "Contact.h"
int main()
{
contact con;
int input = 1;
init_contact(&con);
do
{
print_menu();
printf("请选择>");
scanf("%d",&input);
switch(input)
{
case 1:
Add(&con);
break;
case 2:
delete_contact(&con);
break;
case 3:
put_empty(&con);
break;
case 4:
revise_contact(&con);
break;
case 5:
print_contact(&con);
break;
case 6:
find_contacts(&con);
break;
case 7:
sort_name(&con);
break;
default:
break;
}
} while (input);
return 0;
}
程序结果: