test.c
#define _CRT_SECURE_NO_WARNINGS 1
#include "contact.h"
enum Op
{
EXIT,
ADD,
DEL,
SEARCH,
MODIFY,
SHOW,
EMPTY,
SORT,
};
void meau()
{
printf("************************************\n");
printf("****** 1.ADD 2.DEL *****\n");
printf("****** 3.SEARCH 4.MODIFY *****\n");
printf("****** 5.SHOW 6.EMPTY *****\n");
printf("****** 7.SORT 8.EXIT *****\n");
printf("************************************\n");
}
test()
{
int input = 0;
Contact my_con;
InitContact(&my_con);
do
{
meau();
printf("请选择:>");
scanf("%d", &input);
switch (input)
{
case ADD:
AddContact(&my_con);
break;
case DEL:
DelContact(&my_con);
break;
case SEARCH:
break;
case MODIFY:
break;
case SHOW:
ShowContact(&my_con);
break;
case EMPTY:
break;
case SORT:
break;
case EXIT:
DestroyContact(&my_con);
break;
printf("输入错误,请重新输入");
break;
}
} while(input);
}
int main()
{
test();
system("pause");
return 0;
}
contact.h
#ifndef _CONTACT_H__
#define _CONTACT_H__
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#define DEFAULT_INC 2
#define DEFAULT_SZ 3
#define MAX 1000
#define MAX_NAME 10
#define MAX_SEX 5
#define MAX_TELE 20
#define MAX_ADD 30
typedef struct PeoInfo //通讯录信息结构体
{
char name[MAX_NAME];
int age;
char sex[MAX_SEX];
char tele[MAX_TELE];
char add[MAX_ADD];
}PeoInfo;
typedef struct Contact //个人信息结构体
{
//PeoInfo contact[MAX]; //MAX为最多可添加的信息量,每条信息为PeoInfo
PeoInfo *contact;
int sz;
int capacity;
}Contact,*pContact;
void InitContact(pContact pcon);
void AddContact(pContact pcon);
void ShowContact(const pContact pcon);
void DelContact(pContact pcon);
int CheckCapacity(pContact pcon);
#endif
contact.c
#include "contact.h"
void InitContact(pContact pcon)
{
pcon->sz = 0;
pcon->contact = (PeoInfo *)malloc(DEFAULT_SZ*sizeof(PeoInfo));
if (pcon->contact == NULL)
{
perror("InitContact::malloc");
exit(EXIT_FAILURE);
}
memset(pcon->contact, 0, DEFAULT_SZ *sizeof(pcon->contact));
pcon->capacity = DEFAULT_SZ;
}
void DestroyContact(pContact pcon)
{
free(pcon->contact);
pcon->contact = NULL;
pcon->sz = 0;
pcon->capacity = 0;
}
int CheckCapacity(pContact pcon)
{
if (pcon->sz == pcon->capacity)
{
PeoInfo *tmp = realloc(pcon->contact, pcon->capacity + DEFAULT_INC*sizeof(PeoInfo));
if (tmp == NULL)
{
pcon->contact = tmp;
pcon->capacity += DEFAULT_INC;
printf("增容成功!\n");
return 1;
}
else
return 0;
}
return 1;
}
void AddContact(pContact pcon)
{
if (CheckCapacity(pcon) == 0)
{
return;
}
printf("请输入姓名:>");
scanf("%s", pcon->contact[pcon->sz].name);
printf("请输入年龄:>");
scanf("%d", &pcon->contact[pcon->sz].age);
printf("请输入性别:>");
scanf("%s", pcon->contact[pcon->sz].sex);
printf("请输入电话:>");
scanf("%s", pcon->contact[pcon->sz].tele);
printf("请输入地址:>");
scanf("%s", pcon->contact[pcon->sz].add);
pcon->sz++;
printf("添加成功\n");
}
void ShowContact(const pContact pcon)
{
int i = 0;
printf("%10s\t%5s\t%10s\t%10s\t%10s\n", "name", "age", "sex", "tele", "add");
for (i = 0; i < pcon->sz; i++)
{
printf("%10s\t%5d\t%10s\t%10s\t%10s\n",
pcon->contact[pcon->sz].name,
pcon->contact[pcon->sz].age,
pcon->contact[pcon->sz].sex,
pcon->contact[pcon->sz].tele,
pcon->contact[pcon->sz].add);
}
}
static int FindEntry(pContact pcon, char name[])
{
int i = 0;
for (i = 0; i < pcon->sz; i++)
{
if (strcmp(name, pcon->contact[i].name) == 0)
{
return i;
}
}
return -1;
}
void DelContact(pContact pcon)
{
int pos = 0;
char name[MAX_NAME] = { 0 };
if (pcon->sz == 0)
{
printf("通讯录已空");
return;
}
printf("请输入想要删除的记录\n");
scanf("%s", &name);
pos = FindEntry(pcon, name);
if (pos == -1)
{
printf("你想要删除的记录不存在\n");
}
else
{
memmove(pcon->contact + pos, pcon->contact + pos + 1, (pcon->sz - pos - 1)*sizeof(PeoInfo));
pcon->sz--;
printf("删除成功\n");
}
}