Pytho练习4--管理系统
题目:
userpw2.py.下面的问题和例题7.1 中管理名字-密码的键值对数据的程序有关。
(a)修改那个脚本,使它能记录用户上次的登录日期和时间(用time 模块),并与用户密码一起
保存起来。程序的界面有要求用户输入用户名和密码的提示。无论户名是否成功登录,都应有提示,
在户名成功登录后,应更新相应用户的上次登录时间戳。如果本次登录与上次登录在时间上相差不
超过4 个小时,则通知该用户: “You already logged in at: <last_login_timestamp>.”
(b) 添加一个“管理”菜单,其中有以下两项:(1)删除一个用户 (2)显示系统中所有用户的名
字和他们的密码的清单。
(c) 口令目前没有加密。请添加一段对口令加密的代码(请参考crypt, rotor, 或其它加密模块)
(d) 为程序添加图形界面,例如,用Tkinter 写。
(e) 要求用户名不区分大小写。
(f) 加强对用户名的限制,不允许符号和空白符。
(g)合并“新用户”和“老用户”两个选项。如果一个新用户试图用一个不存在的用户名登录,
询问该用户是否是新用户,如果回答是肯定的,就创建该帐户。否则,按照老用户的方式登录
解答
(a)
# -*- coding:utf-8 -*- import time db = {} def newuser(): prompt = 'login desired:' while True: name = raw_input(prompt) if db.has_key(name): prompt = 'name taken,try another:' continue else: break pwd = raw_input('password:') db[name] = pwd db['time'] = time.time() def olduser(): name = raw_input('login:') pwd = raw_input('passwd:') passwd = db.get(name) if passwd == pwd: T = time.time() if db['time'] - T <= 4*60*60: print 'You are already logged in at:%s'%\ (time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(db['time']))) else: print 'Welcome back',name else: print 'Login incorrect' def showmenu(): prompt = """ (N)ew user Login (E)xisting user (Q)uit Enter choice: """ done = False while not done: chosen = False while not chosen: try: choice = raw_input(prompt).strip()[0].lower() except(EOFError, KeyboardInterrupt): choice = 'q' print '\nYou picked:[%s]'%choice if choice not in 'neq': print 'invalid option,try again' else: chosen = True if choice == 'q':done = True if choice == 'n':newuser() if choice == 'e':olduser() if __name__ == '__main__': showmenu()
(b)
# -*- coding:utf-8 -*- import time db = {} def newuser(): prompt = 'login desired:' while True: name = raw_input(prompt) if db.has_key(name): prompt = 'name taken,try another:' continue else: break pwd = raw_input('password:') db[name] = pwd db['time'] = time.time() def olduser(): name = raw_input('login:') pwd = raw_input('passwd:') passwd = db.get(name) if passwd == pwd: T = time.time() if db['time'] - T <= 4*60*60: print 'You are already logged in at:%s'%\ (time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(db['time']))) else: print 'Welcome back',name else: print 'Login incorrect' def delete_usr(): name = raw_input('Please input user name:') if name in db.keys(): del db[name] print 'delete %s successful!'%(name) else: print 'Not exist!' def show_users(): names = [x for x in db.keys() if x != 'time'] for name in names: print 'User:%s Password:%s'%(name, db[name]) def showmenu(): prompt = """ (N)ew user Login (E)xisting user (D)elete user (S)how users (Q)uit Enter choice: """ done = False while not done: chosen = False while not chosen: try: choice = raw_input(prompt).strip()[0].lower() except(EOFError, KeyboardInterrupt): choice = 'q' print '\nYou picked:[%s]'%choice if choice not in 'neqds': print 'invalid option,try again' else: chosen = True if choice == 'q':done = True if choice == 'n':newuser() if choice == 'e':olduser() if choice == 'd':delete_usr() if choice == 's':show_users() if __name__ == '__main__': showmenu()
(c)
# -*- coding:utf-8 -*- import time from Crypto.Hash import SHA256 db = {} def newuser(): prompt = 'login desired:' while True: name = raw_input(prompt) if db.has_key(name): prompt = 'name taken,try another:' continue else: break pwd = raw_input('password:') db[name] = SHA256.new(pwd).hexdigest() db['time'] = time.time() def olduser(): name = raw_input('login:') pwd = raw_input('passwd:') passwd = db.get(name) if passwd == SHA256.new(pwd).hexdigest(): T = time.time() if db['time'] - T <= 4*60*60: print 'You are already logged in at:%s'%\ (time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(db['time']))) else: print 'Welcome back',name else: print 'Login incorrect' def delete_usr(): name = raw_input('Please input user name:') if name in db.keys(): del db[name] print 'delete %s successful!'%(name) else: print 'Not exist!' def show_users(): names = [x for x in db.keys() if x != 'time'] for name in names: print 'User:%s Password:%s'%(name, db[name]) def showmenu(): prompt = """ (N)ew user Login (E)xisting user (D)elete user (S)how users (Q)uit Enter choice: """ done = False while not done: chosen = False while not chosen: try: choice = raw_input(prompt).strip()[0].lower() except(EOFError, KeyboardInterrupt): choice = 'q' print '\nYou picked:[%s]'%choice if choice not in 'neqds': print 'invalid option,try again' else: chosen = True if choice == 'q':done = True if choice == 'n':newuser() if choice == 'e':olduser() if choice == 'd':delete_usr() if choice == 's':show_users() if __name__ == '__main__': showmenu()
(d)
# -*- coding:utf-8 -*- import time from Crypto.Hash import SHA256 import tkinter from tkinter import messagebox class Manage: def __init__(self, master): self.master = master # 储存组件返回值 self.bt = [] # 存储数据(用户,密码,最后的登录时间) self.db = [] self.showmenu() # 清屏 def cls_menu(self): # 清除列表组件 for bt in self.bt: bt.destroy() # 新用户登录 def newlogin(self): # 获取输入框中的字符串 name = self.bt2.get() pw = self.bt4.get() # 标记用户名是否存在 flag = True # 判断是否有输入为空 if not pw or not name: tkinter.messagebox.showwarning('warning', 'user/password is empty') else: for info in self.db: # 判断用户名是否存在 if info.has_key(name): tkinter.messagebox.showerror('error', '%s has exist!' % (name)) flag = False break # 用户名不存在,则创建,更新登录时间 if flag: self.db += [{name: SHA256.new(pw).hexdigest(), 'time': time.time()}] tkinter.messagebox.showinfo('success', 'Register successful!Welcom back!%s' % name) # 老用户登录 def oldlogin(self): # 获取输入信息 name = self.bt2.get() pw = self.bt4.get() # 判断是否存在用户 flag = True # 判断输入是否有空 if not pw or not name: tkinter.messagebox.showwarning('warning', 'user/password is empty') else: for i in range(len(self.db)): if self.db[i].has_key(name): # 判断密码是否正确 if SHA256.new(pw).hexdigest() == self.db[i][name]: # 获取当前的时间戳 T = time.time() # 判断距离上次的登录有没有4个小时 if T - self.db[i]['time'] < 4*60*60: tkinter.messagebox.showwarning('warning','You already login in at:'+ time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(self.db[i]['time']))) else: # 更新登录时间 self.db[i]['time'] = time.time() tkinter.messagebox.showinfo('success','Welcome back!%s'%name) else: tkinter.messagebox.showerror('error', 'password error!') flag = False break if flag: tkinter.messagebox.showerror('error', 'Not exist %s'%name) def newuser(self): # 清除界面 self.cls_menu() self.bt = [] # 设置界面大小 self.master.geometry("350x200") # 界面布局 self.bt1 = tkinter.Label(text='New User:') self.bt1.place(x=50,y=50) self.bt2 = tkinter.Entry(self.master) self.bt2.place(x=130,y=50) self.bt3 = tkinter.Label(text='Password:') self.bt3.place(x=50, y=80) self.bt4 = tkinter.Entry(self.master) self.bt4.place(x=130, y=80) self.bt5 = tkinter.Button(self.master, text='back',command=self.showmenu) self.bt5.place(x=200,y=110) self.bt6 = tkinter.Button(self.master, text='submit',command=self.newlogin) self.bt6.place(x=80,y=110) self.bt += [self.bt1,self.bt2,self.bt3,self.bt4,self.bt5,self.bt6] def olduser(self): # 清除界面 self.cls_menu() self.bt = [] # 设置界面大小 self.master.geometry("350x200") # 界面布局 self.bt1 = tkinter.Label(text='Old User:') self.bt1.place(x=50, y=50) self.bt2 = tkinter.Entry(self.master) self.bt2.place(x=130, y=50) self.bt3 = tkinter.Label(text='Password:') self.bt3.place(x=50, y=80) self.bt4 = tkinter.Entry(self.master) self.bt4.place(x=130, y=80) self.bt5 = tkinter.Button(self.master, text='back', command=self.showmenu) self.bt5.place(x=200, y=110) self.bt6 = tkinter.Button(self.master, text='submit', command=self.oldlogin) self.bt6.place(x=80, y=110) self.bt += [self.bt1, self.bt2, self.bt3, self.bt4, self.bt5, self.bt6] # 删除用户 def Delete(self): name = self.bt2.get() # 判断用户是否存在 flag = True for i in range(len(self.db)): if self.db[i].has_key(name): del self.db[i] tkinter.messagebox.showinfo('success','Successful!delete %s'%name) flag = False break if flag: tkinter.messagebox.showwarning('warning','Not exist %s'%name) def delete_usr(self): # 清屏 self.cls_menu() self.bt = [] # 界面布局 self.bt1 = tkinter.Label(self.master,text='User:') self.bt1.place(x=50,y=80) self.bt2 = tkinter.Entry(self.master) self.bt2.place(x=90,y=80) self.bt3 = tkinter.Button(self.master,text='Delete',command=self.Delete) self.bt3.place(x=240,y=80) self.bt4 = tkinter.Button(self.master, text='back', command=self.showmenu) self.bt4.place(x=300,y=80) self.bt += [self.bt1,self.bt2,self.bt3,self.bt4] # 显示信息 def show_users(self): # 清屏 self.cls_menu() self.bt = [] # 保存用户和密码 infos = [] self.master.geometry("700x300") for info in self.db: for name in info.keys(): # 剔除字典中的时间 if name != 'time': infos +=['User:'+name,'Password:'+info[name],' '] # 将列表转换为字符串 info_list = '\n'.join(infos) # 显示用户信息 self.bt1 = tkinter.Label(self.master,text=info_list) self.bt1.place(x=0,y=10) self.bt += [self.bt1] def showmenu(self): # 清屏 self.cls_menu() self.bt = [] # 界面布局 self.master.geometry("350x240") self.bt1 = tkinter.Button(self.master, text='(N)ew user Login', height=3, width=50, font=8, command=self.newuser) self.bt1.pack() self.bt2 = tkinter.Button(self.master, text='(E)xisting user', height=3, width=50, font=8, command=self.olduser) self.bt2.pack() self.bt3 = tkinter.Button(self.master, text='(D)elete user', height=3, width=50, font=8, command=self.delete_usr) self.bt3.pack() self.bt4 = tkinter.Button(self.master, text='(S)how users', height=3, width=50, font=8, command=self.show_users) self.bt4.pack() self.bt += [self.bt1,self.bt2,self.bt3,self.bt4] if __name__ == '__main__': root = tkinter.Tk() root.title('管理系统') Manage(root) root.mainloop()

(e)
# -*- coding:utf-8 -*- import time from Crypto.Hash import SHA256 import tkinter from tkinter import messagebox class Manage: def __init__(self, master): self.master = master # 储存组件返回值 self.bt = [] # 存储数据(用户,密码,最后的登录时间) self.db = [] self.showmenu() # 清屏 def cls_menu(self): # 清除列表组件 for bt in self.bt: bt.destroy() # 新用户登录 def newlogin(self): # 获取输入框中的字符串 name = self.bt2.get() # 将用户名转换为小写 name = name.lower() pw = self.bt4.get() # 标记用户名是否存在 flag = True # 判断是否有输入为空 if not pw or not name: tkinter.messagebox.showwarning('warning', 'user/password is empty') else: for info in self.db: # 判断用户名是否存在 if info.has_key(name): tkinter.messagebox.showerror('error', '%s has exist!' % (name)) flag = False break # 用户名不存在,则创建,更新登录时间 if flag: self.db += [{name: SHA256.new(pw).hexdigest(), 'time': time.time()}] tkinter.messagebox.showinfo('success', 'Register successful!Welcom back!%s' % name) # 老用户登录 def oldlogin(self): # 获取输入信息 name = self.bt2.get() name = name.lower() pw = self.bt4.get() # 判断是否存在用户 flag = True # 判断输入是否有空 if not pw or not name: tkinter.messagebox.showwarning('warning', 'user/password is empty') else: for i in range(len(self.db)): if self.db[i].has_key(name): # 判断密码是否正确 if SHA256.new(pw).hexdigest() == self.db[i][name]: # 获取当前的时间戳 T = time.time() # 判断距离上次的登录有没有4个小时 if T - self.db[i]['time'] < 4*60*60: tkinter.messagebox.showwarning('warning','You already login in at:'+ time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(self.db[i]['time']))) else: # 更新登录时间 self.db[i]['time'] = time.time() tkinter.messagebox.showinfo('success','Welcome back!%s'%name) else: tkinter.messagebox.showerror('error', 'password error!') flag = False break if flag: tkinter.messagebox.showerror('error', 'Not exist %s'%name) def newuser(self): # 清除界面 self.cls_menu() self.bt = [] # 设置界面大小 self.master.geometry("350x200") # 界面布局 self.bt1 = tkinter.Label(text='New User:') self.bt1.place(x=50,y=50) self.bt2 = tkinter.Entry(self.master) self.bt2.place(x=130,y=50) self.bt3 = tkinter.Label(text='Password:') self.bt3.place(x=50, y=80) self.bt4 = tkinter.Entry(self.master) self.bt4.place(x=130, y=80) self.bt5 = tkinter.Button(self.master, text='back',command=self.showmenu) self.bt5.place(x=200,y=110) self.bt6 = tkinter.Button(self.master, text='submit',command=self.newlogin) self.bt6.place(x=80,y=110) self.bt += [self.bt1,self.bt2,self.bt3,self.bt4,self.bt5,self.bt6] def olduser(self): # 清除界面 self.cls_menu() self.bt = [] # 设置界面大小 self.master.geometry("350x200") # 界面布局 self.bt1 = tkinter.Label(text='Old User:') self.bt1.place(x=50, y=50) self.bt2 = tkinter.Entry(self.master) self.bt2.place(x=130, y=50) self.bt3 = tkinter.Label(text='Password:') self.bt3.place(x=50, y=80) self.bt4 = tkinter.Entry(self.master) self.bt4.place(x=130, y=80) self.bt5 = tkinter.Button(self.master, text='back', command=self.showmenu) self.bt5.place(x=200, y=110) self.bt6 = tkinter.Button(self.master, text='submit', command=self.oldlogin) self.bt6.place(x=80, y=110) self.bt += [self.bt1, self.bt2, self.bt3, self.bt4, self.bt5, self.bt6] # 删除用户 def Delete(self): name = self.bt2.get() name = name.lower() # 判断用户是否存在 flag = True for i in range(len(self.db)): if self.db[i].has_key(name): del self.db[i] tkinter.messagebox.showinfo('success','Successful!delete %s'%name) flag = False break if flag: tkinter.messagebox.showwarning('warning','Not exist %s'%name) def delete_usr(self): # 清屏 self.cls_menu() self.bt = [] # 界面布局 self.bt1 = tkinter.Label(self.master,text='User:') self.bt1.place(x=50,y=80) self.bt2 = tkinter.Entry(self.master) self.bt2.place(x=90,y=80) self.bt3 = tkinter.Button(self.master,text='Delete',command=self.Delete) self.bt3.place(x=240,y=80) self.bt4 = tkinter.Button(self.master, text='back', command=self.showmenu) self.bt4.place(x=300,y=80) self.bt += [self.bt1,self.bt2,self.bt3,self.bt4] # 显示信息 def show_users(self): # 清屏 self.cls_menu() self.bt = [] # 保存用户和密码 infos = [] self.master.geometry("700x300") for info in self.db: for name in info.keys(): # 剔除字典中的时间 if name != 'time': infos +=['User:'+name,'Password:'+info[name],' '] # 将列表转换为字符串 info_list = '\n'.join(infos) # 显示用户信息 self.bt1 = tkinter.Label(self.master,text=info_list) self.bt1.place(x=0,y=10) self.bt += [self.bt1] def showmenu(self): # 清屏 self.cls_menu() self.bt = [] # 界面布局 self.master.geometry("350x240") self.bt1 = tkinter.Button(self.master, text='(N)ew user Login', height=3, width=50, font=8, command=self.newuser) self.bt1.pack() self.bt2 = tkinter.Button(self.master, text='(E)xisting user', height=3, width=50, font=8, command=self.olduser) self.bt2.pack() self.bt3 = tkinter.Button(self.master, text='(D)elete user', height=3, width=50, font=8, command=self.delete_usr) self.bt3.pack() self.bt4 = tkinter.Button(self.master, text='(S)how users', height=3, width=50, font=8, command=self.show_users) self.bt4.pack() self.bt += [self.bt1,self.bt2,self.bt3,self.bt4] if __name__ == '__main__': root = tkinter.Tk() root.title('管理系统') Manage(root) root.mainloop()
(f)
# -*- coding:utf-8 -*- import time from Crypto.Hash import SHA256 import tkinter from tkinter import messagebox class Manage: def __init__(self, master): self.master = master # 储存组件返回值 self.bt = [] # 存储数据(用户,密码,最后的登录时间) self.db = [] self.showmenu() # 清屏 def cls_menu(self): # 清除列表组件 for bt in self.bt: bt.destroy() # 新用户登录 def newlogin(self): # 获取输入框中的字符串 name = self.bt2.get() # 将用户名转换为小写 name = name.lower() pw = self.bt4.get() # 标记用户名是否存在 flag = True flag1 = True symbol = r"'!.,:;[]{}-_=+~@#$%^&*()|\/" for i in name: if i in symbol or i.isspace(): flag1 = False tkinter.messagebox.showerror('error',"User names cannot be symbols or blank characters!") break if flag1: # 判断是否有输入为空 if not pw or not name: tkinter.messagebox.showwarning('warning', 'user/password is empty') else: for info in self.db: # 判断用户名是否存在 if info.has_key(name): tkinter.messagebox.showerror('error', '%s has exist!' % (name)) flag = False break # 用户名不存在,则创建,更新登录时间 if flag: self.db += [{name: SHA256.new(pw).hexdigest(), 'time': time.time()}] tkinter.messagebox.showinfo('success', 'Register successful!Welcom back!%s' % name) # 老用户登录 def oldlogin(self): # 获取输入信息 name = self.bt2.get() name = name.lower() pw = self.bt4.get() # 判断是否存在用户 flag = True # 判断输入是否有空 if not pw or not name: tkinter.messagebox.showwarning('warning', 'user/password is empty') else: for i in range(len(self.db)): if self.db[i].has_key(name): # 判断密码是否正确 if SHA256.new(pw).hexdigest() == self.db[i][name]: # 获取当前的时间戳 T = time.time() # 判断距离上次的登录有没有4个小时 if T - self.db[i]['time'] < 4*60*60: tkinter.messagebox.showwarning('warning','You already login in at:'+ time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(self.db[i]['time']))) else: # 更新登录时间 self.db[i]['time'] = time.time() tkinter.messagebox.showinfo('success','Welcome back!%s'%name) else: tkinter.messagebox.showerror('error', 'password error!') flag = False break if flag: tkinter.messagebox.showerror('error', 'Not exist %s'%name) def newuser(self): # 清除界面 self.cls_menu() self.bt = [] # 设置界面大小 self.master.geometry("350x200") # 界面布局 self.bt1 = tkinter.Label(text='New User:') self.bt1.place(x=50,y=50) self.bt2 = tkinter.Entry(self.master) self.bt2.place(x=130,y=50) self.bt3 = tkinter.Label(text='Password:') self.bt3.place(x=50, y=80) self.bt4 = tkinter.Entry(self.master) self.bt4.place(x=130, y=80) self.bt5 = tkinter.Button(self.master, text='back',command=self.showmenu) self.bt5.place(x=200,y=110) self.bt6 = tkinter.Button(self.master, text='submit',command=self.newlogin) self.bt6.place(x=80,y=110) self.bt += [self.bt1,self.bt2,self.bt3,self.bt4,self.bt5,self.bt6] def olduser(self): # 清除界面 self.cls_menu() self.bt = [] # 设置界面大小 self.master.geometry("350x200") # 界面布局 self.bt1 = tkinter.Label(text='Old User:') self.bt1.place(x=50, y=50) self.bt2 = tkinter.Entry(self.master) self.bt2.place(x=130, y=50) self.bt3 = tkinter.Label(text='Password:') self.bt3.place(x=50, y=80) self.bt4 = tkinter.Entry(self.master) self.bt4.place(x=130, y=80) self.bt5 = tkinter.Button(self.master, text='back', command=self.showmenu) self.bt5.place(x=200, y=110) self.bt6 = tkinter.Button(self.master, text='submit', command=self.oldlogin) self.bt6.place(x=80, y=110) self.bt += [self.bt1, self.bt2, self.bt3, self.bt4, self.bt5, self.bt6] # 删除用户 def Delete(self): name = self.bt2.get() name = name.lower() # 判断用户是否存在 flag = True for i in range(len(self.db)): if self.db[i].has_key(name): del self.db[i] tkinter.messagebox.showinfo('success','Successful!delete %s'%name) flag = False break if flag: tkinter.messagebox.showwarning('warning','Not exist %s'%name) def delete_usr(self): # 清屏 self.cls_menu() self.bt = [] # 界面布局 self.bt1 = tkinter.Label(self.master,text='User:') self.bt1.place(x=50,y=80) self.bt2 = tkinter.Entry(self.master) self.bt2.place(x=90,y=80) self.bt3 = tkinter.Button(self.master,text='Delete',command=self.Delete) self.bt3.place(x=240,y=80) self.bt4 = tkinter.Button(self.master, text='back', command=self.showmenu) self.bt4.place(x=300,y=80) self.bt += [self.bt1,self.bt2,self.bt3,self.bt4] # 显示信息 def show_users(self): # 清屏 self.cls_menu() self.bt = [] # 保存用户和密码 infos = [] self.master.geometry("700x300") for info in self.db: for name in info.keys(): # 剔除字典中的时间 if name != 'time': infos +=['User:'+name,'Password:'+info[name],' '] # 将列表转换为字符串 info_list = '\n'.join(infos) # 显示用户信息 self.bt1 = tkinter.Label(self.master,text=info_list) self.bt1.place(x=0,y=10) self.bt += [self.bt1] def showmenu(self): # 清屏 self.cls_menu() self.bt = [] # 界面布局 self.master.geometry("350x240") self.bt1 = tkinter.Button(self.master, text='(N)ew user Login', height=3, width=50, font=8, command=self.newuser) self.bt1.pack() self.bt2 = tkinter.Button(self.master, text='(E)xisting user', height=3, width=50, font=8, command=self.olduser) self.bt2.pack() self.bt3 = tkinter.Button(self.master, text='(D)elete user', height=3, width=50, font=8, command=self.delete_usr) self.bt3.pack() self.bt4 = tkinter.Button(self.master, text='(S)how users', height=3, width=50, font=8, command=self.show_users) self.bt4.pack() self.bt += [self.bt1,self.bt2,self.bt3,self.bt4] if __name__ == '__main__': root = tkinter.Tk() root.title('管理系统') Manage(root) root.mainloop()
(g)
# -*- coding:utf-8 -*- import time from Crypto.Hash import SHA256 import tkinter from tkinter import messagebox class Manage: def __init__(self, master): self.master = master # 储存组件返回值 self.bt = [] # 存储数据(用户,密码,最后的登录时间) self.db = [] self.showmenu() # 清屏 def cls_menu(self): # 清除列表组件 for bt in self.bt: bt.destroy() # 新用户登录 def login(self): # 获取输入框中的字符串 name = self.bt2.get() # 将用户名转换为小写 name = name.lower() pw = self.bt4.get() # 标记用户名是否存在 flag = True flag1 = True flag2 = True symbol = r"'!.,:;[]{}-_=+~@#$%^&*()|\/" for i in name: if i in symbol or i.isspace(): flag1 = False tkinter.messagebox.showerror('error',"User names cannot be symbols or blank characters!") break if flag1: # 判断是否有输入为空 if not pw or not name: tkinter.messagebox.showwarning('warning', 'user/password is empty') else: ver = tkinter.messagebox.askquestion(title='askquestion', message='Is this a new user?') if ver == 'yes': for i in range(len(self.db)): # 判断用户名是否存在 if self.db[i].has_key(name): tkinter.messagebox.showwarning('warning','User has exist!') flag = False break if flag: self.db += [{name: SHA256.new(pw).hexdigest(), 'time': time.time()}] tkinter.messagebox.showinfo('success', 'Register successful!Welcom back!%s' % name) else: for i in range(len(self.db)): # 判断用户名是否存在 if self.db[i].has_key(name): if SHA256.new(pw).hexdigest() == self.db[i][name]: # 获取当前的时间戳 T = time.time() # 判断距离上次的登录有没有4个小时 if T - self.db[i]['time'] < 4 * 60 * 60: tkinter.messagebox.showwarning('warning', 'You already login in at:' + time.strftime( '%Y-%m-%d %H:%M:%S', time.localtime(self.db[i]['time']))) else: # 更新登录时间 self.db[i]['time'] = time.time() tkinter.messagebox.showinfo('success', 'Welcome back!%s' % name) else: tkinter.messagebox.showerror('error', 'password error!') flag2 = False break if flag2: tkinter.messagebox.showwarning('warning','User has not exist!') def user(self): # 清除界面 self.cls_menu() self.bt = [] # 设置界面大小 self.master.geometry("350x200") # 界面布局 self.bt1 = tkinter.Label(text='User:') self.bt1.place(x=50,y=50) self.bt2 = tkinter.Entry(self.master) self.bt2.place(x=130,y=50) self.bt3 = tkinter.Label(text='Password:') self.bt3.place(x=50, y=80) self.bt4 = tkinter.Entry(self.master,show="*") self.bt4.place(x=130, y=80) self.bt5 = tkinter.Button(self.master, text='back',command=self.showmenu) self.bt5.place(x=200,y=110) self.bt6 = tkinter.Button(self.master, text='submit',command=self.login) self.bt6.place(x=80,y=110) self.bt += [self.bt1,self.bt2,self.bt3,self.bt4,self.bt5,self.bt6] # 删除用户 def Delete(self): name = self.bt2.get() name = name.lower() # 判断用户是否存在 flag = True for i in range(len(self.db)): if self.db[i].has_key(name): del self.db[i] tkinter.messagebox.showinfo('success','Successful!delete %s'%name) flag = False break if flag: tkinter.messagebox.showwarning('warning','Not exist %s'%name) def delete_usr(self): # 清屏 self.cls_menu() self.bt = [] # 界面布局 self.bt1 = tkinter.Label(self.master,text='User:') self.bt1.place(x=50,y=80) self.bt2 = tkinter.Entry(self.master) self.bt2.place(x=90,y=80) self.bt3 = tkinter.Button(self.master,text='Delete',command=self.Delete) self.bt3.place(x=240,y=80) self.bt4 = tkinter.Button(self.master, text='back', command=self.showmenu) self.bt4.place(x=300,y=80) self.bt += [self.bt1,self.bt2,self.bt3,self.bt4] # 显示信息 def show_users(self): # 清屏 self.cls_menu() self.bt = [] # 保存用户和密码 infos = [] self.master.geometry("700x300") for info in self.db: for name in info.keys(): # 剔除字典中的时间 if name != 'time': infos +=['User:'+name,'Password:'+info[name],' '] # 将列表转换为字符串 info_list = '\n'.join(infos) # 显示用户信息 self.bt1 = tkinter.Label(self.master,text=info_list) self.bt1.place(x=0,y=10) self.bt4 = tkinter.Button(self.master, text='back', command=self.showmenu) self.bt4.place(x=650, y=270) self.bt += [self.bt1,self.bt4] def showmenu(self): # 清屏 self.cls_menu() self.bt = [] # 界面布局 self.master.geometry("350x180") self.bt1 = tkinter.Button(self.master, text='(U)ser Login', height=3, width=50, font=8, command=self.user) self.bt1.pack() self.bt3 = tkinter.Button(self.master, text='(D)elete user', height=3, width=50, font=8, command=self.delete_usr) self.bt3.pack() self.bt4 = tkinter.Button(self.master, text='(S)how users', height=3, width=50, font=8, command=self.show_users) self.bt4.pack() self.bt += [self.bt1,self.bt3,self.bt4] if __name__ == '__main__': root = tkinter.Tk() root.title('管理系统') Manage(root) root.mainloop()


浙公网安备 33010602011771号