使用C语言以及数据结构知识采用线性链表方式编写简单的c程序管理通讯录。通过键入数字选择增加、删除、修改联系人信息等功能。
时间: 2024-10-19 16:14:42 浏览: 9
在C语言中,我们可以使用结构体表示联系人,并通过链表的数据结构存储和管理联系人的列表。下面是一个简化的示例,展示如何创建一个基本的通讯录程序:
```c
#include <stdio.h>
#include <stdlib.h>
// 定义联系人结构体
typedef struct {
char name[50];
char phone[20];
} Contact;
// 链表节点结构体
typedef struct Node {
Contact info;
struct Node* next;
} Node;
// 初始化链表头指针
Node* head = NULL;
// 添加联系人
void addContact(char* name, char* phone) {
Node* newNode = (Node*)malloc(sizeof(Node));
newNode->info.name = malloc(strlen(name) + 1);
strcpy(newNode->info.name, name);
newNode->info.phone = malloc(strlen(phone) + 1);
strcpy(newNode->info.phone, phone);
newNode->next = head;
head = newNode;
}
// 删除联系人
void deleteContact(int id) {
if (head == NULL) return;
if (head->info.id == id) {
Node* temp = head;
head = head->next;
free(temp);
return;
}
Node* current = head;
while (current->next != NULL && strcmp(current->next->info.id, id)) {
current = current->next;
}
if (current->next != NULL) {
Node* temp = current->next;
current->next = temp->next;
free(temp);
}
}
// 修改联系人信息
void modifyContact(int id, char* newName, char* newPhone) {
Node* current = head;
while (current != NULL && strcmp(current->info.id, id) != 0) {
current = current->next;
}
if (current != NULL) {
free(current->info.name);
free(current->info.phone);
current->info.name = malloc(strlen(newName) + 1);
strcpy(current->info.name, newName);
current->info.phone = malloc(strlen(newPhone) + 1);
strcpy(current->info.phone, newPhone);
} else {
printf("Contact not found.\n");
}
}
// 主函数
int main() {
int choice, id;
char name[50], phone[20];
// 打印菜单并获取用户选择
do {
printf("\n1. Add contact\n2. Delete contact\n3. Modify contact\n4. Exit\n");
scanf("%d", &choice);
switch(choice) {
case 1:
printf("Enter contact details (ID, Name, Phone): ");
scanf("%d %s %s", &id, name, phone);
addContact(name, phone);
break;
case 2:
printf("Enter ID to delete: ");
scanf("%d", &id);
deleteContact(id);
break;
case 3:
printf("Enter ID and updated details (newName, newPhone): ");
scanf("%d %s %s", &id, name, phone);
modifyContact(id, name, phone);
break;
case 4:
break;
default:
printf("Invalid choice. Try again.\n");
break;
}
} while (choice != 4);
return 0;
}
```
阅读全文