軟件工程第五次實驗

一、實驗目的

        給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;
};


         4、實驗的運行結果及分析

         運行結果截圖


    5.實驗總結

    此次實驗由於家裏出了點事是在荊州老家完成的,沒法當面找同學幫忙,只能線上詢問同學蒐集資料,收穫也是不錯的。。。。。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章