怎么用c语言实现一个电话薄

发布时间:2022-01-17 16:19:37 作者:iii
来源:亿速云 阅读:155
# 怎么用C语言实现一个电话簿

电话簿是日常生活中常见的工具,用于存储和管理联系人信息。本文将介绍如何使用C语言实现一个简单的电话簿程序,涵盖数据结构设计、基本功能实现和代码示例。

---

## 一、数据结构设计

电话簿的核心是联系人信息的存储。我们可以使用结构体来表示每个联系人:

```c
typedef struct {
    char name[50];
    char phone[20];
    char email[50];
} Contact;

为了管理多个联系人,可以使用动态数组或链表。这里选择动态数组:

typedef struct {
    Contact *contacts;  // 联系人数组
    int count;          // 当前联系人数量
    int capacity;       // 数组容量
} Phonebook;

二、基本功能实现

1. 初始化电话簿

void initPhonebook(Phonebook *pb, int initialCapacity) {
    pb->contacts = (Contact*)malloc(initialCapacity * sizeof(Contact));
    pb->count = 0;
    pb->capacity = initialCapacity;
}

2. 添加联系人

void addContact(Phonebook *pb, const char *name, const char *phone, const char *email) {
    if (pb->count >= pb->capacity) {
        // 动态扩容
        pb->capacity *= 2;
        pb->contacts = (Contact*)realloc(pb->contacts, pb->capacity * sizeof(Contact));
    }
    
    Contact *c = &pb->contacts[pb->count++];
    strncpy(c->name, name, 49);
    strncpy(c->phone, phone, 19);
    strncpy(c->email, email, 49);
}

3. 查找联系人

Contact* findContact(Phonebook *pb, const char *name) {
    for (int i = 0; i < pb->count; i++) {
        if (strcmp(pb->contacts[i].name, name) == 0) {
            return &pb->contacts[i];
        }
    }
    return NULL;
}

4. 删除联系人

void deleteContact(Phonebook *pb, const char *name) {
    for (int i = 0; i < pb->count; i++) {
        if (strcmp(pb->contacts[i].name, name) == 0) {
            // 将最后一个联系人移到当前位置
            pb->contacts[i] = pb->contacts[--pb->count];
            return;
        }
    }
}

5. 显示所有联系人

void displayContacts(Phonebook *pb) {
    printf("Total contacts: %d\n", pb->count);
    for (int i = 0; i < pb->count; i++) {
        printf("%d. %s, %s, %s\n", 
               i+1, 
               pb->contacts[i].name,
               pb->contacts[i].phone,
               pb->contacts[i].email);
    }
}

三、主程序框架

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

// 上述结构体和函数定义...

int main() {
    Phonebook pb;
    initPhonebook(&pb, 10);
    
    int choice;
    char name[50], phone[20], email[50];
    
    while (1) {
        printf("\nPhonebook Menu:\n");
        printf("1. Add Contact\n");
        printf("2. Find Contact\n");
        printf("3. Delete Contact\n");
        printf("4. Display All\n");
        printf("5. Exit\n");
        printf("Enter choice: ");
        scanf("%d", &choice);
        
        switch(choice) {
            case 1:
                printf("Enter name, phone, email: ");
                scanf("%s %s %s", name, phone, email);
                addContact(&pb, name, phone, email);
                break;
            case 2:
                printf("Enter name to search: ");
                scanf("%s", name);
                Contact *c = findContact(&pb, name);
                if (c) printf("Found: %s, %s\n", c->phone, c->email);
                else printf("Not found\n");
                break;
            case 3:
                printf("Enter name to delete: ");
                scanf("%s", name);
                deleteContact(&pb, name);
                break;
            case 4:
                displayContacts(&pb);
                break;
            case 5:
                free(pb.contacts);
                return 0;
            default:
                printf("Invalid choice\n");
        }
    }
}

四、扩展功能建议

  1. 文件存储:使用fread/fwrite实现数据持久化
  2. 排序功能:按姓名排序联系人
  3. 分组管理:为联系人添加分组标签
  4. 模糊搜索:支持部分匹配的搜索功能
  5. 图形界面:结合GTK或SDL库开发UI

五、总结

通过这个简单的实现,我们展示了C语言在小型应用开发中的能力。虽然代码量不大,但涵盖了内存管理、数据结构、用户交互等核心编程概念。读者可以在此基础上继续扩展功能,打造更完善的电话簿程序。 “`

推荐阅读:
  1. 用OC写一个可以分字母组,的电话薄,并实现功能
  2. 怎么用c语言实现界面

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c语言

上一篇:怎么用Python判断奇偶数

下一篇:python是怎么实现简单的俄罗斯方块

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》