zoukankan      html  css  js  c++  java
  • Python作业之用户管理

    作业

    流程图没有画,懒,不想画

    readme没有写,懒,不想写。看注释吧233333

      1 #! /usr/bin/env python
      2 # -*- coding: utf-8 -*-
      3 # __author__ == 'Djc'
      4 
      5 LOGIN_IN = {'is_login': False}      # 记录当前的普通登录用户
      6 
      7 
      8 # 普通用户装饰器,此装饰器的功能是验证是否有用户登录
      9 def outer(func):
     10     def inner():
     11         if LOGIN_IN['is_login']:    # 检验是否有用户登录了
     12             func()
     13         else:
     14             print("Please login!")  # 若没有,跳转menu函数
     15     return inner
     16 
     17 
     18 # 管理员装饰器
     19 def mag_outer(func):
     20     def inner(*args, **kwargs):
     21         if bool(int(LOGIN_IN['user_power'])):
     22             func(*args, **kwargs)
     23         else:
     24             print("Sorry,you can't running this function!")
     25     return inner
     26 
     27 
     28 def login():
     29     usr = input("Please enter your name: ")
     30     pwd = input("Please enter your password: ")
     31 
     32     f = open("user_information", 'r')
     33     for i in f:
     34         if usr == i.split("|")[0]:  # 检验登录用户是否存在,不存在跳入注册函数
     35             break
     36     else:
     37         print("This usr is not exist!")
     38 
     39     f.seek(0)
     40     # 遍历用户文件,登录成功将用户名放在全局字典中
     41     for line in f:
     42         # user_power = line.strip().split("|")[3]
     43         if usr == line.split("|")[0] and pwd == line.strip().split("|")[1]:
     44             user_power = line.strip().split("|")[3]         # 获取用户权限
     45             print("Log in successful,welcome to you")
     46             LOGIN_IN['is_login'] = True
     47             LOGIN_IN['current'] = usr
     48             LOGIN_IN['password'] = pwd
     49             LOGIN_IN['user_power'] = user_power
     50             break
     51     else:  # 否则提示密码错误,退出程序
     52         print("Sorry,your password is wrong!")
     53     f.close()
     54 
     55 
     56 # 注册
     57 def register():
     58     usr = input("Please enter your name: ")
     59     pwd = input("Please enter your password: ")
     60     signature = input("Please enter your signature: ")
     61     f = open("user_information", 'r+')
     62     flag = True                # 设立一个标识符
     63     for i in f:
     64         if i.split("|")[0] == usr:              # 检测此用户名是否存在,存在则不允许注册
     65             print("Sorry,this name is exist,try again!")
     66             flag = False
     67             break
     68 
     69     f.seek(0)                   # 将文件指针位置放回起始位置,这一步非常重要!!!!
     70     for i in f:
     71         if flag and i.strip():
     72             new_usr = '
    ' + usr + "|" + pwd + '|' + signature + "|" + '0'
     73             f.write(new_usr)
     74             print("Register successful")
     75             break
     76     f.close()        # 关闭文件
     77 
     78 
     79 # 用户查看自己信息,用装饰器装饰。具体可参考装饰器的应用
     80 @outer
     81 def usr_view():
     82     print("Welcome to you!")
     83     with open("user_information", 'r+') as f:
     84         for line in f:
     85             if line.strip().split("|")[0] == LOGIN_IN['current']:      # 遍历文件,输出此时登录者的信息
     86                 print(line)
     87 
     88 
     89 # 退出当前用户
     90 @outer
     91 def usr_exit():
     92     LOGIN_IN['is_login'] = False
     93 
     94 
     95 # 用户改变密码函数
     96 @outer
     97 def change_pwd():
     98     print("Welcome to you!")
     99     new_pwd = input("Please enter the password that you want to modify: ")     # 新密码
    100     in_put = open("user_information", 'r')
    101     out_put = open("user_information", 'r+')
    102     for line in in_put:
    103         if LOGIN_IN['password'] == line.strip().split("|")[1]:                                         # 验证是否是用户本人想修改密码
    104             break
    105     else:
    106         print("Sorry,you may not own!")
    107         menu()
    108     in_put.seek(0)                                                                   # 将文件指针返回文件起始位置
    109     for line in in_put:
    110         if "|" in line and LOGIN_IN['current'] in line and LOGIN_IN['is_login']:
    111             temp = line.split("|")
    112             temp2 = temp[0] + '|' + new_pwd + '|' + temp[2] + '|' + temp[3]                        # 将新密码写入原文件
    113             out_put.write(temp2)
    114         else:
    115             out_put.write(line)                                                      # 将不需要做改动的用户写入原文件
    116     print("Yeah,modify successful")
    117     out_put.close()
    118     in_put.close()
    119 
    120 
    121 def user_log():
    122     pass
    123 
    124 '''
    125 -----------------------------------------------------
    126 * 管理员用户登录
    127 * 可以登录,注册,查看本用户信息
    128 * 删除,添加普通用户
    129 * 查看所有普通用户,按照指定关键字搜索用户信息(模糊搜索)
    130 * 提高普通用户权限?
    131 -----------------------------------------------------
    132 '''
    133 
    134 
    135 @mag_outer
    136 def manager():
    137     print("Welcome to you,our manager!")
    138     ma_pr = '''
    139     (V)iew every user
    140     (D)elete user
    141     (A)dd user
    142     (S)ercher user
    143     (I)mprove user power
    144     (B)ack
    145     (Q)exit
    146     Enter choice:'''
    147     while True:
    148         try:
    149             choice = input(ma_pr).strip()[0].lower()
    150         except (KeyError, KeyboardInterrupt):
    151             choice = 'q'
    152             
    153         if choice == 'v':
    154             view_usr()
    155         if choice == 'd':
    156             name = input("Please enter the name that you want to delete? ")
    157             count = 0
    158             with open('user_information', 'r') as f:
    159                 for line in f:
    160                     if line.strip().split("|")[0] == name:
    161                         delete_usr(count)
    162                         break
    163                     count += 1
    164 
    165         if choice == 'a':
    166             add_user()
    167         if choice == 's':
    168             find_user()
    169         if choice == 'i':
    170             improve_user()
    171         if choice == 'b':
    172             menu()
    173         if choice == 'q':
    174             exit()
    175 
    176 
    177 # 查看所有用户的信息
    178 @mag_outer
    179 def view_usr():
    180     with open("user_information", 'r+') as f:
    181         for line in f:
    182             print(line, end='')
    183 
    184 
    185 # 管理员删除用户
    186 @mag_outer
    187 def delete_usr(lineno):
    188     fro = open('user_information', "r")        # 文件用于读取
    189 
    190     current_line = 0
    191     while current_line < lineno:
    192         fro.readline()
    193         current_line += 1            # 将文件指针定位到想删除行的开头
    194 
    195     seekpoint = fro.tell()           # 将此时文件指针的位置记录下来
    196     frw = open('user_information', "r+")      # 文件用于写入,与用于读取的文件是同一文件
    197     frw.seek(seekpoint, 0)           # 把记录下来的指针位置赋到用于写入的文件
    198 
    199     # read the line we want to discard
    200     fro.readline()  # 读入一行进内内存 同时! 文件指针下移实现删除
    201 
    202     # now move the rest of the lines in the file
    203     # one line back
    204     chars = fro.readline()           # 将要删除的下一行内容取出
    205     while chars:
    206         frw.writelines(chars)        # 写入frw
    207         chars = fro.readline()       # 继续读取,注意此处的读取是按照fro文件的指针来读
    208 
    209     print("Delete successful!")
    210     fro.close()
    211     frw.truncate()                   # 截断,把frw文件指针以后的内容清除
    212     frw.close()
    213 
    214 
    215 @mag_outer
    216 def find_user():
    217     name = input("Please enter the name that you want to find: ")
    218     with open("user_information", "r") as f:
    219         for line in f:
    220             if line.strip().split("|")[0] == name:
    221                 print(line)
    222                 break
    223 
    224 
    225 @mag_outer
    226 def improve_user():
    227     name = input("Please enter the name that you want to find: ")
    228     power = input("What's power do you want to give ?")
    229     in_put = open("user_information", 'r')
    230     out_put = open("user_information", 'r+')
    231     for line in in_put:
    232         if line.strip().split("|")[0] == name:
    233             temp = line.split("|")
    234             temp1 = temp[0] + '|' + temp[1] + '|' + temp[2] + '|' + power + '
    '
    235             out_put.write(temp1)
    236         else:
    237             out_put.write(line)
    238     in_put.close()
    239     out_put.close()
    240 
    241 
    242 @mag_outer
    243 def add_user():
    244     register()
    245 
    246 
    247 @mag_outer
    248 def manager_log():
    249     import logging
    250 
    251     logger = logging.getLogger(LOGIN_IN['current'])           # 设立当前登录的管理员为logger
    252     logger.setLevel(logging.DEBUG)                             # 设立日志输出等级最低为DEBUG
    253 
    254     file_handler = logging.FileHandler('user_log')            # 创建向文件输出日志的handler
    255     file_handler.setLevel(logging.DEBUG)                       # 文件中日志输出等级最低为DEBUG
    256 
    257     formatter = logging.Formatter("%(asctime)s  %(name)s  %(levelname)s  %(message)s")  # 设立日志输出格式
    258     file_handler.setFormatter(formatter)                       # 将格式添加到handler中
    259 
    260     logger.addHandler(file_handler)                            # 将handler注册到logger
    261 
    262     logger.debug()
    263 
    264 
    265 # 菜单函数
    266 def menu():
    267     pr = '''
    268     (L)ogin
    269     (R)egister
    270     (U)ser view
    271     (C)hange pwd
    272     (M)anager
    273     (E)xit usr
    274     (Q)exit
    275     Enter choice:'''
    276     while True:
    277         try:
    278             choice = input(pr).strip()[0].lower()
    279         except (KeyboardInterrupt, KeyError):
    280             choice = 'q'
    281     
    282         if choice == 'l':
    283             login()
    284         if choice == 'r':
    285             register()
    286         if choice == 'u':
    287             usr_view()
    288         if choice == 'c':
    289             change_pwd()
    290         if choice == 'm':
    291             manager()
    292         if choice == 'e':
    293             usr_exit()
    294         if choice == 'q':
    295             exit()
    296 
    297 
    298 if __name__ == '__main__':
    299     menu()
  • 相关阅读:
    第一章 线性模型
    Kaggle比赛:从何着手?
    Kaggle初学者五步入门指南,七大诀窍助你享受竞赛
    3.深度学习的实用层面
    软件工程面试题
    PyQT5速成教程-4 Qt Designer实战[上]
    PyQT5速成教程-3 布局管理
    PyQT5速成教程-1 简介与环境搭建
    Anaconda 使用指南
    webpack的loader的原理和实现
  • 原文地址:https://www.cnblogs.com/learnC/p/6040536.html
Copyright © 2011-2022 走看看