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

发布时间:2022-10-13 09:57

这篇文章主要为大家详细介绍了如何录音C语言实现一个简单的通讯录,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下!

图片[1] - C语言实现通讯录的示例代码 - 尘心网

一、Contact.h文件

包含函数的声明

#pragma once
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <assert.h>

#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语言实现通讯录的示例代码.doc文档

THE END
喜欢就支持一下吧