每个人的信息包括:
姓名、性别、年龄、电话、住址
- 添加联系人信息
- 删除指定联系人信息
- 查找指定联系人信息
- 修改指定联系人信息
- 显示所有联系人信息
- 清空所有联系人
- 以名字排序所有联系人
#ifndef _CONTACT_H_
#define _CONTACT_H_
#include<assert.h>
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
enum Option
{
EXIT,
ADD,
SEARCH,
DEL,
SHOW,
CLEAR,
SORT,
DESTORY
};
#define MAX_NAME 20
#define MAX_TELE 11
#define MAX_ADDR 15
#define MAX_SEX 3
#define DEFAULT_SIZE 2//默认容量为2
//个人信息
typedef struct PersonInfo
{
char name[MAX_NAME];
short age;
char tele[MAX_TELE];
char addr[MAX_ADDR];
char sex[MAX_SEX];
}PersonInfo;
//通讯录
typedef struct Contact
{
PersonInfo *per;
int usedSize;//被使用的个数
int capticty;//存储容量
}Contact;
void InitContact(Contact *pCon);//初始化通讯录
void ADDContact(Contact *pCon);//添加联系人
int SearchContact(Contact *pCon);//查找联系人
void DelContact(Contact *pCon);//删除联系人
void ShowContact(Contact *pCon);//显示所有联系人
void ClearContact(Contact *pCon);//清空通讯录
void SqrtContact(Contact *pCon);//按名字对通讯录进行排序
void DestoryContact(Contact *pCon);//释放空间
#endif
初始化通讯录
#define _CRT_SECURE_NO_WARNINGS
#include"contact.h"
void InitContact(Contact *pCon)
{
assert(pCon != NULL);
pCon->capticty = DEFAULT_SIZE;
pCon->usedSize = 0;
pCon->per = (PersonInfo *)malloc(sizeof(PersonInfo)*pCon->capticty);
assert(pCon->per != NULL);
memset(pCon->per, 0, sizeof(PersonInfo)*pCon->capticty);
}
添加联系人
static int CheckFull(Contact *pCon)//检查通讯录是否满了,然后扩容
{
if (pCon->usedSize == pCon->capticty)
{
PersonInfo *ptr = (PersonInfo *)realloc(pCon->per, pCon->capticty*sizeof(PersonInfo)* 2);
if (ptr != NULL)
{
pCon->per = ptr;
pCon->capticty *= 2;
printf("增容成功!\n");
return 1;
}
else
{
return 0;
}
}
return 1;
}
void ADDContact(Contact *pCon)
{
int ret = CheckFull(pCon);
if (0 == ret)
{
printf("扩容失败\n");
return;
}
printf("请输入姓名>>\n");
scanf("%s", pCon->per[pCon->usedSize].name);
printf("请输入性别>>\n");
scanf("%s", pCon->per[pCon->usedSize].sex);
printf("请输入年龄>>\n");
scanf("%d", &(pCon->per[pCon->usedSize].age));
printf("请输入电话>>\n");
scanf("%s", pCon->per[pCon->usedSize].tele);
printf("请输入地址>>\n");
scanf("%s", pCon->per[pCon->usedSize].addr);
pCon->usedSize++;
printf("添加成功!\n");
}
查找联系人
int SearchContact(Contact *pCon)
{
assert(pCon != NULL);
int i = 0;
char name[MAX_NAME];
if (pCon->usedSize == 0)
{
printf("通讯录为空\n");
return -1;
}
printf("请输入姓名>>\n");
scanf("%s", name);
for (int i = 0; i < pCon->usedSize; i++)
{
if (strcmp(name, pCon->per[i].name) == 0)
{
printf("%s ", pCon->per[i].name);
printf("%s ", pCon->per[i].sex);
printf("%d ", pCon->per[i].age);
printf("%s ", pCon->per[i].tele);
printf("%s\n", pCon->per[i].addr);
return i;
}
}
return -1;
}
删除联系人
void DelContact(Contact *pCon)
{
int i = 0;
assert(pCon != NULL);
int index = SearchContact(pCon);
if (-1 == index)
{
printf("查无此人!\n");
return;
}
for (i = index; i < pCon->usedSize - 1; i++)
{
pCon->per[i] = pCon->per[i + 1];
}
pCon->usedSize--;
printf("删除成功!\n");
}
显示所有联系人
void ShowContact(Contact *pCon)
{
assert(pCon != NULL);
int i;
printf("%-20s %-3s %-3s %-11s %-15s\n", "姓名", "年龄", "性别", " 电话", "地址");
for (i = 0; i < pCon->usedSize; i++)
{
printf("%-20s %-3s %-3d %-11s %-15s\n", pCon->per[i].name, pCon->per[i].sex, pCon->per[i].age,
pCon->per[i].tele, pCon->per[i].addr);
}
}
清空联系人
void ClearContact(Contact *pCon)
{
assert(pCon != NULL);
pCon->usedSize = 0;
}
按照联系人姓名对联系人进行排序
void SqrtContact(Contact *pCon)
{
int i = 0;
int j = 0;
for (i = 0; i < pCon->usedSize - 1; i++)
{
for (j = 0; j < pCon->usedSize - 1 - i; j++)
{
if ((strcmp(pCon->per[j].name, pCon->per[j + 1].name))>0)
{
PersonInfo tmp;
tmp = pCon->per[j];
pCon->per[j] = pCon->per[j + 1];
pCon->per[j + 1] = tmp;
}
}
}
printf("排序成功\n");
}
释放分配空间
void DestoryContact(Contact *pCon)
{
assert(pCon != NULL);
free(pCon->per);
pCon->per = NULL;
pCon->capticty = 0;
pCon->usedSize = 0;
}
测试
#define _CRT_SECURE_NO_WARNINGS
#include"contact.h"
void menu()
{
printf("********** 1. add ***********\n");
printf("********** 2. search ***********\n");
printf("********** 3. del ***********\n");
printf("********** 4. show ***********\n");
printf("********** 5. clear ***********\n");
printf("********** 6. sort ***********\n");
printf("********** 7. destory ***********\n");
printf("********** 0. exit ***********\n");
}
void start()
{
int input;
Contact con;
InitContact(&con);//初始化通讯录 数组 usedSize
do
{
menu();
printf("请输入你的操作> >\n");
scanf("%d", &input);
switch (input)
{
case ADD:
ADDContact(&con);
break;
case SEARCH:
SearchContact(&con);
break;
case DEL:
DelContact(&con);
break;
case SHOW:
ShowContact(&con);
break;
case CLEAR:
ClearContact(&con);
break;
case SORT:
SqrtContact(&con);
break;
case EXIT:
printf("退出系统\n");
break;
case DESTORY:
DestoryContact(&con);
break;
}
} while (input);
}
int main()
{
start();
system("pause");
return 0;
}