您的位置:首页 > 编程语言 > C语言/C++

c语言实现动态版本通讯录

2017-05-30 22:32 627 查看
头文件contact.h

#ifndef __CONTACT_H__
#define __CONTACT_H__

#define NAME_MAX 20
#define SEX_MAX 20
#define TELE_MAX 20
#define ADDR_MAX 20
#define MAX 100
#define DEFAULT_SZ 2
#define DEFAULT_INC 2

typedef struct PeoInfo
{
char name[NAME_MAX];
int age;
char sex[SEX_MAX];
char tele[TELE_MAX];
char addr[ADDR_MAX];
}PeoInfo;

typedef struct Contact
{
PeoInfo *data;
int capacity;
int sz;
}Contact,*pContact;
void InitContact(pContact pcon);
void AddContact(pContact pcon);
void ShowContact(pContact pcon);
void DelContact(pContact pcon);
void EmptyContact(pContact pcon);
void SearchContact(pContact pcon);
void ModifyContact(pContact pcon);
void SortContact(pContact pcon);
void DestroyContact(pContact pcon);
#endif //__CONTACT_H__实现contact.c
#include"contact.h"
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<errno.h>

void InitContact(pContact pcon)
{
pcon->sz = 0;
pcon->data = malloc(DEFAULT_SZ*sizeof(PeoInfo));
memset(pcon->data, 0, DEFAULT_SZ*sizeof(PeoInfo));
pcon->capacity = DEFAULT_SZ;
}
void check_capacity(pContact pcon)
{
pcon->capacity = DEFAULT_SZ;
if (pcon->sz == pcon->capacity)
{
//增容
PeoInfo *tmp = realloc(pcon->data, (pcon->capacity + DEFAULT_INC)*sizeof(PeoInfo));
if (tmp != NULL)
{
pcon->data = tmp;
pcon->capacity += DEFAULT_INC;
printf("增容成功\n");
}
else
{
printf("%s\n", strerror(errno));
}
}
}

void AddContact(pContact pcon)
{
check_capacity(pcon);
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].tele);
printf("请输入地址>:");
scanf("%s", pcon->data[pcon->sz].addr);
pcon->sz++;
printf("添加成功\n");

}

void ShowContact(pContact pcon)
{
int i = 0;
printf("%10s%4s%5s%12s%10s\n", "name", "age", "sex", "tele", "addr");
for (int i = 0; i < pcon->sz; i++)
{
printf("%10s%4d%5s%12s%10s\n", pcon->data[i].name, pcon->data[i].age, pcon->data[i].sex, pcon->data[i].tele, pcon->data[i].addr);
}
}

//查找
static int find_entry(pContact pcon, char name[])
{
int i = 0;
for (i = 0; i < pcon->sz; i++)
{
if (strcmp(name, pcon->data[i].name) == 0)
{
return i;
}
}
if (i == pcon->sz)
{
return -1;
}
}

void DelContact(pContact pcon)
{
char name[NAME_MAX] = { 0 };
printf("请输入要删除的人名>:");
scanf("%s", name);
int pos = find_entry(pcon, name);
if (pos == -1)
{
printf("要删除的人不存在\n");
return;
}
int j = 0;
for (j = pos; j < pcon->sz - 1; j++)
{
pcon->data[j] = pcon->data[j + 1];
}
pcon->sz--;
printf("删除成功\n");
}

void EmptyContact(pContact pcon)
{
pcon->sz = 0;
printf("清空成功\n");
}

void SearchContact(pContact pcon)
{
char name[NAME_MAX] = { 0 };
printf("请输入要查找的人名>:");
scanf("%s", name);
int pos = find_entry(pcon, name);
if (pos == -1)
{
printf("要查找的人不存在\n");
return;
}
printf("%10s%4d%5s%12s%10s\n", pcon->data[pos].name, pcon->data[pos].age, pcon->data[pos].sex, pcon->data[pos].tele, pcon->data[pos].addr);
}

void ModifyContact(pContact pcon)
{
char name[NAME_MAX] = { 0 };
printf("请输入要修改的人名>:");
scanf("%s", name);
int pos = find_entry(pcon, name);
if (pos == -1)
{
printf("要修改的人不存在\n");
return;
}
//修改年龄
printf("请输入被修改的人修改后的年龄:");
int age = 0;
scanf("%d", &age);
pcon->data[pos].age = age;
printf("修改成功\n");
}

void SortContact(pContact pcon)
{
//按年龄排序
int i = 0;
for (i = 0; i < pcon->sz - 1; i++)
{
int j = 0;
for (j = 0; j < pcon->sz - 1 - i; j++)
{
if (pcon->data[j].age>pcon->data[j + 1].age)
{
int tmp = pcon->data[j].age;
pcon->data[j].age = pcon->data[j+1].age;
pcon->data[j+1].age = tmp;
}
}
}
}
void DestroyContact(pContact pcon)
{
free(pcon->data);
pcon->data = NULL;
pcon->sz = 0;
pcon->capacity = 0;
}
测试test.c
#include"contact.h"
#include<stdio.h>
#include<string.h>

enum OP
{
Exit,
Add,
Del,
Show,
Modify,
Search,
Empty,
Sort
};
void menu()
{
printf("**************************\n");
printf("******1.Add 2.Del*****\n");
printf("******3.Show 4.Modify**\n");
printf("******5.Search 6.Empty***\n");
printf("******7.Sort 0.Exit****\n");
printf("**************************\n");
}

int main()
{
Contact my_con;
int input = 0;
InitContact(&my_con);
do
{
menu();
printf("请选择>:");
scanf("%d", &input);
switch (input)
{
case Add:
AddContact(&my_con);
break;
case Del:
DelContact(&my_con);
break;
case Show:
ShowContact(&my_con);
break;
case Modify:
ModifyContact(&my_con);
break;
case Search:
SearchContact(&my_con);
break;
case Empty:
EmptyContact(&my_con);
break;
case Sort:
SortContact(&my_con);
break;
case Exit:
DestroyContact(&my_con);
break;
default:
printf("选择错误\n");
break;
}
} while (input);
system("pause");
return 0;
}运行结果













内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: