專案來源
本次作業的專案來源於本人在GitHub上面找到的一個簡單的酒店管理系統。
執行環境
Python 3.10.7
執行結果
基礎頁面圖
功能樣例圖
查詢樣例圖
主要問題
程式的主要問題有:
- 不做任何互動也會導致程式退出
- 互動時不清屏,造成檢視結果困難
- 錄入酒店資訊的資料驗證出現問題,會導致報錯
修改
修改過後的程式碼:
第一部分主要解決了主介面的互動邏輯不清的問題:
修改了主介面的功能,加入了清屏、暫停,使得互動邏輯更加合理了
點選檢視程式碼
#主程式
def main():
#初始化
mWin = MainWindow()
#顯示選單,按照選擇執行操作
while True:
ch = mWin.selectCommand()
if ch == '1': #從檔案讀出已有酒店資訊
mWin.loadData("HotelInfo.csv")
mWin.showAllInfo()
elif ch == '2': #查詢已有酒店資訊
mWin.queryHot()
elif ch == '3': #新增酒店
mWin.addHotInfo()
elif ch == '4': #顯示所有酒店資訊
mWin.showAllInfo()
elif ch == '5': #儲存酒店資訊到檔案
mWin.saveData("HotelInfo.csv")
elif ch == '6':
break
else:
print("輸入錯誤,請重新輸入")
os.system("pause")
os.system("cls")
點選檢視程式碼
def addHotInfo(self):
addName = input("請輸入新增酒店名:\n")
if addName == "" :
print("輸入酒店名為空!")
return -1
mana = self.manaHot #獲得酒店資訊物件
#錄入酒店資訊
str = input("請依次輸入酒店的裝修時間,房間數,平均房價,評分(以逗號分隔): \n")
while True:
if "," in str:
strs = str.split(",")
elif ","in str:
strs = str.split(",")
try:
nums = [ eval(x) for x in strs ]
time, score = nums[0],nums[-1]
if(time>=2001 and time<=2022 and score>=1 and score<=5 ) :
nums[-1] = round(nums[-1],1) #保留1位小數
hot = Hotel(addName)
hot.Info=nums
break
else:
print("輸入資料不合法,請重新輸入!")
str = input("請依次輸入酒店的裝修時間,房間數,平均房價,評分: ")
except:
print("輸入資料不合法,請重新輸入!")
str = input("請依次輸入酒店的裝修時間,房間數,平均房價,評分: ")
#新增/修改 酒店資訊到資料記錄中
if ( mana.addHotInfo(hot) == -1 ): #酒店已存在,則選擇是否修改
ch = input("該酒店已存在,是否修改: Y or N?)")
if ch == 'Y':
mana.updateHotInfo(hot)
修改之後的測試
總結
透過本次對該軟體基本功能進行的二次開發,我認識到了個人開發過程中確實會存在很多細小的瑕疵。例如本次二次開發的酒店管理系統,主介面互動邏輯明顯不夠好等,也提高了我閱讀程式碼的水平。
本次二次開發的難點主要在於對功能的測試,以及bug的定位,對其他開發者程式碼的閱讀。
- 功能測試上,要儘可能的做出各種測試用例去測試軟體,需要比較詳盡、比較細緻的流程。
- 對於bug的定位,需要掌握檢視報錯的能力,精準快速定位到出現錯誤的程式碼,並且透過閱讀理解,加以修改。
- 對其他開發者程式碼的閱讀方面,對於沒有註釋的程式碼,需要思考其他開發者是怎麼想的,用什麼方法去構築這個功能的,需要自己對程式碼掌握到一定程度,才能看得懂別人的程式碼。
總而言之,逆向軟體工程並不是簡簡單單就能完成,站在前人的肩膀上也並不是一件容易的事情。看別人,或者自己之前寫的程式碼確實會有一些看不懂的情況發生。我們所需要的是提升自己的編碼能力,只有自己的功底、水平上升了,才能去很好地修改他人的程式碼,對軟體二次開發。