结合面向对象编程思想,开发“裹裹快投”快递服务控制台程序,可实现用户寄件、取件、查询订单、修 改订单、取消订单等功能,并写出主菜单控制程序
时间: 2023-07-10 18:11:07 浏览: 80
好的,可以的。首先,我们需要设计一些类来实现这个程序。根据需求,我们可以设计以下类:
1. User(用户类):存储用户信息,包括姓名、手机号码、地址等。
2. Order(订单类):存储订单信息,包括订单编号、寄件人信息、收件人信息、快递公司、快递单号等。
3. ExpressCompany(快递公司类):存储快递公司信息,包括名称、联系方式等。
4. Console(控制台类):实现用户交互功能,包括寄件、取件、查询订单、修改订单、取消订单等。
下面是这些类的具体实现:
```python
class User:
def __init__(self, name, phone, address):
self.name = name
self.phone = phone
self.address = address
class Order:
def __init__(self, number, sender, receiver, express_company, express_number):
self.number = number
self.sender = sender
self.receiver = receiver
self.express_company = express_company
self.express_number = express_number
class ExpressCompany:
def __init__(self, name, phone):
self.name = name
self.phone = phone
class Console:
def __init__(self):
self.users = []
self.orders = []
self.express_companies = []
def add_user(self, name, phone, address):
user = User(name, phone, address)
self.users.append(user)
def add_order(self, number, sender_name, sender_phone, sender_address, receiver_name, receiver_phone, receiver_address, express_company_name, express_number):
sender = User(sender_name, sender_phone, sender_address)
receiver = User(receiver_name, receiver_phone, receiver_address)
express_company = None
for ec in self.express_companies:
if ec.name == express_company_name:
express_company = ec
break
if express_company is None:
express_company = ExpressCompany(express_company_name, '')
self.express_companies.append(express_company)
order = Order(number, sender, receiver, express_company, express_number)
self.orders.append(order)
def query_order(self, order_number):
for order in self.orders:
if order.number == order_number:
return order
return None
def update_order(self, order_number, express_company_name, express_number):
order = self.query_order(order_number)
if order is not None:
express_company = None
for ec in self.express_companies:
if ec.name == express_company_name:
express_company = ec
break
if express_company is None:
express_company = ExpressCompany(express_company_name, '')
self.express_companies.append(express_company)
order.express_company = express_company
order.express_number = express_number
return True
return False
def cancel_order(self, order_number):
order = self.query_order(order_number)
if order is not None:
self.orders.remove(order)
return True
return False
def show_menu(self):
print('1. 寄件')
print('2. 取件')
print('3. 查询订单')
print('4. 修改订单')
print('5. 取消订单')
print('0. 退出')
def run(self):
while True:
self.show_menu()
choice = input('请选择操作:')
if choice == '1':
name = input('请输入寄件人姓名:')
phone = input('请输入寄件人电话:')
address = input('请输入寄件人地址:')
sender = User(name, phone, address)
name = input('请输入收件人姓名:')
phone = input('请输入收件人电话:')
address = input('请输入收件人地址:')
receiver = User(name, phone, address)
express_company_name = input('请输入快递公司名称:')
express_number = input('请输入快递单号:')
order_number = len(self.orders) + 1
order = Order(order_number, sender, receiver, express_company_name, express_number)
self.orders.append(order)
print('寄件成功,订单编号为:', order_number)
elif choice == '2':
order_number = input('请输入订单编号:')
order = self.query_order(order_number)
if order is not None:
self.orders.remove(order)
print('取件成功')
else:
print('订单不存在')
elif choice == '3':
order_number = input('请输入订单编号:')
order = self.query_order(order_number)
if order is not None:
print('订单信息:')
print('订单编号:', order.number)
print('寄件人姓名:', order.sender.name)
print('寄件人电话:', order.sender.phone)
print('寄件人地址:', order.sender.address)
print('收件人姓名:', order.receiver.name)
print('收件人电话:', order.receiver.phone)
print('收件人地址:', order.receiver.address)
print('快递公司名称:', order.express_company.name)
print('快递单号:', order.express_number)
else:
print('订单不存在')
elif choice == '4':
order_number = input('请输入订单编号:')
express_company_name = input('请输入快递公司名称:')
express_number = input('请输入快递单号:')
if self.update_order(order_number, express_company_name, express_number):
print('修改成功')
else:
print('订单不存在')
elif choice == '5':
order_number = input('请输入订单编号:')
if self.cancel_order(order_number):
print('取消成功')
else:
print('订单不存在')
elif choice == '0':
break
else:
print('无效操作,请重新选择')
```
最后,我们可以在主程序中实例化这个控制台类,并调用它的 run 方法运行程序:
```python
if __name__ == '__main__':
console = Console()
console.run()
```
这样,我们就完成了“裹裹快投”快递服务控制台程序的开发。