2011-06-01 54 views
8

對於我的功課,我採取的課程註冊系統的一所大學,我實現了一個簡單類課程與學期和其他屬性,如部門名稱的列表,總學分等你會用什麼數據結構爲大學部門的課程設置?

但我想知道我是否可以從具有邊和頂點的圖形數據結構繼承這個類。

以前有人做過類似的事情嗎?

我現在的設計是這樣的:

public class Curriculum 
{ 
    public string NameOfDepartment { get; set; } 
    public List<Semester> Semesters { get; set; } 

    public bool IsProgramDesigned { get; set; } 

    public Curriculum() 
    { 
     IsProgramDesigned = false; 
    } 

    // 
    public string AddSemester(Semester semester) 
    { 
+3

爲什麼要從圖形數據結構繼承? – IndigoDelta 2011-06-01 14:35:23

+0

這將導致我稍後應用圖算法..只是想知道,我想用先進的東西來設計它。我希望你不會問我爲什麼要圖形算法 – Kubi 2011-06-01 14:40:23

+0

你需要將什麼樣的圖形算法應用於這種結構? – Magnus 2011-06-01 14:49:24

回答

2

作爲一名企業架構師,我絕對不會使用此數據的圖形結構。這些數據只是一個列表,僅此而已。

對於類似的問題,我會考慮使用圖結構的唯一原因是可能創建課程要求和先決條件的關係。

通過這種方式,您可以使用圖算法確定學生是否有效註冊課程,確保它是對樹的有效添加。刪除類也是一樣,它可以被驗證,以確保你不丟棄一個類,並保持參加實驗室的類示例。

現在,如果我要實際執行此操作。我仍然會有一個在圖形表示中有一個頂點的Key的類的總體列表。有一點需要記住的是,圖算法是關於你可以扔在數據庫上的最大的重擊者,所以最大限度地減少將圖拉出的工作量總是關鍵。根據大小和範圍的不同,我也會評估是否可以以序列化格式存儲整個圖形,或出於同樣的原因使用文檔數據庫。

在這個例子中,這將是我最有可能的路線。我會將先決條件的所有對象存儲在我的課程對象中,等等。由於該圖是一個設置完成事件,因此不需要執行實際的圖遍歷,並且最好存儲預先計算的圖。

+0

感謝您的意見。在我的解決方案中,我將一個部門的特定課程保存在一個數據庫表中,並將其保存到另一個名爲studentscurriculums的表中,該表在學生註冊時與學生和課程對象具有多對多關係。管理員也可以創建新的課程。但我必須用這種方式來處理課程註冊和一些額外的功能。我想知道的是,這個課程可以通過使用Graph或Set來更好地設計,我希望以前曾經學過,並在此分享。 – Kubi 2011-06-01 16:33:53

+0

例如,我有一個CheckPrerequisites(列表,學期)方法,其中有3個嵌套循環。在註冊課程之前,我正在檢查每個必備課程,如果它是在註冊課程之前進行的,我必須處理其他一些限制,如特殊課程計數。如果學生參加這些課程至少4日,他將在現實世界中被認定爲一個XX特殊或等。 – Kubi 2011-06-01 16:38:19

+0

功課沒關係,但只要一想到更好的辦法來降低存儲成本.. – Kubi 2011-06-01 16:39:22

0

是的,你可以從圖中數據結構繼承這個類。你可以把它作爲你想要的任何一個子類(除了一個密封的類)。這是否是一個明智的設計完全取決於你想要做什麼。我假設你知道如何,如果你需要一個如何實現繼承的例子,那麼評論。

如果你想編寫自己的圖形算法,爲什麼不自己建模呢?這可能是一個有趣的練習。

+0

我已經編寫了代碼,首先開發了一個實體框架應用程序並提交了我的項目。我知道如何繼承,我的C#已經夠用了。在這裏我正在尋找一個設計。你知道在C#中實現的任何圖類,以便我可以繼承嗎?我關注了codeplex。 – Kubi 2011-06-01 15:05:03

+0

@Kubi你想做什麼樣的圖表?表佈局的數據,條形圖,餅圖,等等... – 2011-06-01 15:29:01

+0

我的意思這http://en.wikipedia.org/wiki/Graph_%28data_structure%29 – Kubi 2011-06-01 15:32:18