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 = '\n' + 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 + '\n'
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()

 

posted @ 2016-11-07 20:36  LearnerC  阅读(1333)  评论(0编辑  收藏  举报