通訊錄是日常生活中常用的工具,用于存儲和管理聯系人信息。在C語言中,我們可以通過靜態和動態兩種方式來實現通訊錄。靜態實現通常使用數組來存儲聯系人信息,而動態實現則使用鏈表或動態數組等數據結構。本文將詳細介紹這兩種實現方法,并通過代碼示例展示其具體實現過程。
一個基本的通訊錄通常包含以下功能: 1. 添加聯系人:向通訊錄中添加新的聯系人信息。 2. 刪除聯系人:從通訊錄中刪除指定的聯系人。 3. 查找聯系人:根據姓名或其他信息查找聯系人。 4. 修改聯系人:修改通訊錄中已有聯系人的信息。 5. 顯示所有聯系人:顯示通訊錄中所有聯系人的信息。 6. 保存通訊錄:將通訊錄保存到文件中。 7. 加載通訊錄:從文件中加載通訊錄。
在靜態實現中,我們通常使用數組來存儲聯系人信息。每個聯系人可以定義為一個結構體,包含姓名、電話號碼、電子郵件等信息。
#define MAX_CONTACTS 100
typedef struct {
char name[50];
char phone[20];
char email[50];
} Contact;
Contact contacts[MAX_CONTACTS];
int contact_count = 0;
void add_contact() {
if (contact_count >= MAX_CONTACTS) {
printf("通訊錄已滿,無法添加新聯系人。\n");
return;
}
Contact new_contact;
printf("請輸入姓名: ");
scanf("%s", new_contact.name);
printf("請輸入電話號碼: ");
scanf("%s", new_contact.phone);
printf("請輸入電子郵件: ");
scanf("%s", new_contact.email);
contacts[contact_count++] = new_contact;
printf("聯系人添加成功。\n");
}
void delete_contact() {
char name[50];
printf("請輸入要刪除的聯系人姓名: ");
scanf("%s", name);
int index = -1;
for (int i = 0; i < contact_count; i++) {
if (strcmp(contacts[i].name, name) == 0) {
index = i;
break;
}
}
if (index == -1) {
printf("未找到該聯系人。\n");
return;
}
for (int i = index; i < contact_count - 1; i++) {
contacts[i] = contacts[i + 1];
}
contact_count--;
printf("聯系人刪除成功。\n");
}
void find_contact() {
char name[50];
printf("請輸入要查找的聯系人姓名: ");
scanf("%s", name);
for (int i = 0; i < contact_count; i++) {
if (strcmp(contacts[i].name, name) == 0) {
printf("姓名: %s\n", contacts[i].name);
printf("電話號碼: %s\n", contacts[i].phone);
printf("電子郵件: %s\n", contacts[i].email);
return;
}
}
printf("未找到該聯系人。\n");
}
void modify_contact() {
char name[50];
printf("請輸入要修改的聯系人姓名: ");
scanf("%s", name);
for (int i = 0; i < contact_count; i++) {
if (strcmp(contacts[i].name, name) == 0) {
printf("請輸入新的電話號碼: ");
scanf("%s", contacts[i].phone);
printf("請輸入新的電子郵件: ");
scanf("%s", contacts[i].email);
printf("聯系人信息修改成功。\n");
return;
}
}
printf("未找到該聯系人。\n");
}
void display_contacts() {
if (contact_count == 0) {
printf("通訊錄為空。\n");
return;
}
for (int i = 0; i < contact_count; i++) {
printf("聯系人 %d:\n", i + 1);
printf("姓名: %s\n", contacts[i].name);
printf("電話號碼: %s\n", contacts[i].phone);
printf("電子郵件: %s\n", contacts[i].email);
printf("\n");
}
}
void save_contacts() {
FILE *file = fopen("contacts.dat", "wb");
if (file == NULL) {
printf("無法打開文件。\n");
return;
}
fwrite(&contact_count, sizeof(int), 1, file);
fwrite(contacts, sizeof(Contact), contact_count, file);
fclose(file);
printf("通訊錄保存成功。\n");
}
void load_contacts() {
FILE *file = fopen("contacts.dat", "rb");
if (file == NULL) {
printf("無法打開文件。\n");
return;
}
fread(&contact_count, sizeof(int), 1, file);
fread(contacts, sizeof(Contact), contact_count, file);
fclose(file);
printf("通訊錄加載成功。\n");
}
#include <stdio.h>
#include <string.h>
#define MAX_CONTACTS 100
typedef struct {
char name[50];
char phone[20];
char email[50];
} Contact;
Contact contacts[MAX_CONTACTS];
int contact_count = 0;
void add_contact() {
if (contact_count >= MAX_CONTACTS) {
printf("通訊錄已滿,無法添加新聯系人。\n");
return;
}
Contact new_contact;
printf("請輸入姓名: ");
scanf("%s", new_contact.name);
printf("請輸入電話號碼: ");
scanf("%s", new_contact.phone);
printf("請輸入電子郵件: ");
scanf("%s", new_contact.email);
contacts[contact_count++] = new_contact;
printf("聯系人添加成功。\n");
}
void delete_contact() {
char name[50];
printf("請輸入要刪除的聯系人姓名: ");
scanf("%s", name);
int index = -1;
for (int i = 0; i < contact_count; i++) {
if (strcmp(contacts[i].name, name) == 0) {
index = i;
break;
}
}
if (index == -1) {
printf("未找到該聯系人。\n");
return;
}
for (int i = index; i < contact_count - 1; i++) {
contacts[i] = contacts[i + 1];
}
contact_count--;
printf("聯系人刪除成功。\n");
}
void find_contact() {
char name[50];
printf("請輸入要查找的聯系人姓名: ");
scanf("%s", name);
for (int i = 0; i < contact_count; i++) {
if (strcmp(contacts[i].name, name) == 0) {
printf("姓名: %s\n", contacts[i].name);
printf("電話號碼: %s\n", contacts[i].phone);
printf("電子郵件: %s\n", contacts[i].email);
return;
}
}
printf("未找到該聯系人。\n");
}
void modify_contact() {
char name[50];
printf("請輸入要修改的聯系人姓名: ");
scanf("%s", name);
for (int i = 0; i < contact_count; i++) {
if (strcmp(contacts[i].name, name) == 0) {
printf("請輸入新的電話號碼: ");
scanf("%s", contacts[i].phone);
printf("請輸入新的電子郵件: ");
scanf("%s", contacts[i].email);
printf("聯系人信息修改成功。\n");
return;
}
}
printf("未找到該聯系人。\n");
}
void display_contacts() {
if (contact_count == 0) {
printf("通訊錄為空。\n");
return;
}
for (int i = 0; i < contact_count; i++) {
printf("聯系人 %d:\n", i + 1);
printf("姓名: %s\n", contacts[i].name);
printf("電話號碼: %s\n", contacts[i].phone);
printf("電子郵件: %s\n", contacts[i].email);
printf("\n");
}
}
void save_contacts() {
FILE *file = fopen("contacts.dat", "wb");
if (file == NULL) {
printf("無法打開文件。\n");
return;
}
fwrite(&contact_count, sizeof(int), 1, file);
fwrite(contacts, sizeof(Contact), contact_count, file);
fclose(file);
printf("通訊錄保存成功。\n");
}
void load_contacts() {
FILE *file = fopen("contacts.dat", "rb");
if (file == NULL) {
printf("無法打開文件。\n");
return;
}
fread(&contact_count, sizeof(int), 1, file);
fread(contacts, sizeof(Contact), contact_count, file);
fclose(file);
printf("通訊錄加載成功。\n");
}
int main() {
int choice;
while (1) {
printf("\n通訊錄管理系統\n");
printf("1. 添加聯系人\n");
printf("2. 刪除聯系人\n");
printf("3. 查找聯系人\n");
printf("4. 修改聯系人\n");
printf("5. 顯示所有聯系人\n");
printf("6. 保存通訊錄\n");
printf("7. 加載通訊錄\n");
printf("8. 退出\n");
printf("請選擇操作: ");
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:
display_contacts();
break;
case 6:
save_contacts();
break;
case 7:
load_contacts();
break;
case 8:
return 0;
default:
printf("無效的選擇,請重新輸入。\n");
}
}
return 0;
}
在動態實現中,我們通常使用鏈表來存儲聯系人信息。每個聯系人可以定義為一個結構體,包含姓名、電話號碼、電子郵件等信息,以及指向下一個聯系人的指針。
typedef struct ContactNode {
char name[50];
char phone[20];
char email[50];
struct ContactNode *next;
} ContactNode;
ContactNode *head = NULL;
void add_contact() {
ContactNode *new_contact = (ContactNode *)malloc(sizeof(ContactNode));
if (new_contact == NULL) {
printf("內存分配失敗。\n");
return;
}
printf("請輸入姓名: ");
scanf("%s", new_contact->name);
printf("請輸入電話號碼: ");
scanf("%s", new_contact->phone);
printf("請輸入電子郵件: ");
scanf("%s", new_contact->email);
new_contact->next = head;
head = new_contact;
printf("聯系人添加成功。\n");
}
void delete_contact() {
char name[50];
printf("請輸入要刪除的聯系人姓名: ");
scanf("%s", name);
ContactNode *current = head;
ContactNode *previous = NULL;
while (current != NULL) {
if (strcmp(current->name, name) == 0) {
if (previous == NULL) {
head = current->next;
} else {
previous->next = current->next;
}
free(current);
printf("聯系人刪除成功。\n");
return;
}
previous = current;
current = current->next;
}
printf("未找到該聯系人。\n");
}
void find_contact() {
char name[50];
printf("請輸入要查找的聯系人姓名: ");
scanf("%s", name);
ContactNode *current = head;
while (current != NULL) {
if (strcmp(current->name, name) == 0) {
printf("姓名: %s\n", current->name);
printf("電話號碼: %s\n", current->phone);
printf("電子郵件: %s\n", current->email);
return;
}
current = current->next;
}
printf("未找到該聯系人。\n");
}
void modify_contact() {
char name[50];
printf("請輸入要修改的聯系人姓名: ");
scanf("%s", name);
ContactNode *current = head;
while (current != NULL) {
if (strcmp(current->name, name) == 0) {
printf("請輸入新的電話號碼: ");
scanf("%s", current->phone);
printf("請輸入新的電子郵件: ");
scanf("%s", current->email);
printf("聯系人信息修改成功。\n");
return;
}
current = current->next;
}
printf("未找到該聯系人。\n");
}
void display_contacts() {
if (head == NULL) {
printf("通訊錄為空。\n");
return;
}
ContactNode *current = head;
int count = 1;
while (current != NULL) {
printf("聯系人 %d:\n", count++);
printf("姓名: %s\n", current->name);
printf("電話號碼: %s\n", current->phone);
printf("電子郵件: %s\n", current->email);
printf("\n");
current = current->next;
}
}
void save_contacts() {
FILE *file = fopen("contacts.dat", "wb");
if (file == NULL) {
printf("無法打開文件。\n");
return;
}
ContactNode *current = head;
while (current != NULL) {
fwrite(current, sizeof(ContactNode), 1, file);
current = current->next;
}
fclose(file);
printf("通訊錄保存成功。\n");
}
void load_contacts() {
FILE *file = fopen("contacts.dat", "rb");
if (file == NULL) {
printf("無法打開文件。\n");
return;
}
ContactNode *current = NULL;
ContactNode *previous = NULL;
while (1) {
ContactNode *new_contact = (ContactNode *)malloc(sizeof(ContactNode));
if (fread(new_contact, sizeof(ContactNode), 1, file) != 1) {
free(new_contact);
break;
}
new_contact->next = NULL;
if (head == NULL) {
head = new_contact;
} else {
previous->next = new_contact;
}
previous = new_contact;
}
fclose(file);
printf("通訊錄加載成功。\n");
}
”`c
#include
typedef struct ContactNode { char name[50]; char phone[20]; char email[50]; struct ContactNode *next; } ContactNode;
ContactNode *head = NULL;
void add_contact() { ContactNode *new_contact = (ContactNode *)malloc(sizeof(ContactNode)); if (new_contact == NULL) { printf(“內存分配失敗。\n”); return; }
printf("請輸入姓名: ");
scanf("%s", new_contact->name);
printf("請輸入電話號碼: ");
scanf("%s", new_contact->phone);
printf("請輸入電子郵件: ");
scanf("%s", new_contact->email);
new_contact->next = head;
head = new_contact;
printf("聯系人添加成功。\n");
}
void delete_contact() { char name[50]; printf(“請輸入要刪除的聯系人姓名: “); scanf(”%s”, name);
ContactNode *current = head;
ContactNode *previous = NULL;
while (current != NULL) {
if (strcmp(current->name, name) == 0) {
if (previous == NULL) {
head = current->next;
} else {
previous->next = current->next;
}
free(current);
printf("聯系人刪除成功。\n");
return;
}
previous = current;
current = current->next;
}
printf
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。