本文提供了一个简单而实用的通讯录管理系统的C语言实现。系统能够存储多达100个联系人的信息,每个联系人包含姓名、两个电话号码和QQ号码。主要功能包括:
信息录入:允许用户添加新的联系人到通讯录中。
信息浏览:显示当前存储在通讯录中的所有联系人信息。
信息查询:通过姓名搜索并显示特定联系人的详细信息。
信息修改:更新现有联系人的电话号码和QQ号码。
删除联系人:从通讯录中删除指定姓名的联系人。
数据持久化:将通讯录数据保存到文件中,并在启动时加载。
系统使用标准C库构建,不依赖任何外部库,确保了良好的可移植性。代码注释清晰,采用了结构化的设计,便于阅读和维护。此外,系统提供了简易的命令行界面,使得操作直观易懂,即便是非技术用户也能轻松管理通讯录。
#include <stdio.h>
#include <string.h>
#define MAX_CONTACTS 100
#define NAME_LENGTH 50
#define PHONE_LENGTH 20
#define QQ_LENGTH 20
typedef struct {
char name[NAME_LENGTH];
char phone1[PHONE_LENGTH];
char phone2[PHONE_LENGTH];
char qq[QQ_LENGTH];
} Contact;
Contact contacts[MAX_CONTACTS];
int contactCount = 0;
void menu() {
printf("========================================\n");
printf("| 通讯录管理系统 \n");
printf("| a: 信息录入功能\n");
printf("| b: 信息浏览功能\n");
printf("| c: 信息查询功能 (按姓名查询)\n");
printf("| d: 信息修改功能\n");
printf("| e: 删除联系人\n");
printf("| f: 系统退出功能\n");
printf("========================================\n");
printf("请输入你的选择: ");
}
void loadContacts() {
FILE *fp = fopen("contacts.txt", "r");
if (fp == NULL) {
printf("没有找到通讯录文件,开始新的通讯录。\n");
return;
}
fscanf(fp, "%d\n", &contactCount);
for (int i = 0; i < contactCount; i++) {
fscanf(fp, "%s %s %s %s\n", contacts[i].name, contacts[i].phone1, contacts[i].phone2, contacts[i].qq);
}
fclose(fp);
printf("通讯录加载成功!\n");
}
void addContact() {
if (contactCount >= MAX_CONTACTS) {
printf("通讯录已满,无法添加新联系人。\n");
return;
}
Contact contact;
printf("请输入姓名: ");
scanf("%s", contact.name);
printf("请输入电话号码1: ");
scanf("%s", contact.phone1);
printf("请输入电话号码2: ");
scanf("%s", contact.phone2);
printf("请输入QQ号: ");
scanf("%s", contact.qq);
contacts[contactCount++] = contact;
printf("联系人添加成功!\n");
}
void displayContacts() {
if (contactCount == 0) {
printf("通讯录为空。\n");
return;
}
for (int i = 0; i < contactCount; i++) {
printf("姓名: %s, 电话1: %s, 电话2: %s, QQ: %s\n", contacts[i].name, contacts[i].phone1, contacts[i].phone2, contacts[i].qq);
}
}
void queryContact() {
char name[NAME_LENGTH];
printf("请输入要查询的姓名: ");
scanf("%s", name);
for(int i = 0; i < contactCount; i++) {
if (strcmp(contacts[i].name, name) == 0) {
printf("姓名: %s, 电话1: %s, 电话2: %s, QQ: %s\n", contacts[i].name, contacts[i].phone1, contacts[i].phone2, contacts[i].qq);
return;
}
}
printf("未找到联系人。\n");
}
void modifyContact() {
char name[NAME_LENGTH];
printf("请输入要修改的联系人姓名: ");
scanf("%s", name);
for (int i = 0; i < contactCount; i++) {
if (strcmp(contacts[i].name, name) == 0) {
printf("请输入新的电话号码1: ");
scanf("%s", contacts[i].phone1);
printf("请输入新的电话号码2: ");
scanf("%s", contacts[i].phone2);
printf("请输入新的QQ号: ");
scanf("%s", contacts[i].qq);
printf("联系人信息修改成功!\n");
return;
}
}
printf("未找到联系人。\n");
}
void deleteContact() {
char name[NAME_LENGTH];
printf("请输入要删除的联系人姓名: ");
scanf("%s", name);
for (int i = 0; i < contactCount; i++) {
if (strcmp(contacts[i].name, name) == 0) {
for (int j = i; j < contactCount - 1; j++) {
contacts[j] = contacts[j + 1];
}
contactCount--;
printf("联系人删除成功!\n");
return;
}
}
printf("未找到联系人。\n");
}
void saveContacts() {
FILE *fp = fopen("contacts.txt", "w");
if (fp == NULL) {
printf("无法打开文件!\n");
return;
}
fprintf(fp, "%d\n", contactCount);
for (int i = 0; i < contactCount; i++) {
fprintf(fp, "%s %s %s %s\n", contacts[i].name, contacts[i].phone1, contacts[i].phone2, contacts[i].qq);
}
fclose(fp);
printf("通讯录保存成功!\n");
}
int main() {
char choice;
loadContacts();
while (1) {
menu();
scanf(" %c", &choice);
switch (choice) {
case 'a':
addContact();
break;
case 'b':
displayContacts();
break;
case 'c':
queryContact();
break;
case 'd':
modifyContact();
break;
case 'e':
deleteContact();
break;
case 'f':
saveContacts();
printf("退出系统\n");
return 0;
default:
printf("无效选择,请重新输入\n");
}
}
return 0;
}
该通讯录管理系统适合教学、学习C语言文件处理和数据结构的实践项目,同时也适用于需要基本通讯录管理功能的场合。