2010-09-11 74 views
1

我正在研究任務列表程序,在我上課之前刷上C語言。我有兩個結構,任務和任務列表。爲任務列表程序設計函數的參數和返回值

這裏是任務結構:

typedef struct task 
{ 
    char name[100]; 
    bool completed; /* bool is described as an enum in an included header file */ 
    date due_date; /* date is a described as a struct in an included header file */ 
} task; 

我有以下工作職能:

  • 列表項
  • init_tasklist():初始化任務列表變量
  • add_task():添加任務列表
  • delete_task():從任務列表中刪除給定的任務
  • print_tasklist():打印出來的任務列表類似於一個複選框,名稱,到期日爲每個項目
  • delete_tasklist()一個正常的待辦事項列表:刪除給定的任務列表
  • print_task():打印出來的細節一個給定的任務

我的問題與哪些變量作爲函數的參數以及返回什麼有關。

我想將這個任務列表用於cli界面,然後將其更改爲GUI,因此我希望將其作爲一個簡單的開關。首先,我有add_task()malloc() - 一個新任務並返回一個指向該任務的指針,然後delete_tasklist()遞歸地通過並釋放() - 刪除任務列表中的內存。我從OOP和Java的經驗中獲得了這種方法。

在C中設計這個最好的方法是什麼?

add_task()函數是否需要將任務結構添加到列表中,或者只是應該在任務中並使add_task()函數初始化它的變量?

我應該編寫一個get_task()函數,該函數返回指向具有給定名稱的任務的指針,如print_task()和delete_task(),它將採用任務指針,或者應該採用char指針並查找任務本身?

有關如何設計這些函數的I/O的任何指導將非常有幫助。

+1

不定義你自己的'bool'。在'stdbool.h'頭文件中有C99。 – 2010-09-11 06:46:12

+0

@Jens Gustedt:如果你不包含'stdbool.h',定義你自己的'bool'是完全合法的 - 也許代碼也是C89的代碼? – caf 2010-09-11 14:07:59

+0

我不打算適合任何標準。我正在使用gcc 4.4.3。 – mouche 2010-09-13 03:59:17

回答

2

由於您的數據結構是任務列表,因此使用任務結構體調用add_task()更清晰(任務列表不必知道任務結構體的內部表示形式)。

使用create_task()方法接收任務字段並返回填充了這些字段的任務結構可能會很方便。

邏輯上,create_task()屬於任務結構,而add_task()屬於任務列表。 (例如,如果你在面向對象的語言在寫,你會TaskList.AddTask(task)Task.Create(name, dd, isCompleted)

get_task()方法,是東西,你將需要使用一次以上(如你所說,print_stack()delete_stack())。將代碼封裝在函數中顯然比代碼複製要好。 (例如,如果您在此代碼中發現錯誤,則必須修復一次,而不是在程序中隨處搜索)。此外,由於此代碼具有「獨立含義」,因此具有執行此功能的功能很方便。

+0

謝謝。好建議。 – mouche 2010-09-11 05:05:21