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()

posted @ 2020-01-06 20:25  Hk_Mayfly  阅读(222)  评论(0)    收藏  举报