帮我设计一个汽车租赁程序,并写出所有代码
时间: 2024-03-12 17:47:50 浏览: 14
好的,下面是一个简单的汽车租赁程序的代码,你可以根据自己的需求进行修改和扩展:
```python
import datetime
# 定义车辆类
class Car:
def __init__(self, car_id, car_type, daily_rent):
self.car_id = car_id
self.car_type = car_type
self.daily_rent = daily_rent
self.is_rented = False
def __str__(self):
return f"{self.car_id} - {self.car_type} - {self.daily_rent}/day"
# 定义租车记录类
class RentalRecord:
def __init__(self, car, start_date, end_date):
self.car = car
self.start_date = start_date
self.end_date = end_date
def get_rental_days(self):
return (self.end_date - self.start_date).days + 1
def get_rental_fee(self):
rental_days = self.get_rental_days()
return rental_days * self.car.daily_rent
def __str__(self):
return f"{self.car.car_id} - {self.car.car_type} - {self.start_date} to {self.end_date} - {self.get_rental_fee()}"
# 定义车辆管理类
class CarManager:
def __init__(self):
self.cars = []
self.rental_records = []
def add_car(self, car_id, car_type, daily_rent):
car = Car(car_id, car_type, daily_rent)
self.cars.append(car)
def get_available_cars(self):
return [car for car in self.cars if not car.is_rented]
def get_car_by_id(self, car_id):
for car in self.cars:
if car.car_id == car_id:
return car
return None
def rent_car(self, car_id, start_date_str, end_date_str):
car = self.get_car_by_id(car_id)
if car is None:
return "Car not found"
if car.is_rented:
return "Car already rented"
start_date = datetime.datetime.strptime(start_date_str, "%Y-%m-%d").date()
end_date = datetime.datetime.strptime(end_date_str, "%Y-%m-%d").date()
if end_date < start_date:
return "Invalid rental period"
rental_record = RentalRecord(car, start_date, end_date)
self.rental_records.append(rental_record)
car.is_rented = True
return f"Rented {car.car_type} from {start_date} to {end_date}, total fee: {rental_record.get_rental_fee()}"
def return_car(self, car_id, return_date_str):
car = self.get_car_by_id(car_id)
if car is None:
return "Car not found"
if not car.is_rented:
return "Car not rented"
return_date = datetime.datetime.strptime(return_date_str, "%Y-%m-%d").date()
rental_record = None
for record in self.rental_records:
if record.car == car and record.end_date >= return_date:
rental_record = record
break
if rental_record is None:
return "Invalid return date"
rental_days = (return_date - rental_record.start_date).days + 1
rental_fee = rental_days * car.daily_rent
rental_record.end_date = return_date
car.is_rented = False
return f"Returned {car.car_type} on {return_date}, rental fee: {rental_fee}"
# 测试程序
if __name__ == "__main__":
car_manager = CarManager()
car_manager.add_car("001", "SUV", 100)
car_manager.add_car("002", "Compact", 50)
car_manager.add_car("003", "Luxury", 200)
while True:
print("1. Rent a car")
print("2. Return a car")
print("3. Exit")
choice = input("Please select an option: ")
if choice == "1":
available_cars = car_manager.get_available_cars()
if len(available_cars) == 0:
print("No car available")
continue
print("Available cars:")
for car in available_cars:
print(car)
car_id = input("Please select a car to rent: ")
start_date = input("Please enter the start date (YYYY-MM-DD): ")
end_date = input("Please enter the end date (YYYY-MM-DD): ")
result = car_manager.rent_car(car_id, start_date, end_date)
print(result)
elif choice == "2":
car_id = input("Please enter the car ID: ")
return_date = input("Please enter the return date (YYYY-MM-DD): ")
result = car_manager.return_car(car_id, return_date)
print(result)
elif choice == "3":
break
else:
print("Invalid option, please try again")
```
注意,以上代码只是一个简单的示例,可能还有很多需要完善的地方,例如输入的日期格式不正确时会导致程序出错,用户输入的租车时间和归还时间可能会跨越多个月份等等。因此,你需要根据实际需求对程序进行修改和优化。