第一周-软件二次开发

项目来源
本次作业的项目来源于本人在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的定位,需要掌握查看报错的能力,精准快速定位到出现错误的代码,并且通过阅读理解,加以修改。
  • 对其他开发者代码的阅读方面,对于没有注释的代码,需要思考其他开发者是怎么想的,用什么方法去构筑这个功能的,需要自己对代码掌握到一定程度,才能看得懂别人的代码。
    总而言之,逆向软件工程并不是简简单单就能完成,站在前人的肩膀上也并不是一件容易的事情。看别人,或者自己之前写的代码确实会有一些看不懂的情况发生。我们所需要的是提升自己的编码能力,只有自己的功底、水平上升了,才能去很好地修改他人的代码,对软件二次开发。
posted @ 2024-03-06 19:00  bkali  阅读(48)  评论(0)    收藏  举报