C语言通讯录管理系统源代码
以下是一个完整的C语言通讯录管理系统源代码,包含添加、删除、查询、显示、保存和加载通讯录等功能。

(图片来源网络,侵删)
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <conio.h> // 用于getch()函数
#define MAX_NAME_LEN 50
#define MAX_PHONE_LEN 20
#define MAX_EMAIL_LEN 50
#define MAX_ADDR_LEN 100
#define MAX_RECORDS 1000
// 联系人结构体
typedef struct {
char name[MAX_NAME_LEN];
char phone[MAX_PHONE_LEN];
char email[MAX_EMAIL_LEN];
char address[MAX_ADDR_LEN];
} Contact;
// 通讯录结构体
typedef struct {
Contact contacts[MAX_RECORDS];
int count;
} AddressBook;
// 函数声明
void initAddressBook(AddressBook *book);
void addContact(AddressBook *book);
void deleteContact(AddressBook *book);
void searchContact(AddressBook *book);
void displayAllContacts(AddressBook *book);
void saveToFile(AddressBook *book);
void loadFromFile(AddressBook *book);
void showMenu();
int main() {
AddressBook book;
initAddressBook(&book);
loadFromFile(&book);
int choice;
do {
showMenu();
printf("请输入您的选择: ");
scanf("%d", &choice);
while(getchar() != '\n'); // 清除输入缓冲区
switch(choice) {
case 1:
addContact(&book);
break;
case 2:
deleteContact(&book);
break;
case 3:
searchContact(&book);
break;
case 4:
displayAllContacts(&book);
break;
case 5:
saveToFile(&book);
break;
case 6:
printf("感谢使用,再见!\n");
break;
default:
printf("无效的选择,请重新输入!\n");
}
if(choice != 6) {
printf("\n按任意键继续...");
getch();
}
} while(choice != 6);
return 0;
}
// 初始化通讯录
void initAddressBook(AddressBook *book) {
book->count = 0;
}
// 显示菜单
void showMenu() {
system("cls"); // 清屏 (Windows系统)
// system("clear"); // Linux/Mac系统
printf("========== 通讯录管理系统 ==========\n");
printf("1. 添加联系人\n");
printf("2. 删除联系人\n");
printf("3. 查询联系人\n");
printf("4. 显示所有联系人\n");
printf("5. 保存通讯录\n");
printf("6. 退出系统\n");
printf("====================================\n");
}
// 添加联系人
void addContact(AddressBook *book) {
if(book->count >= MAX_RECORDS) {
printf("通讯录已满,无法添加更多联系人!\n");
return;
}
Contact newContact;
printf("请输入姓名: ");
fgets(newContact.name, MAX_NAME_LEN, stdin);
newContact.name[strcspn(newContact.name, "\n")] = '\0'; // 去除换行符
printf("请输入电话: ");
fgets(newContact.phone, MAX_PHONE_LEN, stdin);
newContact.phone[strcspn(newContact.phone, "\n")] = '\0';
printf("请输入邮箱: ");
fgets(newContact.email, MAX_EMAIL_LEN, stdin);
newContact.email[strcspn(newContact.email, "\n")] = '\0';
printf("请输入地址: ");
fgets(newContact.address, MAX_ADDR_LEN, stdin);
newContact.address[strcspn(newContact.address, "\n")] = '\0';
book->contacts[book->count++] = newContact;
printf("联系人添加成功!\n");
}
// 删除联系人
void deleteContact(AddressBook *book) {
if(book->count == 0) {
printf("通讯录为空,没有联系人可删除!\n");
return;
}
char name[MAX_NAME_LEN];
printf("请输入要删除的联系人姓名: ");
fgets(name, MAX_NAME_LEN, stdin);
name[strcspn(name, "\n")] = '\0';
int found = 0;
for(int i = 0; i < book->count; i++) {
if(strcmp(book->contacts[i].name, name) == 0) {
// 将后面的联系人前移
for(int j = i; j < book->count - 1; j++) {
book->contacts[j] = book->contacts[j + 1];
}
book->count--;
found = 1;
printf("联系人删除成功!\n");
break;
}
}
if(!found) {
printf("未找到姓名为 %s 的联系人!\n", name);
}
}
// 查询联系人
void searchContact(AddressBook *book) {
if(book->count == 0) {
printf("通讯录为空,没有联系人可查询!\n");
return;
}
char name[MAX_NAME_LEN];
printf("请输入要查询的联系人姓名: ");
fgets(name, MAX_NAME_LEN, stdin);
name[strcspn(name, "\n")] = '\0';
int found = 0;
for(int i = 0; i < book->count; i++) {
if(strcmp(book->contacts[i].name, name) == 0) {
printf("\n姓名: %s\n", book->contacts[i].name);
printf("电话: %s\n", book->contacts[i].phone);
printf("邮箱: %s\n", book->contacts[i].email);
printf("地址: %s\n", book->contacts[i].address);
found = 1;
break;
}
}
if(!found) {
printf("未找到姓名为 %s 的联系人!\n", name);
}
}
// 显示所有联系人
void displayAllContacts(AddressBook *book) {
if(book->count == 0) {
printf("通讯录为空,没有联系人可显示!\n");
return;
}
printf("\n========== 所有联系人 ==========\n");
printf("%-20s %-15s %-25s %-30s\n", "姓名", "电话", "邮箱", "地址");
printf("------------------------------------------------------------\n");
for(int i = 0; i < book->count; i++) {
printf("%-20s %-15s %-25s %-30s\n",
book->contacts[i].name,
book->contacts[i].phone,
book->contacts[i].email,
book->contacts[i].address);
}
printf("================================\n");
}
// 保存通讯录到文件
void saveToFile(AddressBook *book) {
FILE *file = fopen("contacts.dat", "wb");
if(file == NULL) {
printf("无法打开文件进行保存!\n");
return;
}
fwrite(book, sizeof(AddressBook), 1, file);
fclose(file);
printf("通讯录保存成功!\n");
}
// 从文件加载通讯录
void loadFromFile(AddressBook *book) {
FILE *file = fopen("contacts.dat", "rb");
if(file == NULL) {
printf("未找到通讯录文件,将创建新通讯录,\n");
return;
}
fread(book, sizeof(AddressBook), 1, file);
fclose(file);
printf("通讯录加载成功!\n");
}
功能说明
- 添加联系人:可以输入姓名、电话、邮箱和地址来添加新联系人
- 删除联系人:根据姓名删除联系人
- 查询联系人:根据姓名查询联系人信息
- 显示所有联系人:以表格形式显示所有联系人信息
- 保存通讯录:将通讯录数据保存到二进制文件
- 加载通讯录:从文件加载已保存的通讯录数据
使用说明
- 将代码复制到C语言编译器中(如Dev-C++, Visual Studio Code等)
- 编译并运行程序
- 根据菜单提示选择相应功能
注意事项
- 程序使用
conio.h中的getch()函数,这在Windows系统中有效- 如果在Linux/Mac系统上运行,可以注释掉
getch()相关代码
- 如果在Linux/Mac系统上运行,可以注释掉
- 数据以二进制格式保存在
contacts.dat文件中 - 程序限制了最大联系人数量为1000个,可以根据需要修改
MAX_RECORDS宏定义
扩展建议
- 可以增加按电话号码或邮箱查询的功能
- 可以增加修改联系人信息的功能
- 可以增加按姓名排序的功能
- 可以增加数据验证,确保电话号码格式正确等

(图片来源网络,侵删)
