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

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

1. 思路

通讯录管理系统主要分为三个模块:显示、添加、删除联系人。首先,我们需要定义一个联系人的结构体,包含姓名、电话、地址等基本信息。然后,通过数组来存储联系人信息,可以通过遍历数组来显示已有联系人,通过添加、删除数组中的元素来添加、删除联系人信息。

2. 代码实现

2.1 定义联系人结构体

在这个管理系统中,我们需要联系人的名字、电话和地址。一个合适的结构体定义如下:

#define MAX_NAME 20     // 姓名最大长度
#define MAX_PHONE 12    // 电话最大长度
#define MAX_ADDR 30     // 地址最大长度

typedef struct {
    char name[MAX_NAME];    // 姓名
    char phone[MAX_PHONE];  // 电话
    char addr[MAX_ADDR];    // 地址
} person;  

2.2 显示联系人信息

添加联系人后,我们需要显示已有的所有联系人信息。这个可以通过遍历数组来实现。示例代码如下:

int show(person *list, int count) {
    int i;
    if (count == 0) {
        printf("\nEmpty List!\n");
        return 0;
    }
    printf("%-20s%-20s%-20s\n", "Name", "Phone", "Address");
    for (i = 0; i < count; i++) {
        printf("%-20s%-20s%-20s\n", list[i].name, list[i].phone, list[i].addr);
    }
    return 0;
}

2.3 添加联系人

添加联系人主要是向数组中添加一个person结构体元素。示例代码如下:

int add(person *list, int *pcount) {
    char ch;
    do {
        printf("Please enter the name [Length <= 20]:");
        scanf("%s", list[*pcount].name);
        printf("Please enter the phone [Length <= 12]:");
        scanf("%s", list[*pcount].phone);
        printf("Please enter the address [Length <= 30]:");
        scanf("%s", list[*pcount].addr);
        (*pcount)++;    // count自增1
        printf("Continue to add another person? (y/n): ");
        scanf("%s", &ch);
    } while (ch == 'y' || ch == 'Y');
    return 0;
}

2.4 删除联系人

删除联系人实际上是将数组中的一个元素删除,并将后面的元素依次前移,最后将数组大小减1。示例代码如下:

int delete(person *list, int *pcount) {
    int i, pos;
    char name[MAX_NAME];
    if (*pcount == 0) {
        printf("\nEmpty List!\n");
        return -1;
    }
    printf("Please enter the name to delete: ");
    scanf("%s", name);
    for (i = 0; i < *pcount; i++) {
        if (strcmp(name, list[i].name) == 0) {  // 找到对应的联系人
            for (pos = i; pos < (*pcount) - 1; pos++) {    // 将后面的元素前移
                list[pos] = list[pos+1];
            }
            (*pcount)--;    // 将数组大小减1
            printf("\nDelete Done!\n");
            return 0;
        }
    }
    printf("\nCan't find the person whose name is %s!\n", name);   // 未找到对应的联系人
    return -1;
}

3. 示例说明

3.1 示例1

运行程序,在菜单中选择添加联系人:

=========================
Welcome to the Contacts System
=========================

Please select the operation you want to do:
1) Show all contacts
2) Add a new contact
3) Delete a contact
4) Quit
Your choice is [1-4]: 2

Please enter the name [Length <= 20]:Tom
Please enter the phone [Length <= 12]:139xxxxx
Please enter the address [Length <= 30]:Shanghai
Continue to add another person? (y/n): y

Please enter the name [Length <= 20]:Jerry
Please enter the phone [Length <= 12]:138xxxxx
Please enter the address [Length <= 30]:Beijing
Continue to add another person? (y/n): n

Add Done!

然后选择显示联系人:

Please select the operation you want to do:
1) Show all contacts
2) Add a new contact
3) Delete a contact
4) Quit
Your choice is [1-4]: 1

Name                Phone               Address             
Tom                 139xxxxx            Shanghai            
Jerry               138xxxxx            Beijing             

3.2 示例2

从上一个示例中删除联系人Jerry:

Please select the operation you want to do:
1) Show all contacts
2) Add a new contact
3) Delete a contact
4) Quit
Your choice is [1-4]: 3

Please enter the name to delete: Jerry

Delete Done!

然后再次选择显示联系人:

Please select the operation you want to do:
1) Show all contacts
2) Add a new contact
3) Delete a contact
4) Quit
Your choice is [1-4]: 1

Name                Phone               Address             
Tom                 139xxxxx            Shanghai            

4. 总结

通讯录管理系统的实现可以帮助我们了解数组和结构体的使用,同时也让我们熟悉C语言的基本语法。在实现过程中,需要注意错误处理、代码优化等方面。该系统还可以进一步扩展、完善,比如添加按姓名排序等功能,可以让我们继续深入学习,提高自己的编程能力。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C语言代码实现通讯录管理系统 - Python技术站

(0)
上一篇 2023年5月23日
下一篇 2023年5月23日

相关文章

  • 逍遥自在学C语言 | 位运算符>>的高级用法

    前言 在上一篇文章中,我们介绍了<<运算符的高级用法,本篇文章,我们将介绍>> 运算符的一些高级用法。 一、人物简介 第一位闪亮登场,有请今后会一直教我们C语言的老师 —— 自在。 第二位上场的是和我们一起学习的小白程序猿 —— 逍遥。 二、优化除法运算 除法运算需要比位移运算需要更多的计算资源,某些情况下采用位移运算可以提高性能 代…

    C语言 2023年4月17日
    00
  • C语言中如何进行字符串操作?

    C语言是一门强大的编程语言,它提供了多种字符串操作函数,让我们能够更方便地进行字符串处理。下面是一个详细的C语言字符串操作攻略。 字符串表示 C语言中,字符串是字符数组,以空字符(\0)结尾。例如: char str[] = "Hello, World!"; 在这个例子中,我们定义了一个字符数组 str,存储了字符串 “Hello, Wo…

    C 2023年4月27日
    00
  • C++中Operator类型强制转换成员函数解析

    Operator类型强制转换成员函数是C++中的一种特殊的成员函数,用于在自定义类型中实现类型转换。Operator类型强制转换成员函数可以将对象从一种类型转换为另一种类型。注意,Operator类型强制转换成员函数既可以定义为成员函数也可以定义为非成员函数。 在C++中,有六种Operator类型强制转换成员函数。它们分别是: const_cast dyn…

    C 2023年5月22日
    00
  • C语言完美实现动态数组代码分享

    C语言完美实现动态数组代码分享 简介 动态数组是一种在程序运行时可以动态扩展的数组结构。C语言并没有原生支持动态数组,不过我们可以基于堆内存动态分配的原理,在C语言中实现动态数组。 本文将介绍如何在C语言中完美实现动态数组,并提供代码示例。 分步实现动态数组 1. 分配动态内存 动态数组必须基于堆内存分配实现。我们可以使用标准库中的 malloc 函数动态分…

    C 2023年5月23日
    00
  • Go与C语言的互操作实现

    Go与C语言的互操作实现 Go是一门高效、安全、并发的编程语言,但是它的标准库并不像其他语言那么丰富。许多功能需要引入外部库才能实现。而C语言则是一门底层语言,有很多底层的库和功能。所以在一些特定场景下,我们需要使用Go与C语言相互协作来实现这些功能。本文将会详细讲解如何在Go程序中集成C代码。 Go的C语言接口 Go与C语言之间的交互主要是通过C语言接口实…

    C 2023年5月23日
    00
  • C#解析json字符串总是多出双引号的原因分析及解决办法

    C#解析json字符串总是多出双引号的原因分析及解决办法 问题分析 在使用C#解析json字符串时,发现有时候会出现多出一对双引号的情况,如下所示: "{""name"":""John""}" 这时候,如果直接使用C#自带的JsonConvert进行转换操作,…

    C 2023年5月23日
    00
  • 编写C++程序使DirectShow进行视频捕捉

    要编写C++程序使DirectShow进行视频捕捉,可以遵循以下步骤: 1. 引入DirectShow库 在Visual Studio开发环境中,打开项目属性窗口。 在C/C++ -> 常规 -> 附加包含目录中添加DirectShow库的头文件所在路径。 在链接器 -> 输入 -> 附加依赖项中添加DirectShow库文件的名称,…

    C 2023年5月23日
    00
  • Qt数据库应用之实现数据打印到纸张

    实现数据打印到纸张通常需要使用第三方库或者一些特定的框架,而Qt作为一种优秀的跨平台开发框架,也提供了相关的类和方法来实现数据的打印。下面,我将详细讲解Qt数据库应用之实现数据打印到纸张的完整攻略,其中将会包含两条示例代码演示。 1. 准备工作 在进行打印操作之前,需要进行如下准备工作: 1.1 创建一个Qt应用程序 首先,需要在Qt IDE中创建一个Qt应…

    C 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部