在本次数据结构课程设计中,学生被要求开发一个通讯录系统,该系统基于C语言,并使用Visual C++ 6.0在DOS环境下运行。这个系统的核心是链表数据结构,用于存储和管理联系人的信息。以下是系统的主要组成部分和设计思路:
**一、系统功能**
1. **输入信息(enter())**:允许用户输入新的联系人信息,包括姓名(NAME)、街道地址(STREET)、城市(CITY)、邮编(EIP)和国家(STATE)。
2. **显示信息(display())**:展示当前通讯录中的所有联系人信息。
3. **查找信息(search())**:根据用户提供的关键字搜索并显示匹配的联系人信息,这里可能调用了`find()`函数。
4. **删除信息(delete())**:根据用户选择删除指定的联系人信息,可能涉及到链表节点的删除操作。
5. **存盘(save())**:将通讯录中的所有联系人信息保存到文件中,以便于下次启动时恢复。
6. **装入(load())**:从文件中加载之前保存的联系人信息,重建链表。
**二、设计要求**
1. **每条信息包含字段**:每个联系人记录包含上述五个基本信息字段。
2. **系统特性**:系统需具有良好的用户界面(尽管是在DOS环境下),以及强大的错误处理能力,确保在遇到异常情况时能够正确处理。
**三、实现方法**
1. **数据结构**:使用结构体`address`来表示单个联系人,包含所有字段,并且有指向前后节点的指针,形成链表结构。
2. **链表操作**:插入和删除操作通过修改链表节点来实现,如`insert()`和`ddelete()`函数。
3. **文件存储**:利用文件进行持久化存储,`save()`函数负责写入,`load()`函数负责读取。文件中的数据不能直接编辑,必须通过程序读取、修改后再写回。
4. **主程序**:主程序通过`main()`函数实现,使用无限循环`for(;;)`保持运行,并通过`switch`语句根据用户输入调用相应的功能函数,如`menu_select()`返回用户的选项,然后执行对应的`enter()`, `ddelete()`, `list()`, `search()`, `save()`或`load()`等。
**四、详细设计**
1. **主界面**:设计了一个简单的菜单,用户通过输入数字选择操作,然后程序调用相应的函数执行。
2. **函数调用**:各功能函数之间相互调用,例如`search()`调用`find()`来查找特定联系人,`display()`遍历链表显示所有信息。
3. **内存与文件交互**:内存中的链表信息与文件存储之间通过`save()`和`load()`函数进行同步,保证了数据的一致性。
这个数据结构课程设计项目旨在让学生实践链表操作、文件管理和用户界面设计,通过实现一个实用的通讯录系统,加深对数据结构和程序设计的理解。