写一个带可视化菜单的汽车管理系统,要求用文件输入输出
时间: 2023-06-24 19:05:28 浏览: 42
好的,这里是一个简单的汽车管理系统,包括添加车辆、删除车辆、查看车辆、修改车辆信息和退出系统等功能,并且使用文件输入输出。菜单界面使用了Python自带的`curses`库来实现。
```python
import curses
import pickle
# 定义车辆类
class Car:
def __init__(self, brand, model, year, price):
self.brand = brand
self.model = model
self.year = year
self.price = price
# 定义菜单项
menu_title = "Car Management System"
menu_items = ["1. Add Car", "2. Delete Car", "3. View Cars", "4. Modify Car Info", "5. Exit"]
# 定义文件名
filename = "cars.data"
# 初始化屏幕
def init_screen():
screen = curses.initscr()
curses.noecho()
curses.cbreak()
screen.keypad(True)
return screen
# 结束屏幕
def end_screen(screen):
curses.nocbreak()
screen.keypad(False)
curses.echo()
curses.endwin()
# 显示菜单
def show_menu(screen, current_row):
screen.clear()
screen.border(0)
screen.addstr(2, 2, menu_title)
for i, item in enumerate(menu_items):
if i == current_row:
screen.addstr(4 + i, 2, item, curses.A_REVERSE)
else:
screen.addstr(4 + i, 2, item)
screen.refresh()
# 添加车辆
def add_car():
brand = input("Enter brand: ")
model = input("Enter model: ")
year = int(input("Enter year: "))
price = float(input("Enter price: "))
car = Car(brand, model, year, price)
with open(filename, "ab") as f:
pickle.dump(car, f)
# 删除车辆
def delete_car():
cars = []
with open(filename, "rb") as f:
try:
while True:
car = pickle.load(f)
cars.append(car)
except EOFError:
pass
if not cars:
print("No cars found.")
return
print("Select a car to delete:")
for i, car in enumerate(cars):
print(f"{i+1}. {car.brand} {car.model} ({car.year})")
choice = int(input("> "))
if 1 <= choice <= len(cars):
del cars[choice-1]
with open(filename, "wb") as f:
for car in cars:
pickle.dump(car, f)
print("Car deleted.")
else:
print("Invalid choice.")
# 查看车辆
def view_cars():
cars = []
with open(filename, "rb") as f:
try:
while True:
car = pickle.load(f)
cars.append(car)
except EOFError:
pass
if not cars:
print("No cars found.")
else:
for car in cars:
print(f"{car.brand} {car.model} ({car.year}) - ${car.price}")
# 修改车辆信息
def modify_car_info():
cars = []
with open(filename, "rb") as f:
try:
while True:
car = pickle.load(f)
cars.append(car)
except EOFError:
pass
if not cars:
print("No cars found.")
return
print("Select a car to modify:")
for i, car in enumerate(cars):
print(f"{i+1}. {car.brand} {car.model} ({car.year})")
choice = int(input("> "))
if 1 <= choice <= len(cars):
car = cars[choice-1]
brand = input(f"Enter new brand [{car.brand}]: ") or car.brand
model = input(f"Enter new model [{car.model}]: ") or car.model
year = int(input(f"Enter new year [{car.year}]: ")) or car.year
price = float(input(f"Enter new price [{car.price}]: ")) or car.price
new_car = Car(brand, model, year, price)
cars[choice-1] = new_car
with open(filename, "wb") as f:
for car in cars:
pickle.dump(car, f)
print("Car information updated.")
else:
print("Invalid choice.")
# 主循环
def main(screen):
current_row = 0
while True:
show_menu(screen, current_row)
key = screen.getch()
if key == curses.KEY_UP and current_row > 0:
current_row -= 1
elif key == curses.KEY_DOWN and current_row < len(menu_items)-1:
current_row += 1
elif key == curses.KEY_ENTER or key == 10:
if current_row == 0:
add_car()
elif current_row == 1:
delete_car()
elif current_row == 2:
view_cars()
elif current_row == 3:
modify_car_info()
else:
break
if __name__ == "__main__":
screen = init_screen()
main(screen)
end_screen(screen)
```
在这个程序中,我们定义了一个`Car`类来表示车辆对象,包括品牌、型号、生产年份和价格等信息。我们还定义了一个菜单界面,使用`curses`库来显示菜单项。用户可以选择菜单项,从而进行不同的操作。
我们使用文件来保存车辆信息,可以使用Python内置的`pickle`模块来进行序列化和反序列化。当用户选择添加车辆时,我们创建一个新的`Car`对象,并将其序列化到文件中。当用户选择删除车辆时,我们从文件中读取所有车辆信息,让用户选择要删除的车辆,然后将剩余的车辆重新序列化到文件中。当用户选择查看车辆时,我们从文件中读取所有车辆信息,并将它们打印到屏幕上。当用户选择修改车辆信息时,我们从文件中读取所有车辆信息,让用户选择要修改的车辆,然后提示用户输入新的车辆信息,并将新的车辆信息序列化到文件中。
这个程序只是一个简单的示例,您可以根据自己的需要进行修改和扩展。