通讯录动态实现

变量的存储可分为静态动态俩种方式,

静态存储:指在程序运行期间分配固定的存储空间,即在定义时就分定存储单元,并一直保持不变,直至程序结束。(全局变量)

动态存储:在程序执行过程中才分配存储单元, 使用完毕就立即释放。(形参)

contact.h

#ifndef __CONTACT_H__
#define __CONTACT_H__

#pragma warning(disable:4996)
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

#define NAME_MAX 20
#define SEX_MAX 5
#define TELE_MAX 12
#define ADDR_MAX 25
#define MAX 1000
#define DEFAULT_SZ 3
#define DEFAULT_INC 2

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

//typedef struct Contact
//{
//	PerInfo data[MAX];
//	int size;
//	int capacity;
//}Contact,*pcon;

typedef struct Contact
{
	PerInfo *data;
	int size;
	int capacity;
}Contact, *pcon;

void InitContact(pcon pcon);
void CheckContact(pcon pcon);
void DestroyContact(pcon pcon);
void AddContact(pcon pcon);//增
void DisplayContact(pcon pcon);
void DelContact(pcon pcon);//删
int Find(pcon pcon,char *name);
void SearchContact(pcon pcon);//查
void ModifyContact(pcon pcon);//改
void Sort(pcon pcon);
void Clear(pcon pcon);

#endif __CONTACT_H__
函数实现

contact.c

#include"contact.h"
#pragma warning(disable:4996)

void InitContact(pcon pcon)
{
	pcon->size = 0;
	pcon->capacity = DEFAULT_INC;
	pcon->data = (PerInfo*)malloc(pcon->capacity*sizeof(PerInfo));
	if (pcon->data == NULL)
	{
		memset(pcon->data, 0, pcon->capacity*sizeof(PerInfo));
		exit(EXIT_FAILURE);
	}
}

void CheckContact(pcon pcon)
{
	PerInfo* tmp=0;
	if (pcon->size == pcon->capacity)
	{
		realloc(pcon->data, pcon->capacity + DEFAULT_INC);
		if (tmp == NULL)
		{
			;
		}
		else
		{
			pcon->data = tmp;
		}
		pcon->capacity += DEFAULT_INC;
	}
}

void DestroyContact(pcon pcon)
{
	if (pcon->data != NULL)
	{
		free(pcon->data);
		pcon->data = NULL;
	}
}

void AddContact(pcon pcon)
{
	if (pcon->size >= MAX)
	{
		printf("the contact is full\n");
		return;
	}
	printf("please enter name\n");
	scanf("%s", pcon->data[pcon->size].name);
	printf("please enter age\n");
	scanf("%d",&( pcon->data[pcon->size].age));
	printf("please enter sex\n");
	scanf("%s", pcon->data[pcon->size].sex);
	printf("please enter tele\n");
	scanf("%s", pcon->data[pcon->size].tele);
	printf("please enter addr\n");
	scanf("%s", pcon->data[pcon->size].addr);
	pcon->size++;
	printf("success\n");
}

void DisplayContact(pcon pcon)
{
	int i = 0;
	for (i = 0; i < pcon->size; i++)
	{
		printf("name:%s\n", pcon->data[i].name);
		printf("age:%d\n", pcon->data[i].age);
		printf("sex:%s\n", pcon->data[i].sex);
		printf("tele:%s\n", pcon->data[i].tele);
		printf("addr:%s\n", pcon->data[i].addr);
	}
}

int Find(pcon pcon, char *name)
{
	int i = 0;
	for (i = 0; i < pcon->size; i++)
	{
		if (strcmp(pcon->data[i].name, name) == 0)
		{
			return i;
		}
	}
	return -1;
}

void DelContact(pcon pcon)
{
	if (pcon->size == 0)
	{
		printf("the contact is empty");
		return;
	}
	char name[NAME_MAX];
	int j = 0;
	printf("请输入要删除的名字\n");
	scanf("%s", name);
	int pos = Find(pcon, name);
	if (pos == -1)
	{
		printf("找不到要删除的名字\n");
		return;
	}
	for (j = pos; j < pcon->size; j++)
	{
		pcon->data[j] = pcon->data[j + 1];
	}
	pcon->size--;
	printf("删除成功\n");
}

void SearchContact(pcon pcon)
{
	char name[NAME_MAX] = {0};
	int pos = 0;
	printf("请输入要查找的姓名\n");
	scanf("%s", &name);
	pos = Find(pcon, name);
	if (pos == -1)
	{
		printf("找不到要查找的姓名\n");
		return;
	}
	else
	{
		printf("name:%s\n", pcon->data[pos].name);
		printf("age:%d\n", pcon->data[pos].age);
		printf("sex:%s\n", pcon->data[pos].sex);
		printf("tele:%s\n", pcon->data[pos].tele);
		printf("addr:%s\n", pcon->data[pos].addr);
	}
}

void ModifyContact(pcon pcon)
{
	char name[NAME_MAX] = { 0 };
	int pos = 0;
	printf("请输入要修改的姓名\n");
	scanf("%s", &name);
	pos = Find(pcon, name);
	if (pos == -1)
	{
		printf("找不到要修改的姓名\n");
		return;
	}
	else
	{
		printf("please enter name\n");
		scanf("%s", pcon->data[pos].name);
		printf("please enter age\n");
		scanf("%d", &(pcon->data[pos].age));
		printf("please enter sex\n");
		scanf("%s", pcon->data[pos].sex);
		printf("please enter tele\n");
		scanf("%s", pcon->data[pos].tele);
		printf("please enter addr\n");
		scanf("%s", pcon->data[pos].addr);
	}
}

void Sort(pcon pcon)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < pcon->size - 1; i++)
	{
		for (j = 0; j < pcon->size - 1 - i; j++)
		{
			if (strcmp(pcon->data[j].name, pcon->data[j + 1].name)>0)
			{
				PerInfo tmp = { 0 };
				tmp = pcon->data[j];
				pcon->data[j] = pcon->data[j + 1];
				pcon->data[j + 1] = tmp;
			}
		}
	}
}

void Clear(pcon pcon)
{
	pcon->size = 0;
}

测试部分

text.c

#pragma warning(disable:4996)
#include"contact.h"

void menu()
{
	printf("***************************\n");
	printf("  1.Add            2.Del   \n");
	printf("  3.Modify         4.Search\n");
	printf("  5.Display        6.Sort  \n");
	printf("  7.Clear          0.Exit  \n");
} 

int main()
{
	Contact con;
	int input = 0;
	InitContact(&con);
	do
	{
		menu();
		printf("请选择>:\n");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			AddContact(&con);
			break;
		case 2:
			DelContact(&con);
			break;
		case 3:
			ModifyContact(&con);
			break;
		case 4:
			SearchContact(&con);
			break;
		case 5:
			DisplayContact(&con);
			break;
		case 6:
			Sort(&con);
			break;
		case 7:
			Clear(&con);
			break;
		case 0:
			break;
		default:
			break;
		}
	} while (input);
	return 0;
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值