### C语言通讯录系统知识点解析 #### 一、概述 本C语言程序设计了一个简易的通讯录管理系统,通过使用指针与结构体等高级数据结构实现了通讯录的基本操作功能,如记录的添加、删除、查询等功能,并且可以将数据保存到文件中以便持久化存储。 #### 二、核心知识点 ##### 1. 数据结构定义 - **结构体**:在程序中,通讯录中的每一条记录都是通过结构体`ADDRESS`来表示的。 ```c typedef struct { char name[20]; // 姓名 char units[30]; // 单位 char tele[10]; // 电话号码 } ADDRESS; ``` - **数组**:用于存储通讯录中的所有记录,使用结构体数组`ADDRESS adr[M]`,其中`M`定义了通讯录的最大记录数量。 ##### 2. 函数实现 - **函数声明**:程序中包含了多个函数的声明,用以实现通讯录管理系统的各项功能。 - `enter(ADDRESSt[])`:录入通讯录记录。 - `list(ADDRESSt[], int n)`:列出所有记录。 - `search(ADDRESSt[], int n)`:根据姓名搜索记录。 - `delete(ADDRESSt[], int n)`:删除记录。 - `add(ADDRESSt[], int n)`:添加新记录。 - `save(ADDRESSt[], int n)`:将通讯录保存到文件。 - `load(ADDRESSt[])`:从文件加载通讯录记录。 - `display(ADDRESSt[])`:按顺序显示记录。 - `sort(ADDRESSt[], int n)`:对记录进行排序。 - `qseek(ADDRESSt[], int n)`:快速查找记录。 - `copy()`:复制文件。 - `print(ADDRESS temp)`:打印单条记录。 - `find(ADDRESSt[], int n, char *s)`:查找记录。 - `menu_select()`:菜单选择。 - **主函数**:程序的入口点。 ```c main() { int i; ADDRESS adr[M]; /* 定义结构体数组 */ int length; /* 记录长度 */ clrscr(); /* 清屏 */ for (;;) { /* 主循环 */ switch (menu_select()) { /* 根据用户选择执行不同功能 */ case 0: length = enter(adr); break; case 1: list(adr, length); break; case 2: search(adr, length); break; case 3: length = delete(adr, length); break; case 4: length = add(adr, length); break; case 5: save(adr, length); break; case 6: length = load(adr); break; case 7: display(adr); break; case 8: sort(adr, length); break; case 9: qseek(adr, length); break; case 10: copy(); break; case 11: exit(0); /* 终止程序 */ } } } ``` - **菜单选择**:提供一个简单的用户界面供用户选择需要执行的操作。 ```c menu_select() { char s[80]; int c; gotoxy(1, 25); /* 设置光标位置 */ printf("press any key enter menu\n"); /* 提示信息 */ getch(); /* 获取键盘输入 */ clrscr(); /* 清屏 */ gotoxy(1, 1); printf("******************** MENU *********************\n\n"); /* 菜单项 */ do { printf("\nEnter your choice (0~11):"); /* 输入提示 */ scanf("%s", s); /* 获取用户输入 */ c = atoi(s); /* 字符串转整型 */ } while (c < 0 || c > 11); /* 验证输入范围 */ return c; /* 返回选择项 */ } ``` #### 三、关键函数解析 1. **添加记录** (`add(ADDRESSt[], int n)`) - 实现记录的添加,通常包括验证输入的有效性,确保记录不重复等。 2. **删除记录** (`delete(ADDRESSt[], int n)`) - 删除指定记录,需要注意更新数组中的其他元素以及记录总数。 3. **查询记录** (`search(ADDRESSt[], int n)`) - 支持按条件查询记录,例如按姓名查询。 4. **文件操作** - **保存记录** (`save(ADDRESSt[], int n)`) - 将当前通讯录中的记录保存到文件中。 - **加载记录** (`load(ADDRESSt[])`) - 从文件中读取记录并加载到内存中。 #### 四、文件操作 - 通讯录系统支持将记录保存到文件中或从文件加载记录,这需要涉及到文件的打开、读写等基本操作。 - 使用`fopen`、`fwrite`、`fread`等标准库函数来实现文件的读写操作。 #### 五、总结 本程序通过一系列结构体和函数的设计,实现了一个简单的通讯录管理系统。该系统不仅能够完成记录的添加、删除、查询等基本操作,还支持将数据持久化到文件中,便于后续使用。通过学习此程序,可以深入了解C语言中结构体、指针以及文件操作等高级特性。
/******头文件(.h)***********/
#include "stdio.h" /*I/O函数*/
#include "stdlib.h" /*标准库函数*/
#include "string.h"/*字符串函数*/
#include "ctype.h" /*字符操作函数*/
#define M 50 /*定义常数表示记录数*/
typedef struct /*定义数据结构*/
{
char name[20]; /*姓名*/
char units[30]; /*单位*/
char tele[10]; /*电话*/
}ADDRESS;
/******以下是函数原型*******/
int enter(ADDRESS t[]); /*输入记录*/
void list(ADDRESS t[],int n); /*显示记录*/
void search(ADDRESS t[],int n); /*按姓名查找显示记录*/
int delete(ADDRESS t[],int n); /*删除记录*/
int add(ADDRESS t[],int n); /*插入记录*/
void save(ADDRESS t[],int n); /*记录保存为文件*/
int load(ADDRESS t[]); /*从文件中读记录*/
void display(ADDRESS t[]); /*按序号查找显示记录*/
void sort(ADDRESS t[],int n); /*按姓名排序*/
void qseek(ADDRESS t[],int n); /*快速查找记录*/
void copy(); /*文件复制*/
void print(ADDRESS temp); /*显示单条记录*/
int find(ADDRESS t[],int n,char *s) ; /*查找函数*/
int menu_select(); /*主菜单函数*/
/******主函数开始*******/
main()
int i;
ADDRESS adr[M]; /*定义结构体数组*/
int length; /*保存记录长度*/
clrscr(); /*清屏*/
for(;;)/*无限循环*/
{
switch(menu_select()) /*调用主菜单函数,返回值整数作开关语句的条件*/
{
case 0:length=enter(adr);break;/*输入记录*/
case 1:list(adr,length);break; /*显示全部记录*/
case 2:search(adr,length);break; /*查找记录*/
case 3:length=delete(adr,length);break; /*删除记录*/
case 4:length=add(adr,length); break; /*插入记录*/
case 5:save(adr,length);break; /*保存文件*/
case 6:length=load(adr); break; /*读文件*/
case 7:display(adr);break; /*按序号显示记录*/
case 8:sort(adr,length);break; /*按姓名排序*/
case 9:qseek(adr,length);break; /*快速查找记录*/
case 10:copy();break; /*复制文件*/
case 11:exit(0); /*如返回值为11则程序结束*/
}
}
}
/*菜单函数,函数返回值为整数,代表所选的菜单项*/
menu_select()
{
char s[80];
int c;
gotoxy(1,25);/*将光标定为在第25行,第1列*/
剩余11页未读,继续阅读
- 粉丝: 1
- 资源: 4
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助