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

目录
  • 一、本通讯录要实现的功能
  • 三、程序编写
  • 四、完整程序

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

通讯录可以用来存储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语言通讯录的资料请关注我们其它相关文章!

(0)

相关推荐

  • 详解C语言之实现通讯录

    目录 基本思路和代码实现 其他探讨 总结 基本思路和代码实现 为了代码清晰易读,我们创建一个Main.c源文件用来实现代码的基本逻辑.创建一个Contact.h源文件用于封装实现功能的函数,创建Contact.h头文件用于函数的声明. 首先就是构架代码基本框架,在主函数中实现打印菜单和循环的功能 (这里为了好截图switch里的语句缩进得比较紧凑) 基本逻辑实现后开始考虑创建通讯录,通讯录里会记录人的信息.所以要先能够描述人的信息: 创建表达人的信息的结构体类型,在Contact.h中定义: 而

  • C语言代码实现通讯录管理系统

    目录 一.需求分析 二.程序结构 三.头文件内容的介绍 四.模块化实现各个功能 (1)主函数实现 (2)初始化通讯录 (3)添加联系人信息 (4)删除联系人信息 (5)查找联系人信息 (6)更改联系人信息 (7)显示所有联系人信息 (8)对联系人信息进行排序 (9)退出时销毁通讯录 本文实例为大家分享了C语言实现通讯录管理系统,供大家参考,具体内容如下 一.需求分析 运用C语言实现一个简单的通讯录管理系统,要求对数据有 增删改查清排显 等功能的实现(这里由于还没学到文件,所以下面所有的存储都是在

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

    本文实例为大家分享了C语言实现通讯录管理系统的具体代码,供大家参考,具体内容如下 要实现一个通讯录管理系统,需要用到结构体.指针.文件操作.动态管理等内容. 效果展示: 实现思路 通讯录中的联系人包括姓名.年龄.性别.电话.住址,因此可以定义一个结构体PeoInfo来存储这些信息. 同时,由于通讯录需要记录当前的大小,以此来方便我们对通讯录realloc进行扩容,所以需要定义通讯录结构体Contact来保存这些信息,其中该结构体中可以嵌套一个PeoInfo类型的指针. 当定义完结构体以后,就可以

  • 用c语言编写一个通讯录代码详解

    目录 实现通讯录的思路如下: 总结 实现通讯录的思路如下: 1.程序运行起来时用户首先要看到菜单栏选项并且对应菜单栏所给出的选项做出选择,这里我们简单设计一个Menu()函数可以让用户看见可选项目: 2.用户可选的范围应该是1~7,为了避免用户做出超出范围的选择我们可以用switch语句来判断用户的选择若用户输入的数字非法还可以让用户继续选择,而继续选择这个动作需要用到while语句,用户对通讯录的不断操作也需要用到while语句: 3.用户选择不同的选项,程序就要调用对应的函数来实现其功能并且

  • C语言实现静态版通讯录的示例代码

    目录 前言 通讯录需求分析 功能介绍 实现思路 代码实现 test.c contact.c contact.h 效果图 前言 大家好~今天要实现一个非常有意思的东西–通讯录. 通讯录需求分析 为了实现通讯录管理系统,为此,要保证实现以下的功能: 能够存放1000个联系人的信息.每个人的信息包含:名字.年龄.性别.电话.地址.除此之外,还是实现:增加人的信息.删除人的信息.修改指定人的信息.查找指定人的信息.清空联系人的信息.显示联系人的信息.排序通讯录的信息. 功能介绍 1.增加联系人信息 2.

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

    目录 一.本通讯录要实现的功能 三.程序编写 四.完整程序 一.本通讯录要实现的功能 通讯录可以用来存储1000个人的信息,每个人的信息包括:姓名.性别.年龄.电话.住址 通讯录可执行的操作如下: 添加联系人信息 删除指定联系人信息 查找指定联系人信息 修改指定联系人信息 显示所有联系人信息 清空所有联系人 以名字排序所有联系人 二.通讯录初步准备: 1.创建一个.c文件,编写主函数main: 2.再创建一个.c文件,用于集中存放1中的.c文件所使用到的自定义函数: 3.创建一个.h头文件,用于

  • 老生常谈C语言动态函数库的制作和使用(推荐)

    >>>>>>老生常谈C语言接静态函数库的制作和使用>>点击进入 2 动态函数库的制作和使用 动态函数库的制作步骤可以用下图来描述,具体包括 (1) 编写函数的.c文件(例如add.c.sub.c.mul.c和div.c) (2) 编写Makefile,然后make,实现函数的编译和归档入库 函数的编译:使用gcc –c add.c -fPIC只编译不链接函数.c文件,分别生成函数的目标文件(例如add.o.sub.o.mul.o和div.o). 函数的归档入

  • C语言实现简易通讯录

    本文实例为大家分享了C语言实现简易通讯录的具体代码,供大家参考,具体内容如下 功能描述: 1.存储联系人的相关信息,包括姓名.性别.电话号码.备注 2.可输出通讯录全部信息 3.清空通讯录的 4.用户交互界面 5.插入新联系人信息 6.查找联系人,包括"按姓名查找"和"按电话号查找"两种 7.删除联系人,包括"按姓名删除"和"按电话号删除"两种 8.按性别筛选联系人信息 在本次通讯录的编写代码中,涉及到了C高级和数据结构的一些

  • 用C语言实现简易通讯录

    C语言实现一个通讯录,通讯录可以用来存储1000个人的信息,每个人的信息包括: 姓名.性别.年龄.电话.住址 **提供方法: 1. 添加联系人信息 2. 删除指定联系人信息 3. 查找指定联系人信息 4. 修改指定联系人信息 5. 显示所有联系人信息 6. 清空所有联系人 7. 以名字排序所有联系人** 思路分析: 首先我们可以分三个模块来解决这个问题,第一个模块我们需要一个头文件,这个头文件里可以包含一些相应信息,当实现文件和测试文件包含自己定义的头文件时便可以获得一些相关的信息.所以头文件里

  • C语言实现简易通讯录功能

    本文实例为大家分享了C语言实现简易通讯录的具体代码,供大家参考,具体内容如下 这两天用C语言编写了一个简易版通讯录(学生信息管理) ,大致功能有添加信息,查看信息(自动按姓名排序,printf输出带颜色字体),查找信息(按姓名查找),删除信息(输入姓名删除相关信息),修改信息(输入修改人的名字,可选择修改其任意信息)和退出 . #include <stdio.h> #include <string.h> #include <stdlib.h> #define SIZE

  • 基于C语言实现个人通讯录管理系统

    之前利用C语言完成了一个关于个人通讯录管理系统的课题,主要是关于联系人的添加.查找.删除.修改.输出以及文件的写入与读出,还有一个甜点功能-模拟通话,它的实现原理也很容易理解,文章末尾会介绍到. 主框架: 1.函数声明 关于这里的函数声明,主要是为了可以清楚的了解整个系统的功能,这里不做过多介绍.还有结构体链表的创建,贯穿了各个功能代码部分,必不可少. 2.联系人的添加 这部分主要涉及联系人的姓名.地址.电话.QQ号和邮箱(当然需要其他功能可自行添加),考虑到数组操作不便前提下,使用链表的尾插法

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

    C语言实现的通讯录管理系统,供大家参考,具体内容如下 设计一个学生通信录,学生通迅录数据信息构成内容可自行设计(如:学号.姓名.电话号码.所在班级.寝室地址等),通信录数据类型定义为结构体类型. 主要实现功能包括: (1)创建学生通讯录 (2)修改学生通讯录 (3)增删学生通讯录 (4)能够按多种方式进行查询(如:①按学号查询:②按所在班级查询) 源代码: #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<string.

  • C语言实现简单通讯录功能

    本文实例为大家分享了C语言实现简单通讯录功能的具体代码,供大家参考,具体内容如下 1.存放联系人信息 2.信息:名字+年龄+性别+电话+住址 3.增加联系人 4.删除联系人 5.查找联系人 6.修改联系人 7.排序 test.c源文件代码如下: #define _CRT_SECURE_NO_WARNINGS 1 #include "contact.h" void menu() { printf("#####################################\n&

  • C语言实现简易通讯录完整流程

    目标:通讯录可以存放1000个人信息,人的信息:性别名字年龄电话住址 菜单打印 1.增加联系人 2.删除联系人 3.查找联系人(修改) 4.名字排序联系人 5.展示 6.清空 分析: 首先通讯录存放联系人信息,还需知晓联系人个数,因此是个结构体类型 其次人的信息类型多,因此每个联系人也应为结构体类型 说明: 每个标题下展示的代码顺序:test.c (主函数测试运行)  ->  contact.h  (功能函数声明) ->  contact.c  (功能函数实现) 菜单打印: void menu

  • C语言实现简易通讯录实例

    目录 一.问题描述 二.功能介绍 二.实现流程 1.创建通讯录 2.创建源文件test.c 3.创建源文件contact.c 4.删除通讯录联系人信息 (DelContact函数实现) 5.查找通讯录联系人信息( SearchContact函数实现) 6.修改联系人信息(ModifyContact函数实现) 总结: 一.问题描述 用C语言来写一个简易的通讯录 二.功能介绍 通讯录1.通讯录中能够存放1000个人的信息每个人的信息:名字,年龄,性别,电话,地址2.增加人的信息3.删除人的信息4.修

随机推荐