|
|
|
@ -0,0 +1,211 @@
|
|
|
|
|
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()
|