0
点赞
收藏
分享

微信扫一扫

C语言实现通讯录

兵部尚输 2022-04-02 阅读 61
c语言

头文件中的一些声明

#include <stdio.h>
#include <string.h>
#include <stdlib.h> 

#define NAME_MAX 20
//#define MAX_SIZE 500


typedef struct base
{
	int number;
	char name[NAME_MAX];
	int age;
	int phone;
}base;

typedef struct Con
{
	base* arr;
	int sz;
	int capacity;
}Con;

void Init(Con* obj);

void Remake(Con* obj);

void add(Con* obj);

int search(Con* obj, int number);

void dele(Con* obj,int number);

void modefy(Con* obj, int number);
 
void Show(Con* obj);

void Clear(Con* obj);

void Sortbyname(Con* obj);
 

头文件中函数的实现

#include "通讯录.h"


//初始化
void Init(Con* obj)
{
	obj->capacity = 3;
	obj->arr = (base*)malloc(obj->capacity);
	obj->sz = 0;
	 
}
// 重新扩容
void Remake(Con* obj)
{
	obj->capacity += 2;
	obj->arr = (base*)malloc(obj->capacity);
	printf("扩容成功\n");
}

// 添加成员
void add(Con* obj)
{
	if (obj->sz == obj->capacity)
	{
		Remake(obj);
		//printf("通讯录满了\n");
		//return ;
	}
	printf("请输入编号\n");
	scanf("%d", &obj->arr[obj->sz].number);
	printf("请输入姓名\n");
	scanf("%s",  obj->arr[obj->sz].name);
	printf("请输入年龄\n");
	scanf("%d", &obj->arr[obj->sz].age);
	printf("请输入电话\n");
	scanf("%d", &obj->arr[obj->sz].phone);
	obj->sz++;
	printf("添加完成\n");
	return;
}

//搜索成员
int search(Con* obj, int number)
{
	int i = 0;
	for (i = 0; i < obj->sz; i++)
	{
		if (obj->arr[i].number == number)
			return i;
	}
	return -1;
}


//删除成员
void dele(Con* obj,int number)
{
	int i = search(obj, number);
	obj->arr[i].number = obj->arr[obj->sz - 1].number;
	strcpy(obj->arr[i].name, obj->arr[obj->sz - 1].name);
	obj->arr[i].age = obj->arr[obj->sz - 1].age;
	obj->arr[i].phone = obj->arr[obj->sz - 1].phone;
	obj->sz--;
	return;
}

// 修改成员
void modefy(Con* obj, int number)
{
	int i = search(obj, number);
	printf("请输入编号\n");
	scanf("%d", &obj->arr[i].number);
	printf("请输入姓名\n");
	scanf("%s", obj->arr[i].name);
	printf("请输入年龄\n");
	scanf("%d", &obj->arr[i].age);
	printf("请输入电话\n");
	scanf("%d", &obj->arr[i].phone);
	printf("修改成功\n");
	return;
}

//显示成员
void Show(Con* obj)
{
	int i = 0;
	for (i = 0; i < obj->sz; i++)
	{
		printf("编号:");
		printf("%d\n", obj->arr[i].number);
		printf("姓名:");
		printf("%s\n", obj->arr[i].name);
		printf("年龄:");
		printf("%d\n", obj->arr[i].age);
		printf("电话:");
		printf("%d\n\n", obj->arr[i].phone);
		
	}
	return;
}

// 销毁
void Clear(Con* obj)
{
	obj->sz = 0;
	obj->capacity = 0;
	free(obj->arr);
	obj->arr = NULL;
}

// 交换两个元素
void my_swap(base* a1, base* a2)
{
	base tmp;
	tmp.age = a1->age;
	strcpy(tmp.name, a1->name);
	tmp.number = a1->number;
	tmp.phone = a1->phone;
	a1->age = a2->age;
	strcpy(a1->name, a2->name);
	a1->number = a2->number;
	a1->phone = a2->phone;
	a2->age = tmp.age;
	strcpy(a2->name, tmp.name);
	a2->number = tmp.number;
	a2->phone = tmp.phone;
}


//按名字来排序
void Sortbyname(Con* obj)
{
	int i = 0;
	int j = 0;
	for (i = 0; i < obj->sz - 1; i++)
	{
		for (j = 0; j < obj->sz - i - 1; j++)
		{
			if (strcmp(obj->arr[j].name, obj->arr[j + 1].name) < 0)
			{
				my_swap(&obj->arr[j], &obj->arr[j + 1]);
			}
		}
	}
}

main 函数

#include "通讯录.h"

void menu()
{
	printf("*******************************\n");
	printf("***** 1.add     2.delete   ****\n");
	printf("***** 3.search  4.modefy  *****\n");
	printf("***** 5.Show    6.clear *******\n");
	printf("***   7.sortbyname   **********\n");
	printf("****      0.exit      *********\n");
	printf("*******************************\n");
}



int main()
{
	Con obj;
	Init(&obj);
	int input;
	do
	{
		menu();
		printf("请选择\n");
		scanf("%d", &input);
		int number = 0;;
		switch (input)
		{
		case 1:add(&obj); break;
		case 2:printf("请输入编号\n"); dele(&obj, number); break;
		case 3:printf("请输入编号\n"); search(&obj, number); break;
		case 4:printf("请输入编号\n"); modefy(&obj, number); break;
		case 5:Show(&obj); break;
		case 6:Clear(&obj); break;
		case 7:Sortbyname(&obj); break;
		case 0: break;
		}

	}while(input);
	return 0;
}
举报

相关推荐

0 条评论