python实现用户管理系统

本文实例为大家分享了python实现用户管理系统的具体代码,供大家参考,具体内容如下

《python核心编程》第七章练习题第五题

一、题目描述

userpw2.py。下面的问题和例题7.1中的管理名字-密码的键值对数据程序有关。

(a) 修改那个脚本,使他能记录用户上次的登陆日期和时间(用time模块),并与用户密码一起保存起来。程序的界面要求用户输入用户名和密码的提示。无论用户名是否登陆成功,都应有提示,在用户登陆成功后,应更新相应用户的上次登陆时间戳。如果本次登陆与上次登陆在时间上相差不超过四个小时,则通知该用户:“You already in at :<last_login_timestamp>”。

(b) 添加一个管理菜单,其中有以下两项:(1)删除一个用户 (2)显示系统中所有用户的名字和他们密码的清单。

(c) 口令目前没有加密。请添加一段对口令加密的代码

(d) 为程序添加图形界面,例如,用Tkinter。(图形化界面开发比较复杂,这里没有用到。)

(e) 要求用户名布区分大小写。

(f ) 加强对用户名的限制,不允许符号和空白符。

(g) 合并“新用户”和“老用户”两个选项。如果一个新用户试图用一个不存在的用户名登陆,询问该用户是否是新用户,如果是肯定的,就创建该用户。否则按老用户的方式登陆。

二、程序中用到的模块,解释如下:

(1) re:正则表达式引擎,python中调用正则表达式的方法

(2) pickle:对象持久化,将数据写入到磁盘中

(3) datetime:时间处理,用于记录用户登陆时间戳

(4) base64:base64加密模块

(5) hashlib:hash加密模块

完整代码:

#-*- coding:utf-8 -*-
#2017.7.17

import re
import pickle
import base64,hashlib
from datetime import datetime  

def Initialization(file_name):
  '''''程序初始化,创建user.ini和time.ini文件'''
  dict_test={'admin':'db69fc039dcbd2962cb4d28f5891aae1'} #创建超级管理员,默认密码为admin
  f = file(file_name,'a+')  #以追加的方式打开文件,避免文件被修改
  if len(f.readlines()) ==0: #判断程序是否为空,只在第一次运行的时候初始化
    if file_name=='user.ini':
      pickle.dump(dict_test, f, True)
    else:
      pickle.dump({},f, True)
  f.close() 

def encodepass(passwd):
  '''''采用base64和md5双层加密,破解可能几乎为0'''
  m = hashlib.md5()
  pwd = base64.b64encode(passwd)
  m.update(pwd)
  return m.hexdigest() 

def time_order(user):
  '''''记录用户登陆时间,结果保存在time.ini文件中'''
  ft = file('time.ini','r')
  dbt = pickle.load(ft)
  if user not in dbt:
    dbt.setdefault(user,datetime.today())
  else:
    time_value = dbt[user]
    t = datetime.today()-time_value
    try:
      if t.hour<=4:
        print 'You already logged in at:<last_login_timestamp>'
    except:
      print 'You already logged in at:<last_login_timestamp>'
    dbt[user] = datetime.today()
  ft = file('time.ini','w')
  pickle.dump(dbt, ft, True)
  ft.close() 

def newuser(db):
  '''''用户创建程序,由olduser调用'''
  while True:
    name = raw_input('Please input the username:')
    if re.match(r'\w', name):  #采用正则表达式检测用户名是否合法
      pass
    else:
      print 'Username should be made of A~Z、a~z、0~9、_'
      continue
    for valuename in db.keys():
      if name.lower() == valuename.lower():
        break
    else:
      break
  passwd = raw_input('Please input the password:')
  db[name] = encodepass(passwd) 

def olduser(db):
  '''''用户登陆程序'''
  name = raw_input('Login:')
  if name in db:
    pwd = raw_input('passwd:')
    passwd = db.get(name)
    if passwd == encodepass(pwd):
      print 'Welcome back!',name
      time_order(name)
    else:
      print 'Login incorrent!'
  else:
    YN = raw_input('Do you want to instead a new user? Yes or No:')
    if YN.lower()=='yes':
      newuser(db)
  print '\n', 

def deluser(db):
  '''''删除一个用户,但必须以管理员的身份'''
  print 'Please login as admin' #管理员的身份才能删除用户
  name = raw_input('Login:')
  pwd = raw_input('passwd:')
  passwd = db.get(name)
  if passwd == encodepass(pwd) and name=='admin':
    user = raw_input('Please input a user name:')
    if user != 'admin':
      if db.pop(user):
        print 'Delete Current!'
    else:
      print 'Con not delete admin!'
  else:
    print 'Wrong passwprd' 

def checkuser(db):
  '''''查看所有用户,但必须以管理员的身份'''
  print 'Please login as admin' #管理员的身份才能查看所有用户
  name = raw_input('Login:')
  pwd = raw_input('passwd:')
  passwd = db.get(name)
  if passwd == encodepass(pwd) and name == 'admin':
    for key in db:
      print 'username: %10s ====> password: %10s' % (key,db[key])
  else:
    print 'You can not check all users!' 

def resetuser(db):
  '''''修改密码,但必须正确的输入老密码'''
  name = raw_input('Please input the username:')
  passwd = raw_input('Please input old password:')
  if db[name] == encodepass(passwd):
    passwd = raw_input('Please input new password:')
    db[name] = encodepass(passwd)
  else:
    print 'Wrong password!' 

def showmenu():
  '''''程序运行的主函数'''
  fu = file('user.ini','r')
  db = pickle.load(fu)
  prompt = '''''(L)ogin Now
(Q)uit
(D)elet User
(C)heck All User
(R)eset Password
Enter choice:''' 

  done = False
  while not done:
    chosen = False
    while not chosen:
      try:
        choice = raw_input(prompt).split()[0].lower()
      except (EOFError,KeyboardInterrupt):
        choice = 'q'
      print '\nYou picked:[%s]' % choice
      if choice not in 'lqdcr':
        print 'invalid option,try again'
      else:
        chosen = True 

    if choice == 'q':done = True
    if choice == 'l':olduser(db)
    if choice == 'd':deluser(db)
    if choice == 'c':checkuser(db)
    if choice == 'r':resetuser(db) 

  fu = file('user.ini','w')
  pickle.dump(db,fu,True)
  fu.close() 

if __name__ == '__main__':
  '''''系统有一个用户名为admin 密码为admin的超级用户,请立即修改密码!'''
  print 'Welcome to User Information Management System!'
  Initialization('user.ini')
  Initialization('time.ini')
  showmenu()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

  • python用户管理系统的实例讲解

    学Python这么久了,第一次写一个这么多的代码(我承认只有300多行,重复的代码挺多的,我承认我确实垃圾),但是也挺不容易的 自定义函数+装饰器,每一个模块写的一个函数 很多地方能用装饰器(逻辑跟不上,有的地方没用),包括双层装饰器(不会),很多地方需要优化,重复代码太多 我还是把我的流程图拿出来吧,虽然看着比上次的垃圾,但是我也做了一个小时,不容易! 好像是挺丑的(表示不会画,但我下次一定努力) 用户文件: 文件名为:user.txt 1代表管理员用户 2代表普通用户 smelond|adm

  • Python实现GUI学生信息管理系统

    本文实例为大家分享了Python实现GUI学生信息管理系统的具体代码,供大家参考,具体内容如下 项目环境:  软件环境: OS:RedHat6.3                   Lib:Pygtk                   Language:Python                   Support tool:Glade3 项目简述: ①Glade3设计用户的登录窗口,功能主窗口 ②通过Gtk.Builder初始化,载入界面 ③在Mysql.py文件中实现Python操作数

  • 一个简单的Python名片管理系统

    字符串和列表学完,自己试着写了一个非常简单的Python名片管理系统. 新萌尝试,大佬们不要喷. 修改名片的功能我偷了个懒,因为我不知道怎么通过定义下标,然后通过下标来修改列表内的字符串. 我的思路是,把用户准备修改的名片删除,再把用户新命名的名片添加即可: 如果有大佬有直接修改的办法,欢迎指点一下. 代码如下: name = [] while True: print("="*50) print(" 欢迎进入名片管理系统V1.0") print("1:添加

  • python版学生管理系统

    写一个学生管理系统,最好用python. 我都没学过python呢,只好开始临时抱佛脚,再到网上找找有没有例子看看,下面是我参照另一个博主写的,中间有一些和我不能融合的错误,我已经解决了. input("\n\nPress the enter key to exit.") def functionList(): # 定义功能菜单 print("---------请输入序号选择您要得功能---------") print("") print(&qu

  • python实现用户管理系统

    本文实例为大家分享了python实现用户管理系统的具体代码,供大家参考,具体内容如下 <python核心编程>第七章练习题第五题 一.题目描述 userpw2.py.下面的问题和例题7.1中的管理名字-密码的键值对数据程序有关. (a) 修改那个脚本,使他能记录用户上次的登陆日期和时间(用time模块),并与用户密码一起保存起来.程序的界面要求用户输入用户名和密码的提示.无论用户名是否登陆成功,都应有提示,在用户登陆成功后,应更新相应用户的上次登陆时间戳.如果本次登陆与上次登陆在时间上相差不超

  • 基于Python实现用户管理系统

    基于Python的用户管理小系统,包含文件读写操作,实现了用户信息注册和登录的简单功能. class userLogReg: """ Created on 2018.11 @author: tox33 """ def __init__(self): """ :param userFile: 操作的文件 """ self.userFile = "user.txt" de

  • python用户管理系统

    本文实例为大家分享了Python用户管理系统的具体代码,供大家参考,具体内容如下 用户管理系统 1.注册新用户 如果注册用户已经存在,则报错 需要填写信息: name, passwd, gender, email,age 2.用户登录 要求同之前写的用户登录系统 3.注销用户 用户注销时,需要输入用户名和正确的用户密码 4.显示用户信息 显示系统中存在所有已经注册用户的信息 5.退出系统 代码如下 #!/usr/bin/env python #coding:utf-8 info = ""

  • python实现员工管理系统

    这是一个简易的员工管理系统,实现最简单的功能: 1.登录用户密码验证(错误三次自动退出) 2.支持文本员工的搜索.添加.删除.修改 3.一级层级多个选项.二级层级多个选项,都支持判空.退出.返回上一层级 4.针对删除和修改有员工当前自动搜索到的结果进行参照修改和特殊提醒是否删除 用到的基础知识点比较多: 1.计数器 2.while True 以及给while做退出层级标记 3.if-elif-else 的嵌套使用 4.continue 和 break 以及简单函数定义def 5.键盘抓取 raw

  • python实现学生管理系统

    python写的简单的学生管理系统,练习python语法. 可以运行在windows和linux下,python 2.7. #!/usr/local/bin/python # -*- coding:utf-8 -*- import os import re #定义学生类 class Student: def __init__(self): self.name = '' self.ID = '' self.score = 0 #根据学生分数进行从大到小的冒泡排序 def BuddleSortByS

  • Python学生成绩管理系统简洁版

    讲起学生成绩管理系统,从大一C语言的课程设计开始,到大二的C++课程设计都是这个题,最近在学树莓派,好像树莓派常用Python编程,于是学了一波Python,看了一点基本的语法想写点东西练下手. 开发环境:Ubuntu+Python2.7 代码如下: #coding=utf-8 #保存学生信息 studentList=[] def addInfo(name,addr): tempInfo={} tempInfo['name']=name tempInfo['addr']=addr student

  • Python版名片管理系统

    本文实例为大家分享了Python版名片管理系统的具体代码,供大家参考,具体内容如下 先建立cards_main的文件 import cards_tools #无限循环,由用户主动决定什么时候退出 while True: #TODO注释,用于标记需要去做的工作 cards_tools.show_menu() action_str = raw_input("请选择希望执行的操作: ") print("你选择的操作是 %s" % action_str) #1,2,3针对名

  • python实现超市管理系统(后台管理)

    本文实例为大家分享了python实现超市管理系统的具体代码,供大家参考,具体内容如下 这个相比上个程序简单很多,首先他没有太过复杂的逻辑关系,它的逻辑线条很清晰,你能很清楚的知道要做什么,只要往自己想的方面实现就行,代码如下 # coding: utf-8 # 定义仓库 repository = dict() # 定义购物清单对象 shop_list = [] # 定义仓库里商品数量 shangpin = [["1000001", "你好世界", 88.0, 10]

  • 基于python实现名片管理系统

    本文实例为大家分享了python实现名片管理系统的具体代码,供大家参考,具体内容如下 主程序: import cards_tools # 无限循环,由用户主动决定什么时候退出 while True: # TODO注释,用于标记需要去做的工作 cards_tools.show_menu() action_str = raw_input("请选择希望执行的操作: ") print("你选择的操作是 %s" % action_str) # 1,2,3针对名片的操作 if

随机推荐