C语言 基于文件的通讯录管理系统。(文件中已有部分联系人信息信息)通讯录个人信息包括姓名、性别、年龄、电话、地址。用文件读/写操作编程实现通讯录的增加、查找、显示、删除、修改功能,完成通讯录编程、成功运行。
时间: 2023-12-22 21:24:05 浏览: 27
以下是一个基于文件的通讯录管理系统的C语言代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// 定义联系人结构体
typedef struct {
char name[20];
char sex[6];
int age;
char phone[20];
char address[50];
} Contact;
// 显示菜单
void displayMenu() {
printf("\n");
printf("-------------------------------------\n");
printf("1. 添加联系人\n");
printf("2. 查找联系人\n");
printf("3. 显示所有联系人\n");
printf("4. 删除联系人\n");
printf("5. 修改联系人\n");
printf("6. 退出程序\n");
printf("-------------------------------------\n");
printf("请选择操作(1-6):");
}
// 添加联系人
void addContact(FILE *fp) {
Contact contact;
printf("请输入联系人姓名:");
scanf("%s", contact.name);
printf("请输入联系人性别:");
scanf("%s", contact.sex);
printf("请输入联系人年龄:");
scanf("%d", &contact.age);
printf("请输入联系人电话:");
scanf("%s", contact.phone);
printf("请输入联系人地址:");
scanf("%s", contact.address);
fseek(fp, 0, SEEK_END);
fwrite(&contact, sizeof(Contact), 1, fp);
printf("%s 添加成功!\n", contact.name);
}
// 查找联系人
void searchContact(FILE *fp) {
char name[20];
printf("请输入要查找的联系人姓名:");
scanf("%s", name);
Contact contact;
int found = 0;
fseek(fp, 0, SEEK_SET);
while (fread(&contact, sizeof(Contact), 1, fp) == 1) {
if (strcmp(contact.name, name) == 0) {
printf("姓名:%s\n", contact.name);
printf("性别:%s\n", contact.sex);
printf("年龄:%d\n", contact.age);
printf("电话:%s\n", contact.phone);
printf("地址:%s\n", contact.address);
found = 1;
break;
}
}
if (!found) {
printf("未找到联系人:%s\n", name);
}
}
// 显示所有联系人
void displayContacts(FILE *fp) {
Contact contact;
fseek(fp, 0, SEEK_SET);
while (fread(&contact, sizeof(Contact), 1, fp) == 1) {
printf("姓名:%s\n", contact.name);
printf("性别:%s\n", contact.sex);
printf("年龄:%d\n", contact.age);
printf("电话:%s\n", contact.phone);
printf("地址:%s\n", contact.address);
printf("\n");
}
}
// 删除联系人
void deleteContact(FILE *fp) {
char name[20];
printf("请输入要删除的联系人姓名:");
scanf("%s", name);
Contact contact;
int found = 0;
FILE *tmp = fopen("tmp.dat", "wb");
fseek(fp, 0, SEEK_SET);
while (fread(&contact, sizeof(Contact), 1, fp) == 1) {
if (strcmp(contact.name, name) == 0) {
printf("已删除联系人:%s\n", name);
found = 1;
} else {
fwrite(&contact, sizeof(Contact), 1, tmp);
}
}
fclose(fp);
fclose(tmp);
remove("contacts.dat");
rename("tmp.dat", "contacts.dat");
fp = fopen("contacts.dat", "rb+");
if (!found) {
printf("未找到联系人:%s\n", name);
}
}
// 修改联系人
void modifyContact(FILE *fp) {
char name[20];
printf("请输入要修改的联系人姓名:");
scanf("%s", name);
Contact contact;
int found = 0;
fseek(fp, 0, SEEK_SET);
while (fread(&contact, sizeof(Contact), 1, fp) == 1) {
if (strcmp(contact.name, name) == 0) {
printf("请输入联系人姓名:");
scanf("%s", contact.name);
printf("请输入联系人性别:");
scanf("%s", contact.sex);
printf("请输入联系人年龄:");
scanf("%d", &contact.age);
printf("请输入联系人电话:");
scanf("%s", contact.phone);
printf("请输入联系人地址:");
scanf("%s", contact.address);
fseek(fp, -sizeof(Contact), SEEK_CUR);
fwrite(&contact, sizeof(Contact), 1, fp);
printf("已修改联系人:%s\n", name);
found = 1;
break;
}
}
if (!found) {
printf("未找到联系人:%s\n", name);
}
}
int main() {
FILE *fp = fopen("contacts.dat", "rb+");
if (fp == NULL) {
printf("无法打开文件!程序退出。\n");
return 0;
}
while (1) {
displayMenu();
int choice;
scanf("%d", &choice);
switch (choice) {
case 1:
addContact(fp);
break;
case 2:
searchContact(fp);
break;
case 3:
displayContacts(fp);
break;
case 4:
deleteContact(fp);
break;
case 5:
modifyContact(fp);
break;
case 6:
printf("程序退出。\n");
fclose(fp);
return 0;
default:
printf("无效的选择!\n");
break;
}
}
}