本文我们将介绍如何实现一个通讯录管理系统,它的功能介绍如下:通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址。我们可以对通讯录进行以下几种操作:添加联系人信息、删除指定联系人信息、查找指定联系人信息、修改指定联系人信息、显示所有联系人信息、清空所有联系人、以年龄大小排序所有联系人。
#pragma once
#include
#define MAXSIZE 1000//通讯录的最大容量
#include //使用字符串函数
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);
因为我们开始时,我们的通讯录中并未填入联系人的信息,所以初始化结构体中的当前人数为0。
代码如下:
void InitPeople(people* arr)
{
arr->size = 0;
}
当我们的当前人数未达到通讯录储存人数的最大限制时,我们可以向通讯录中添加联系人信息。
代码如下:
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++;
}
当我们的通讯录中的联系人个数不为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");
}
只要将通讯录中的人数归为0,即可清空所有联系人的信息。
代码如下:
void clear(people* arr)
{
arr->size = 0;
printf("您的通讯录已经清空\n");
}
代码如下:
//找到匹配的人名返回下标,否则返回-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;
}
//在通讯录中查找与输入姓名相同的姓名下标,否则返回-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--;
}
}
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);
}
}
主要使用了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);
}
通过这个项目,我们对结构体,函数的知识有了更深一步的了解,希望这篇博客对您有用。