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 程序中,字符串是通过字符数组来表示的,每个字符都有一个对应的 ASCII 码值。小写字母和大写字母的 ASCII 码值是不同的,由此我们可以实现将大写字符串转换成小写字符串。 实现步骤 定义一个字符数组表示待转换的字符串。 使用循环逐个遍历字符数组中的字符。 如果当前字符是大写字母,则将其对应的 ASCII…

    C 2023年5月9日
    00
  • 计算机程序设计并行计算概念及定义全面详解

    “计算机程序设计并行计算概念及定义全面详解”的攻略如下: 什么是并行计算? 在了解并行计算之前,需要先了解串行计算。串行计算是指计算机单个处理器按照预设的顺序执行一系列的计算任务,每个任务必须执行完后才能进行下一个任务,这是一种逐个计算的方式。而并行计算是指通过多个处理器同时执行相互独立的任务,并通过协调来完成计算任务,是一种多任务同时进行的计算方式。相对于…

    C 2023年5月23日
    00
  • python使用Apriori算法进行关联性解析

    下面详细讲解一下“python使用Apriori算法进行关联性解析”的完整攻略。 一、什么是关联性分析和Apriori算法 1.1 关联性分析 关联性分析(Association Analysis)是一种寻找事物之间依存关系的方法,是数据挖掘领域中的一种常用方法。在销售、广告、推荐等领域具有广泛的应用。 关联性分析的基本目的是找出每个物品之间的关系,比如商品…

    C 2023年5月23日
    00
  • 高级前端面试手写扁平数据结构转Tree

    针对“高级前端面试手写扁平数据结构转Tree”的完整攻略,我会从以下几个方面进行讲解: 数据结构:一些常见的扁平数据结构类型及其特点 Tree结构:解释Tree结构及其作用 将扁平数据结构转换为Tree结构的思路和方法 代码示例:提供两个转换示例 数据结构 在前端开发中,我们常见到的扁平数据结构类型主要包括对象数组和 JSON 数组两大类型。这两种类型都有共…

    C 2023年5月23日
    00
  • golang如何自定义json序列化应用详解

    自定义 JSON 序列化是 Golang 开发中非常有用的技术。 通过自定义序列化规则,我们可以将 Golang 程序数据结构转为 JSON 字符串或者将 JSON 字符串转为 Golang 数据结构,使得数据交互操作更加简单方便。本文将详细介绍如何在Golang中自定义JSON 序列化。 1.自定义JSON序列化 1.1 json.Marshal() 要实…

    C 2023年5月23日
    00
  • 解析C#拼接Json串的几种方法

    解析C#拼接Json串的几种方法 在C#中解析Json串并将其转化为对象或者拼接Json字符串通常是非常有用的。以下是几种解析C#拼接Json串的方法。 1. 使用Newtonsoft.Json Newtonsoft.Json是.NET开发中最常用的序列化和反序列化库,它可以轻松地将对象转化为Json字符串。使用Newtonsoft.Json进行Json序列…

    C 2023年5月23日
    00
  • C语言实现食堂就餐管理系统(带链表)

    C语言实现食堂就餐管理系统(带链表)攻略 1. 系统简介 本系统是基于 C 语言实现的食堂就餐管理系统,主要包含以下功能: 学生信息管理:添加、删除、修改学生信息; 就餐管理:学生进入、离开食堂,统计就餐人数; 就餐情况查询:按照就餐时间查询就餐学生名单。 2. 系统架构 本系统采用链表数据结构实现学生信息和就餐记录的存储和管理,主要包括以下模块: 学生信息…

    C 2023年5月23日
    00
  • Python中json.load()和json.loads()有哪些区别

    当我们使用Python进行处理JSON数据时,常常需要用到json模块中的load()和loads()方法。这两个方法都可以将JSON格式的字符串转化为Python对象,但是具体的使用方法和功能是不同的。 区别1:接收的参数类型不同 json.load()方法是将文件中的JSON格式数据转化为Python对象,即需要传入一个可读文件对象作为参数。例如: im…

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