You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

227 lines
7.3 KiB

import tkinter as tk
import requests
import os
import time
import folium
bikelist = []
def gd_map(addr):
para = {'key': '41dcdb5eec69991b0abd18baabd45f9d', # 高德Key
'address': addr} # 地址参数
url = 'https://restapi.amap.com/v3/geocode/geo?' # 高德地图地理编码API服务地址
result = requests.get(url, para) # GET方式请求
result = result.json()
lon_lat = result['geocodes'][0]['location'] # 获取返回参数geocodes中的location即经纬度
# print(result)
add = lon_lat.split(",")
return [float(add[1]), float(add[0])]
def show_map(addr):
add = gd_map(addr=addr)
m = folium.Map(add,
tiles='https://wprd01.is.autonavi.com/appmaptile?x={x}&y={y}&z={z}&lang=zh_cn&size=1&scl=1&style=7',
attr='高德-常规图',
zoom_start=20,
)
m.save("save.html")
os.system("start save.html")
class bike:
ID: str
owner: str
price: float
borrower: str
can: bool
borrow_time: float
addr: str
def __init__(self, ID, owner, price, addr):
self.ID = ID
self.owner = owner
self.price = price
self.borrower = ""
self.borrow_time = 0
self.can = True
self.addr = addr
def get_price(self):
price = float(self.price) * (time.time() - self.borrow_time)
return round(price, 2)
def get_addr(self):
addr = gd_map(self.addr)
return addr
bikelist.append(bike("12345", "李华", "2.0", "天津市东丽区津北公路2898号中国民航大学北院"))
root = tk.Tk()
root.geometry("500x200+500+500")
root.title("自行车租赁管理")
def borrow():
login_button1.focus_get()
borrow_window = tk.Toplevel(root)
borrow_window.geometry("500x200+500+500")
borrow_window.title("借车")
borrow_window.focus_get()
NameEntry = tk.Entry(borrow_window)
NameEntry.place(x=10, y=10, width=120, height=20)
list_bike = tk.Listbox(borrow_window, activestyle='dotbox')
for i in bikelist:
if i.can:
list_bike.insert(tk.END, "编号:" + i.ID + " 价格:" + i.price + " 位置:" + i.addr)
list_bike.pack()
def borrow_bike():
ID = NameEntry.get()
for i in bikelist:
if i.ID == ID:
i.borrow_time = time.time()
lable1 = tk.Label(borrow_window, text="借车成功")
show_map(i.addr)
i.can = False
lable1.pack()
else:
lable1 = tk.Label(borrow_window, text="未找到此车")
lable1.pack()
ensure = tk.Button(borrow_window, text="借车", command=borrow_bike)
ensure.place(x=10, y=40, width=120, height=20)
def returnn():
login_button1.focus_get()
return_window = tk.Toplevel(root)
return_window.geometry("500x200+500+500")
return_window.title("还车")
list_bike = tk.Listbox(return_window, activestyle='dotbox')
for i in bikelist:
if not i.can:
print()
list_bike.insert(tk.END,
"编号:" + i.ID + " 价格:" + i.price + "租用时间:" + str(round(time.time() - i.borrow_time, 2)))
list_bike.pack()
return_window.focus_get()
NameEntry = tk.Entry(return_window)
NameEntry.place(x=10, y=10, width=120, height=20)
addrEntry = tk.Entry(return_window)
addrEntry.place(x=10, y=40, width=120, height=20)
def return_bike():
ID = NameEntry.get()
addr = addrEntry.get()
for i in bikelist:
if i.ID == ID:
if not i.can:
price = i.get_price()
lable1 = tk.Label(return_window, text="还车成功,租用价格为" + str(price))
lable1.pack()
i.can = True
i.addr = addr
break
else:
lable1 = tk.Label(return_window, text="此车并未被借走")
lable1.pack()
break
else:
lable1 = tk.Label(return_window, text="未找到此车")
lable1.pack()
ensure = tk.Button(return_window, text="还车", command=return_bike)
ensure.place(x=10, y=70, width=120, height=20)
def add():
login_button1.focus_get()
add_window = tk.Toplevel(root)
add_window.geometry("500x200+500+500")
add_window.title("出租车辆")
add_window.focus_get()
NameEntry = tk.Entry(add_window)
NameEntry.place(x=60, y=10, width=120, height=20)
lable1 = tk.Label(add_window, text="车辆ID")
lable1.place(x=10, y=10, width=50, height=20, )
autherEntry = tk.Entry(add_window)
autherEntry.place(x=60, y=40, width=120, height=20)
lable2 = tk.Label(add_window, text="车主名字")
lable2.place(x=10, y=40, width=50, height=20, )
majorEntry = tk.Entry(add_window)
majorEntry.place(x=60, y=70, width=120, height=20)
lable3 = tk.Label(add_window, text="租赁价格")
lable3.place(x=10, y=70, width=50, height=20, )
addrEntry = tk.Entry(add_window)
addrEntry.place(x=60, y=100, width=120, height=20)
lable4 = tk.Label(add_window, text="车辆位置")
lable4.place(x=10, y=100, width=50, height=20)
def add_bike():
ID = NameEntry.get()
owner = autherEntry.get()
price = majorEntry.get()
addr = addrEntry.get()
bikelist.append(bike(ID, owner, price, addr))
lable5 = tk.Label(add_window, text="添加车辆成功")
lable5.pack()
ensure = tk.Button(add_window, text="出租车辆", command=add_bike)
ensure.place(x=200, y=10, width=120, height=20)
def dell():
login_button1.focus_get()
del_window = tk.Toplevel(root)
del_window.geometry("500x200+500+500")
del_window.title("收回车辆")
del_window.focus_get()
list_bike = tk.Listbox(del_window, activestyle='dotbox')
for i in bikelist:
if i.can:
list_bike.insert(tk.END, "编号:" + i.ID + " 拥有者:" + i.owner)
list_bike.pack()
NameEntry = tk.Entry(del_window)
NameEntry.place(x=10, y=10, width=120, height=20)
def del_bike():
ID = NameEntry.get()
for i in bikelist:
if i.ID == ID:
del bikelist[bikelist.index(i)]
lable1 = tk.Label(del_window, text="收回车辆成功")
lable1.pack()
break
else:
lable1 = tk.Label(del_window, text="此车不存在")
lable1.pack()
ensure = tk.Button(del_window, text="收回车辆", command=del_bike)
ensure.place(x=10, y=40, width=120, height=20)
login_button1 = tk.Button(root, text='租赁车辆', command=borrow)
login_button1.place(x=30, y=70, width=80, height=20)
login_button1 = tk.Button(root, text='归还车辆', command=returnn)
login_button1.place(x=120, y=70, width=80, height=20)
login_button1 = tk.Button(root, text='借出车辆', command=add)
login_button1.place(x=210, y=70, width=80, height=20)
login_button1 = tk.Button(root, text='收回车辆', command=dell)
login_button1.place(x=300, y=70, width=80, height=20)
root.mainloop()