实验五.用callback增强链表模块来实现命令行菜单小程序V2.8


课程来源: 【网易云课堂昵称:风清扬pty + 《软件工程(C编码实践篇)》MOOC课程作业http://mooc.study.163.com/course/USTC-1000002006 】

一、实验目的

  • 给Linktable增加Callback方式的接口;
  • 进一步改进Linktable的Callback方式的接口;
  • 用callback函数实现的多态浅析。
  • 信息隐藏

二、实验要求和内容

  • 给lab5-1.tar.gz(在实验楼Linux虚拟机环境下~/se_files/目录下)找bug,quit命令无法运行的bug;
  • 将lab5-1.tar.gz中的代码(即解压后lab5.1/目录下的源文件)直接放到Code/shiyanlou_cs122/lab5/目录下继续完成后面的实验内容;
  • 利用callback函数参数使Linktable的查询接口更加通用;
  • 注意接口的信息隐藏。

三、主要的程序代码段

1.quit命令的Bug解决

SearchLinkTableNode()函数

tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode))
{
    if(pLinkTable == NULL || Conditon == NULL)
    {
        return NULL;
    }
    tLinkTableNode * pNode = pLinkTable->pHead;
    while(pNode != pLinkTable->pTail)
    {    
        if(Conditon(pNode) == SUCCESS)
        {
            return pNode;                    
        }
        pNode = pNode->pNext;
    }
    return NULL;
}

发现遍历链表的循环语句while()条件结束的标志为找到表结尾,这就导致了程序在遍历到表结尾最后一个命令quit的时候,直接结束了,因此需要修改while语句结束的条件为pNode != NULL,即可。

2.利用callback函数参数使Linktable的查询接口更加通用

先将cmd字符串取消定义为全局变量,然后修改callback函数。

tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode, void* args), void* args);

3.信息的隐藏

在linktable.c中定义Linktable结构体,而在linktable.h中只留下LinkTable结构的声明。

typedef struct LinkTable tLinkTable;
struct LinkTable
{
    tLinkTableNode *pHead;
    tLinkTableNode *pTail;
    int SumOfNode;
    pthread_mutex_t mutex;
};

四、实验的运行结果及分析

运行结果截图

五、实验的不足与总结

本次实验主要学会了如何callback函数的处理方式,以及如何做好信息隐藏,如何保证程序安全,收货的非常多。







  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值