通讯录管理系统(C语言)


前言

本文我们将介绍如何实现一个通讯录管理系统,它的功能介绍如下:通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址。我们可以对通讯录进行以下几种操作:添加联系人信息、删除指定联系人信息、查找指定联系人信息、修改指定联系人信息、显示所有联系人信息、清空所有联系人、以年龄大小排序所有联系人。


一、项目头文件包含,结构体定义,以及函数声明与介绍

#pragma once
#include <stdio.h>
#define MAXSIZE 1000//通讯录的最大容量
#include <string.h>//使用字符串函数
typedef struct Node
{
    
    
	char name[15];//姓名
	char sex[4];//性别
	int age;//年龄
	char tel[14];//电话号码
	char address[10];//家庭住址
}Node;//
typedef struct people
{
    
    
	int size;//记录当前通讯录中人数多少
	Node node[MAXSIZE];//定义一个数组来记录每一个人的信息
}people;
//初始化结构体
void InitPeople(people* arr);
//向结构体中添加人数
void add(people* arr);
//展示我们通讯录中现有人物的基本信息
void show(const people* arr);
//清空通讯录
void clear(people* arr);
//通过姓名,查找通讯录中具体的那个人
int search(const people* arr);
//删除通讯录中的一个人
void del(people* arr);
//修改通讯录中一个人的信息
void modify(people* arr);
//按照通讯录中人物的年龄进行排序
void sort_contact(people* arr);

二、具体函数的实现

1.初始化结构

因为我们开始时,我们的通讯录中并未填入联系人的信息,所以初始化结构体中的当前人数为0。

代码如下:

void InitPeople(people* arr)
{
    
    
	arr->size = 0;
}

2.添加联系人信息

当我们的当前人数未达到通讯录储存人数的最大限制时,我们可以向通讯录中添加联系人信息。

代码如下:

void add(people* arr)
{
    
    
	if (arr->size >= MAXSIZE - 1)
		printf("通讯录已满,无法添加\n");
	printf("请输入您要添加的姓名:>");
	scanf("%s", arr->node[arr->size].name);
	printf("请输入您要添加人的性别:>");
	scanf("%s", arr->node[arr->size].sex);

	printf("请输入您要添加人的年龄:>");
	scanf("%d", &arr->node[arr->size].age);
	printf("请输入您要添加人的电话号码:>");
	scanf("%s", arr->node[arr->size].tel);
	printf("请输入您要添加联系人的地址:>");
	scanf("%s", arr->node[arr->size].address);
	arr->size++;
}

3.显示所有联系人信息

当我们的通讯录中的联系人个数不为0时,我们打印我们通讯录中所有联系人的信息。

代码如下:

void show(const people* a)
{
    
    
	if (a->size == 0)
	{
    
    
		printf("您的通讯录为空\n");
		return;
	}
	printf("%-15s%-15s%-15s%-15s%-15s\n", 
	"姓名", "性别", "年龄", "电话", "住址");
	for (int i = 0; i < a->size; i++)
	{
    
    
		printf("%-15s%-15s%-15d%-15s%-15s\n",
		 a->node[i].name, a->node[i].sex,
		  a->node[i].age, a->node[i].tel, a->node[i].address);
	}
	printf("\n");
}

4.清空通讯录

只要将通讯录中的人数归为0,即可清空所有联系人的信息。

代码如下:

扫描二维码关注公众号,回复: 16644256 查看本文章
void clear(people* arr)
{
    
    
	arr->size = 0;
	printf("您的通讯录已经清空\n");
}

5.通过姓名查找一个联系人

代码如下:

//找到匹配的人名返回下标,否则返回-1
int search(const people* arr)
{
    
    
	char tem[20];
	printf("请输入您要查找的人的名字:>");
	scanf("%s", tem);
	for (int i = 0; i < arr->size; i++)
	{
    
    
		if (strcmp(arr->node[i].name, tem) == 0)
		{
    
    
			return i;
		}
	}
	return -1;
}

6.删除联系人

//在通讯录中查找与输入姓名相同的姓名下标,否则返回-1
int find_by_name(people *arr,char tem[])
{
    
    
	if (arr->size == 0)return -1;
	for (int i = 0; i < arr->size; i++)
	{
    
    
		if (strcmp(arr->node[i].name, tem) == 0)
			return i;
	}
	return -1;
}
void del(people* arr)
{
    
    
	printf("请输入您要删除联系人的姓名:>");
	char tem[20];
	scanf("%s", tem);
	int ret = find_by_name(arr, tem);
	if (ret == -1)printf("您要删除的联系人不存在");
	else
	{
    
    
		for (int i = ret; i < arr->size - 1; i++)
		{
    
    
			strcpy(arr->node[i].name, arr->node[i + 1].name);
			strcpy(arr->node[i].address, arr->node[i + 1].address);
			strcpy(arr->node[i].sex, arr->node[i + 1].sex);
			strcpy(arr->node[i].tel, arr->node[i + 1].tel);
			arr->node[i].age = arr->node[i + 1].age;
		}
		arr->size--;
	}
}

7.修改联系人信息

int find_by_name(people *arr,char tem[])
{
    
    
	if (arr->size == 0)return -1;
	for (int i = 0; i < arr->size; i++)
	{
    
    
		if (strcmp(arr->node[i].name, tem) == 0)
			return i;
	}
	return -1;
}
void modify(people* arr)
{
    
    
	printf("请您输入您要修改哪位联系人的信息:>");
	char tem[20];
	scanf("%s", tem);
	int ret = find_by_name(arr, tem);
	if (ret == -1)
	{
    
    
		printf("您输入的联系人不存在于您的通讯录。\n");
	}
	else
	{
    
    
		printf("请输入您要修改的姓名:>");
		scanf("%s", arr->node[ret].name);
		printf("请输入您要修改人的性别:>");
		scanf("%s", arr->node[ret].sex);
		printf("请输入您要修改人的年龄:>");
		scanf("%d", &arr->node[ret].age);
		printf("请输入您要修改人的电话号码:>");
		scanf("%s", arr->node[ret].tel);
		printf("请输入您要修改联系人的地址:>");
		scanf("%s", arr->node[ret].address);
	}
}

8.通过联系人的年龄大小为联系人排序

主要使用了C语言中的库函数qsort

int my_compar(const void* s1, const void* s2)
{
    
    
	return ((Node*)s1)->age - ((Node*)s2)->age;
}
void sort_contact(people* arr)
{
    
    
	qsort(arr->node, arr->size, sizeof(arr->node[0]), my_compar);
}

总结

通过这个项目,我们对结构体,函数的知识有了更深一步的了解,希望这篇博客对您有用。

猜你喜欢

转载自blog.csdn.net/weixin_63614711/article/details/128751886