网易云课堂昵称: coker1994
《软件工程(C编码实践篇)》MOOC课程作业http://mooc.study.163.com/course/USTC-1000002006
实验代码地址:https://github.com/mamengnan/mmnslab.git
实验目的
- 给lab5-1.tar.gz找bug,quit命令无法运行的bug
- 利用callback函数参数使Linktable的查询接口更加通用
- 注意接口的信息隐藏
实验过程
在本次实验中,对实验四的代码做进一步改进。
- 解决quit无法运行的bug
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(pNode != pLinkTable->pTail)
应该为pNode != NULL
,即可正确运行
- menu.c中增加函数
int SearchCondition(tLinkTableNode * pLinkTableNode, void *args)
{
char *cmd = (char *)args;
tDataNode * pNode = (tDataNode *)pLinkTableNode;
if(strcmp(pNode->cmd, cmd) == 0)
{
return SUCCESS;
}
return FAILURE;
} - linktable.c中改进了函数
tLinkTableNode * SearchLinkTableNode(tLinkTable *pLinkTable, int Conditon(tLinkTableNode * pNode, void *args), void *args)
{
if(pLinkTable == NULL || Conditon == NULL)
{
return NULL;
}
tLinkTableNode * pNode = pLinkTable->pHead;
while(pNode != NULL)
{
if(Conditon(pNode, args) == SUCCESS)
{
return pNode;
}
pNode = pNode->pNext;
}
return NULL;
} - 将结构体
LinkTableNode
的实现从linktable.h
转移到了linktable.c
- 运行结果
复审代码
从github重新下载编译执行,发现与预期结果相同。
实验小结
本次实验通过增加callback思想使程序体更加通用,进一步了解了模块化思想,同时对软件工程的“高内聚,低耦合”有了更深的理解。