根据给定的信息,我们可以总结出以下关于电话簿设计的相关知识点: ### 1. 程序结构概述 此电话簿程序主要由四个功能模块组成:加载数据、查询联系人、添加新联系人以及修改现有联系人信息。这些功能分别通过`load()`、`search()`、`add()`和`modify()`函数实现。 ### 2. 数据结构定义 在程序中,使用了一个名为`person`的结构体来存储每个联系人的详细信息,包括姓名、电话号码、分类、电子邮件地址、QQ号以及备注等字段。同时,为了便于管理多个联系人,程序还定义了一个包含最多15个`person`结构体的数组`per[N]`。 ```c struct person { char name[10]; char phone[11]; char classify[10]; char email[20]; char QQ[15]; char remark[30]; } per[N]; ``` 其中,`N`被定义为15,意味着电话簿最多可以存储15个联系人。 ### 3. 加载数据 (`load()`) `load()`函数负责从磁盘文件`person.txt`中读取已保存的联系人数据,并填充到数组`per[N]`中。该函数首先检查文件是否能够打开,如果无法打开,则会输出错误提示并返回0。如果文件成功打开,则逐行读取数据,并将每条记录解析成`person`结构体的形式,然后填充到数组中。 ```c int load() { FILE *fp; int i; if ((fp = fopen("person.txt", "r")) == NULL) { printf("\nCannot open file\n"); return 0; } for (i = 0; !feof(fp); i++) { fscanf(fp, "%s %s %s %s", &per[i].name, &per[i].phone, &per[i].classify, &per[i].email, &per[i].QQ, &per[i].remark); } fclose(fp); return (i); } ``` ### 4. 查询联系人 (`search()`) `search()`函数允许用户输入想要查询的分类名称(`classify`),然后遍历所有已加载的联系人信息,查找与指定分类匹配的记录。如果找到匹配项,则输出其姓名和电话号码;如果没有找到,则输出“NOEXIST!”提示。 ```c void search() { void menu(); int n, j, k = -1; char p[10]; n = load(); printf("\n\nClassify A: 칫\nClassify B:\nClassify C:\n\n请输入要查询的分类(Classify):"); scanf("%s", p); for (j = 0; j < n; j++) { if (strcmp(p, per[j].classify) == 0) { k = j; printf("\n(%d). %s %s\n", j + 1, per[j].name, per[j].phone); } } if (k == -1) { printf("\n\nNOEXIST!"); } menu(); } ``` ### 5. 添加新联系人 (`add()`) `add()`函数用于添加新的联系人到电话簿中。用户需要输入新联系人的姓名、电话号码以及其他相关信息。该函数首先调用`load()`来获取当前已有联系人的数量,然后检查新联系人信息是否已存在电话簿中。如果不存在且电话簿未满,则将新联系人信息写入`person.txt`文件的末尾。 ```c void add() { void menu(); int n, j; FILE *fp; char name[10], classify[10], email[20], QQ[15], remark[30]; char phone[11]; n = load(); printf("\n\n请输入要添加的姓名和电话号码:"); scanf("%s %s", name, phone); // ... (后续逻辑省略) } ``` ### 6. 修改联系人信息 (`modify()`) `modify()`函数允许用户修改已存在的联系人信息。用户首先需要输入要修改的联系人的姓名,然后程序会根据输入的姓名查找对应的记录。找到后,用户可以选择修改联系人信息中的特定字段。 以上是基于给定的部分代码对电话簿设计的主要知识点的总结。这些知识点涵盖了基本的数据结构设计、文件操作以及用户交互等方面的内容,对于初学者来说是非常实用的学习资料。
#include<string.h>
#include<stdlib.h>
#define N 15
struct person
{
char name[10];
char phone[11];
char classify[10];
char email[20];
char QQ[15];
char remark[30];
}per[N];
char A[]={"办公类"};
char B[]={"个人类"};
char C[]={"商务类"};
int load()//**********加载函数**********/
/***********加载所有记录,并且可以返回所有记录的个数********/
{
FILE *fp;
int i;
if((fp=fopen("person.txt","r"))==NULL)
{
printf("\nCannot open file\n");
return 0;
}
for(i=0;!feof(fp);i++)
fscanf(fp,"%s%s%s%s",&per[i].name,&per[i].phone,&per[i].classify,&per[i].email,&per[i].QQ,&per[i].remark);
fclose(fp);
return(i);
/***************查看功能**************/
void search()
{
void menu();
int n,j,k=-1;
char p[10];
n=load();
printf("\n\nClassify A:办公类\nClassify B:个人类\nClassify C:商务类\n\n 输入要找的人所在分类! Classify:"); /*************输入要找的人的分类*********/
scanf("%s",p);
for(j=0;j<n;j++)
if(strcmp(p,per[j].classify)==0)
{
k=j;
printf("\n(%d).%s %s\n",j+1,per[j].name,per[j].phone);
}
if(k==-1)
/**********如果要查找的分类不存在,则显示不存在**********/ {
printf("\n\nNO EXIST!");
}
menu();
}
/**************增加功能*********/
void add()
{
void menu(); int n,j;
FILE *fp;
char name[10],classify[10],email[20],QQ [15],remark [30];
char phone[11];
n=load();
剩余7页未读,继续阅读
- 粉丝: 1
- 资源: 16
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助