写一段代码用c语言来实现,个人通讯录管理系统 通讯录信息包括:姓名、电话号码、QQ、微信号、家庭住址。实现以下菜单显示的功能: 1、通讯录信息的录入,按姓名排序并存入文件中。2、添加,可以添加联系人信息。若已有,提示是否修改该人的信息,若不修改,则插入该联系人信息,插入后仍然保持按姓名有序,再保存到原文件中。3查询,查询联系人信息。按姓名查询
时间: 2024-03-25 11:39:30 浏览: 102
以下是个人通讯录管理系统的代码实现,包括菜单显示和各个功能的实现:
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 20
#define MAX_PHONE_LEN 12
#define MAX_QQ_LEN 20
#define MAX_WECHAT_LEN 20
#define MAX_ADDRESS_LEN 50
typedef struct Contact {
char name[MAX_NAME_LEN]; // 姓名
char phone[MAX_PHONE_LEN]; // 电话号码
char qq[MAX_QQ_LEN]; // QQ号码
char wechat[MAX_WECHAT_LEN]; // 微信号
char address[MAX_ADDRESS_LEN]; // 家庭住址
} Contact;
// 显示菜单
void show_menu() {
printf("=================================\n");
printf("= 1. 通讯录信息的录入 =\n");
printf("= 2. 添加联系人信息 =\n");
printf("= 3. 查询联系人信息 =\n");
printf("= 4. 退出程序 =\n");
printf("=================================\n");
}
// 录入信息
void input_info(Contact *contacts, int n) {
for (int i = 0; i < n; i++) {
printf("请输入第%d个联系人的信息:\n", i + 1);
printf("姓名:");
scanf("%s", contacts[i].name);
printf("电话号码:");
scanf("%s", contacts[i].phone);
printf("QQ号码:");
scanf("%s", contacts[i].qq);
printf("微信号:");
scanf("%s", contacts[i].wechat);
printf("家庭住址:");
scanf("%s", contacts[i].address);
}
// 按姓名排序
for (int i = 0; i < n - 1; i++) {
for (int j = 0; j < n - 1 - i; j++) {
if (strcmp(contacts[j].name, contacts[j + 1].name) > 0) {
Contact tmp = contacts[j];
contacts[j] = contacts[j + 1];
contacts[j + 1] = tmp;
}
}
}
// 存入文件
FILE *fp = fopen("contacts.txt", "w");
if (fp == NULL) {
printf("文件打开失败\n");
return;
}
for (int i = 0; i < n; i++) {
fprintf(fp, "%s %s %s %s %s\n", contacts[i].name, contacts[i].phone, contacts[i].qq, contacts[i].wechat, contacts[i].address);
}
fclose(fp);
printf("录入成功\n");
}
// 添加联系人信息
void add_info(Contact *contacts, int *n) {
Contact new_contact;
printf("请输入新联系人的信息:\n");
printf("姓名:");
scanf("%s", new_contact.name);
printf("电话号码:");
scanf("%s", new_contact.phone);
printf("QQ号码:");
scanf("%s", new_contact.qq);
printf("微信号:");
scanf("%s", new_contact.wechat);
printf("家庭住址:");
scanf("%s", new_contact.address);
// 查找是否已有该联系人
int i;
for (i = 0; i < *n; i++) {
if (strcmp(contacts[i].name, new_contact.name) == 0) {
break;
}
}
if (i < *n) {
// 已有该联系人,询问是否修改
printf("该联系人已存在,是否要修改他的信息?(y/n)");
char c;
scanf(" %c", &c);
if (c == 'y' || c == 'Y') {
contacts[i] = new_contact;
} else {
// 不修改,插入新联系人
for (int j = *n - 1; j >= i; j--) {
contacts[j + 1] = contacts[j];
}
contacts[i] = new_contact;
(*n)++;
}
} else {
// 没有该联系人,插入新联系人
for (int j = *n - 1; j >= i; j--) {
contacts[j + 1] = contacts[j];
}
contacts[i] = new_contact;
(*n)++;
}
// 按姓名排序
for (i = 0; i < *n - 1; i++) {
for (int j = 0; j < *n - 1 - i; j++) {
if (strcmp(contacts[j].name, contacts[j + 1].name) > 0) {
Contact tmp = contacts[j];
contacts[j] = contacts[j + 1];
contacts[j + 1] = tmp;
}
}
}
// 存入文件
FILE *fp = fopen("contacts.txt", "w");
if (fp == NULL) {
printf("文件打开失败\n");
return;
}
for (int i = 0; i < *n; i++) {
fprintf(fp, "%s %s %s %s %s\n", contacts[i].name, contacts[i].phone, contacts[i].qq, contacts[i].wechat, contacts[i].address);
}
fclose(fp);
printf("添加成功\n");
}
// 查询联系人信息
void search_info(Contact *contacts, int n) {
char name[MAX_NAME_LEN];
printf("请输入要查询的联系人姓名:");
scanf("%s", name);
// 二分查找
int left = 0, right = n - 1;
while (left <= right) {
int mid = (left + right) / 2;
int cmp = strcmp(contacts[mid].name, name);
if (cmp == 0) {
printf("姓名:%s\n", contacts[mid].name);
printf("电话号码:%s\n", contacts[mid].phone);
printf("QQ号码:%s\n", contacts[mid].qq);
printf("微信号:%s\n", contacts[mid].wechat);
printf("家庭住址:%s\n", contacts[mid].address);
return;
} else if (cmp < 0) {
left = mid + 1;
} else {
right = mid - 1;
}
}
printf("未找到联系人\n");
}
int main() {
int n = 0;
Contact contacts[100];
// 从文件中读取联系人信息
FILE *fp = fopen("contacts.txt", "r");
if (fp != NULL) {
while (fscanf(fp, "%s %s %s %s %s", contacts[n].name, contacts[n].phone, contacts[n].qq, contacts[n].wechat, contacts[n].address) == 5) {
n++;
}
fclose(fp);
}
// 显示菜单,处理用户输入
while (1) {
show_menu();
int choice;
printf("请输入您的选择:");
scanf("%d", &choice);
switch (choice) {
case 1:
input_info(contacts, n);
break;
case 2:
add_info(contacts, &n);
break;
case 3:
search_info(contacts, n);
break;
case 4:
return 0;
default:
printf("无效的选择,请重新输入\n");
break;
}
}
return 0;
}
```
以上代码实现了个人通讯录管理系统的基本功能,包括录入信息、添加联系人信息和查询联系人信息。联系人信息按姓名排序并存入文件中,程序启动时从文件中读取联系人信息并显示菜单供用户选择。
阅读全文