c语言实现通讯录拨号功能代码及详细说明

以下是一个简单的c语言实现通讯录拨号功能代码示例,实现了通讯录拨号功能。该程序允许用户输入联系人姓名和电话号码,并将它们存储在通讯录中。用户可以查看通讯录中的所有联系人,选择要拨打的联系人并拨打他们的电话号码。

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

#define MAX_CONTACTS 100

struct Contact {
    char name[50];
    char phone[20];
};

struct Contact contacts[MAX_CONTACTS];
int num_contacts = 0;

void add_contact() {
    struct Contact new_contact;
    printf("Enter name: ");
    scanf("%s", new_contact.name);
    printf("Enter phone: ");
    scanf("%s", new_contact.phone);
    contacts[num_contacts++] = new_contact;
    printf("Contact added.\n");
}

void print_contacts() {
    printf("Contacts:\n");
    for (int i = 0; i < num_contacts; i++) {
        printf("%s: %s\n", contacts[i].name, contacts[i].phone);
    }
}

void dial_contact() {
    char name[50];
    printf("Enter name of contact to dial: ");
    scanf("%s", name);
    for (int i = 0; i < num_contacts; i++) {
        if (strcmp(contacts[i].name, name) == 0) {
            printf("Dialing %s...\n", contacts[i].phone);
            return;
        }
    }
    printf("Contact not found.\n");
}

int main() {
    int choice;
    do {
        printf("Menu:\n");
        printf("1. Add contact\n");
        printf("2. Print contacts\n");
        printf("3. Dial contact\n");
        printf("4. Quit\n");
        printf("Enter choice: ");
        scanf("%d", &choice);
        switch (choice) {
            case 1:
                add_contact();
                break;
            case 2:
                print_contacts();
                break;
            case 3:
                dial_contact();
                break;
            case 4:
                printf("Goodbye.\n");
                break;
            default:
                printf("Invalid choice.\n");
                break;
        }
    } while (choice != 4);
    return 0;
}

在这个程序中,我们使用一个结构体Contact来表示一个通讯录中的联系人,包括姓名和电话号码。我们还定义了一个最大联系人数MAX_CONTACTS和一个contacts数组来存储联系人。我们使用num_contacts变量来跟踪当前存储的联系人数量。

程序提供了以下几个操作:

  • 添加联系人:用户输入姓名和电话号码,并将它们存储在通讯录中。
  • 显示联系人列表:程序输出所有存储在通讯录中的联系人的姓名和电话号码。
  • 拨打联系人电话:用户输入要拨打的联系人姓名,并显示其电话号码。

在主函数中,我们使用一个do-while循环显示一个简单的菜单,让用户选择要执行的操作。根据用户的选择,我们调用add_contactprint_contactsdial_contact函数来执行相应的操作。

上述代码是一个简单的示例,您可以根据实际需求和项目需求进行修改和扩展。下面是一些可能有用的扩展:

添加删除联系人功能:在通讯录中删除一个联系人的操作。用户可以输入要删除的联系人的姓名,然后程序将其从通讯录中删除。

void delete_contact() {
    char name[50];
    printf("Enter name of contact to delete: ");
    scanf("%s", name);
    for (int i = 0; i < num_contacts; i++) {
        if (strcmp(contacts[i].name, name) == 0) {
            for (int j = i; j < num_contacts - 1; j++) {
                contacts[j] = contacts[j+1];
            }
            num_contacts--;
            printf("Contact deleted.\n");
            return;
        }
    }
    printf("Contact not found.\n");
}

main函数中,我们可以将“删除联系人”选项添加到菜单中:

printf("Menu:\n");
printf("1. Add contact\n");
printf("2. Print contacts\n");
printf("3. Dial contact\n");
printf("4. Delete contact\n");
printf("5. Quit\n");

然后在switch语句中添加相应的处理:

case 4:
    delete_contact();
    break;

添加编辑联系人信息功能:在通讯录中编辑一个联系人的操作。用户可以输入要编辑的联系人的姓名,然后程序将其显示出来,用户可以修改其中一个或多个字段,然后将其保存回通讯录。

void edit_contact() {
    char name[50];
    printf("Enter name of contact to edit: ");
    scanf("%s", name);
    for (int i = 0; i < num_contacts; i++) {
        if (strcmp(contacts[i].name, name) == 0) {
            printf("Editing contact: %s\n", contacts[i].name);
            printf("Enter new name (press enter to keep current value): ");
            char new_name[50];
            scanf("%s", new_name);
            if (strlen(new_name) > 0) {
                strcpy(contacts[i].name, new_name);
            }
            printf("Enter new phone (press enter to keep current value): ");
            char new_phone[20];
            scanf("%s", new_phone);
            if (strlen(new_phone) > 0) {
                strcpy(contacts[i].phone, new_phone);
            }
            printf("Contact updated.\n");
            return;
        }
    }
    printf("Contact not found.\n");
}

同样,我们可以将“编辑联系人信息”选项添加到菜单中:

printf("Menu:\n");
printf("1. Add contact\n");
printf("2. Print contacts\n");
printf("3. Dial contact\n");
printf("4. Delete contact\n");
printf("5. Edit contact\n");
printf("6. Quit\n");

然后在switch语句中添加相应的处理:

case 5:
    edit_contact();
    break;

使用文件存储联系人信息:我们可以将通讯录中的联系人信息存储在文件中,以便程序重新启动时可以恢复先前的联系人信息。在程序启动时,我们可以尝试打开存储联系人信息的文件,如果该文件不存在,则创建一个新的文件。在程序关闭时,我们可以将联系人信息保存回文件中。

在主函数中,我们可以添加以下代码来读取先前保存的联系人信息:

int read_contacts() {
    FILE *f = fopen("contacts.dat", "rb");
    if (f == NULL) {
        return 0;
    }
    fread(&num_contacts, sizeof(num_contacts), 1, f);
    fread(contacts, sizeof(Contact), num_contacts, f);
    fclose(f);
    return 1;
}

在程序关闭之前,我们可以添加以下代码将联系人信息保存到文件中:

void save_contacts() {
    FILE *f = fopen("contacts.dat", "wb");
    if (f == NULL) {
        printf("Error saving contacts.\n");
        return;
    }
    fwrite(&num_contacts, sizeof(num_contacts), 1, f);
    fwrite(contacts, sizeof(Contact), num_contacts, f);
    fclose(f);
    printf("Contacts saved.\n");
}

最后,我们可以在程序退出之前调用save_contacts函数来保存联系人信息:

case 6:
    save_contacts();
    printf("Goodbye!\n");
    return 0;

猜你喜欢:c语言实现添加、打印、拨号、删除和编辑联系人功能完整代码