当前位置:主页 > c/c++教程 > C语言通讯录

C语言实现通讯录的示例代码

发布:2023-03-04 20:30:01 59


本站精选了一篇相关的编程文章,网友屠小溪根据主题投稿了本篇教程内容,涉及到C语言实现通讯录、C语言、通讯录、C语言通讯录相关内容,已被977网友关注,如果对知识点想更进一步了解可以在下方电子资料中获取。

C语言通讯录

一、Contact.h文件

包含函数的声明

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include 
#include 
#include 
#include 

#define MAX 100
#define MAX_NAME 20
#define MAX_SEX 10
#define MAX_TELE 20
#define MAX_ADDR 30
#define MAX_LEG 5

//结构体的定义,用于储存通讯录数据
struct Contact
{
	char name[MAX_NAME];
	char sex[MAX_SEX];
	char tele[MAX_TELE];
	char addr[MAX_ADDR];
	int age;
};

struct PeoInfo
{
	struct Contact* data;
	int length;
	int capacity;
};

//定义游戏菜单函数
void menu();

//定义初始结构体函数
void InitContact(struct PeoInfo* abs);

//添加通讯录消息函数的声明
void AddConInfo(struct PeoInfo* abs);

//查询信息是否存在函数
int IsExist(struct PeoInfo* abs, char* name);

//删除指定信息函数的定义
void DelConInfo(struct PeoInfo* abs);

//修改指定信息函数的定义
void ModefiInfo(struct PeoInfo* abs);

//查询指定信息函数的定义
void SearchInfo(struct PeoInfo* abs);

//展示通讯录信息函数的定义
void ShowInfo(struct PeoInfo* abs);

//清空通讯录列表函数的定义
void ClearInfo(struct PeoInfo* abs);

//排序通讯录信息函数的定义
void SortInfo(struct PeoInfo* abs);

//扩容函数的定义
int IncMemmery(struct PeoInfo* abs);

//释放内存函数的定义
void FreeInfo(struct PeoInfo* abs);

//保存通讯录函数的定义
void saveInfo(struct PeoInfo* abs);

//加载通讯录函数的定义
void loadInfo(struct PeoInfo* abs);

二、Contact.c文件

包含函数的实现

#include "contact.h";



//游戏菜单函数的实现
void menu()
{
	printf("***********************************\n");
	printf("*******1.Add          2.Del********\n");
	printf("*******3.Modefi       4.Search*****\n");
	printf("*******5.show         6.Clear******\n");
	printf("*******7.sort         0.exit*******\n");
	printf("***********************************\n");
}


//扩容函数的实现
int IncMemmery(struct PeoInfo* abs)
{
	struct Contact* ptr = (struct Contact*)realloc(abs->data, (abs->capacity + 3) * sizeof(struct Contact));
	if (ptr == NULL)
	{
		perror("GetMemmery():");
		return -1;
	}
	else
	{
		abs->data = ptr;
		abs->capacity += 3;
		return 1;
	}
}

//初始化通讯录函数的实现
void loadInfo(struct PeoInfo* abs)
{
	FILE* pf;
	pf = fopen("Contact.txt", "rb");
	if (pf == NULL)
	{
		perror("InitContact():");
		return;
	}
	struct Contact tmp = { 0 };
	while (fread(&tmp, sizeof(struct Contact), 1, pf))
	{
		if (abs->length == abs->capacity)
		{
			IncMemmery(abs);
		}
		*(abs->data + abs->length) = tmp;
		abs->length++;
	}
	fclose(pf);
	pf == NULL;
}

void InitContact(struct PeoInfo* abs)
{
	assert(abs);
	abs->length = 0;
	abs->data = (struct Contact*)malloc(MAX_LEG * sizeof(struct Contact));
	abs->capacity = MAX_LEG;
	loadInfo(abs);
}

//查询信息是否存在函数的实现
int IsExist(struct PeoInfo* abs, char* name)
{
	for (int i = 0; i < abs->length; i++)
	{
		if (strcmp(abs->data[i].name, name) == 0)
		{
			return i;
		}
	}
	return -1;
}

//添加通讯录消息函数的实现
void AddConInfo(struct PeoInfo* abs)
{
	assert(abs);
	if (abs->capacity == abs->length)
	{
		int ret  = IncMemmery(abs);
		if (ret == 1)
		{
			printf("扩容成功!\n");
		}
		else
		{
			printf("扩容失败,内存不足!\n");
			return;
		}
	}
	
	printf("请输入添加的姓名:>");
	scanf("%s", abs->data[abs->length].name);
	printf("请输入添加的姓别:>");
	scanf("%s", abs->data[abs->length].sex);
	printf("请输入添加的联系方式:>");
	scanf("%s", abs->data[abs->length].tele);
	printf("请输入添加的住址:>");
	scanf("%s", abs->data[abs->length].addr);
	printf("请输入添加的年龄:>");
	scanf("%d", &(abs->data[abs->length].age));

	abs->length++;
	printf("已成功添加联系人!\n");
}

//删除指定信息函数的实现
void DelConInfo(struct PeoInfo* abs)
{
	assert(abs);
	char name[MAX_NAME];
	printf("请输入要删除通讯录的姓名:>");
	scanf("%s", name);
	int ret = IsExist(abs, name);
	if (ret == -1)
	{
		printf("不存在此联系人!\n");
	}
	else
	{
		for (int i = ret; i < abs->length; i++)
		{
			abs->data[i] = abs->data[i + 1];
		}
		abs->length--;
	}
}

//修改制定信息函数的实现
void ModefiInfo(struct PeoInfo* abs)
{
	char name[MAX_NAME];
	printf("请输入要修改通讯录信息的姓名:>");
	scanf("%s", name);
	int ret = IsExist(abs, name);
	if (ret == -1)
	{
		printf("要修改指定联系人不存在!\n");
	}
	else
	{
		printf("请输入要修改的姓名:>");
		scanf("%s", abs->data[ret].name);
		printf("请输入要修改的性别:>");
		scanf("%s", abs->data[ret].sex);
		printf("请输入要修改的联系方式:>");
		scanf("%s", abs->data[ret].tele);
		printf("请输入要修改的住址:>");
		scanf("%s", abs->data[ret].addr);
		printf("请输入要修改的年龄:>");
		scanf("%d", &(abs->data[ret].age));

		printf("修改成功!\n");

	}
}

//查询指定信息函数的实现
void SearchInfo(struct PeoInfo* abs)
{
	assert(abs);
	char name[MAX_NAME];
	printf("请输入要查询通讯录的姓名:>");
	scanf("%s", name);
	int ret = IsExist(abs, name);
	if (ret == -1)
	{
		printf("要查找的信息不存在!");
	}
	else
	{
		printf("%-20s\t%-10s\t%-20s\t%-20s\t%-10s\n","姓名","性别","联系方式","住址","年龄");
		printf("%-20s\t%-10s\t%-20s\t%-20s\t%-10d\n",
			abs->data[ret].name,
			abs->data[ret].sex,
			abs->data[ret].tele,
			abs->data[ret].addr,
			abs->data[ret].age);

		printf("查询成功!\n");
	}
	
}

//展示通讯录信息函数的实现
void ShowInfo(struct PeoInfo* abs)
{
	assert(abs);
	printf("%-20s\t%-10s\t%-20s\t%-20s\t%-10s\n", "姓名", "性别", "联系方式", "住址", "年龄");
	for (int i = 0; i < abs->length; i++)
	{
		printf("%-20s\t%-10s\t%-20s\t%-20s\t%-10d\n",
			abs->data[i].name,
			abs->data[i].sex,
			abs->data[i].tele,
			abs->data[i].addr,
			abs->data[i].age);
	}
}

//清空通讯录列表函数的实现
void ClearInfo(struct PeoInfo* abs)
{
	assert(abs);
	struct Contact* ptr = (struct Contact*)realloc(abs->data, MAX_LEG * (sizeof(struct Contact)));
	if (ptr == NULL)
	{
		perror("ClearInfo():");
	}
	else
	{
		abs->length = 0;
		abs->data = ptr;
		memset(abs->data, 0, MAX_LEG * sizeof(struct Contact));
		abs->capacity = MAX_LEG;
		printf("清空通讯录成功!\n");
	}
}


//排序通讯录函数的实现
int CmpByAge(const void* e1, const void* e2)
{
	return ((struct Contact*)e1)->age - ((struct Contact*)e2)->age;
}

int CmpByName(const void* e1, const void* e2)
{
	return strcmp(((struct Contact*)e1)->name, ((struct Contact*)e2)->name);
}

void SortInfo(struct PeoInfo* abs)
{
	getchar();
	char ch;
	printf("请输入排序的方式:>N(姓名)、A(年龄),N or A:>");
	ch = getchar();
	if (ch == 'A')
	{
		qsort(abs->data, abs->length, sizeof(struct Contact), CmpByAge);
		printf("已按照年龄排序成功!\n");
	}
	else if(ch == 'N')
	{
		qsort(abs->data, abs->length, sizeof(struct Contact), CmpByName);
		printf("已按照姓名排序成功!\n");
	}
	else
	{
		printf("输入错误!\n");
	}
}

//释放内存函数的实现
void FreeInfo(struct PeoInfo* abs)
{
	free(abs->data);
	abs->data = NULL;
}


//保存通讯录函数的实现
void saveInfo(struct PeoInfo* abs)
{
	FILE* pf;
	pf = fopen("Contact.txt", "wb");
	if (pf == NULL)
	{
		perror("saveInfo():");
		return;
	}
	for (int i = 0; i < abs->length; i++)
	{
		fwrite(abs->data + i, sizeof(struct Contact), 1, pf);
	}
	fclose(pf);
	pf = NULL;
}

三、test.c文件

包含主函数即代码思想

#include "contact.h";

int main()
{
	int input = 0;
	struct PeoInfo con;
	//初始化结构体
	InitContact(&con);
	do
	{
		menu();
		printf("请选择:>");
		scanf("%d", &input);
		switch (input)
		{
		case 1:
			AddConInfo(&con);
			break;
		case 2:
			DelConInfo(&con);
			break;
		case 3:
			ModefiInfo(&con);
			break;
		case 4:
			SearchInfo(&con);
			break;
		case 5:
			ShowInfo(&con);
			break;
		case 6:
			ClearInfo(&con);
			break;
		case 7:
			SortInfo(&con);
			break;
		case 0:
			saveInfo(&con);
			FreeInfo(&con);
			printf("退出通讯录!");
			break;
		default:
			printf("选择错误!\n");
		}
	} while (input);
	return 0;
}

到此这篇关于C语言实现通讯录的示例代码的文章就介绍到这了,更多相关C语言通讯录内容请搜索码农之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持码农之家!


参考资料

相关文章

  • C++中的异常处理机制详解

    发布:2022-04-13

    本文给大家分享的是C++中的异常处理机制。对如何处理异常、基本异常语法、异常保护代码等进行了探讨,推荐给大家。


  • c语言中malloc、realloc与calloc 的区别以及联系

    发布:2022-06-23

    给大家整理了关于c语言的教程,以下是对c语言中的malloc函数,realloc函数与calloc函数的区别以及它们之间的联系进行了介绍,需要的朋友可以过来参考下


  • C语言实现C++继承和多态的实例内容

    发布:2021-06-10

    本文主要给大家简单讲诉了C和C++的区别以及如何使用C语言模拟实现C++继承和多态,并附上示例代码,是篇相当不错的文章,推荐给喜欢C语言的小伙伴们


  • C语言中-a++和-++a运算顺序实例解析

    发布:2023-03-12

    C语言中的a++和++a的区别在于混合表达式中运算符的处理顺序,下面这篇文章主要给大家介绍了关于C语言中-a++和-++a运算顺序的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下


  • C语言文件操作总结

    发布:2022-04-06

    本篇文章给大家通过代码示例讲述了C语言文件操作的相关知识点,对此有兴趣的朋友可以参考学习下。


  • C语言FlappyBird飞扬的小鸟实现开发流程

    发布:2023-03-10

    因为在家宅了好多天,随手玩了下自己以前做的一些小游戏,说真的,有几个游戏做的是真的劣质,譬如 flappybird 真的让我难以忍受,于是重做了一波分享给大家


  • C语言实现自动给QQ好友发窗口抖动

    发布:2021-05-07

    这篇文章主要介绍了C语言实现自动给QQ好友发窗口抖动,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下


  • C语言数据结构不挂科指南之栈&队列&数组详解

    发布:2023-03-02

    自考重点、期末考试必过指南,这篇文章让你理解什么是栈、什么是队列、什么是数组。文中的示例代码讲解详细,感兴趣的小伙伴可以了解一下


网友讨论