广告
返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >C语言实现制作通讯录(新手推荐)
  • 707
分享到

C语言实现制作通讯录(新手推荐)

2024-04-02 19:04:59 707人浏览 八月长安
摘要

目录一、本通讯录要实现的功能三、程序编写四、完整程序一、本通讯录要实现的功能 通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址 通讯录可执行的操作

一、本通讯录要实现的功能

通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址

通讯录可执行的操作如下:

  • 添加联系人信息
  • 删除指定联系人信息
  • 查找指定联系人信息
  • 修改指定联系人信息
  • 显示所有联系人信息
  • 清空所有联系人
  • 以名字排序所有联系人

二、通讯录初步准备:

1.创建一个.c文件,编写主函数main;

2.再创建一个.c文件,用于集中存放1中的.c文件所使用到的自定义函数;

3.创建一个.h头文件,用于申明1中的.c文件所使用到的函数。

如下图: 

三、程序编写

下文将介绍程序的编写思路:

步骤1、首先根据通讯录所包含的信息要求,在头文件中构造结构体PeoIfo,即通讯录要求包含的信息;再构造结构体contact用于储存多个联系人。(注:本段代码使用#define是因为整个程序中会多次用到这些数值,通过#define的方式若后期要修改值,不需要通篇去修改。)

#define MAX 100
#define nameMAX 20
#define sexMAX 10
#define telMAX 20
#define adrMAX 20
 
struct PeoIfo
{
    char name[nameMAX];
    char sex[sexMAX];
    int age;
    char tel[telMAX];
    char adr[adrMAX];
};
 
struct contact
{
    struct PeoIfo data[MAX];
    int sz;
};

步骤2、在第一个.c文件中写主函数main(),对步骤1中所构造的结构体进行初始化,初始化函数次数命名为InitContact(&con)。(注:此处段代码需要引用头文件“contact.h”)

#include"contact.h"
 
int main() {
 
    int input = 0;
    struct contact con;
    //初始化
    InitContact(&con);
 
 
 
    return 0;
}

步骤3、在头文件中申明初始化函数

//初始化
void InitContact(struct contact* pc);

步骤4、再另外一个.c文件中编写该初始化函数,使其实现初始化功能。

//初始化
void InitContact(struct contact* pc)
{
    pc->sz = 0;
    memset(pc->data, 0, MAX * sizeof(struct PeoIfo));
 
}

步骤5、回到主函数main()中。编写程序菜单menu(),再编写Switch语句,对应菜单中的选项。此处以1.add为例,1.add选项为增加联系人。

#include"contact.h"
void menu()
{
    printf("*****************************\n");
    printf("****1.add       2.del    ****\n");
    printf("****3.search    4.modify ****\n");
    printf("****5.show      6.empty  ****\n");
    printf("****7.sort      0.exit   ****\n");
    printf("*****************************\n");
}
int main() {
 
    int input = 0;
    struct contact con;
    //初始化
    InitContact(&con);
 
    do
    {
        menu();
        printf("请选择:");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            add(&con);
            break;
        case 2:
            del(&con);
            break;
        case 3:
            search(&con);
            break;
        case 4:
            modify(&con);
            break;
        case 5:
            show(&con);
            break;
        case 6:
            InitContact(&con);//直接给他初始化不就清空了。
            break;
        case 7:
            Sort(&con);
            break;
        case 0:
            printf("已退出通讯录。\n");
            break;
        default:
            printf("输入错误,请重新输入:\n");
            break;
        }
    } while (input);
 
    return 0;
}

步骤6、在.h头文件中申明函数

//添加联系人
void add(struct contact* pc);

步骤7、在另外一个.c文件中,对add函数编写,使其达到添加联系人的功能。此处介绍一下

pc->data[pc->sz].name的含义,pc->data[i],对data中的第i个联系人的结构体PeoIfo进行解引用,.name便是指该联系人的姓名。该段代码末尾pc->sz++,是指联系人+1。

//添加联系人
void add(struct contact* pc)
{
    if (pc->sz >= MAX)
    {
        printf("通讯录已满。\n");
        return;
    }
    printf("请输入姓名\n");
    scanf("%s", pc->data[pc->sz].name);
    printf("请输入性别\n");
    scanf("%s", pc->data[pc->sz].sex);
    printf("请输入年龄\n");
    scanf("%d", &(pc->data[pc->sz].age));
    printf("请输入电话\n");
    scanf("%s", pc->data[pc->sz].tel);
    printf("请输入住址\n");
    scanf("%s", pc->data[pc->sz].adr);
    pc->sz++;    
}

步骤8、同理重复步骤6、7,实现剩余的删除、查找等功能。此处不一一赘述,读者在学会add的编写之后,建议独自进行其他功能的函数实现思考。

四、完整程序

1、主函数所在的.c文件原码

#include"contact.h"
void menu()
{
    printf("*****************************\n");
    printf("****1.add       2.del    ****\n");
    printf("****3.search    4.modify ****\n");
    printf("****5.show      6.empty  ****\n");
    printf("****7.sort      0.exit   ****\n");
    printf("*****************************\n");
}
int main() {
 
    int input = 0;
    struct contact con;
    //初始化
    InitContact(&con);
 
    do
    {
        menu();
        printf("请选择:");
        scanf("%d", &input);
        switch (input)
        {
        case 1:
            add(&con);
            break;
        case 2:
            del(&con);
            break;
        case 3:
            search(&con);
            break;
        case 4:
            modify(&con);
            break;
        case 5:
            show(&con);
            break;
        case 6:
            InitContact(&con);//直接给他初始化不就清空了。
            break;
        case 7:
            Sort(&con);
            break;
        case 0:
            printf("已退出通讯录。\n");
            break;
        default:
            printf("输入错误,请重新输入:\n");
            break;
        }
    } while (input);
 
    return 0;
}

2、.h头文件原码

#define _CRT_SECURE_NO_WARNINGS 1
#pragma once
#include<stdio.h>
#include<string.h>
#include<assert.h>
#include<stdlib.h>
 
 
#define MAX 100
#define nameMAX 20
#define sexMAX 10
#define telMAX 20
#define adrMAX 20
 
 
struct PeoIfo
{
    char name[nameMAX];
    char sex[sexMAX];
    int age;
    char tel[telMAX];
    char adr[adrMAX];
};
 
struct contact
{
    struct PeoIfo data[MAX];
    int sz;
};
 
//初始化
void InitContact(struct contact* pc);
//添加联系人
void add(struct contact* pc);
//删除联系人
void del(struct contact* pc);
//查找联系人
void search(struct contact* pc);
//修改联系人
void modify(struct contact* pc);
//展示通讯录
void show(struct contact* pc);
//清空通讯录
void empty(struct contact* pc);
//按姓名排序
void Sort(struct contact* pc);

3、自定义函数所在的.c文件原码

#include"contact.h"
 
//打印项目
void pri()
{
    
    printf("%-15s\t%-10s\t%-10s\t%-10s\t%-20s\n", "姓名", "性别", "年龄", "电话", "住址");
}
 
//查找联系人的位置
int FindPOS(const struct contact* pc,char name[])
{
    int i = 0;
    for (i = 0; i < pc->sz; i++)
    {
        if (0==strcmp(pc->data[i].name, name) )
        {
            return i;
        }
    }
    return -1;
}
//初始化
void InitContact(struct contact* pc)
{
    pc->sz = 0;
    memset(pc->data, 0, MAX * sizeof(struct PeoIfo));
 
}
 
//添加联系人
void add(struct contact* pc)
{
    if (pc->sz >= MAX)
    {
        printf("通讯录已满。\n");
        return;
    }
    printf("请输入姓名\n");
    scanf("%s", pc->data[pc->sz].name);
    printf("请输入性别\n");
    scanf("%s", pc->data[pc->sz].sex);
    printf("请输入年龄\n");
    scanf("%d", &(pc->data[pc->sz].age));
    printf("请输入电话\n");
    scanf("%s", pc->data[pc->sz].tel);
    printf("请输入住址\n");
    scanf("%s", pc->data[pc->sz].adr);
    pc->sz++;    
}
 
//删除联系人
void del(struct contact* pc)
{
    printf("请输入要删除的联系人姓名:\n");
    char delname[nameMAX];
    scanf("%s", &delname);
    int ret=FindPOS(pc, delname);
    if (-1 == ret)
    {
        printf("要删除的联系人不存在\n");
    }
    else
    {
        int i = 0;
        for (i = ret; i < pc->sz - 1; i++)
        {
            pc->data[ret] = pc->data[ret + 1];
        }
        pc->sz--;
        printf("删除成功\n");
    }
}
 
//查找联系人
void search(struct contact* pc)
{
    char sechname[nameMAX];
    printf("请输入要找的联系人:\n");
    scanf("%s", &sechname);
    int ret = FindPOS(pc, sechname);
    if (-1 == ret)
    {
        printf("找不到联系人\n");
        return;
    }
    pri();
    printf("%-15s\t%-10s\t%-10d\t%-10s\t%-20s\n",
            pc->data[ret].name,
            pc->data[ret].sex,
            pc->data[ret].age,
            pc->data[ret].tel,
            pc->data[ret].adr);
}
 
 
//修改联系人
void modify(struct contact* pc)
{
    printf("请输入要修改的联系人姓名:\n");
    char moname[nameMAX];
    scanf("%s", &moname);
    int ret = FindPOS(pc, moname);
    if (-1 == ret)
    {
        printf("没有找到联系人\n");  
    }
    else
    {
        printf("请输入姓名\n");
        scanf("%s", pc->data[ret].name);
        printf("请输入性别\n");
        scanf("%s", pc->data[ret].sex);
        printf("请输入年龄\n");
        scanf("%d", &(pc->data[ret].age));
        printf("请输入电话\n");
        scanf("%s", pc->data[ret].tel);
        printf("请输入住址\n");
        scanf("%s", pc->data[ret].adr);
    }
 
}
 
 
//展示通讯录
void show(struct contact* pc)
{
    pri();
    int i = 0;
    for (i = 0; i < pc->sz; i++)
    {
        printf("%-15s\t%-10s\t%-10d\t%-10s\t%-20s\n",
            pc->data[i].name,
            pc->data[i].sex,
            pc->data[i].age,
            pc->data[i].tel,
            pc->data[i].adr);
    }
 
}
 
 
//按姓名排序
int compare(void* s1, void* s2)
{
    return strcmp(((struct PeoIfo*)s1)->name, ((struct PeoIfo*)s2)->name);
}
void Sort(struct contact* pc)
{
    qsort(pc->data, pc->sz, sizeof(struct PeoIfo), compare);
}

以上就是C语言实现制作通讯录(新手推荐)的详细内容,更多关于C语言通讯录的资料请关注编程网其它相关文章!

--结束END--

本文标题: C语言实现制作通讯录(新手推荐)

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

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

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

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

下载Word文档
猜你喜欢
  • C语言实现制作通讯录(新手推荐)
    目录一、本通讯录要实现的功能三、程序编写四、完整程序一、本通讯录要实现的功能 通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名、性别、年龄、电话、住址 通讯录可执行的操作...
    99+
    2022-11-13
  • 用C语言实现通讯录
    相信大家都见识过通讯录,通讯录里面一般有的内容为姓名,联系方式,年龄等信息。通讯录的主要功能有:增加、删除、查找、排序、修改、展示等操作。 那么具体应该用C语言怎么实现这个呢?接下来...
    99+
    2022-11-13
  • C语言实现通讯录程序
    本文实例为大家分享了C语言实现通讯录程序的具体代码,供大家参考,具体内容如下 设计要求: 可以存放1000个人的信息,每个人的信息包括姓名、年龄、性别、电话、住址 通讯录功能包括: ...
    99+
    2022-11-12
  • 详解C语言之实现通讯录
    目录基本思路和代码实现其他探讨总结基本思路和代码实现 为了代码清晰易读,我们创建一个Main.c源文件用来实现代码的基本逻辑。创建一个Contact.h源文件用于封装实现功能的函数,...
    99+
    2022-11-12
  • C语言实现通讯录小项目
    本文实例为大家分享了C语言实现通讯录小项目的具体代码,供大家参考,具体内容如下 编写程序实现通讯录的基本功能,可以做到增,删,查,改,打印通讯录,等等功能 test.c #inc...
    99+
    2022-11-12
  • C语言实现通讯录小功能
    本文实例为大家分享了C语言实现通讯录功能的具体代码,供大家参考,具体内容如下 头文件contact.h #pragma once #define _CRT_SECURE_NO_...
    99+
    2022-11-12
  • C语言实现简易通讯录实例
    目录一、问题描述二、功能介绍二、实现流程1.创建通讯录2.创建源文件test.c3.创建源文件contact.c4.删除通讯录联系人信息 (DelContact函数实现)5...
    99+
    2022-11-13
  • C语言实现简单通讯录系统
    本文实例为大家分享了C语言通讯录系统(增删改查),供大家参考,具体内容如下 全部代码如下所示: #include <iostream> #include <s...
    99+
    2022-11-12
  • C语言链表实现简易通讯录
    本文实例为大家分享了C语言链表实现简易通讯录的具体代码,供大家参考,具体内容如下 链表实现通讯录功能: 1.添加–(输入 姓名,电话) 2.删除-- (输入人名,删除该人) 3.查询...
    99+
    2022-11-12
  • C语言实现简单通讯录功能
    本文实例为大家分享了C语言实现简单通讯录功能的具体代码,供大家参考,具体内容如下 1.存放联系人信息 2.信息:名字+年龄+性别+电话+住址 3.增加联系人 4.删除联系人 5.查找...
    99+
    2022-11-12
  • C语言实现通讯录系统程序
    本文实例为大家分享了C语言实现通讯录系统程序的具体代码,供大家参考,具体内容如下 前言 利用链表增、删、改、查功能以及文件来完成通讯录系统。通讯录中包含联系人的基本信息:姓名、联系电...
    99+
    2022-11-13
  • C语言模拟实现动态通讯录
    目录1.模拟实现通讯录总体架构一览图2.文件执行任务3.分模块实现 测试模块 test.c头文件 功能函数声明 contact.h功能函数逐一实现1.模拟实现通讯录总体架构...
    99+
    2022-11-12
  • C语言实现通讯录的示例代码
    目录一、Contact.h文件二、Contact.c文件三、test.c文件一、Contact.h文件 包含函数的声明 #pragma once #define _CRT_SECUR...
    99+
    2022-11-13
    C语言实现通讯录 C语言 通讯录
  • C语言实现通讯录的详细代码
    目录(一)实现思路1.通讯录功能2.模块化实现各方面的功能3.代码实现(二)源代码A.test.cB.Contact.hC.Contact.c(一)实现思路 1.通讯录功能 添加好友...
    99+
    2022-11-12
  • C语言如何实现通讯录小项目
    这篇文章主要介绍了C语言如何实现通讯录小项目,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。本文实例为大家分享了C语言实现通讯录小项目的具体代码,供大家参考,具体内容如下编写程...
    99+
    2023-06-15
  • C语言开发实现通讯录管理系统
    本文实例为大家分享了C语言通讯录管理系统开发的具体代码,供大家参考,具体内容如下 程序介绍 通讯录管理系统主要是实现对联系人的增、删、查以及显示的基本操作。用户可以根据自己的需要在功...
    99+
    2022-11-13
    C语言通讯录管理系统 C语言通讯录系统 C语言通讯录管理
  • C语言模拟实现通讯录程序过程
    目录一、前言二、正文1.大体框架2.界面显示3. 创建通讯录4.初始化通讯录5.增加联系人6.显示联系人7. 删除联系人8.查找联系人9.修改联系人10. 排序联系人一、前言 在上一...
    99+
    2023-02-14
    C语言模拟实现通讯录 C语言模拟通讯录 C语言通讯录
  • 基于C语言怎么实现静态通讯录
    这篇文章主要介绍“基于C语言怎么实现静态通讯录”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“基于C语言怎么实现静态通讯录”文章能帮助大家解决问题。一、项目要求实现一个通讯录通讯录可以用来存储100个...
    99+
    2023-07-02
  • C语言之通讯录的模拟实现代码
    目录纲要:一.通讯录的静态版本    1.添加联系人  2.展示联系人  3.删除联系人  4.查找联系人信息  5.修改联系人信息  6.排序联系人 --- 我们使用 qsort ...
    99+
    2022-11-12
  • C语言实现简易通讯录完整流程
    目标:通讯录可以存放1000个人信息,人的信息:性别名字年龄电话住址 菜单打印 1.增加联系人 2.删除联系人 3.查找联系人(修改) 4.名字排序联系人 5.展示 6.清空 分析:...
    99+
    2022-11-13
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作