第一週-軟體二次開發

bkali發表於2024-03-06

專案來源
本次作業的專案來源於本人在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")
第二部分主要解決資料驗證問題: 更改while迴圈的條件,並在合適的地方break,使得輸入操作的資料驗證更加完善,不會報錯
點選檢視程式碼
    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的定位,需要掌握檢視報錯的能力,精準快速定位到出現錯誤的程式碼,並且透過閱讀理解,加以修改。
  • 對其他開發者程式碼的閱讀方面,對於沒有註釋的程式碼,需要思考其他開發者是怎麼想的,用什麼方法去構築這個功能的,需要自己對程式碼掌握到一定程度,才能看得懂別人的程式碼。
    總而言之,逆向軟體工程並不是簡簡單單就能完成,站在前人的肩膀上也並不是一件容易的事情。看別人,或者自己之前寫的程式碼確實會有一些看不懂的情況發生。我們所需要的是提升自己的編碼能力,只有自己的功底、水平上升了,才能去很好地修改他人的程式碼,對軟體二次開發。

相關文章