服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - C语言实现通讯录的详细代码

C语言实现通讯录的详细代码

2022-07-29 10:31jbzj C/C++

本文详细讲解了C语言实现通讯录的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下

(一)实现思路

1.通讯录功能

添加好友,删除好友,查找好友,修改好友信息,对好友进行排序

2.模块化实现各方面的功能

a. test.c

测试通讯录功能

b. Contact.c

实现通讯录功能

c. Contact.h

包含通讯录实现的头文件

3.代码实现

(二)源代码

A.test.c

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "contact.h"
 
 
void menu()
{
    printf("*******************************\n");
    printf("***  1.Add         2.Del    ***\n");
    printf("***  3.Search      4.Modify ***\n");
    printf("***  5.Show        6.Sort   ***\n");
    printf("***  7.Help        8.About0 ***\n");
    printf("***  0.Exit                 ***\n");
    printf("*******************************\n");
}
 
 
int main()
{
 
    int input = 0;
    //创建通讯录
    int size = 0;
    struct Contact con;//一个结构体里包含1000个人的信息和size;
    //size表示的是该通讯录里现在的好友数
    //初始化通讯录
    InitContact(&con);//使size的初始值,以及好友信息初始化为0;
    do
    {
        menu();
        printf("请选择:");
        scanf("%d", &input);
        switch (input)
        {
            //添加好友信息
        case Add:
            AddContact(&con);
            break;
            //删除好友
 
        case Del:
            DelContact(&con);
            break;
 
            //查找好友信息
        case Search:
            SearchContact(&con);
            break;
 
            //修改好友信息
        case Modify:
            ModifyContact(&con);
            break;
 
            //显示好友信息
        case Show:
            ShowContact(&con);
            break;
 
            //好友排序
        case Sort:
            SortContact(&con);
            break;
 
            //退出
        case Exit:
            printf("退出通讯录!");
            break;
 
            //通讯录的使用以及帮助
        case Help:
            HelpContact();
            break;
 
            //关于通讯录
        case About:
            AboutContact();
            break;
 
            //选择错误
        default:
            printf("选择错误!");
            break;
        }
 
    } while (input);
    return 0;
}

B.Contact.h

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
#define _CRT_SECURE_NO_WARNINGS 1
#define Max 1000
#define Max_name 20
#define Max_sex 5
#define Max_tele 12
#define Max_addr 30
 
enum Option
{
    Exit,
    Add,
    Del,
    Search,
    Modify,
    Show,
    Sort,
    Help,
    About
 
};
 
 
//创建一个结构体来存放通讯录中要存放的信息
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[Max];//存放一个信息,包括好友姓名,年龄,性别,电话,地址
    int size;//记录当前已经有的元素个数
    //存入一个好友,size加1,表示通讯录人数增加一个
};
 
 
//声明函数
//1.对通讯录进行初始化
void InitContact(struct Contact* ps);
 
//增加好友信息
void AddContact(struct Contact* ps);
 
//删除好友
void DelContact(struct Contact* ps);
 
//查找指定姓名的好友
void SearchContact(struct Contact* ps);
 
//显示好友信息
void ShowContact(const struct Contact* ps);
 
//修改好友信息
void ModifyContact( struct Contact* ps);
 
//按名字首字母对通讯录的好友进行排序
void SortContact( struct Contact* ps);
 
//帮助使用通讯录
void HelpContact();
 
//关于通讯录
void AboutContact();

C.Contact.c

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
#define _CRT_SECURE_NO_WARNINGS 1
 
#include "contact.h"
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
//初始化通讯录
void InitContact(struct Contact* ps)
{
    memset(ps->data, 0, sizeof(ps->data));
    ps->size = 0;//设置通讯录最初只有0个元素
}
 
 
//帮助使用通讯录
void HelpContact()
{
    printf("各按键的使用:\n");
    printf("1.添加好友\n");
    printf("2.删除好友\n");
    printf("3.查找好友信息\n");
    printf("4.修改好友信息\n");
    printf("5.显示好友信息\n");
    printf("6.对好友进行排序\n");
    printf("7.帮助使用通讯录\n");
    printf("8.关于通讯录\n");
    printf("谢谢使用通讯录!\n");
 
}
 
//关于通讯录
void AboutContact()
{
    printf("通讯录一般指在日常生活中用笔记录,也在手机,电脑,电子字典等电子产品中拥有这个功能。\n");
}
 
 
//增加好友的电话,信息
void AddContact(struct Contact* ps)
{
    if (ps->size == Max)
    {
        printf("通讯录已满,无法增加!\n");
    }
    else
    {
        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++;
        //添加成功一个1好友,size加1,;
        printf("添加成功!\n");
    }
 
}
 
 
//在删除,查找,修改的函数中均涉及查找到该好友才能进行
//为了避免冗余,我们把查找的这个环节从函数中抽离出来
//在函数中直接使用,就不会显得重复
 
static int Find_by_name(struct Contact* ps, char name[Max_name])
{
    int i;
    for (i = 0; i < ps->size; i++)
    {
        //将要查找的好友姓名与通讯录中的好友进行比较
        if (0 == strcmp(ps->data[i].name, name))
        {
            //若找到,返回其下标
            return i;
        }
    }
    //若都循环,比对完了以后还没找到就返回-1
    return -1;
}
 
 
//删除好友信息
void DelContact(struct Contact* ps)
{
    int  j;
    char name[Max_name];
    printf("请输入删除好友的名字:");
    scanf("%s", name);
    //1.查找要删除的人的位置
    int pos = Find_by_name(ps, name);
    //调用函数进行查找,若找到,返回下标,若没找到,返回-1;
    //2.删除
    if (pos==-1)
    {
        printf("该好友不存在!\n");
    }
    else
    {
        //删除数据
        for (j = pos; j < ps->size - 1; j++)
        {
            ps->data[j] = ps->data[j + 1];
            //删除数据后,后面的元素位置都改变,向前移动一个位置;
        }
        ps->size--;
        //删除一个好友,size-1.
        printf("删除成功!\n");
    }
}
 
 
//查找指定好友信息
void SearchContact(struct Contact* ps)
{
    char name[Max_name];
    printf("输入要查找的好友姓名:");
    scanf("%s", name);
    int pos = Find_by_name(ps, name);
    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=Find_by_name(ps, name);
    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 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 cmp_stu_by_name(const void* e1, const void* e2)
{
    return (strcmp(((struct Contact*)e1)->data->name, ((struct Contact*)e2)->data->name));
}
 
 
//我们用qsort()函数对我们的好友按照名字首字母进行排序
void SortContact( struct Contact* ps)
{
    qsort(ps->data, ps->size, sizeof(ps->data[0]), cmp_stu_by_name);
    printf("%10s\t%4s\t%5s\t%12s\t%20s\n", "名字", "年龄", "性别", "电话", "地址");
    int i;
    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);
    }
}

到此这篇关于C语言实现通讯录的详细代码的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持服务器之家。

延伸 · 阅读

精彩推荐
  • C/C++关于在MFC中将窗口最小化到托盘实现原理及操作步骤

    关于在MFC中将窗口最小化到托盘实现原理及操作步骤

    最小化的原理:首先要将窗口隐藏,然后在右下角绘制图标;恢复的原理:将窗口显示,再将托盘中的图片删除,接下来介绍实现方法,感兴趣的朋友可以了...

    编程技术网4562020-11-16
  • C/C++c++中c_str()的用法示例

    c++中c_str()的用法示例

    这篇文章主要介绍了c++中c_str()的用法示例,帮助大家更好的理解和学习C++,感兴趣的朋友可以了解下...

    chuyaoxin9342021-09-28
  • C/C++C++多线程编程详解

    C++多线程编程详解

    这篇文章主要介绍了c语言多线程编程使用示例,小编觉得这篇文章写的还不错,需要的朋友可以参考下,希望能够给你带来帮助...

    UExplorer11722022-01-17
  • C/C++详解C语言在STM32中的内存分配问题

    详解C语言在STM32中的内存分配问题

    这篇文章主要介绍了C语言在STM32中的内存分配,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参...

    Fireflycjd10192022-07-27
  • C/C++一文学会数据结构-堆

    一文学会数据结构-堆

    本文主要介绍了数据结构-堆,文中通过图片和大量的代码讲解的非常详细,需要学习的朋友可以参考下这篇文章,希望可以帮助到你...

    双鱼21110962021-12-23
  • C/C++详解C++中二进制求补运算符与下标运算符的用法

    详解C++中二进制求补运算符与下标运算符的用法

    这篇文章主要介绍了C++中二进制求补运算符与下标运算符的用法,是C++入门学习中的基础知识,需要的朋友可以参考下...

    C++教程网10022021-03-19
  • C/C++stl容器set,map,vector之erase用法与返回值详细解析

    stl容器set,map,vector之erase用法与返回值详细解析

    在使用 list、set 或 map遍历删除某些元素时可以这样使用,如下所示...

    C语言教程网5592020-12-31
  • C/C++vscode+platformIO开发stm32f4的实现

    vscode+platformIO开发stm32f4的实现

    这篇文章主要介绍了vscode+platformIO开发stm32f4的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下...

    Laggage5392021-09-03