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