iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现简单的通讯录管理系统
  • 411
分享到

C语言实现简单的通讯录管理系统

2024-04-02 19:04:59 411人浏览 安东尼
摘要

本文实例为大家分享了C语言实现通讯录管理系统的具体代码,供大家参考,具体内容如下 要实现一个通讯录管理系统,需要用到结构体、指针、文件操作、动态管理等内容。 效果展示: 实现思路

本文实例为大家分享了C语言实现通讯录管理系统的具体代码,供大家参考,具体内容如下

要实现一个通讯录管理系统,需要用到结构体、指针、文件操作、动态管理等内容。

效果展示:

实现思路

通讯录中的联系人包括姓名、年龄、性别、电话、住址,因此可以定义一个结构体PeoInfo来存储这些信息。

同时,由于通讯录需要记录当前的大小,以此来方便我们对通讯录realloc进行扩容,所以需要定义通讯录结构体Contact来保存这些信息,其中该结构体中可以嵌套一个PeoInfo类型的指针。

当定义完结构体以后,就可以对定义的结构体进行增删查改,其中可以先使用malloc对通讯录结构体进行初始化,然后再完成添加、删除、查找、修改、保存、排序、清空等一系列函数。

在保存时,需要用到文件指针将数据保存到文件中,因此在一开始当前目录下需要一个相应的文件。
同时在初始化时,也要将文件中的数据读取到我们的结构体指针指向的内容中。
在这里使用contact.txt文件来保存信息:

为了方便,我们将函数声明,函数实现,以及游戏的实现放到三个不同文件里:

contact.h内容

#pragma once
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<errno.h>

#define MAX_NAME 10//名字的大小
#define MAX_SEX 5//性别大小
#define MAX_TELE 15//电话大小
#define MAX_ADDR 30//地址大小
#define DEFAULT_SZ 3 //通讯录默认的大小

enum Option
{
    EXIT,
    ADD,
    DEL,
    SEARCH,
    MODIFY,
    SHOW,
    SORT,
    SAVE,
    CLEAR
};
struct PeoInfo
{
    char name[MAX_NAME];
    int age;
    char sex[MAX_SEX];
    char tele[MAX_TELE];
    char addr[MAX_ADDR];
};

//通讯录类型
struct Contact
{
    struct PeoInfo* data;//存放信息
    int size;//记录当前已经有的元素个数
    int capacity;//当前通讯录的最大容量
};

//初始化通讯录
void InitContact(struct Contact* ps);

//增加通讯录内容
void AddContact(struct Contact* ps);

//打印通讯录信息
void ShowContact(const struct Contact* ps);

//删除通讯录信息
void DelContact(struct Contact* ps);

//查找通讯录信息
void SearchContact(const struct Contact* ps);

//修改指定联系人
void ModifyContact(struct Contact* ps);

//按姓名排序
void SortContact(struct Contact* ps);

//释放动态开辟的内存
void DestroyContact(struct Contact* ps);

//保存通讯录
void SaveContact(struct Contact* ps);

//加载文件中的信息到通讯录
void LoadContact(struct Contact* ps);

//清空通讯录
void ClearContact(struct Contact* ps);

这个文件中主要包括结构体的创建,以及各种函数的声明。

contact.c内容

#include"contact.h"

void InitContact(struct Contact* ps)
{
    ps ->data =(struct PeoInfo*) malloc(DEFAULT_SZ * sizeof(struct PeoInfo));
    if (ps->data == NULL)
    {
        printf("空间开辟失败");
        return;
    }
    ps->size = 0;
    ps->capacity = DEFAULT_SZ;
    //把文件中存放的信息加载到通讯录中
    LoadContact(ps);
}
void CheckCapacity(struct Contact* ps)
{
    if (ps->size == ps->capacity)
    {
        struct PeoInfo* ptr = (struct PeoInfo*)realloc(ps->data, (ps->capacity + 5) * sizeof(struct PeoInfo));
        if (ptr != NULL)
        {
            ps->data = ptr;
            ps->capacity += 5;
        }
    }
}
void LoadContact(struct Contact* ps)
{
    struct PeoInfo tmp = { 0 };
    FILE* pfRead = fopen("contact.txt", "rb");
    if (pfRead == NULL)
    {
        printf("文件不存在:%s\n", strerror(errno));
        return;
    }
    //读取文件
    while (fread(&tmp, sizeof(struct PeoInfo), 1, pfRead))
    {
        CheckCapacity(ps);
        ps->data[ps->size] = tmp;
        ps->size++;
    }
    fclose(pfRead);
    pfRead = NULL;
}


void AddContact(struct Contact* ps)
{
    //检测当前通讯录的容量,如果满了则增容
    CheckCapacity(ps);
    printf("请输入名字->");
    scanf("%s", ps->data[ps->size].name);
    printf("请输入年龄->");
    scanf("%d", &(ps->data[ps->size].age));
    printf("请输入性别->");
    scanf("%s", ps->data[ps->size].sex);
    printf("请输入电话->");
    scanf("%s", ps->data[ps->size].tele);
    printf("请输入地址->");
    scanf("%s", ps->data[ps->size].addr);
    
    ps->size++;
    printf("添加成功\n");
    
}

void ShowContact(const struct Contact* ps)
{
    if (ps->size == 0)
    {
        printf("通讯录为空\n");

    }
    else
    {
        int i = 0;
        printf("%-10s\t%-4s\t%-5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "电话", "地址");
        {
            for (i = 0; i < ps->size; i++)//打印每个通讯录元素
            {
                printf("%-10s\t%-4d\t%-5s\t%-12s\t%-20s\n", 
                    ps->data[i].name, ps->data[i].age, ps->data[i].sex, 
                    ps->data[i].tele, ps->data[i].addr);
            }
        }
    }
}
//查找联系人位置
int FindByName(const struct Contact* ps, char name[MAX_NAME])
{
    //查找要删除人的位置
    int i = 0;
    for (i = 0; i < ps->size; i++)
    {
        if (0 == strcmp(ps->data[i].name, name))
        {
            return i;//找到返回下标
        }
    }
    return -1;//找不到返回-1
}

void DelContact(struct Contact* ps)
{
    char name[MAX_NAME];
    printf("请输入要删除人的名字:->");
    scanf("%s", name);
    //查找要删除人的位置
    int pos=FindByName(ps, name);//找到返回名字所在的下标,找不到返回-1
    
    if (pos==-1)
    {
        printf("联系人不存在\n");
    }
    else
    {
        //删除
        int j = 0;
        for (j = pos; j < ps->size-1; j++)
        {
            ps->data[j] = ps->data[j + 1];
        }
        ps->size--;
        printf("删除成功\n");
    }

}

void SearchContact(const struct Contact* ps)
{
    char name[MAX_NAME];
    printf("请输入要查找人的名字:->");
    scanf("%s", name);
    int pos = FindByName(ps, name);//找到返回名字所在的下标,找不到返回-1
    if (pos == -1)
    {
        printf("联系人不存在\n");
    }
    else
    {
        printf("%-10s\t%-4s\t%-5s\t%-12s\t%-20s\n", "名字", "年龄", "性别", "电话", "地址");        
        printf("%-10s\t%-4d\t%-5s\t%-12s\t%-20s\n",
         ps->data[pos].name, ps->data[pos].age, ps->data[pos].sex,
         ps->data[pos].tele, ps->data[pos].addr);
            
    }        
}

void ModifyContact(struct Contact* ps)
{
    char name[MAX_NAME];
    printf("请输入要修改人的名字:->");
    scanf("%s", name);
    int pos = FindByName(ps, name);//找到返回名字所在的下标,找不到返回-1
    if (pos == -1)
    {
        printf("联系人不存在\n");
    }
    else
    {
        printf("请输入名字->");
        scanf("%s", ps->data[pos].name);
        printf("请输入年龄->");
        scanf("%d", &(ps->data[pos].age));
        printf("请输入性别->");
        scanf("%s", ps->data[pos].sex);
        printf("请输入电话->");
        scanf("%s", ps->data[pos].tele);
        printf("请输入地址->");
        scanf("%s", ps->data[pos].addr);

        printf("修改完成\n");
    }
}

void SortContact(struct Contact* ps)
{
    for (int i = 0; i < ps->size - 1; ++i)
    {
        for (int j = 0; j < ps->size - i - 1; ++j)
        {
            if (strcmp(ps->data[j].name, ps->data[j + 1].name) > 0)
            {
                struct PeoInfo tmp = ps->data[j];
                ps->data[j] = ps->data[j + 1];
                ps->data[j + 1] = tmp;
            }
        }
    }
    printf("按姓名排序成功\n");
}

//释放动态开辟的空间
void DestroyContact(struct Contact* ps)
{
    free(ps->data);
    ps->data=NULL;
}


void SaveContact(struct Contact* ps)
{
    FILE* pfWrite = fopen("contact.txt", "wb");
    if (pfWrite == NULL)
    {
        printf("%s\n", strerror(errno));
        return;
    }
    //将通讯录的信息写入文件
    int i = 0;
    for (i = 0; i < ps->size; i++)
    {
        fwrite(&(ps->data[i]), sizeof(struct PeoInfo), 1, pfWrite);
    }
    printf("保存成功\n");
    fclose(pfWrite);
    pfWrite = NULL;
}

void ClearContact(struct Contact* ps)
{
    printf("确定要清空通讯录吗?<Y/N> :>");
    char ch;
    getchar();//清空缓存区里面的\n
    scanf("%c", &ch);
    if (ch == 'Y' || ch == 'y')
    {
        ps->size = 0;
        memset(ps->data, 0, sizeof(ps->data));
        printf("清空成功\n");
    }
    else
    {
        printf("取消清空\n");
    }
    
}

在这个文件中我们将声明的函数进行了定义,用到的方法都比较简单。

test.c内容

#include"contact.h"
void menu()
{
    printf("**************************************************\n");
    printf("****1.添加联系人        2.删除联系人**************\n");
    printf("****3.查找联系人        4.修改联系人*************\n");
    printf("****5.展示所有联系人    6.按姓名排序联系人********\n");
    printf("****7.保存通讯录        8.清空通讯录*************\n");
    printf("**************0.退出通讯录************************\n");
    printf("**************************************************\n");
}


int main()
{
    int input = 0;
    //创建通讯录
    int size = 0;
    struct Contact con;//con是通讯录
    //初始化通讯录
    InitContact(&con);

    do
    {
        menu();
        printf("请选择->");
        scanf("%d", &input);
        switch (input)
        {
        case ADD:
            AddContact(&con);
            system("pause");
            system("cls");
            break;
        case DEL:
            DelContact(&con);
            system("pause");
            system("cls");
            break;
        case SEARCH:
            SearchContact(&con);
            system("pause");
            system("cls");
            break;
        case MODIFY:
            ModifyContact(&con);
            system("pause");
            system("cls");
            break;
        case SHOW:
            ShowContact(&con);
            system("pause");
            system("cls");
            break;
        case SORT:
            SortContact(&con);
            system("pause");
            system("cls");
            break;
        case SAVE:
            SaveContact(&con);
            system("pause");
            system("cls");
            break;
        case CLEAR:
            ClearContact(&con);
            system("pause");
            system("cls");
            break;
        case EXIT:
            SaveContact(&con);
            //释放动态开辟的内存
            DestroyContact(&con);
            break;
        default:
            printf("选择错误\n");
            break;
        }
    } while (input);
}

在这个文件中将对菜单进行打印,同时进行函数的调用。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程网。

--结束END--

本文标题: C语言实现简单的通讯录管理系统

本文链接: https://www.lsjlt.com/news/151517.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • C语言实现简单通讯录管理系统
    C语言实现的通讯录管理系统,供大家参考,具体内容如下 设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:学号、姓名、电话号码、所在班级、寝室地址等),通信录数据类型定义为...
    99+
    2024-04-02
  • C语言实现简单的通讯录管理系统
    本文实例为大家分享了C语言实现通讯录管理系统的具体代码,供大家参考,具体内容如下 要实现一个通讯录管理系统,需要用到结构体、指针、文件操作、动态管理等内容。 效果展示: 实现思路 ...
    99+
    2024-04-02
  • C语言怎么实现简单的通讯录管理系统
    下面是一个使用C语言实现简单通讯录管理系统的示例代码: #include <stdio.h> #include <...
    99+
    2024-03-08
    c语言
  • 怎么用C语言实现简单通讯录管理系统
    本篇内容主要讲解“怎么用C语言实现简单通讯录管理系统”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么用C语言实现简单通讯录管理系统”吧!C语言实现的通讯录管理系统,供大家参考,具体内容如下设计...
    99+
    2023-06-20
  • C语言实现简单通讯录系统
    本文实例为大家分享了C语言通讯录系统(增删改查),供大家参考,具体内容如下 全部代码如下所示: #include <iostream> #include <s...
    99+
    2024-04-02
  • C++实现简单通讯录管理系统
    本文实例为大家分享了C++实现简单的通讯录管理系统的具体代码,供大家参考,具体内容如下 一、代码 #include <iostream> #include <str...
    99+
    2024-04-02
  • C++实现简单的通讯录管理系统
    本文实例为大家分享了C++实现简单的通讯录管理系统的具体代码,供大家参考,具体内容如下 案例描述: 通讯录是一个可以记录亲人、好友信息的工具。本教程主要利用C++来实现一个通讯录管理...
    99+
    2024-04-02
  • C++实现简单版通讯录管理系统
    这个通讯录管理系统是我听课后做的笔记,都是很基础的逻辑实现,第一次动手写了一个小案例感觉找到了一点方向,也希望能帮到一点忙! 1、系统需求 通讯录是一个可以记录亲人、好友信息的工具。...
    99+
    2024-04-02
  • C语言单链表实现通讯录管理系统
    本文实例为大家分享了C语言单链表实现通讯录管理系统的具体代码,供大家参考,具体内容如下 本人前几天刚刚自学了单链表,趁热打铁,赶紧写一个小小的项目练练手。 单链表的实现在本人之前的博...
    99+
    2024-04-02
  • C++怎么实现简单通讯录管理系统
    本篇内容介绍了“C++怎么实现简单通讯录管理系统”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、代码#include <i...
    99+
    2023-06-29
  • python实现简单通讯录管理系统
    本文实例为大家分享了python实现通讯录管理系统的具体代码,供大家参考,具体内容如下 =====欢迎使用通讯录管理系统=====1.添加2.修改3.册除4.查询5.排序6.退出==...
    99+
    2024-04-02
  • Java实现简单通讯录管理系统
    本文实例为大家分享了Java实现通讯录管理系统的具体代码,供大家参考,具体内容如下 题目: 1、完成一个通讯录,需求: (1)添加联系人(联系人:编号,姓名,手机号,QQ,邮箱地址)...
    99+
    2024-04-02
  • C语言单链表如何实现通讯录管理系统
    这篇文章将为大家详细讲解有关C语言单链表如何实现通讯录管理系统,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。通讯录管理系统保存人的信息有: 名字   name电话 ...
    99+
    2023-06-15
  • C++实现简易通讯录管理系统
    目录前言结构体联系人结构体通讯录结构体函数模块菜单添加联系人显示联系人判断联系人删除联系人查找联系人清空所有联系人main函数源代码运行结果本文实例为大家分享了C++实现简易通讯录管...
    99+
    2024-04-02
  • C语言代码实现通讯录管理系统
    目录一、需求分析二、程序结构三、头文件内容的介绍四、模块化实现各个功能(1)主函数实现(2)初始化通讯录(3)添加联系人信息(4)删除联系人信息(5)查找联系人信息(6)更改联系人信...
    99+
    2024-04-02
  • C++实现简单通讯录系统
    本文实例为大家分享了C++实现简单通讯录系统的具体代码,供大家参考,具体内容如下 需求分析: 1.通讯录可以添加联系人。 2.通讯录可以显示所有联系人。 3.通讯录可以查找联系人。 ...
    99+
    2024-04-02
  • C语言开发实现通讯录管理系统
    本文实例为大家分享了C语言通讯录管理系统开发的具体代码,供大家参考,具体内容如下 程序介绍 通讯录管理系统主要是实现对联系人的增、删、查以及显示的基本操作。用户可以根据自己的需要在功...
    99+
    2022-11-13
    C语言通讯录管理系统 C语言通讯录系统 C语言通讯录管理
  • C++实现简易的通讯录管理系统
    本文实例为大家分享了C++实现简易通讯录管理系统的具体代码,供大家参考,具体内容如下 1. 效果图 2. 需要的知识 C++基础知识(包括变量,运算符,顺序,分支,循环)数组函数指...
    99+
    2024-04-02
  • C语言实现简单通讯录功能
    本文实例为大家分享了C语言实现简单通讯录功能的具体代码,供大家参考,具体内容如下 1.存放联系人信息 2.信息:名字+年龄+性别+电话+住址 3.增加联系人 4.删除联系人 5.查找...
    99+
    2024-04-02
  • python怎么实现简单通讯录管理系统
    要实现简单的通讯录管理系统,可以使用Python的字典来存储联系人的信息。以下是一个简单的实现示例:```pythoncontact...
    99+
    2023-08-18
    python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作