通讯录用文件形式保存联系人方式
时间: 2023-12-19 18:04:42 浏览: 44
通讯录可以使用文件形式保存联系人信息,一种常见的格式是CSV(Comma-Separated Values,逗号分隔值)。在CSV文件中,每一行记录代表一个联系人,每行记录包含多个字段,例如姓名、电话号码、电子邮件地址等。每个字段之间使用逗号分隔,而每行记录则使用换行符分隔。
例如,以下是一个简单的通讯录CSV文件:
```
姓名,电话号码,电子邮件地址
张三,123456789,zhangsan@example.com
李四,987654321,lisi@example.com
王五,111222333,wangwu@example.com
```
在实际应用中,通讯录文件可能还会包含其他字段,例如地址、公司、职位等。读取CSV文件可以使用各种编程语言提供的库或工具,例如Python的csv模块。
相关问题
C语言通讯录系统以文件的方式保存通讯录信息
可以使用文件来保存通讯录信息,这样可以实现信息的持久化存储。具体实现方法如下:
1. 定义联系人结构体
```c
typedef struct {
char name[20];
char phone[12];
char email[30];
} Contact;
```
2. 定义文件名和文件打开方式
```c
#define FILENAME "contacts.txt"
#define MODE "r+b"
```
3. 实现添加联系人函数
```c
void add_contact() {
Contact c;
FILE* fp = fopen(FILENAME, MODE);
if (fp == NULL) {
printf("Failed to open file\n");
return;
}
printf("Enter name: ");
scanf("%s", c.name);
printf("Enter phone number: ");
scanf("%s", c.phone);
printf("Enter email: ");
scanf("%s", c.email);
fwrite(&c, sizeof(Contact), 1, fp);
printf("Contact added successfully.\n");
fclose(fp);
}
```
4. 实现查找联系人函数
```c
void find_contact() {
char name[20];
Contact c;
FILE* fp = fopen(FILENAME, MODE);
if (fp == NULL) {
printf("Failed to open file\n");
return;
}
printf("Enter name to search: ");
scanf("%s", name);
while (fread(&c, sizeof(Contact), 1, fp) != 0) {
if (strcmp(c.name, name) == 0) {
printf("Name: %s\n", c.name);
printf("Phone: %s\n", c.phone);
printf("Email: %s\n", c.email);
fclose(fp);
return;
}
}
printf("Contact not found.\n");
fclose(fp);
}
```
5. 实现删除联系人函数
```c
void delete_contact() {
char name[20];
Contact c;
FILE* fp = fopen(FILENAME, MODE);
if (fp == NULL) {
printf("Failed to open file\n");
return;
}
printf("Enter name to delete: ");
scanf("%s", name);
FILE* tmp = tmpfile();
while (fread(&c, sizeof(Contact), 1, fp) != 0) {
if (strcmp(c.name, name) != 0) {
fwrite(&c, sizeof(Contact), 1, tmp);
}
}
fclose(fp);
fp = fopen(FILENAME, "wb");
rewind(tmp);
while (fread(&c, sizeof(Contact), 1, tmp) != 0) {
fwrite(&c, sizeof(Contact), 1, fp);
}
fclose(fp);
printf("Contact deleted successfully.\n");
}
```
6. 实现修改联系人函数
```c
void update_contact() {
char name[20];
Contact c;
FILE* fp = fopen(FILENAME, MODE);
if (fp == NULL) {
printf("Failed to open file\n");
return;
}
printf("Enter name to update: ");
scanf("%s", name);
FILE* tmp = tmpfile();
while (fread(&c, sizeof(Contact), 1, fp) != 0) {
if (strcmp(c.name, name) == 0) {
printf("Enter new name: ");
scanf("%s", c.name);
printf("Enter new phone number: ");
scanf("%s", c.phone);
printf("Enter new email: ");
scanf("%s", c.email);
}
fwrite(&c, sizeof(Contact), 1, tmp);
}
fclose(fp);
fp = fopen(FILENAME, "wb");
rewind(tmp);
while (fread(&c, sizeof(Contact), 1, tmp) != 0) {
fwrite(&c, sizeof(Contact), 1, fp);
}
fclose(fp);
printf("Contact updated successfully.\n");
}
```
7. 实现显示所有联系人函数
```c
void show_all_contacts() {
Contact c;
FILE* fp = fopen(FILENAME, MODE);
if (fp == NULL) {
printf("Failed to open file\n");
return;
}
while (fread(&c, sizeof(Contact), 1, fp) != 0) {
printf("Name: %s\n", c.name);
printf("Phone: %s\n", c.phone);
printf("Email: %s\n", c.email);
printf("\n");
}
fclose(fp);
}
```
注意事项:
1. 文件打开方式为 "r+b",表示以读写方式打开二进制文件,如果文件不存在则创建。
2. 查找、删除和修改联系人时需要使用临时文件进行操作,最后再将临时文件内容复制回原文件。
3. 代码中没有对输入的数据进行校验和验证,需要自行添加。
通讯录文件管理系统c++可保存信息到文件
好的,通讯录文件管理系统可以分为以下几个模块:
1. 菜单模块:用于显示程序的主界面和用户选项,包括增加联系人、查找联系人、修改联系人、删除联系人、显示联系人列表等选项。
2. 联系人信息结构体:用于存储每个联系人的信息,包括姓名、电话、地址等。
3. 文件操作模块:用于将联系人信息保存到文件中,并能够从文件中读取联系人信息。
4. 用户输入模块:用于获取用户输入的联系人信息,包括姓名、电话、地址等。
下面是一个简单的通讯录文件管理系统的代码示例,其中包含了文件操作和用户输入模块,你可以根据自己的需要进行修改和完善:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME 20
#define MAX_PHONE 15
#define MAX_ADDRESS 50
typedef struct Contact {
char name[MAX_NAME];
char phone[MAX_PHONE];
char address[MAX_ADDRESS];
} Contact;
void addContact(Contact *contacts, int *count);
void searchContact(Contact *contacts, int count);
void modifyContact(Contact *contacts, int count);
void deleteContact(Contact *contacts, int *count);
void displayContacts(Contact *contacts, int count);
void saveContactsToFile(Contact *contacts, int count);
void readContactsFromFile(Contact *contacts, int *count);
int main() {
Contact contacts[100];
int count = 0;
int choice;
readContactsFromFile(contacts, &count);
while (1) {
printf("\n========================\n");
printf(" 1. Add a contact\n");
printf(" 2. Search a contact\n");
printf(" 3. Modify a contact\n");
printf(" 4. Delete a contact\n");
printf(" 5. Display all contacts\n");
printf(" 6. Exit\n");
printf("========================\n");
printf("\nEnter your choice: ");
scanf("%d", &choice);
switch (choice) {
case 1:
addContact(contacts, &count);
saveContactsToFile(contacts, count);
break;
case 2:
searchContact(contacts, count);
break;
case 3:
modifyContact(contacts, count);
saveContactsToFile(contacts, count);
break;
case 4:
deleteContact(contacts, &count);
saveContactsToFile(contacts, count);
break;
case 5:
displayContacts(contacts, count);
break;
case 6:
saveContactsToFile(contacts, count);
exit(0);
default:
printf("\nInvalid choice!\n");
break;
}
}
return 0;
}
void addContact(Contact *contacts, int *count) {
printf("\nEnter the name: ");
scanf("%s", contacts[*count].name);
printf("Enter the phone number: ");
scanf("%s", contacts[*count].phone);
printf("Enter the address: ");
scanf("%s", contacts[*count].address);
(*count)++;
}
void searchContact(Contact *contacts, int count) {
char name[MAX_NAME];
printf("\nEnter the name: ");
scanf("%s", name);
int found = 0;
for (int i = 0; i < count; i++) {
if (strcmp(contacts[i].name, name) == 0) {
printf("\nName: %s\n", contacts[i].name);
printf("Phone: %s\n", contacts[i].phone);
printf("Address: %s\n", contacts[i].address);
found = 1;
break;
}
}
if (!found) {
printf("\nContact not found!\n");
}
}
void modifyContact(Contact *contacts, int count) {
char name[MAX_NAME];
printf("\nEnter the name: ");
scanf("%s", name);
int found = 0;
for (int i = 0; i < count; i++) {
if (strcmp(contacts[i].name, name) == 0) {
printf("\nEnter the new phone number: ");
scanf("%s", contacts[i].phone);
printf("Enter the new address: ");
scanf("%s", contacts[i].address);
found = 1;
break;
}
}
if (!found) {
printf("\nContact not found!\n");
}
}
void deleteContact(Contact *contacts, int *count) {
char name[MAX_NAME];
printf("\nEnter the name: ");
scanf("%s", name);
int found = 0;
for (int i = 0; i < *count; i++) {
if (strcmp(contacts[i].name, name) == 0) {
for (int j = i; j < *count - 1; j++) {
strcpy(contacts[j].name, contacts[j + 1].name);
strcpy(contacts[j].phone, contacts[j + 1].phone);
strcpy(contacts[j].address, contacts[j + 1].address);
}
(*count)--;
found = 1;
break;
}
}
if (!found) {
printf("\nContact not found!\n");
}
}
void displayContacts(Contact *contacts, int count) {
printf("\nContacts:\n");
for (int i = 0; i < count; i++) {
printf("\nName: %s\n", contacts[i].name);
printf("Phone: %s\n", contacts[i].phone);
printf("Address: %s\n", contacts[i].address);
printf("---------------------------\n");
}
}
void saveContactsToFile(Contact *contacts, int count) {
FILE *fp = fopen("contacts.txt", "w");
if (fp == NULL) {
printf("\nError opening file!\n");
exit(1);
}
for (int i = 0; i < count; i++) {
fprintf(fp, "%s %s %s\n", contacts[i].name, contacts[i].phone, contacts[i].address);
}
fclose(fp);
}
void readContactsFromFile(Contact *contacts, int *count) {
FILE *fp = fopen("contacts.txt", "r");
if (fp != NULL) {
while (fscanf(fp, "%s %s %s", contacts[*count].name, contacts[*count].phone, contacts[*count].address) != EOF) {
(*count)++;
}
fclose(fp);
}
}
```
在这个示例中,联系人信息使用了一个结构体来存储,通讯录最多可以存储100个联系人信息。当用户选择添加一个联系人时,程序会提示用户输入联系人的信息,并将其存储到数组中。当用户选择查找、修改或删除一个联系人时,程序会提示用户输入联系人的姓名,并遍历数组查找该联系人。当用户选择显示所有联系人时,程序会遍历数组并打印所有联系人的信息。当用户选择退出程序时,程序会将所有联系人信息保存到文件中,并退出。
这只是一个简单的示例,你可以根据自己的需要对其进行修改和完善。