C语言模拟通讯录

#include"test.h"
void meum()
{
	printf("*******************************\n");
	printf("*********1.add     2.del ******\n");
	printf("*********3.search  4.modify ***\n");
	printf("*********5.sort    6.show *****\n");
	printf("*********      0.exit    ******\n");
}
void test()
{
	
	
	Contact M;
	InitContact(&M);
	int input = 0;
	do
	{
		meum();
		printf("请输入选项\n");
		scanf("%d", &input);
		switch (input)
		{
		case Add:    AddContact(&M);
			break;
		case Delete: DeleteContact(&M);
			break;
		case Search: SearchContact(&M);
			break;
		case Modify:ModifyContact(&M);
			break;
		case Sort:SortContact(&M);
			break;
		case Show: ShowContact(&M);
			break;
		case Exit: printf("退出成功!\n");
			break;
		default:
			printf("非法输入\n");
			break;
		}


	} while (input);




}
int main()
{
	test();
	return 0;
}
#include"test.h"
int cmp(void* p1, void* p2)
{
	return ((Phone*)p1)->age - ((Phone*)p2)->age;
}
void SearchContact(Contact* obj)
{
	char tmp[20];
	printf("请输入查找人的姓名:");
	scanf("%s", tmp);
	int n = obj->sz;
	int i = 0;
	while (i < n)
	{
		if (strcmp(obj->Data[i].name, tmp) == 0)
		{
			break;
		}
		i++;
	}
	if (i == n)
	{
		printf("查无此人\n");
	}
	else
	{
		printf("%-10s\t%-4s\t%-13s\t%-5s\n", "姓名", "年龄", "号码", "性别");
		printf("%-10s\t%-4d\t%-13s\t%-5s\n", obj->Data[i].name, obj->Data[i].age, obj->Data[i].num, obj->Data[i].sex);
	}
}
int SearchContact1(Contact* obj)
{
	char tmp[20] = "";
	printf("请输入查找人的姓名:");
	scanf("%s", tmp);
	int n = obj->sz;
	int i = 0;
	while (i < n)
	{
		if (strcmp(obj->Data[i].name, tmp)==0)
		{
			break;
		}
		i++;
	}
	if (i == n)
	{
		return -1;
	}
	else
	{
		return i;
	}
}
void InitContact(Contact* obj)
{
	Phone* newnode = (Phone*)malloc(sizeof(Phone) * 4);
	obj->Data = newnode;
	obj->sz = 0;
	obj->capacity = 4;
}
void AddContact(Contact* obj)
{
	if (obj->sz == obj->capacity)
	{
		Phone* newnode = (Phone*)realloc(obj->Data, sizeof(Phone) * obj->capacity * 2);
		if (newnode == NULL)
		{
			exit(-1);
		}
		else
		{
			obj->Data = newnode;
			obj->capacity *= 2;
		}

	}
	printf("请输入名字\n");
	scanf("%s",&obj->Data[obj->sz].name);
	printf("请输入年龄\n");
	scanf("%d",&obj->Data[obj->sz].age);
	printf("请输入电话\n");
	scanf("%s",&obj->Data[obj->sz].num);
	printf("请输入性别\n");
	scanf("%s",&obj->Data[obj->sz].sex);
	obj->sz++;
	printf("添加成功\n");
}
void ShowContact(Contact* obj)
{
	int n = obj->sz;

	printf("%-10s\t%-4s\t%-13s\t%-5s\n", "姓名", "年龄", "号码", "性别");
	int i = 0;
	for (i = 0; i < n; i++)
	{
		printf("%-10s\t%-4d\t%-13s\t%-5s\n", obj->Data[i].name, obj->Data[i].age, obj->Data[i].num, obj->Data[i].sex);

	}
}
void DeleteContact(Contact* obj)
{
	if (obj->sz == 0)
	{
		printf("通讯录为空无法删除!\n");
		return;
	}
	int pos = SearchContact1(obj);
	if (pos == -1)
	{
		printf("查无此人\n");
		return;
	}
	else
	{
		int i = obj->sz;
		while (pos < i-1)
		{
			obj->Data[pos] = obj->Data[pos + 1];
			pos++;
		}
		obj->sz--;
		printf("删除成功!\n");
	}

}
void SortContact(Contact* obj)
{

	qsort(obj->Data, obj->sz, sizeof(Phone), cmp);
	printf("排序成功!");
}
void ModifyContact(Contact* obj)
{

	int pos = SearchContact1(obj);
	if (pos == -1)
	{
		printf("查无此人\n");
	}
	else
	{
		printf("请输入名字\n");
		scanf("%s", &obj->Data[pos].name);
		printf("请输入年龄\n");
		scanf("%d", &obj->Data[pos].age);
		printf("请输入电话\n");
		scanf("%s", &obj->Data[pos].num);
		printf("请输入性别\n");
		scanf("%s", &obj->Data[pos].sex);
		
		printf("修改成功\n");
	}
}
头文件
enum function
{
	Exit,
	Add,
	Delete,
	Search,
	Modify,
	Sort,
	Show,
};
typedef struct Phone
{
	char name[20];
	int age;
	char num[20];
	char sex[10];
}Phone;
typedef struct Contact
{
	Phone* Data;
	int sz;
	int capacity;
}Contact;
void AddContact(Contact* obj);
void InitContact(Contact* obj);
void DeleteContact(Contact* obj);
int SearchContact1(Contact* obj);
void SearchContact(Contact* obj);
void ModifyContact(Contact* obj);
void SortContact(Contact* obj);
void ShowContact(Contact* obj);
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

1无名之辈1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值