如何用c语言制作通讯录文件

如何用c语言制作通讯录文件

如何用C语言制作通讯录文件

使用C语言制作通讯录文件的核心步骤包括:定义数据结构、创建文件、编写增删查改功能、进行数据持久化。 本文将详细介绍如何实现这些功能,并提供完整的代码示例。

一、定义数据结构

为了存储通讯录中的联系人信息,我们首先需要定义一个数据结构。在C语言中,我们可以使用结构体(struct)来表示联系人信息。一个典型的联系人信息可能包括姓名、电话号码、电子邮件等。

#include <stdio.h>

#include <stdlib.h>

#include <string.h>

#define MAX_NAME 30

#define MAX_PHONE 15

#define MAX_EMAIL 30

typedef struct {

char name[MAX_NAME];

char phone[MAX_PHONE];

char email[MAX_EMAIL];

} Contact;

在这个结构体中,我们定义了三个字段:姓名、电话号码和电子邮件,分别用字符数组表示。

二、创建文件

通讯录的数据需要存储在文件中,以便在程序关闭后也能保存。我们可以使用C标准库中的文件操作函数来创建和管理文件。

FILE *openFile(const char *filename, const char *mode) {

FILE *file = fopen(filename, mode);

if (file == NULL) {

perror("Error opening file");

exit(EXIT_FAILURE);

}

return file;

}

这个函数接受文件名和模式作为参数,并返回一个文件指针。如果文件打开失败,程序将输出错误信息并退出。

三、编写增删查改功能

1、添加联系人

我们需要编写一个函数来向通讯录中添加联系人信息。该函数需要获取用户输入的联系人信息并将其写入文件。

void addContact(const char *filename) {

Contact contact;

printf("Enter name: ");

fgets(contact.name, MAX_NAME, stdin);

contact.name[strcspn(contact.name, "n")] = ''; // Remove newline character

printf("Enter phone: ");

fgets(contact.phone, MAX_PHONE, stdin);

contact.phone[strcspn(contact.phone, "n")] = ''; // Remove newline character

printf("Enter email: ");

fgets(contact.email, MAX_EMAIL, stdin);

contact.email[strcspn(contact.email, "n")] = ''; // Remove newline character

FILE *file = openFile(filename, "ab");

fwrite(&contact, sizeof(Contact), 1, file);

fclose(file);

}

这个函数使用fgets函数获取用户输入,并使用strcspn函数去除换行符。然后,它将联系人信息写入文件。

2、显示所有联系人

我们还需要一个函数来显示通讯录中所有的联系人信息。

void displayContacts(const char *filename) {

FILE *file = openFile(filename, "rb");

Contact contact;

while (fread(&contact, sizeof(Contact), 1, file)) {

printf("Name: %sn", contact.name);

printf("Phone: %sn", contact.phone);

printf("Email: %snn", contact.email);

}

fclose(file);

}

这个函数使用fread函数从文件中读取联系人信息,并将其显示在屏幕上。

3、查找联系人

为了查找特定的联系人,我们可以根据姓名、电话号码或电子邮件进行搜索。

void findContact(const char *filename, const char *searchTerm) {

FILE *file = openFile(filename, "rb");

Contact contact;

int found = 0;

while (fread(&contact, sizeof(Contact), 1, file)) {

if (strstr(contact.name, searchTerm) || strstr(contact.phone, searchTerm) || strstr(contact.email, searchTerm)) {

printf("Name: %sn", contact.name);

printf("Phone: %sn", contact.phone);

printf("Email: %snn", contact.email);

found = 1;

}

}

if (!found) {

printf("No contact found with the term: %sn", searchTerm);

}

fclose(file);

}

这个函数使用strstr函数在联系人信息中查找指定的搜索词,并将匹配的联系人信息显示在屏幕上。

4、删除联系人

为了从通讯录中删除一个联系人,我们需要创建一个新的临时文件,将所有不匹配的联系人信息写入临时文件,然后用临时文件替换原文件。

void deleteContact(const char *filename, const char *searchTerm) {

FILE *file = openFile(filename, "rb");

FILE *tempFile = openFile("temp.dat", "wb");

Contact contact;

int found = 0;

while (fread(&contact, sizeof(Contact), 1, file)) {

if (strstr(contact.name, searchTerm) || strstr(contact.phone, searchTerm) || strstr(contact.email, searchTerm)) {

found = 1;

} else {

fwrite(&contact, sizeof(Contact), 1, tempFile);

}

}

fclose(file);

fclose(tempFile);

if (found) {

remove(filename);

rename("temp.dat", filename);

printf("Contact deleted.n");

} else {

remove("temp.dat");

printf("No contact found with the term: %sn", searchTerm);

}

}

这个函数通过创建一个临时文件来保存所有不匹配的联系人信息,然后将原文件替换为临时文件。

四、数据持久化

为了确保通讯录中的数据在程序关闭后也能保存,我们需要在每次修改通讯录时将数据写入文件。这已经在前面的代码中实现。每次添加、删除或修改联系人信息时,数据都会立即写入文件。

五、主函数

最后,我们需要一个主函数来提供用户界面,让用户可以选择执行不同的操作。

int main() {

const char *filename = "contacts.dat";

int choice;

char searchTerm[MAX_NAME];

while (1) {

printf("1. Add Contactn");

printf("2. Display Contactsn");

printf("3. Find Contactn");

printf("4. Delete Contactn");

printf("5. Exitn");

printf("Enter your choice: ");

scanf("%d", &choice);

getchar(); // Consume newline character

switch (choice) {

case 1:

addContact(filename);

break;

case 2:

displayContacts(filename);

break;

case 3:

printf("Enter search term: ");

fgets(searchTerm, MAX_NAME, stdin);

searchTerm[strcspn(searchTerm, "n")] = ''; // Remove newline character

findContact(filename, searchTerm);

break;

case 4:

printf("Enter search term: ");

fgets(searchTerm, MAX_NAME, stdin);

searchTerm[strcspn(searchTerm, "n")] = ''; // Remove newline character

deleteContact(filename, searchTerm);

break;

case 5:

exit(EXIT_SUCCESS);

default:

printf("Invalid choice. Please try again.n");

}

}

return 0;

}

这个主函数提供了一个简单的文本界面,用户可以通过输入选项来选择执行不同的操作。

六、总结

通过以上步骤,我们实现了一个简单的通讯录管理系统。这个系统使用C语言的文件操作函数将联系人信息保存到文件中,并提供了增删查改等基本功能。虽然这个系统比较简单,但它展示了如何使用C语言进行文件操作和数据管理。如果需要更复杂的功能,可以在此基础上进行扩展,比如添加排序功能、支持更多类型的联系人信息等。

项目管理方面,推荐使用研发项目管理系统PingCode通用项目管理软件Worktile,这两个系统可以帮助您更好地管理开发过程和任务分配,提高工作效率。

相关问答FAQs:

Q: 我可以用C语言制作一个通讯录文件吗?
A: 是的,你可以使用C语言来制作一个通讯录文件。C语言是一种功能强大的编程语言,适合用于处理文件和数据操作。

Q: 如何在C语言中创建一个通讯录文件?
A: 在C语言中创建一个通讯录文件,你可以使用文件操作函数来打开一个文件,然后使用其他函数来读取、写入和修改文件中的数据。你可以使用结构体来定义通讯录的数据结构,并使用文件指针来访问文件。

Q: 如何向C语言的通讯录文件中添加联系人信息?
A: 在C语言的通讯录文件中添加联系人信息,你可以先打开文件,然后使用文件指针定位到文件末尾,接着将新的联系人信息写入文件。你可以使用结构体来存储联系人的姓名、电话号码等信息。记得在添加新联系人之前,先读取文件中已有的联系人信息,以免覆盖掉之前的数据。

Q: 如何从C语言的通讯录文件中查找联系人信息?
A: 从C语言的通讯录文件中查找联系人信息,你可以先打开文件,然后使用文件指针逐行读取文件中的数据。你可以使用字符串比较函数来比较输入的搜索条件和文件中的联系人信息。如果找到匹配的联系人,你可以将其打印出来或进行其他处理。记得在查找之前,先确认文件是否存在并且已经打开。

原创文章,作者:Edit2,如若转载,请注明出处:https://docs.pingcode.com/baike/1298363

(0)
Edit2Edit2
上一篇 2024年9月2日 下午1:15
下一篇 2024年9月2日 下午1:15
免费注册
电话联系

4008001024

微信咨询
微信咨询
返回顶部