C语言写通讯录完整代码带有注释
时间: 2023-07-10 22:36:27 浏览: 93
用C语言写通讯录
以下是一个带有注释的C语言通讯录完整代码,包括添加、删除、查找、修改和通讯录中所有联系人的功能:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define NAME_LEN 20 // 姓名最大长度
#define PHONE_LEN 11 // 电话号码最大长度
#define MAX_CONTACTS 100 // 最多可存储的联系人数量
// 定义Contact结构体类型,包含姓名和电话号码两个成员
typedef struct Contact {
char name[NAME_LEN];
char phone[PHONE_LEN];
} Contact;
Contact contacts[MAX_CONTACTS]; // 存储联系人的数组
int num_contacts = 0; // 当前已存储的联系人数量
// 添加联系人函数
void add_contact() {
if (num_contacts == MAX_CONTACTS) { // 如果联系人数组已满
printf("The contacts list is full.\n"); // 提示用户无法添加
return;
}
Contact new_contact; // 新建一个Contact结构体
printf("Enter name: ");
scanf("%s", new_contact.name); // 输入姓名
printf("Enter phone number: ");
scanf("%s", new_contact.phone); // 输入电话号码
contacts[num_contacts++] = new_contact; // 将新建的Contact结构体添加到联系人数组中
printf("Contact added.\n"); // 提示用户添加成功
}
// 删除联系人函数
void delete_contact() {
char name[NAME_LEN];
printf("Enter name to delete: ");
scanf("%s", name); // 输入要删除的联系人姓名
int index = -1; // 初始化要删除的联系人在数组中的下标为-1
for (int i = 0; i < num_contacts; i++) { // 遍历已存储的联系人
if (strcmp(contacts[i].name, name) == 0) { // 如果找到要删除的联系人
index = i; // 记录要删除的联系人在数组中的下标
break;
}
}
if (index == -1) { // 如果要删除的联系人不存在
printf("Contact not found.\n"); // 提示用户未找到
return;
}
for (int i = index; i < num_contacts - 1; i++) { // 将要删除的联系人之后的所有联系人向前移一位
contacts[i] = contacts[i + 1];
}
num_contacts--; // 更新当前联系人数量
printf("Contact deleted.\n"); // 提示用户删除成功
}
// 查找联系人函数
void find_contact() {
char name[NAME_LEN];
printf("Enter name to find: ");
scanf("%s", name); // 输入要查找的联系人姓名
int index = -1; // 初始化要查找的联系人在数组中的下标为-1
for (int i = 0; i < num_contacts; i++) { // 遍历已存储的联系人
if (strcmp(contacts[i].name, name) == 0) { // 如果找到要查找的联系人
index = i; // 记录要查找的联系人在数组中的下标
break;
}
}
if (index == -1) { // 如果要查找的联系人不存在
printf("Contact not found.\n"); // 提示用户未找到
return;
}
printf("Name: %s\nPhone: %s\n", contacts[index].name, contacts[index].phone); // 输出查找到的联系人姓名和电话号码
}
// 修改联系人函数
void modify_contact() {
char name[NAME_LEN];
printf("Enter name to modify: ");
scanf("%s", name); // 输入要修改的联系人姓名
int index = -1; // 初始化要修改的联系人在数组中的下标为-1
for (int i = 0; i < num_contacts; i++) { // 遍历已存储的联系人
if (strcmp(contacts[i].name, name) == 0) { // 如果找到要修改的联系人
index = i; // 记录要修改的联系人在数组中的下标
break;
}
}
if (index == -1) { // 如果要修改的联系人不存在
printf("Contact not found.\n"); // 提示用户未找到
return;
}
printf("Enter new phone number: ");
scanf("%s", contacts[index].phone); // 输入要修改的联系人的新电话号码
printf("Contact modified.\n"); // 提示用户修改成功
}
// 显示所有联系人函数
void print_contacts() {
printf("Contacts:\n");
for (int i = 0; i < num_contacts; i++) { // 遍历已存储的联系人,并输出每个联系人的姓名和电话号码
printf("%s: %s\n", contacts[i].name, contacts[i].phone);
}
}
int main() {
int choice;
while (1) {
printf("Choose an option:\n");
printf("1. Add contact\n2. Delete contact\n3. Find contact\n4. Modify contact\n5. Print contacts\n6. Exit\n");
scanf("%d", &choice); // 输入用户选择的操作
switch (choice) {
case 1:
add_contact(); // 执行添加联系人操作
break;
case 2:
delete_contact(); // 执行删除联系人操作
break;
case 3:
find_contact(); // 执行查找联系人操作
break;
case 4:
modify_contact(); // 执行修改联系人操作
break;
case 5:
print_contacts(); // 执行显示所有联系人操作
break;
case 6:
exit(0); // 退出程序
default:
printf("Invalid choice.\n"); // 提示用户选择无效
}
}
return 0;
}
```
注释中对每个函数的功能和实现方式进行了详细说明,帮助读者更好地理解程序的逻辑和实现。
阅读全文