private listresource = new arraylist<>();
private listloc = new arraylist<>();
private list> entry = new arraylist<>();
private listtime = new arraylist<>();
// abstraction function:
// 以儲存的資源、位置、時間對、計畫項列表
// representation invariant:
// resource、loc、entry、time等列表不為null
// safety from rep exposure:
// 所有屬性都定義成private保護屬性不會直接洩露
// 對於返回可變型別的物件,使用防禦式拷貝的方式進行保護,避免表示洩露
/**
* @param longitude 位置的經度
* @param latitude 位置的緯度
* @param name 位置的名稱
* @param share 位置是否可共享,1表示可共享,0表示不可共享
*/public int addlocation(float longitude,float latitude,string name,int share)
/*** @param name 位置的名稱
*/public int dellocation(string name)
boolean f = false;
for(location a : loc)
} if(f)
else
checkrep();
return loc.size();
}
然後是增加一條新的計畫項的功能,這個功能的完成需要輸入提示資訊。這個功能的實現不是很複雜,就是需要先進行資源位置時間的輸入,詳細實現如下:
/**
* @param name 計畫項名稱
* @param time 課程的時間對
* @param loc 課程的位置
* @return 返回新建的課程
*/public courseentryaddentry(string name,timeslot time, location loc)
接下來就是分配資源的功能,分配資源的功能也並不複雜,都是將具體的實現交給委託進行完成了,實現如下:
/**
* 為計畫項分配某個資源
* @param name 計畫項名字
* @param a 課程資源
* @return 分配成功返回true,否則返回false
*/public boolean setresource(string name,courser a)
// }
for(int i = 0;i < entry.size();i++)
} checkrep();
return f;
}
後面實現的是統一的改變狀態功能以及檢視狀態功能。改變狀態功能的實現同樣是交給state屬性進行完成,這裡以running功能為例,展示以下實際的實現:
/**
* 設定計畫項狀態為執行
* @param name 計畫項名字
* @param run 輸入的狀態
* @return 設定成功返回true,否則返回false
*/public boolean setrun(string name,string run)
boolean f = false;
// for(courseentryen : entry)
// }
for(int i = 0;i < entry.size();i++)
} checkrep();
return f;
}
之後是進行檢查位置衝突和資源衝突,以及尋找使用同一資源的計畫項的功能。這裡以檢查位置衝突為例,實際實現如下:
/**
* 檢查位置衝突
* @return 位置有衝突返回true,否則返回false
*/public boolean checklocation()
最後實現展示功能,具體的呼叫邏輯如下:
/**
* 將計畫項顯示在計畫板中
* @param name 輸入的位置
* @return 返回true
*/public boolean showboard(string name)
航班應用中的功能在前面統一功能實現中已經描述過了,沒有新增的不同的功能。輸入格式需要注意先進行資源、位置、時間對的建立,時間輸入格式為2020-05-15 12:31|2020-05-15 12:35。後續可進行資源分配。
高鐵應用相較於前面提到的普通功能,還增加了可以阻塞的功能、重新啟動的功能。輸入格式需要注意先進行資源、位置、時間對的建立,時間輸入格式為2020-05-15 12:31|2020-05-15 12:35。後續可進行資源分配。同時火車設計時時間對和位置項數量是一致的。這兩個功能的實現是有不同的,具體實現如下:
/**
* 將計畫項的狀態設定為阻塞
* @param name 計畫項名稱
* @param block 修改的狀態
* @return 成功設定返回true,否則返回false
*/public boolean setblocked(string name,string block)
boolean f = false;
// for(trainentryen : entry)
// }
for(int i = 0;i < entry.size();i++)
} checkrep();
return f;
}
而重新啟動功能就可以直接呼叫啟動功能進行實現。
課表應用還需要增加的額外功能是改變位置。輸入格式需要注意先進行資源、位置、時間對的建立,時間輸入格式為2020-05-15 12:31|2020-05-15 12:35。後續可進行資源分配。這個功能的實現如下:
/**
* 改變計畫項的位置
* @param name 計畫項名字
* @param longitude 位置經度
* @param latitude 位置緯度
* @param locname 位置名字
* @param share 位置是否可共享,1可共享,0不可共享
* @return 改變成功返回true,否則返回false
*/public boolean changelocation(string name,float longitude,float latitude,string locname,int share)
// }
for(int i = 0;i < entry.size();i++)
} checkrep();
return f;
}
軟體構造 Lab3
遇到的一些問題 按鈕 覆寫 由於我的gui的實現是由乙個基礎類和三個子類組成,其中基礎類的一些按鈕的 實現要在子類中覆寫,但是我一直找不到好的方法去覆寫,所以我直接在子類中遍歷了該按鈕的所有 把它們都刪了然後重加 正規表示式匹配 在這個實驗裡我發現了正規表示式的乙個好用的功能,比如在匹配如下資訊時 ...
軟體構造Lab3實驗總結
本次實驗是軟體構造課程當中工作量最大,且最為複雜的乙個。主要工作是實現乙個多軌道系統,在這個系統的基礎上完成三個應用。track game atom structure social network circle 三種應用都具有一定的多軌道結構。track game 中的軌道是跑道,atom str...
哈工大軟體構造lab3
3.1 待開發的三個應用場景 首先請列出你要完成的具體應用場景 至少3個,1和2中選一,3必選,4和5中選一,鼓勵完成更多的應用場景 行星系統 原子系統 社交網路 分析你所選定的多個應用場景的異同,理解需求 它們在哪些方面有共性 哪些方面有差異。他們都具有軌道,中心物體,軌道物體等屬性,但是各自具體...