精品文档 ·可编辑版

3.6 实例6 通讯录程序

本实例希望设计一个通讯录程序,要求实现通讯录信息的

录入,并具有添加、查询、删除、显示等功能;使用结构

体存储通讯录中记录信息;使用链表来实现通讯录信息的

添加、删除、查询及显示等操作;通讯录程序可实现文件

读写,在通讯录信息录入结束之后,可存入文件中,在下

次程序运行时可将通讯录中的记录读取到程序中。通讯录

程序可采用基于Win32 控制台程序构建或采用基于MFC 应

用向导.EXE 的应用程序,下面对这两种方法进行详细介绍。

3.6.1. 设计目的

1、掌握结构体的基本工作原理和工作方式。

2 、熟悉结构体与链表的使用方法。

3、熟悉C 语言下数据的输入与输出。

4 、掌握C 语言下对TXT 文件的读写操作。

5、熟悉函数的设计方法及调用方法。

3.6.2. 基本要求

1、本实例要求实现对通讯录信息的查找、添加、删除、显

示等功能,每个功能模块均能实现随时从模块中退出,可

1 / 41

精品文档 ·可编辑版

以通过键盘对功能进行选择,完成一个通讯录管理系统的

运行。

2 、要使用结构体来实现对通讯录信息的存储。

3、使用链表来实现对通讯录信息的查找、添加、删除、浏

览显示。

4 、使用文件对记录进行存储,程序运行时还可以从文件中

读取记录。

5、系统设计完成后应实现类似下图所示界面。

3.6.3 设计结构及算法分析

在进行程序设计时,选择一种合理的数据存储结构是非常

关键的。本实例根据题目要求,采用结构体来存放通讯录

中的信息,并采用文件存储通讯录中的信息。

1、存储结构

2 / 41

精品文档 ·可编辑版

本实例存储数据时,除了采用最常用的基本类型存储外,

采用结构体的方式来存储通讯录中的个人信息,结构体如

下所示:

struct stu
{
char name[20]; /*人名*/
char telephone[20]; /* 电话*/
char sex[4]; /*性别*/
char company[20]; /*单位*/
struct stu *next; /*链表节点*/
};
typedef struct stu STU;

2 、main ()主函数

采用模块化设计,功能放在各模块函数中实现。主函数是

程序的入口,在其中采用循环结构,根据用户的键盘输入,

依次调用各功能函数。

3、mycreate ()函数创建链表函数

函数根据用户输入的信息,存储到结构体中,并建立链表

结构,函数返回链表的头指针。链表建立完成后,可根据

链表的头指针来添加后续指针。

4 、myadd ()函数添加学生信息记录函数

函数根据用户输入信息,分配内存,将数据存储到结构体

3 / 41

精品文档 ·可编辑版

中,并建立新的链表节点,链接到已经建立好的链表尾部。

5、mydelete ()函数删除链表节点

函数根据用户输入通讯录中人名,在已有的链表中查找该

人名信息存放的节点,如找到该节点,则删除该节点,并

对链表结构重新链接;如未找到该人名信息的节点,则提

示用户不存在。

6、mydisplay ()函数显示所有用户记录

函数用来遍历所有节点,并向屏幕上输出所有节点的通讯

录中的详细信息。

7、displaymenu ()函数显示菜单函数

函数向屏幕上输出,用户可以选择的选项菜单,给用户提

示信息,给用户选择做出提示。

8、mysearch ()函数查找学生信息

函数用来查找通讯录中人名信息存