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.

728 lines
31 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

import sqlite3
from tkinter import *
from tkinter import ttk, messagebox
import time
from art import *
from colorama import Fore, Back, Style, init
import time
win=Tk()
win.title("欢迎界面")
screenwidth = win.winfo_screenwidth()
screenheight = win.winfo_screenheight()
size = '%dx%d+%d+%d' % (400, 400, (screenwidth - 400) / 2, (screenheight - 400) / 2)
lab1 = Label(win, text='欢迎来到校园一卡通', font='微软雅黑 20').place(x=60, y=30)
win.geometry(size)
win.resizable(False, False)
win.mainloop()
win = Tk()
win.title('登录')
screenwidth = win.winfo_screenwidth()
screenheight = win.winfo_screenheight()
size = '%dx%d+%d+%d' % (400, 400, (screenwidth - 400) / 2, (screenheight - 400) / 2)
win.geometry(size)
win.resizable(False, False)
# 登录**页面布局
lab1 = Label(win, text='一卡通管理系统登录', font='微软雅黑 15').place(x=120, y=30)
frame1 = Frame(win, height=200, width=300, bd=1, relief='sunken')
frame1.place(x=50, y=90)
lab_username = Label(frame1, text='用户名:', font='微软雅黑 12').place(x=40, y=40)
entry_username = Entry(frame1, width=20)
entry_username.place(x=110, y=45)
lab_passwd = Label(frame1, text='密 码:', font='微软雅黑 12').place(x=40, y=80)
entry_passwd = Entry(frame1, width=20, show='*')
entry_passwd.place(x=110, y=85)
lab4 = Label(frame1, text='选择登录类型:', font='微软雅黑 12').place(x=40, y=120)
combo4 = ttk.Combobox(frame1, width=10, height=20, values=('学生','教职工', '管理员'), state="readonly")
combo4.place(x=150, y=120, )
combo4.current(0) # 默认值
btn1 = ttk.Button(win, text='登录')
btn1.place(x=80, y=320)
btn2 = ttk.Button(win, text='取消', command=lambda: win.quit())
btn2.place(x=240, y=320)
# 创建表
try:
conn = sqlite3.connect('ykt.db')
conn.execute('''CREATE TABLE USER
(ID CHAR(13) PRIMARY KEY NOT NULL ,
PASSWD TEXT,
TYPE TEXT)''')
conn.execute('''CREATE TABLE USERINFO
(ID CHAR(13) PRIMARY KEY NOT NULL ,
NAME TEXT,
SEX BOOLEAN,
banji CHAR(11),
major CHAR(50))''')
conn.execute('''CREATE TABLE CDINFO
(ID CHAR(13) PRIMARY KEY NOT NULL,
MONEY FLOAT ,
LOCK BOOLEAN)''')
conn.execute('''CREATE TABLE HISTORY
(ID CHAR(13) ,
TIME TEXT,
MONEY TEXT''')
messagebox.showinfo('欢迎使用', '初始化成功!')
conn.close()
except:
pass
conn = sqlite3.connect('ykt.db')
varmoney = StringVar()
infoID = StringVar()
sexSelect = StringVar()
peopleSelect = StringVar()
time1 = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
def check_lock(ID):
cursor = conn.execute('SELECT lock from CDINFO where ID= "' + ID + '"')
temp = cursor.fetchall()
if temp[0][0] == 1:
messagebox.showinfo('提示', '此一卡通已锁定')
return False
else:
return True
def doSql(sql):
'''用来执行SQL语句尤其是INSERT和DELETE语句'''
conn = sqlite3.connect('ykt.db')
cur = conn.cursor()
cur.execute(sql)
conn.commit()
conn.close()
# 登录**函数定义
def login(event):
def infoWin():
'''详细信息——窗口'''
global infoID, sexSelect
winInfo = Toplevel()
sizeWinInfo = '%dx%d+%d+%d' % (500, 500, (screenwidth - 500) / 2, (screenheight - 500) / 2)
winInfo.geometry(sizeWinInfo)
winInfo.title('详细信息')
winInfo.attributes("-toolwindow", 1) # 新窗口在最上面
lab11InfoID = Label(winInfo, text='卡号', font='微软雅黑 12', fg='blue').place(x=140, y=10)
lab12InfoID = Label(winInfo, textvariable=infoID, font='微软雅黑 12', fg='blue').place(x=220, y=10)
lab2InfoName = Label(winInfo, text='姓名', font='微软雅黑 12').place(x=140, y=60)
entryInfoName = Entry(winInfo, width=20)
entryInfoName.place(x=220, y=62)
lab3InfoName = Label(winInfo, text='性别', font='微软雅黑 12').place(x=140, y=140)
comboInfoSex = ttk.Combobox(winInfo, width=5, height=20, textvariable=sexSelect, values=('', ''),
state="readonly")
comboInfoSex.place(x=220, y=142)
sexSelect.set('')
lab41InfoNum = Label(winInfo, text='班级', font='微软雅黑 12').place(x=140, y=220)
entryInfoNum = Entry(winInfo, width=20)
entryInfoNum.place(x=220, y=222)
lab5Infomajor = Label(winInfo, text='专业', font='微软雅黑 12').place(x=140, y=300)
entryInfomajor = Entry(winInfo, width=20)
entryInfomajor.place(x=220, y=302)
btn1Info = ttk.Button(winInfo, text='确定', width=15)
btn1Info.place(x=100, y=400)
btn2Info = ttk.Button(winInfo, text='清除', width=15)
btn2Info.place(x=300, y=400)
cursor = conn.execute('select * from USERINFO where ID = "' + infoID.get() + '"')
temp = cursor.fetchall()[0]
entryInfoName.insert(0, temp[1])
sexSelect.set(temp[2])
entryInfoNum.insert(0, temp[3])
entryInfomajor.insert(0, temp[4])
def check(event):
ID = infoID.get()
name = entryInfoName.get()
sex = comboInfoSex.get()
banji = entryInfoNum.get()
major = entryInfomajor.get()
if name == '':
messagebox.showerror('错误', '姓名不能为空')
return
if banji != '':
if len(banji) != 1:
messagebox.showerror('错误', '请输入正确班级号')
return
ask = messagebox.askyesnocancel('注意', '是否保存修改?')
if ask == True:
sql = 'update USERINFO set name = "' + name + '", sex = "'
sql += sex + '", banji = "' + banji + '",zhuanye ="' + major + '"'
doSql(sql)
winInfo.destroy()
messagebox.showinfo('恭喜', '修改成功!')
elif ask == False:
winInfo.destroy()
else:
pass
def clear(event):
entryInfoName.delete(0, END)
entryInfoNum.delete(0, END)
entryInfomajor.delete(0, END)
comboInfoSex.current(0)
btn1Info.bind('<Button-1>', check)
btn2Info.bind('<Button-1>', clear)
def jianMoneyWin():
'''消费——窗口'''
global entry1jianMoney, ID
winjianMoney = Toplevel()
sizeWinjianMoney = '%dx%d+%d+%d' % (400, 250, (screenwidth - 400) / 2, (screenheight - 250) / 2)
winjianMoney.geometry(sizeWinjianMoney)
winjianMoney.title('消费')
winjianMoney.attributes("-toolwindow", 1) # 新窗口在最上面
framejianMoney = Frame(winjianMoney, height=200, width=340, bd=1, relief='sunken')
framejianMoney.place(x=30, y=30)
lab1jianMoney = Label(framejianMoney, text='消费金额:', font='微软雅黑 12').place(x=50, y=30)
entry1jianMoney = Entry(framejianMoney, width=20)
entry1jianMoney.place(x=130, y=32)
btn1jianMoney = ttk.Button(framejianMoney, text='确认')
btn1jianMoney.place(x=40, y=150)
btn2jianMoney = ttk.Button(framejianMoney, text='清除')
btn2jianMoney.place(x=200, y=150)
def clear(event):
entry1jianMoney.delete(0, END)
def jian(event):
cursor = conn.execute('select money from CDINFO where ID = "' + ID + '"')
temp = cursor.fetchall()
money1 = temp[0][0]
sql1 = 'update CDINFO set money = "' + str(
money1 - float(entry1jianMoney.get())) + '" where ID = "' + ID + '"'
temp='消费'+entry1jianMoney.get()+''
sql2 = 'insert into HISTORY values("' + ID + '","' + time1 + '","' + temp + '")'
doSql(sql1)
doSql(sql2)
cursor = conn.execute('select money from CDINFO where ID = "' + ID + '"')
temp = cursor.fetchall()
money2 = temp[0][0]
messagebox.showinfo('恭喜', '消费成功!当前余额为%0.2f' % money2 + '')
varmoney.set(money2)
winjianMoney.destroy()
btn1jianMoney.bind('<Button-1>', jian)
btn2jianMoney.bind('<Button-1>', clear)
def addMoneyWin():
'''充值——窗口'''
global entry1AddMoney, ID
winAddMoney = Toplevel()
sizeWinAddMoney = '%dx%d+%d+%d' % (400, 250, (screenwidth - 400) / 2, (screenheight - 250) / 2)
winAddMoney.geometry(sizeWinAddMoney)
winAddMoney.title('充值')
winAddMoney.attributes("-toolwindow", 1) # 新窗口在最上面
frameAddMoney = Frame(winAddMoney, height=200, width=340, bd=1, relief='sunken')
frameAddMoney.place(x=30, y=30)
lab1AddMoney = Label(frameAddMoney, text='充值金额:', font='微软雅黑 12').place(x=50, y=30)
entry1AddMoney = Entry(frameAddMoney, width=20)
entry1AddMoney.place(x=130, y=32)
btn1AddMoney = ttk.Button(frameAddMoney, text='确认')
btn1AddMoney.place(x=40, y=150)
btn2AddMoney = ttk.Button(frameAddMoney, text='清除')
btn2AddMoney.place(x=200, y=150)
def clear(event):
entry1AddMoney.delete(0, END)
def add(event):
cursor = conn.execute('select money from CDINFO where ID = "' + ID + '"')
temp = cursor.fetchall()
money1 = temp[0][0]
sql1 = 'update CDINFO set money = "' + str(
money1 + float(entry1AddMoney.get())) + '" where ID = "' + ID + '"'
temp='充值' + entry1AddMoney.get() + ''
sql2 = 'insert into HISTORY values("' + ID + '","' + time1 + '","' + temp + '")'
print(sql2)
doSql(sql1)
doSql(sql2)
cursor = conn.execute('select money from CDINFO where ID = "' + ID + '"')
temp = cursor.fetchall()
money2 = temp[0][0]
messagebox.showinfo('恭喜', '充值成功!当前余额为%0.2f' % money2 + '')
varmoney.set(money2)
winAddMoney.destroy()
btn1AddMoney.bind('<Button-1>', add)
btn2AddMoney.bind('<Button-1>', clear)
def lookWin():
'''查看历史——窗口'''
global treeList
winLookWin = Toplevel()
sizeLookWin = '%dx%d+%d+%d' % (550, 300, (screenwidth - 550) / 2, (screenheight - 300) / 2)
winLookWin.geometry(sizeLookWin)
winLookWin.title('流水查询')
winLookWin.attributes("-toolwindow", 1) # 新窗口在最上面
# 在窗口上放置用来显示通信录信息的表格使用Treeview组件实现
frame = Frame(winLookWin, height=300, width=500, bd=1, relief='sunken')
frame.place(x=3, y=3)
# 滚动条
scrollBar = Scrollbar(frame)
scrollBar.pack(side=RIGHT, fill=Y)
# Treeview组件
treeList = ttk.Treeview(frame, height=13, columns=('c1', 'c2', 'c3'), show="headings",
yscrollcommand=scrollBar.set)
treeList.column('c1', width=170, anchor='center')
treeList.column('c2', width=170, anchor='center')
treeList.column('c3', width=170, anchor='center')
treeList.heading('c1', text='卡号')
treeList.heading('c2', text='操作时间')
treeList.heading('c3', text='明细(元)')
treeList.pack(side=LEFT, fill=BOTH)
# Treeview组件与垂直滚动条结合
scrollBar.config(command=treeList.yview)
def newWin():
winNewWin = Toplevel(win)
sizeWinNewWin = '%dx%d+%d+%d' % (500, 500, (screenwidth - 500) / 2, (screenheight - 500) / 2)
winNewWin.geometry(sizeWinNewWin)
winNewWin.title('用户操作')
winNewWin.attributes("-toolwindow", 1) # 新窗口在最上面
lab1NewWin = Label(winNewWin, text='欢迎使用一卡通管理系统', font='微软雅黑 15').place(x=150, y=30)
frameNewWin = Frame(winNewWin, height=450, width=430, bd=1, relief='sunken')
frameNewWin.place(x=30, y=110)
lab2NewWin = Label(frameNewWin, text='卡号:', font='微软雅黑 12').place(x=120, y=50)
entryNewWinID = Entry(frameNewWin, width=20)
entryNewWinID.place(x=180, y=54)
lab6NewWin = Label(frameNewWin, text='卡号:', font='微软雅黑 12').place(x=120, y=50)
entryNewWinID = Entry(frameNewWin, width=20)
entryNewWinID.place(x=180, y=54)
btn1NewWin = ttk.Button(frameNewWin, text='修改密码', width=18)
btn1NewWin.place(x=160, y=120)
btn2NewWin = ttk.Button(frameNewWin, text='充 值', width=18)
btn2NewWin.place(x=160, y=150)
btn6NewWin = ttk.Button(frameNewWin, text='消 费', width=18)
btn6NewWin.place(x=160, y=180)
btn3NewWin = ttk.Button(frameNewWin, text='详细信息', width=18)
btn3NewWin.place(x=160, y=210)
btn4NewWin = ttk.Button(frameNewWin, text='挂 失', width=18)
btn4NewWin.place(x=160, y=240)
btn5NewWin = ttk.Button(frameNewWin, text='流水查询', width=18)
btn5NewWin.place(x=160, y=270)
lab3NewWin = Label(frameNewWin, text='余额:', font='微软雅黑 12').place(x=120, y=320)
lab4NewWin = Label(frameNewWin, width=5, textvariable=varmoney, font='微软雅黑 12').place(x=190, y=320)
lab5NewWin = Label(frameNewWin, text='(元)', font='微软雅黑 12').place(x=260, y=320)
cursor = conn.execute('select money from CDINFO where ID = "' + entry_username.get() + '"')
temp = cursor.fetchall()
money2 = temp[0][0]
entryNewWinID.insert(0, entry_username.get())
varmoney.set(money2)
def alterPasswd(event):
'''修改密码'''
winAlterPasswd = Toplevel(winNewWin)
sizeWinAlterPasswd = '%dx%d+%d+%d' % (400, 250, (screenwidth - 400) / 2, (screenheight - 250) / 2)
winAlterPasswd.geometry(sizeWinAlterPasswd)
winAlterPasswd.title('修改密码')
winAlterPasswd.attributes("-toolwindow", 1) # 新窗口在最上面
frameAlterPasswd = Frame(winAlterPasswd, height=200, width=340, bd=1, relief='sunken')
frameAlterPasswd.place(x=30, y=30)
lab1AlterPasswd = Label(frameAlterPasswd, text='原密码:', font='微软雅黑 12').place(x=50, y=30)
entry1AlterPasswd = Entry(frameAlterPasswd, show='*', width=20)
entry1AlterPasswd.place(x=130, y=32)
lab1AlterPasswd = Label(frameAlterPasswd, text='新密码:', font='微软雅黑 12').place(x=50, y=60)
entry2AlterPasswd = Entry(frameAlterPasswd, show='*', width=20)
entry2AlterPasswd.place(x=130, y=62)
lab1AlterPasswd = Label(frameAlterPasswd, text='确认密码:', font='微软雅黑 12').place(x=50, y=90)
entry3AlterPasswd = Entry(frameAlterPasswd, show='*', width=20)
entry3AlterPasswd.place(x=130, y=92)
btn1AlterPasswd = ttk.Button(frameAlterPasswd, text='确认')
btn1AlterPasswd.place(x=40, y=150)
btn2AlterPasswd = ttk.Button(frameAlterPasswd, text='清除')
btn2AlterPasswd.place(x=200, y=150)
def clear(event):
entry1AlterPasswd.delete(0, END)
entry2AlterPasswd.delete(0, END)
entry3AlterPasswd.delete(0, END)
def check(event):
if entry1AlterPasswd.get() != entry_passwd.get():
messagebox.showerror('错误', '原密码输入错误')
return
elif entry2AlterPasswd.get() != entry3AlterPasswd.get():
messagebox.showerror('错误', '两次输入不一致')
return
else:
sql = 'update USER set passwd = "' + entry3AlterPasswd.get() + '"'
doSql(sql)
messagebox.showinfo('恭喜', '修改成功!')
winAlterPasswd.destroy()
winNewWin.destroy()
entry_passwd.delete(0, END)
messagebox.showwarning('提示', '请重新登录')
return
btn1AlterPasswd.bind('<Button-1>', check)
btn2AlterPasswd.bind('<Button-1>', clear)
def addmoney(event):
'''充值'''
global ID
ID = entryNewWinID.get()
addMoneyWin()
def jianmoney(event):
'''消费'''
global ID
ID = entryNewWinID.get()
jianMoneyWin()
def information(event):
'''详细信息'''
infoID.set(entryNewWinID.get())
infoWin()
def lost(event):
'''挂失'''
ask = messagebox.askyesno('提示', '将要进行挂失,挂失后将不能自助解锁\n\t是否继续?')
if ask == True:
if check_lock(entryNewWinID.get()):
sql = 'update CDINFO set lock = "1" where ID = "' + entryNewWinID.get() + '"'
doSql(sql)
winNewWin.destroy()
else:
return
def look(event):
'''查看历史'''
lookWin()
showall(entryNewWinID.get())
btn1NewWin.bind('<Button-1>', alterPasswd)
btn2NewWin.bind('<Button-1>', addmoney)
btn3NewWin.bind('<Button-1>', information)
btn4NewWin.bind('<Button-1>', lost)
btn5NewWin.bind('<Button-1>', look)
btn6NewWin.bind('<Button-1>', jianmoney)
# 学生/教职工登录
if combo4.get() == '学生' or combo4.get() == '教职工':
cursor = conn.execute('SELECT * from USER where ID= "' + entry_username.get() + '"')
temp = cursor.fetchall()
if len(temp) == 0:
messagebox.showerror('错误', '用户不存在')
return
elif temp[0][2] != combo4.get():
messagebox.showerror('错误', '用户类别不正确')
return
elif check_lock(entry_username.get()):
passwd = temp[0][1]
if entry_passwd.get() != passwd:
messagebox.showerror('错误', '用户名或密码不正确')
return
else:
newWin()
# 管理员登录
elif combo4.get() == '管理员':
if entry_username.get() == '123456' and entry_passwd.get() == '123456':
win_root = Toplevel(win)
size_root = '%dx%d+%d+%d' % (700, 400, (screenwidth - 700) / 2, (screenheight - 400) / 2)
win_root.geometry(size_root)
win_root.title('管理员操作')
win_root.attributes("-toolwindow", 1)
# 管理员***页面布局
lab1_root = Label(win_root, text='欢迎进入管理员界面', font='微软雅黑 15').place(x=250, y=30)
frame1_root = Frame(win_root, height=200, width=650, bd=1, relief='sunken')
frame1_root.place(x=28, y=110)
lab2_root = Label(frame1_root, text='卡号:', font='微软雅黑 12').place(x=30, y=80)
entry_ser_num = Entry(frame1_root, width=20)
entry_ser_num.place(x=80, y=84)
btn1_root = ttk.Button(frame1_root, text='新建持卡者', width=18)
btn1_root.place(x=300, y=30)
btn2_root = ttk.Button(frame1_root, text='充值', width=18)
btn2_root.place(x=300, y=85)
btn3_root = ttk.Button(frame1_root, text='注销一卡通', width=18)
btn3_root.place(x=300, y=140)
btn4_root = ttk.Button(frame1_root, text='更改持卡者详细信息', width=18)
btn4_root.place(x=480, y=30)
btn5_root = ttk.Button(frame1_root, text='挂失/解锁', width=18)
btn5_root.place(x=480, y=85)
btn6_root = ttk.Button(frame1_root, text='查询消费历史', width=18)
btn6_root.place(x=480, y=140)
# 管理员***函数定义
def addUser(event):
'''新建用户'''
global peopleSelect
win_root_new = Toplevel(win_root)
size_root_new = '%dx%d+%d+%d' % (500, 500, (screenwidth - 500) / 2, (screenheight - 500) / 2)
win_root_new.geometry(size_root_new)
win_root_new.title('新建用户')
lab11_root_new = Label(win_root_new, text='卡号', font='微软雅黑 12').place(x=140, y=60)
lab12_root_new = Label(win_root_new, text='*', fg='red').place(x=180, y=60)
entry_new_ID = Entry(win_root_new, width=20)
entry_new_ID.place(x=220, y=62)
lab21_root_new = Label(win_root_new, text='姓名', font='微软雅黑 12').place(x=140, y=100)
lab22_root_new = Label(win_root_new, text='*', fg='red').place(x=180, y=100)
entry_new_name = Entry(win_root_new, width=20)
entry_new_name.place(x=220, y=102)
lab3_root_new = Label(win_root_new, text='性别', font='微软雅黑 12').place(x=140, y=140)
combo_new_sex = ttk.Combobox(win_root_new, width=5, height=20, values=('', ''), state="readonly")
combo_new_sex.place(x=220, y=142)
combo_new_sex.current(0)
lab4_root_new = Label(win_root_new, text='班级', font='微软雅黑 12').place(x=140, y=200)
entry_new_phone = Entry(win_root_new, width=20)
entry_new_phone.place(x=220, y=202)
lab5_root_new = Label(win_root_new, text='专业', font='微软雅黑 12').place(x=140, y=240)
entry_new_major = Entry(win_root_new, width=20)
entry_new_major.place(x=220, y=242)
lab6_root_new = Label(win_root_new, text='类别', font='微软雅黑 12').place(x=140, y=280)
comboInfoPeople = ttk.Combobox(win_root_new, width=5, height=20, textvariable=peopleSelect,
values=('学生', '教职工'), state="readonly")
comboInfoPeople.place(x=220, y=282)
peopleSelect.set('')
btn1_root_new = ttk.Button(win_root_new, text='确定', width=15)
btn1_root_new.place(x=100, y=400)
btn2_root_new = ttk.Button(win_root_new, text='清除', width=15)
btn2_root_new.place(x=300, y=400)
def check(event):
ID = entry_new_ID.get()
name = entry_new_name.get()
sex = combo_new_sex.get()
banji = entry_new_phone.get()
major = entry_new_major.get()
passwd = '123456'
people = comboInfoPeople.get()
if ID == '':
messagebox.showerror('错误', '卡号不能为空')
return
if len(ID) != 8:
messagebox.showerror('错误', '卡号必须为8位')
return
cursor = conn.execute('SELECT * from USERINFO where ID= "' + ID + '"')
temp = cursor.fetchall()
if len(temp) != 0:
messagebox.showerror('错误', '卡号已存在')
return
if name == '':
messagebox.showerror('错误', '姓名不能为空')
return
if banji != '':
if len(banji) != 1:
messagebox.showerror('错误', '班级输入有误')
return
if people == '':
messagebox.showerror('错误', '请选择用户类别')
return
sql1 = 'insert into USERINFO values("' + ID + '","' + name + '","' + sex + '","' + banji + '","' + major + '")'
sql2 = 'insert into USER values("' + ID + '","' + passwd + '","' + people + '")'
sql3 = 'insert into CDINFO values("' + ID + '","0","0")'
sql4 = 'insert into HISTORY values("' + ID + '","' + time1 + '","0")'
doSql(sql1)
doSql(sql2)
doSql(sql3)
doSql(sql4)
win_root_new.destroy()
messagebox.showinfo('恭喜', '新建成功!')
def clear(event):
entry_new_num.delete(0, END)
entry_new_name.delete(0, END)
entry_new_phone.delete(0, END)
entry_new_major.delete(0, END)
btn1_root_new.bind('<Button-1>', check)
btn2_root_new.bind('<Button-1>', clear)
def addmoneyRoot(event):
'''充值'''
global ID
ID = entry_ser_num.get()
if ID == '':
messagebox.showerror('错误', '请输入要充值的卡号')
return
else:
cursor = conn.execute('SELECT * from USER where ID= "' + ID + '"')
temp = cursor.fetchall()
if len(temp) == 0:
messagebox.showerror('错误', '用户不存在')
return
else:
addMoneyWin()
def logout(event):
'''注销'''
global ID
ID = entry_ser_num.get()
if ID == '':
messagebox.showerror('错误', '请输入要注销的卡号')
return
else:
cursor = conn.execute('SELECT * from USER where ID= "' + ID + '"')
temp = cursor.fetchall()
if len(temp) == 0:
messagebox.showerror('错误', '用户不存在')
return
else:
ask = messagebox.askyesno('提示', ' 将要进行注销\n 是否继续?')
if ask == True:
sql1 = 'delete from USER where ID = "' + ID + '"'
sql2 = 'delete from USERINFO where ID = "' + ID + '"'
sql3 = 'delete from CDINFO where ID = "' + ID + '"'
sql4 = 'delete from HISTORY where ID = "' + ID + '"'
doSql(sql1)
doSql(sql2)
doSql(sql3)
doSql(sql4)
messagebox.showinfo('恭喜', '删除成功!')
else:
pass
def informationRoot(event):
'''详细信息'''
if entry_ser_num.get() == '':
messagebox.showerror('错误', '请输入要查看的卡号')
return
else:
cursor = conn.execute('SELECT * from USER where ID= "' + entry_ser_num.get() + '"')
temp = cursor.fetchall()
if len(temp) == 0:
messagebox.showerror('错误', '用户不存在')
return
else:
infoID.set(entry_ser_num.get())
infoWin()
def lostUnlock(event):
'''挂失解锁'''
if entry_ser_num.get() == '':
messagebox.showerror('错误', '请输入要挂失/解锁的卡号')
return
else:
cursor = conn.execute('SELECT * from USER where ID= "' + entry_ser_num.get() + '"')
temp = cursor.fetchall()
if len(temp) == 0:
messagebox.showerror('错误', '用户不存在')
return
winLostUnlock = Toplevel(win_root)
sizeLostUnlock = '%dx%d+%d+%d' % (400, 250, (screenwidth - 400) / 2, (screenheight - 250) / 2)
winLostUnlock.geometry(sizeLostUnlock)
winLostUnlock.title('挂失/解锁')
btn1LostUnlock = ttk.Button(winLostUnlock, text='挂失', width=15)
btn1LostUnlock.place(x=150, y=80)
btn2LostUnlock = ttk.Button(winLostUnlock, text='解锁', width=15)
btn2LostUnlock.place(x=150, y=150)
def lock(event):
if check_lock(entry_ser_num.get()):
sql = 'update CDINFO set lock = "1" where ID = "' + entry_ser_num.get() + '"'
doSql(sql)
winLostUnlock.destroy()
messagebox.showinfo('提示', '已挂失')
def unLock(event):
cursor = conn.execute('SELECT lock from CDINFO where ID= "' + entry_ser_num.get() + '"')
temp = cursor.fetchall()
if temp[0][0] == 0:
messagebox.showerror('错误', '不可重复解锁')
return
sql = 'update CDINFO set lock = "0" where ID = "' + entry_ser_num.get() + '"'
doSql(sql)
winLostUnlock.destroy()
messagebox.showinfo('提示', '已解锁')
btn1LostUnlock.bind('<Button-1>', lock)
btn2LostUnlock.bind('<Button-1>', unLock)
def lookRoot(event):
'''查看历史'''
if entry_ser_num.get() == '':
messagebox.showerror('错误', '请输入要查看的卡号')
return
else:
cursor = conn.execute('SELECT * from USER where ID= "' + entry_ser_num.get() + '"')
temp = cursor.fetchall()
if len(temp) == 0:
messagebox.showerror('错误', '用户不存在')
return
else:
lookWin()
showall(entry_ser_num.get())
btn1_root.bind('<Button-1>', addUser)
btn2_root.bind('<Button-1>', addmoneyRoot)
btn3_root.bind('<Button-1>', logout)
btn4_root.bind('<Button-1>', informationRoot)
btn5_root.bind('<Button-1>', lostUnlock)
btn6_root.bind('<Button-1>', lookRoot)
else:
messagebox.showerror('错误', '用户名或密码错误!')
# 显示所有信息
def showall(ID):
for row in treeList.get_children():
treeList.delete(row)
cursor = conn.execute('select * from HISTORY where ID ="' + ID + '"')
temp = cursor.fetchall()
for i in temp:
treeList.insert('', 'end', values=i)
btn1.bind('<Button-1>', login)
win.mainloop()