简单通讯录
1. 问题提出
编写一个简单的通讯录管理程序。
2. 功能要求
实现通讯录的显示、增、删、改、查功能。
通讯录要保存在文件中,每次启动程序都从文件中读取当前的所有记录,每次退出程序时都更新通讯录。
通讯录中至少含有以下字段:姓名、电话号码、地址(嵌套结构)、邮政编码、email。
3. 知识点及参考资料
知识点:文件、循环、数组、嵌套结构体、链表(选用)、函数等。
参考资料:C语言程序设计(第二版)(教材)。
4.完整代码:
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
// 函数声明
void Shu_Ru(); // 信息录入
void Shou(); // 显示主菜单
void xingmingchaxun(); // 按姓名查询
void dianhuachaxun(); // 按电话查询
void chaxunyemian(); // 信息查询页面
void HeadShow(); // 显示表头
void AllShow(); // 显示所有信息
void xiugai(); // 信息修改
void Dle(); // 信息删除
void xinxixiugai(); // 信息修改或删除操作页面
void weiye(); // 尾页显示
// 定义结构体person,用于存储个人信息
struct person {
char name[8]; // 名字
char phone[11]; // 电话
char addr[100]; // 地址
char yzbm[10]; // 邮政编码
char email[30]; // EMAIL
} pe[100] = {0}; // 初始化结构体数组pe
// 信息录入函数
void Shu_Ru() {
int c = 0; // 记录输入的联系人数量
char r; // 用于控制是否继续输入
int i = 0;
FILE *fp = NULL;
fp = fopen("d:\\jiandan.txt", "a"); // 以追加模式打开文件
if (fp == NULL) {
printf("文件打开失败!\n");
return;
}
while (1) {
// 输入联系人信息
printf("请输入名字:"); scanf("%s", pe[c].name);
printf("电话:"); scanf("%s", pe[c].phone);
printf("地址:"); scanf("%s", pe[c].addr);
printf("邮政编码:"); scanf("%s", pe[c].yzbm);
printf("EMAIL:"); scanf("%s", pe[c].email);
// 显示输入的信息
printf("%s\t%s\t%s\t%s\t%s\n", pe[c].name, pe[c].phone, pe[c].addr, pe[c].yzbm, pe[c].email);
c++;
getchar(); // 吸收换行符
// 判断是否继续输入
for (;;) {
printf("按1继续输入,按0结束\n");
scanf("%c", &r);
getchar(); // 吸收换行符
if (r == '1' || r == '0') break;
printf("输入错误!%c不是1和0,请重新输入......\n", r);
}
if (r == '0') break; // 如果选择结束,退出循环
system("cls"); // 清屏
}
// 将录入的信息写入文件
for (i = 0; i < c; i++) {
fprintf(fp, "%s\t%s\t%s\t%s\t%s\n", pe[i].name, pe[i].phone, pe[i].addr, pe[i].yzbm, pe[i].email);
}
fclose(fp); // 关闭文件
}
// 显示主菜单
void Shou() {
printf("################# 通讯录管理系统 v1.0 ###################\n");
printf("########################################