通讯录可以存储500个人的信息; 包括:姓名,年龄,性别,地址,电话号码。
功能包括联系人的添加,查看,删除,查找,修改,排序,清空。
//头文件contact.h
#ifndef __CONTACT_H__
#define __CONTACT_H__
#include <stdio.h>
#include <string.h>
#include <assert.h>
#define MAX 500//最多存储500个联系人
#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;//struct PeoInfo a; <=> PeoInfo a;
typedef struct Contact
{
PeoInfo data[MAX];
int sz;
}Contact, *pContact;
//函数声明
int find(pContact pcon, char *name1);//查找函数
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
#include "contact.h"
void InitContact(pContact pcon)//对1000个联系人及联系人的个数初始化
{
pcon->sz = 0;
memset(pcon->data, 0, sizeof(pcon->data));
}
void AddContact(pContact pcon)//添加
{
int ret = 1;
assert(pcon);//断言,用于检验是否为NULL,便于调试,
//若函数错误的接受了一个NULL参数,程序就会停止,并打印出提示信息;
//若表达式为真(非零),它不会打印任何东西,程序继续执行。
do
{
if (pcon->sz == MAX)
{
printf("内存已满,无法添加\n");
return;
}
printf("请输入名字:) ");
scanf("%s", pcon->data[pcon->sz].name);
printf("请输入年龄:) ");
scanf("%d", &pcon->data[pcon->sz].age);
printf("请输入性别:) ");
scanf("%s", pcon->data[pcon->sz].sex);
printf("请输入地址:) ");
scanf("%s", pcon->data[pcon->sz].addr);
printf("请输入电话:) ");
scanf("%s", pcon->data[pcon->sz].tele);
pcon->sz++;
printf("\n保存成功!\n");
printf("是否继续添加,继续选择1,结束选择0:) ");
scanf("%d", &ret);
while (ret != 0 && ret != 1)
{
printf("选择错误!请重新选择:) ");
scanf("%d", &ret);
}
} while (ret);
}
void ShowContact(const pContact pcon)//浏览所有联系人
{
int i = 0;
assert(pcon);
printf("%8s\t%8s\t%8s\t%8s\t%8s\n", "name", "age", "sex", "addr", "tele");
for (i = 0; i < pcon->sz; i++)
{
printf("%8s\t", pcon->data[i].name);
printf("%8d\t", pcon->data[i].age);
printf("%8s\t", pcon->data[i].sex);
printf("%8s\t", pcon->data[i].addr);
printf("%8s\n", pcon->data[i].tele);
}
}
int find(pContact pcon,char *name1)//查找函数,如果找到返回联系人所在的排名,否则返回-1
{
int i = 0;
assert(pcon);
assert(name1);
for (i = 0; i < pcon->sz; i++)
{
if (strcmp(pcon->data[i].name, name1) == 0)
{
return i;
}
}
return -1;
}
void DelContact(pContact pcon)//删除
{
int ret = 0;
int find_name;
int i = 0;
char name1[20];
assert(pcon);
do
{
printf("请输入姓名:) ");
scanf("%s", name1);
find_name = find(pcon, name1);
if (find_name != -1)
{
for (i = find_name; i < pcon->sz; i++)
pcon->data[i] = pcon->data[i + 1];//后一个人信息覆盖到前一个
pcon->sz--;
printf("删除成功\n");
}
if (find_name == -1)
printf("没找到要删除的人\n");
printf("是否继续删除,继续选择1,结束选择0:) ");
scanf("%d", &ret);
while (ret != 0 && ret != 1)
{
printf("选择错误!请重新选择:) ");
scanf("%d", &ret);
}
} while (ret);
}
void SearchContact(pContact pcon)//查找联系人
{
int ret = 0;
int find_name = 0;
char name1[20];
assert(pcon);
do
{
printf("请输入名字:) ");
scanf("%s", name1);
find_name = find(pcon, name1);
if (find_name != -1)
{
printf("\n");
printf("姓名:%s\n", pcon->data[find_name].name);
printf("年龄:%d\n", pcon->data[find_name].age);
printf("性别:%s\n", pcon->data[find_name].sex);
printf("地址:%s\n", pcon->data[find_name].addr);
printf("电话:%s\n", pcon->data[find_name].tele);
}
else
printf("没有找到此人\n");
printf("是否继续查找,继续选择1,结束选择0:) ");
scanf("%d", &ret);
while (ret != 0 && ret != 1)
{
printf("选择错误!请重新选择:) ");
scanf("%d", &ret);
}
} while (ret);
}
void ModifyContact(pContact pcon)//修改信息
{
int ret = 0;
int find_name = 0;
char name1[20];
assert(pcon);
do
{
printf("请输入名字:) ");
scanf("%s", name1);
find_name = find(pcon, name1);
if (find_name != -1)
{
printf("\n");
printf("请输入修改后的姓名:");
scanf("%s", pcon->data[find_name].name);
printf("请输入修改后的年龄:");
scanf("%d", &pcon->data[find_name].age);
printf("请输入修改后的性别:");
scanf("%s", pcon->data[find_name].sex);
printf("请输入修改后的地址:");
scanf("%s", pcon->data[find_name].addr);
printf("请输入修改后的电话:");
scanf("%s", pcon->data[find_name].tele);
}
else
printf("没有找到此人\n");
printf("是否继续修改,继续选择1,结束选择0:) ");
scanf("%d", &ret);
while (ret != 0 && ret != 1)
{
printf("选择错误!请重新选择:) ");
scanf("%d", &ret);
}
} while (ret);
}
void SortContach(pContact pcon)//对联系人按姓名排序
{
int i = 0;
int j = 0;
assert(pcon);
printf("姓名从A-Z的顺序为:\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)//清空联系人
{
int ret = 0;
assert(pcon);
printf("确定清空?确定选择1,取消选择0:) ");
scanf("%d", &ret);
if (ret == 1)
{
pcon->sz = 0;
memset(pcon->data, 0, sizeof(pcon->data));
printf("删除成功\n");
}
while (ret != 0 && ret != 1)
{
printf("选择错误!请重新选择:) ");
scanf("%d", &ret);
}
}
//测试test.c
#define _CRT_SECURE_NO_WARNINGS
#include "contact.h"
void menu()//菜单
{
printf("\n\n\n");
printf("******************************************\n");
printf("***********1.add 2.show ***********\n");
printf("***********3.del 4.search***********\n");
printf("***********5.modefiy 6.sort ***********\n");
printf("***********7.clear 0.exit ***********\n");
printf("******************************************\n");
}
enum//枚举
{
EXIT,//0.退出
ADD,//1.添加
SHOW,//2.浏览
DEL,//3.删除
SEARCH,//4.查找
MODIFY,//5.修改
SORT,//6.排序
CLEAR,//7.清空
};
void test()
{
int input = 0;
Contact my_con;
InitContact(&my_con);
do
{
menu();
printf("\nPlease input your choice:) ");
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;
}