C语言实现可保存的动态通讯录的示例代码
更新时间:2023-08-09前言
可保存的动态通讯录是一种能够实现联系人信息的增删改查,并能将联系人信息保存在某种持久化存储介质中的系统。在这个示例中,我们将使用C语言来实现一个简单的可保存的动态通讯录。
代码实现
#include <stdio.h> #include <stdlib.h> #include <string.h> #define MAX_CONTACTS 100 // 联系人结构体 typedef struct { char name[50]; char phone[20]; char email[50]; } Contact; // 通讯录结构体 typedef struct { int count; Contact contacts[MAX_CONTACTS]; } AddressBook; // 初始化通讯录 void initialize(AddressBook* addressBook) { addressBook->count = 0; } // 添加联系人 void addContact(AddressBook* addressBook, const char* name, const char* phone, const char* email) { if (addressBook->count < MAX_CONTACTS) { Contact *newContact = &addressBook->contacts[addressBook->count]; strncpy(newContact->name, name, 50); strncpy(newContact->phone, phone, 20); strncpy(newContact->email, email, 50); addressBook->count++; } } // 删除联系人 void deleteContact(AddressBook* addressBook, const char* name) { for (int i = 0; i < addressBook->count; i++) { if (strcmp(addressBook->contacts[i].name, name) == 0) { for (int j = i; j < addressBook->count - 1; j++) { addressBook->contacts[j] = addressBook->contacts[j + 1]; } addressBook->count--; break; } } } // 更新联系人信息 void updateContact(AddressBook* addressBook, const char* name, const char* phone, const char* email) { for (int i = 0; i < addressBook->count; i++) { if (strcmp(addressBook->contacts[i].name, name) == 0) { strncpy(addressBook->contacts[i].phone, phone, 20); strncpy(addressBook->contacts[i].email, email, 50); break; } } } // 查找联系人 Contact* findContact(AddressBook* addressBook, const char* name) { for (int i = 0; i < addressBook->count; i++) { if (strcmp(addressBook->contacts[i].name, name) == 0) { return &addressBook->contacts[i]; } } return NULL; } // 保存通讯录到文件 void saveToFile(const char* filename, AddressBook* addressBook) { FILE* file = fopen(filename, "wb"); if (file != NULL) { fwrite(addressBook, sizeof(AddressBook), 1, file); fclose(file); } } // 从文件中加载通讯录 void loadFromFile(const char* filename, AddressBook* addressBook) { FILE* file = fopen(filename, "rb"); if (file != NULL) { fread(addressBook, sizeof(AddressBook), 1, file); fclose(file); } } int main() { AddressBook addressBook; initialize(&addressBook); addContact(&addressBook, "张三", "123456789", "zhangsan@example.com"); addContact(&addressBook, "李四", "987654321", "lisi@example.com"); Contact* contact = findContact(&addressBook, "张三"); if (contact != NULL) { printf("姓名:%s\n", contact->name); printf("电话:%s\n", contact->phone); printf("邮箱:%s\n", contact->email); } saveToFile("addressbook.dat", &addressBook); AddressBook loadedAddressBook; loadFromFile("addressbook.dat", &loadedAddressBook); contact = findContact(&loadedAddressBook, "李四"); if (contact != NULL) { printf("姓名:%s\n", contact->name); printf("电话:%s\n", contact->phone); printf("邮箱:%s\n", contact->email); } return 0; }
代码解析
首先,我们定义了两个结构体:Contact和AddressBook。Contact表示一个联系人的信息,包括姓名、电话和邮箱。AddressBook表示一个完整的通讯录,包括通讯录中联系人的数量和一个联系人结构体数组。
接下来,我们实现了几个通讯录操作的函数。initialize函数用于初始化一个通讯录;addContact函数用于添加联系人到通讯录;deleteContact函数用于从通讯录中删除联系人;updateContact函数用于更新联系人的电话和邮箱信息;findContact函数用于根据姓名查找联系人。
在main函数中,我们演示了如何使用上述函数来操作通讯录。首先初始化一个通讯录,然后添加两个联系人。接着,通过findContact函数查找联系人,并输出其信息。最后,我们调用saveToFile函数将通讯录保存到文件,再通过loadFromFile函数从文件中加载通讯录,并再次通过findContact函数查找联系人。
这个示例展示了如何使用C语言实现一个简单的可保存的动态通讯录。你可以根据实际需求进一步扩展功能,例如添加更多字段,实现数据的排序和搜索等。
总结
在这个示例中,我们用C语言实现了一个可保存的动态通讯录。通过定义结构体和实现相关函数,我们能够实现通讯录的增删改查功能,并将通讯录保存到文件中。这个示例可以作为一个基础的框架,供你在实际项目中进行扩展和优化。