C语言文件操作编程设计一个通讯录管理程序,要求包含下列基本功能: 1.创建通讯录,支持多条信息的输入; 2.增加一组记录; 3.删除指定记录; 4.根据给定条件查询记录; 5.显示通讯录中所有记录信息; 【要求】: 1)在通讯录中,每个人的通讯信息用一条记录表示,其中至少包括姓名、电话号码、邮箱地址三个数据项。 2)为了能够将通讯录的信息独立于程序永久性地保存起来,建议利用C语言提供的文件类型将通讯录信息存储成磁盘文件。 3)考虑设计一个菜单,其中列出程序提供的功能,用户可以自由地选择其中的某项操作。
时间: 2024-03-13 07:46:20 浏览: 130
以下是一个简单的通讯录管理程序,包含创建通讯录、增加记录、删除记录、查询记录和显示所有记录的功能。通讯录信息存储在磁盘文件中,程序启动时会读取文件中的信息,并在程序结束时将信息保存到文件中。
```c
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX_NAME_LEN 50
#define MAX_TEL_LEN 20
#define MAX_EMAIL_LEN 50
#define MAX_RECORDS 100
typedef struct {
char name[MAX_NAME_LEN];
char tel[MAX_TEL_LEN];
char email[MAX_EMAIL_LEN];
} Record;
Record records[MAX_RECORDS];
int num_records = 0;
void load_records();
void save_records();
void create_record();
void add_record();
void delete_record();
void query_record();
void display_records();
int main() {
load_records();
int option;
do {
printf("\n==== 通讯录管理系统 ====\n");
printf("1. 创建通讯录\n");
printf("2. 增加一组记录\n");
printf("3. 删除指定记录\n");
printf("4. 根据给定条件查询记录\n");
printf("5. 显示通讯录中所有记录信息\n");
printf("0. 退出程序\n");
printf("请选择:");
scanf("%d", &option);
switch(option) {
case 1:
create_record();
break;
case 2:
add_record();
break;
case 3:
delete_record();
break;
case 4:
query_record();
break;
case 5:
display_records();
break;
case 0:
break;
default:
printf("无效的选项,请重新选择。\n");
break;
}
} while(option != 0);
save_records();
printf("程序已退出。\n");
return 0;
}
void load_records() {
FILE *fp = fopen("records.txt", "r");
if(fp == NULL) {
printf("找不到通讯录文件,将创建一个新的通讯录。\n");
return;
}
char line[1024];
while(fgets(line, sizeof(line), fp)) {
if(num_records == MAX_RECORDS) {
printf("通讯录已满,无法继续添加记录。\n");
break;
}
char *name = strtok(line, ",");
char *tel = strtok(NULL, ",");
char *email = strtok(NULL, ",");
if(name && tel && email) {
strncpy(records[num_records].name, name, MAX_NAME_LEN);
strncpy(records[num_records].tel, tel, MAX_TEL_LEN);
strncpy(records[num_records].email, email, MAX_EMAIL_LEN);
num_records++;
}
}
fclose(fp);
printf("成功载入 %d 条记录。\n", num_records);
}
void save_records() {
FILE *fp = fopen("records.txt", "w");
if(fp == NULL) {
printf("无法保存通讯录文件。\n");
return;
}
for(int i = 0; i < num_records; i++) {
fprintf(fp, "%s,%s,%s\n", records[i].name, records[i].tel, records[i].email);
}
fclose(fp);
printf("成功保存 %d 条记录。\n", num_records);
}
void create_record() {
num_records = 0;
printf("已创建新的通讯录。\n");
}
void add_record() {
if(num_records == MAX_RECORDS) {
printf("通讯录已满,无法继续添加记录。\n");
return;
}
printf("请输入姓名:");
scanf("%s", records[num_records].name);
printf("请输入电话号码:");
scanf("%s", records[num_records].tel);
printf("请输入邮箱地址:");
scanf("%s", records[num_records].email);
num_records++;
printf("已添加一条记录。\n");
}
void delete_record() {
printf("请输入要删除的记录的姓名:");
char name[MAX_NAME_LEN];
scanf("%s", name);
int found = 0;
for(int i = 0; i < num_records; i++) {
if(strcmp(records[i].name, name) == 0) {
found = 1;
for(int j = i; j < num_records - 1; j++) {
records[j] = records[j+1];
}
num_records--;
printf("已删除记录。\n");
break;
}
}
if(!found) {
printf("找不到该记录。\n");
}
}
void query_record() {
printf("请输入查询条件(姓名、电话号码或邮箱地址):");
char keyword[MAX_NAME_LEN];
scanf("%s", keyword);
int found = 0;
for(int i = 0; i < num_records; i++) {
if(strstr(records[i].name, keyword) || strstr(records[i].tel, keyword) || strstr(records[i].email, keyword)) {
printf("%s,%s,%s\n", records[i].name, records[i].tel, records[i].email);
found = 1;
}
}
if(!found) {
printf("找不到符合条件的记录。\n");
}
}
void display_records() {
printf("共有 %d 条记录:\n", num_records);
for(int i = 0; i < num_records; i++) {
printf("%s,%s,%s\n", records[i].name, records[i].tel, records[i].email);
}
}
```
该程序使用了结构体来存储每个人的通讯信息,定义了一些常量来规定每个数据项的最大长度和最大记录数。程序启动时会尝试读取磁盘文件中的信息,如果文件不存在则创建一个新的通讯录。用户可以通过菜单选择不同的操作,对通讯录进行增删改查等操作,最后在退出程序时会将通讯录信息保存到磁盘文件中。
阅读全文