开始 载入信息 State? 按下的键为? …….. 对于不同的按键,调用相应函数,同时改变state变量
2. 增加数据
对于不同的状态,增加数据的操作是不同的,当处于显示省份列表状态下时,按下F3键时,进入添加省份节点界面。在此界面下,系统调用了add_province这个函数,会提示用户输入省份的名字和简介。
同理,当处于显示城市列表和景点列表状态下时,相应增加的节点为城市节点和景点节点。
按下F3 State=? 省份列表 城市列表 景点列表 调用add_province 调用add_city 调用add_sce 添加结束
3. 删除数据
删除数据的程序结构和增加数据的结构相同,都是根据当前状态执行不同的函数,达到删除不同数据的目的。每当进行一个删除操作时,都将p1,p2,p3中对应的那一个结构体进行删除操作。
4. 修改数据
修改数据的程序结构和增加数据的结构也是一样的,但是具体执行的函数有差别,该函数的流程图如下:
开始修改 ESC 检测按键 结束修改 字符 回车 F6 将字符存入缓存区 将当前修改项修改为缓存区的内容 跳过当前项,进行下一项的修改
5. 搜索
搜索功能整合到一个函数,search_all
进入该函数后,程序要求用户输入搜索命令,命令的格式为:
%+keyword 搜索景点名字中含有keyword的所有条目,多个关键词则匹配所有出现过其中任一关键词的条目,没输入关键词则匹配所有条目, 匹配关键词时忽略大小写的区别。
@+province 限制所有结果必须位于该省
&+city 限制所有结果必须位于该城市
#+number1+,+number2+,+number3+,
精确搜索编号为number1-number2-number3的景点,number1为所在省的编号,number2为该省下该市的编号,number3为该市下该景点的编号。
搜索结果返回到一个结构体数组中:
struct result {
ptr_sce result;/*指向搜索结果的景点的指针*/
char keynum; /*该景点的名字里含有关键词的个数*/
ptr_province p1; /*指向搜索结果所在省份的结构体的指针*/ ptr_city p2; /*指向搜索结果所在城市的结构体的指针*/ };
流程图如下:
开始搜索 获取用户的搜索命令(调用getorder函数解析用户输入的字符串) 定位省份和城市 遍历对应位置的链表搜索关键字 返回到result结构数组 结束搜索
6. 数据统计和存盘功能
在各个界面,都会实时显示被选中的结构体中的统计信息(景点数目和城市数目)
每当退出系统时,系统会自动将系统的数据存为三个dat文件,放于C盘根目录下。
每次进入系统时,系统会自动打开c盘下的dat文件,若不存在,则自动创建一份初始数据。
五、 实验结果
1. 主界面