C语言用链表写通讯录管理系统,有保存功能
时间: 2024-05-04 14:18:27 浏览: 104
好的,下面是一个简单的用链表实现通讯录管理系统的示例代码:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义通讯录结构体
typedef struct contact {
char name[20];
char phone[20];
struct contact *next;
} Contact;
// 声明函数
void add_contact(Contact **head);
void delete_contact(Contact **head);
void search_contact(Contact *head);
void display_contacts(Contact *head);
void save_contacts(Contact *head);
int main() {
Contact *head = NULL; // 初始化头指针为空
int choice;
while (1) {
printf("\n1. 添加联系人\n");
printf("2. 删除联系人\n");
printf("3. 查找联系人\n");
printf("4. 显示所有联系人\n");
printf("5. 保存联系人到文件\n");
printf("0. 退出\n");
printf("请输入选项:");
scanf("%d", &choice);
switch (choice) {
case 1:
add_contact(&head);
break;
case 2:
delete_contact(&head);
break;
case 3:
search_contact(head);
break;
case 4:
display_contacts(head);
break;
case 5:
save_contacts(head);
break;
case 0:
exit(0);
default:
printf("无效选项,请重新输入!\n");
}
}
return 0;
}
// 添加联系人
void add_contact(Contact **head) {
Contact *new_contact = (Contact *) malloc(sizeof(Contact));
printf("请输入姓名:");
scanf("%s", new_contact->name);
printf("请输入电话号码:");
scanf("%s", new_contact->phone);
new_contact->next = *head;
*head = new_contact;
printf("联系人添加成功!\n");
}
// 删除联系人
void delete_contact(Contact **head) {
char name[20];
printf("请输入要删除的联系人姓名:");
scanf("%s", name);
Contact *prev = NULL;
Contact *current = *head;
while (current != NULL && strcmp(current->name, name) != 0) {
prev = current;
current = current->next;
}
if (current == NULL) {
printf("未找到联系人!\n");
return;
}
if (prev == NULL) {
*head = current->next;
} else {
prev->next = current->next;
}
free(current);
printf("联系人删除成功!\n");
}
// 查找联系人
void search_contact(Contact *head) {
char name[20];
printf("请输入要查找的联系人姓名:");
scanf("%s", name);
Contact *current = head;
while (current != NULL) {
if (strcmp(current->name, name) == 0) {
printf("姓名:%s,电话:%s\n", current->name, current->phone);
return;
}
current = current->next;
}
printf("未找到联系人!\n");
}
// 显示所有联系人
void display_contacts(Contact *head) {
if (head == NULL) {
printf("通讯录为空!\n");
return;
}
Contact *current = head;
while (current != NULL) {
printf("姓名:%s,电话:%s\n", current->name, current->phone);
current = current->next;
}
}
// 保存联系人到文件
void save_contacts(Contact *head) {
if (head == NULL) {
printf("通讯录为空!\n");
return;
}
FILE *fp = fopen("contacts.txt", "w");
if (fp == NULL) {
printf("保存失败!\n");
return;
}
Contact *current = head;
while (current != NULL) {
fprintf(fp, "%s,%s\n", current->name, current->phone);
current = current->next;
}
fclose(fp);
printf("保存成功!\n");
}
```
这个示例代码实现了添加、删除、查找、显示、保存联系人的功能,其中通讯录使用链表来存储,每个节点包括姓名、电话和下一个节点的指针。在添加联系人时,新的节点会插入到链表的头部;在删除联系人时,需要遍历链表找到要删除的节点并将其从链表中删除;在查找联系人时,也需要遍历链表并按姓名进行比较;在显示所有联系人时,只需要遍历链表并输出每个节点的信息;在保存联系人到文件时,可以使用文件 I/O 将每个节点的信息写入到一个文件中。
阅读全文