contact.h
#ifndef __CONTACT_H__
#define __CONTACT_H__
#include<stdio.h>
#include<string.h>
#include<assert.h>
#define MAX 1000
#define NAME_MAX 20
#define SEX_MAX 5
#define ADDR_MAX 30
#define TELE_MAX 12
typedef struct PeoInfo
{
char name[NAME_MAX];
int age;
char sex[SEX_MAX];
char addr[ADDR_MAX];
char tele[TELE_MAX];
}PeoInfo;
typedef struct Contact
{
PeoInfo data[MAX];
int sz;
}Contact, *pContact;
void InitContact(pContact pcon);
void AddContact(pContact pcon);
void ShowContact(const pContact pcon);
void DelContact(pContact pcon);
void SearchContact(pContact pcon);
void ModifyContact(pContact pcon);
void SortContach(pContact pcon);
void ClearContact(pContact pcon);
#endif
contact.c
#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
void InitContact(pContact pcon)
{
pcon->sz = 0;
memset(pcon->data, 0, sizeof(pcon->data));
}
void AddContact(pContact pcon)//添加联系人
{
assert(pcon);
if (pcon->sz == MAX)
{
printf("通讯录已满,请删除一些联系人后再添加");
return;
}
printf("请输入要添加联系人的名字;");
scanf("%s", pcon->data[pcon->sz].name);
printf("请输入要添加联系人的性别;");
scanf("%s", pcon->data[pcon->sz].sex);
printf("请输入要添加联系人的年龄;");
scanf("%d", &(pcon->data[pcon->sz].age));
printf("请输入要添加联系人的地址;");
scanf("%s", pcon->data[pcon->sz].addr);
printf("请输入要添加联系人的电话;");
scanf("%s", pcon->data[pcon->sz].tele);
pcon->sz++;
printf("添加成功\n");
}
void ShowContact(const pContact pcon)//浏览联系人
{
assert(pcon);
int i = 0;
printf("%8s\t%8s\t%8s\t%8s\t%8s\n", "name", "sex", "age", "addr", "tele");
for (i = 0; i < pcon->sz; i++)
{
printf("%8s\t", pcon->data[i].name);
printf("%8s\t", pcon->data[i].sex);
printf("%8d\t", pcon->data[i].age);
printf("%8s\t", pcon->data[i].addr);
printf("%8s\n", pcon->data[i].tele);
}
}
static int find(pContact pcon,char *name1)//查找函数,找不到返回-1
{
assert(pcon);
assert(name1);
int i = 0;
for (i = 0; i < pcon->sz; i++)
{
if (strcmp(pcon->data[i].name, name1) == 0)
{
return i;
}
}
return -1;
}
void DelContact(pContact pcon)//删除联系人
{
assert(pcon);
int ret = 0;
int j = 0;
int n = 0;
char name1[20] = { 0 };
do
{
printf("请输入您要删除人的姓名:\n");
scanf("%s", name1);
ret = find(pcon, name1);
if (ret == -1)
{
printf("没找到您要删除的联系人,请重新输入:\n");
scanf("%s", name1);
}
else
{
for (j = ret; j < pcon->sz; j++)
{
pcon->data[j] = pcon->data[j + 1];
}
ret = find(pcon, name1);
if (ret == -1)
{
printf("删除联系人成功,继续删除请选择1,结束选择请输入0:\n");
scanf("%d", &n);
if (n == -1)
{
printf("选择错误,请重新选择:\n");
scanf("%d", &n);
}
}
}
} while (n);
}
void SearchContact(pContact pcon)//查找联系人
{
int ret = 0;
int n = 0;
char name1[20] = {0};
assert(pcon);
do
{
printf("请输入您要查找的联系人姓名:\n");
scanf("%s", name1);
ret = find(pcon, name1);
if (ret != -1)
{
printf("%8s\t%8s\t%8s\t%8s\t%8s\n", "name", "sex", "age", "addr", "tele");
printf("%8s\t", pcon->data[ret].name);
printf("%8s\t", pcon->data[ret].sex);
printf("%8d\t", pcon->data[ret].age);
printf("%8s\t", pcon->data[ret].addr);
printf("%8s\n", pcon->data[ret].tele);
}
else
{
printf("没找到您要查找的联系人,请重新输入:\n");
scanf("%s", name1);
}
printf("继续查找请输入1,结束查找请输入0:\n");
scanf("%d", &n);
if (n != 1 && n != 0)
{
printf("选择错误,请重新选择:\n");
scanf("%d", &n);
}
} while (n);
}
void ModifyContact(pContact pcon)//修改联系人
{
int n = 0;
int ret = 0;
char name1[20] = {0};
assert(pcon);
do
{
printf("请输入您要修改的联系人姓名:\n");
scanf("%s", name1);
ret = find(pcon, name1);
if (ret == -1)
{
printf("没找到您要修改的联系人,请重新输入:\n");
scanf("%s", name1);
}
else
{
printf("请输入修改后联系人的名字;");
scanf("%s", pcon->data[ret].name);
printf("请输入修改后联系人的性别;");
scanf("%s", pcon->data[ret].sex);
printf("请输入修改后联系人的年龄;");
scanf("%d", &(pcon->data[ret].age));
printf("请输入修改后联系人的地址;");
scanf("%s", pcon->data[ret].addr);
printf("请输入修改后联系人的电话;");
scanf("%s", pcon->data[ret].tele);
printf("%8s\t%8s\t%8s\t%8s\t%8s\n", "name", "sex", "age", "addr", "tele");
printf("%8s\t", pcon->data[ret].name);
printf("%8s\t", pcon->data[ret].sex);
printf("%8d\t", pcon->data[ret].age);
printf("%8s\t", pcon->data[ret].addr);
printf("%8s\n", pcon->data[ret].tele);
printf("修改成功,继续修改请输入1,结束修改请输入0:\n");
scanf("%d", &n);
if (n != 1 && n != 0)
{
printf("选择错误,请重新选择:\n");
scanf("%d", &n);
}
}
} while (n);
}
void SortContach(pContact pcon)//按姓名排序
{
int i = 0;
int j = 0;
assert(pcon);
printf(" 将联系人按姓名排序为:\n");
for (i = 0; i < pcon->sz; i++)
{
for (j = 0; j < pcon->sz - i - 1; j++)
{
if (strcmp(pcon->data[j].name, pcon->data[j + 1].name)>0)
{
PeoInfo tmp;
tmp = pcon->data[j];
pcon->data[j] = pcon->data[j + 1];
pcon->data[j + 1] = tmp;
}
}
}
ShowContact(pcon);
}
void ClearContact(pContact pcon)
{
pcon->sz = 0;
printf("已清空通讯录联系人");
}
test.c#define _CRT_SECURE_NO_WARNINGS 1
#include"contact.h"
void menu()
{
printf("\n\n\n\n");
printf("**************************************\n");
printf("****** 1 add 2 show ******\n");
printf("****** 3 search 4 modify ******\n");
printf("****** 5 del 6 sort ******\n");
printf("****** 7 clear 0 exit ******\n");
printf("**************************************\n");
}
enum
{
EXIT,
ADD,
SHOW,
DEL,
SEARCH,
MODIFY,
SORT,
CLEAR,
};
void test()
{
int input = 0;
Contact my_con;
InitContact(&my_con);
do
{
menu();
printf("请输入你要操作的选择:>");
scanf("%d", &input);
switch (input)
{
case ADD://添加联系人
AddContact(&my_con);
break;
case SHOW://浏览联系人
ShowContact(&my_con);
break;
case DEL://删除联系人
DelContact(&my_con);
break;
case SEARCH://查找联系人
SearchContact(&my_con);
break;
case MODIFY://修改联系人
ModifyContact(&my_con);
break;
case SORT://按姓名排序联系人
SortContach(&my_con);
break;
case CLEAR://清空联系人
ClearContact(&my_con);
break;
default:
break;
}
}
while (input);
}
int main()
{
test();
return 0;
}
下面是运行结果:以上为通讯录的所有内容,如发现有错误请私信我,大家一起学习进步