在一家软件开发公司,你作为计算机专业毕业生参加面试。面试官给出了业务逻辑要求你分析并找出的BUG,并给出解决方案。
:
假设你正在开发一个在线书店的订单处理系统。系统中有业务逻辑:
1. 用户在购物车中添加书籍。
2. 用户确认订单并提交。
3. 系统检查库存,库存充足,则扣除库存,并生成订单。
4. 系统向用户发送订单确认邮件。
5. 用户收到邮件后,可以点击邮件中的链接查看订单详情。
是一个简化版的代码实现,请找出的BUG,并说明原因。
python
class Book:
def __init__(self, title, stock):
self.title = title
self.stock = stock
class ShoppingCart:
def __init__(self):
self.books = []
def add_book(self, book):
self.books.append(book)
def confirm_order(self):
for book in self.books:
if book.stock > 0:
book.stock -= 1
else:
raise Exception("Book out of stock")
class OrderSystem:
def __init__(self, cart):
self.cart = cart
def process_order(self):
try:
self.cart.confirm_order()
self.send_confirmation_email()
except Exception as e:
print(e)
def send_confirmation_email(self):
print("Confirmation email sent to the user.")
# 示例使用
cart = ShoppingCart()
book1 = Book("Python Programming", 10)
book2 = Book("Data Structures", 5)
cart.add_book(book1)
cart.add_book(book2)
order_system = OrderSystem(cart)
order_system.process_order()
分析及解答
在上述代码中,存在BUG:
1. 库存检查错误:
在`confirm_order`方法中,库存不足,会抛出一个异常。在循环中遇到库存不足的情况,它不会将已添加到购物车的书籍移除,这可能导致用户在订单确认后仍然可以看到这些书籍。
2. 库存更新逻辑错误:
当库存为0时,应该阻止用户继续添加该书籍到购物车,代码中并没有这样的逻辑。
3. 异常处理不当:
在`process_order`方法中,异常处理只打印了错误信息,但没有采取任何措施来通知用户或者处理订单失败的情况。
是修正后的代码:
python
class Book:
def __init__(self, title, stock):
self.title = title
self.stock = stock
class ShoppingCart:
def __init__(self):
self.books = []
def add_book(self, book):
if book.stock > 0:
self.books.append(book)
else:
raise Exception("Book out of stock")
def confirm_order(self):
for book in self.books:
if book.stock > 0:
book.stock -= 1
else:
self.books.remove(book)
raise Exception(f"Book '{book.title}' out of stock")
class OrderSystem:
def __init__(self, cart):
self.cart = cart
def process_order(self):
try:
self.cart.confirm_order()
self.send_confirmation_email()
except Exception as e:
print(e)
# 这里可以添加更多的异常处理逻辑,记录日志、通知用户等
def send_confirmation_email(self):
print("Confirmation email sent to the user.")
# 示例使用
cart = ShoppingCart()
book1 = Book("Python Programming", 10)
book2 = Book("Data Structures", 5)
cart.add_book(book1)
cart.add_book(book2)
order_system = OrderSystem(cart)
order_system.process_order()
通过上述修改,我们确保了在库存不足的情况下,用户无法添加书籍到购物车,当库存为0时,已添加的书籍会被移除,异常处理也得到了改善。
还没有评论呢,快来抢沙发~