可重用模块化设计运用到menu小程序

来源:互联网 发布:python logger 编辑:程序博客网 时间:2024/05/17 23:57

网易云课堂昵称:stuyang  


上次的menu程序模块化具有较差的可移植性,这次试验,作者编写了一个具有可靠移植性的链表数据结构,并运用到了menu里面。

下面是menu.c的main函数:

int main()

{
 InitMenuData(&head);
 while (1)
 {
  char cmd[CMD_MAX_LEN];
  printf("Welcome to my command menu!\n");
  scanf("%s", cmd);
  tDataNode *p = FindCmd(head, cmd);
  if (p == NULL)
  {
   printf("this is a wrong cmd!You can input \"help\" for help\n");
   continue;
  }
  //printf("%s %s\n",p->cmd,p->desc);
  if (p->handler != NULL)
  {
   p->handler();
  }
 }
}。

下面是链表结构的一些API:
typedef struct LinkTableNode
{
 struct LinkTableNode * pNext;
}tLinkTableNode;

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

/*
* Create a LinkTable
*/

tLinkTable * CreateLinkTable();

/*
* Delete a LinkTable
*/
int DeleteLinkTable(tLinkTable *pLinkTable);

/*
* Add a LinkTableNode to LinkTable
*/
int AddLinkTableNode(tLinkTable *pLinkTable, tLinkTableNode * pNode);

/*
* Delete a LinkTableNode from LinkTable
*/
int DeleteLinkTable(tLinkTable *pLinkTable, tLinkTableNode * pNode);

/*
* get LinkTableHead
*/
tLinkTableNode * GetLinkTableHead(tLinkTable *pLinkTable);

/*
* get next LinkTableNode
*/
tLinkTableNode * GetNextLinkTableNode(tLinkTable *pLinkTable, tLinkTableNode * pNode);

#endif /* _LINK_TABLE_H_ */pragma once。



运行结果如下图:


完整的代码已上传至GitHub,https://github.com/stuyang/helloworld中的lab4.