文章目录

  • 前言
  • 一、项目头文件包含,结构体定义,以及函数声明与介绍
  • 二、具体函数的实现
    • 1.初始化结构
    • 2.添加联系人信息
    • 3.显示所有联系人信息
    • 4.清空通讯录
    • 5.通过姓名查找一个联系人
    • 6.删除联系人
    • 7.修改联系人信息
    • 8.通过联系人的年龄大小为联系人排序
  • 总结

前言

本文我们将介绍如何实现一个通讯录管理系统,它的功能介绍如下:通讯录可以用来存储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);

二、具体函数的实现

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,即可清空所有联系人的信息。

代码如下:

void clear(people* arr){arr->size = 0;printf("您的通讯录已经清空\n");}

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

代码如下:

//找到匹配的人名返回下标,否则返回-1int 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.删除联系人

//在通讯录中查找与输入姓名相同的姓名下标,否则返回-1int 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);}

总结

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