动态版本通讯录

head.h

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

#define MAX_NAME 20
#define MAX_SEX 5
#define MAX_TEL 20
#define MAX_ADDR 20

#define START_SIZE 2
#define INC_SIZE 10

typedef struct Info
{
	char name[MAX_NAME];
	char sex[MAX_SEX];
	int age;
	char tel[MAX_TEL];
	char addr[MAX_ADDR];
}Info;


typedef struct Contact
{
	Info *con;
	int count;
	int capacity;
}Con, *pCon;

void menu();
void init(pCon pcon);
int checkCapacity(pCon pcon);
void add(pCon pcon);
int find(pCon pcon);
void del(pCon pcon);
void search(pCon pcon);
void alter(pCon pcon);
void show(pCon pcon);
void clear(pCon pcon);
void sort(pCon pcon);

contact.h

#pragma once
#include "head.h"

void menu()
{
	printf("##################################\n");
	printf("##### 1.增加联系人信息       #####\n");
	printf("##### 2.删除联系人信息       #####\n");
	printf("##### 3.查找指定联系人信息   #####\n");
	printf("##### 4.修改指定联系人信息   #####\n");
	printf("##### 5.显示所有联系人信息   #####\n");
	printf("##### 6.清空所有联系人       #####\n");
	printf("##### 7.以名字排序所有联系人 #####\n");
	printf("##### 0.退出!               #####\n");
	printf("##################################\n");
}

void init(pCon pcon)
{
	pcon->count = 0;
	pcon->con = (Info *)malloc(START_SIZE * sizeof(Info));
	memset(pcon->con,0,START_SIZE * sizeof(pcon->con));
	pcon->capacity = START_SIZE;
}

int checkCapacity(pCon pcon)
{
	if (pcon->count == pcon->capacity)
	{
		Info *p = NULL;
		p = (Info *)realloc(pcon->con, (pcon->capacity + INC_SIZE) * sizeof(Info));
		if (p != NULL)
		{
			pcon->con = p;
			pcon->capacity += INC_SIZE;
			return 1;
		}
		else
		{
			return 0;
		}
		free(p);
	}
	return 1;
}

void add(pCon pcon)
{
	if (checkCapacity(pcon) == 0)
	{
		printf("fail!");
	}
	printf("请输入姓名:");
	scanf("%s",pcon->con[pcon->count].name);
	printf("\n请输入性别:");
	scanf("%s", pcon->con[pcon->count].sex);
	printf("\n请输入年龄:");
	scanf("%d",&(pcon->con[pcon->count].age));
	printf("\n请输入电话:");
	scanf("%s", pcon->con[pcon->count].tel);
	printf("\n请输入地址:");
	scanf("%s", pcon->con[pcon->count].addr);
	pcon->count++;
	printf("添加成功!\n");
}

int find(pCon pcon)
{
	char name[MAX_NAME];
	int i = 0;
	printf("请输入姓名:");
	scanf("%s",&name);
	for (i = 0; i < pcon->count; i++)
	{
		if (strcmp(name,pcon->con[i].name) == 0)
		{
			return i;
		}
	}
	return -1;
}


void del(pCon pcon)
{
	if (pcon->count == 0)
	{
		printf("通讯录为空!\n");
		return;
	}
	int pos = 0;
	int i = 0;
	pos = find(pcon);
	if (pos == -1)
	{
		printf("未找到!\n");
	}
	else
	{
		for ( i = pos; i < pcon->count-1; i++)
		{
			pcon->con[i] = pcon->con[i + 1];

		}
		pcon->count--;
		printf("删除成功!\n");
	}
}

void search(pCon pcon)
{
	if (pcon->count == 0)
	{
		printf("通讯录为空!\n");
		return;
	}
	int pos = 0;
	int i = 0;
	pos = find(pcon);
	if (pos == -1)
	{
		printf("未找到!\n");
	}
	else
	{
		printf("姓名:%s ",pcon->con[pos].name);
		printf("性别:%s ", pcon->con[pos].sex);
		printf("年龄:%d ", pcon->con[pos].age);
		printf("电话:%s ", pcon->con[pos].tel);
		printf("地址:%s\n", pcon->con[pos].addr);
	}
}

void alter(pCon pcon)
{
	if (pcon->count == 0)
	{
		printf("通讯录为空!\n");
		return;
	}
	int pos = 0;
	int i = 0;
	pos = find(pcon);
	if (pos == -1)
	{
		printf("未找到!\n");
	}
	else
	{
		printf("请输入姓名:");
		scanf("%s", &(pcon->con[pos].name));
		printf("\n请输入性别:");
		scanf("%s", &(pcon->con[pos].sex));
		printf("\n请输入年龄:");
		scanf("%d", &(pcon->con[pos].age));
		printf("\n请输入电话:");
		scanf("%s", &(pcon->con[pos].tel));
		printf("\n请输入地址:");
		scanf("%s", &(pcon->con[pos].addr));
		printf("修改成功!\n");
	}
}

void show(pCon pcon)
{
	if (pcon->count == 0)
	{
		printf("通讯录为空!\n");
		return;
	}
	int pos = 0;
	for (pos = 0; pos < pcon->count; pos++)
	{
		printf("姓名:%s", pcon->con[pos].name);
		printf("性别:%s", pcon->con[pos].sex);
		printf("年龄:%d", pcon->con[pos].age);
		printf("电话:%s", pcon->con[pos].tel);
		printf("地址:%s\n", pcon->con[pos].addr);
	}
}

void clear(pCon pcon)
{
	if (pcon->con != NULL)
	{
		free(pcon->con);
		pcon->con = NULL;
		pcon->capacity = 0;
		pcon->count = 0;
	}
	printf("清除成功!\n");
}

void sort(pCon pcon)
{
	if (pcon->count == 0)
	{
		printf("通讯录为空!\n");
		return;
	}
	int i = 0;
	int j = 0;
	int flag = 0;
	for (i = 0; i < pcon->count - 1; i++)
	{
		for (j = 0; j < pcon->count - i - 1; j++)
		{
			if (strcmp(pcon->con[j].name, pcon->con[j + 1].name) > 0)
			{
				Info temp = pcon->con[j];
				pcon->con[j] = pcon->con[j + 1];
				pcon->con[j + 1] = temp;
				flag = 1;
			}
		}
		if (flag == 0)
		{
			printf("排序完成!\n");
			return;
		}
	}
	printf("排序完成!\n");
}

main.c

#pragma once
#include "contact.h"

enum func
{
	EXIT,
	ADD,
	DEL,
	SEARCH,
	ALTER,
	SHOW,
	CLEAR,
	SORT,
};

int main()
{
	int select;
	Con my_con;
	init(&my_con);
	while (1)
	{
		menu();
		printf("\n请选择:");
		scanf("%d", &select);
		switch (select)
		{
		case EXIT:
			exit(0);
			break;
		case ADD:
			add(&my_con);
			break;
		case DEL:
			del(&my_con);
			break;
		case SEARCH:
			search(&my_con);
			break;
		case ALTER:
			alter(&my_con);
			break;
		case SHOW:
			show(&my_con);
			break;
		case CLEAR:
			clear(&my_con);
			break;
		case SORT:
			sort(&my_con);
			break;
		default:
			printf("输入错误,请重新输入!");
			break;
		}
	}
	system("pause");
	return 0;
}

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值