阅读这篇文章之前需要了解 python实现用户管理 (io版)
需求如下:
用户管理系统
功能如下:
1 添加用户
2 查询用户
3 删除
4 修改
5 模糊查询
6 查询全部
7 退出
要求
1 添加用户到磁盘的指定位置,文件名以用户的id来命名
文件的格式如 : 22.txt
名字:张三
编号:22
密码:男
2 UserBean 属性有 name ,pw, id
3 查询根据id来查询
4 不用序列化和反序列化实现
1 UserBean(实体类)
# 定义用户类
import os
class user():
def __init__(self,id,name,pw):
self.id = id
self.name = name
self.pw = pw
def showinfo(self):
print("id:",self.id)
print("name:",self.name)
print("pw:",self.pw)
2 usermanger (用户管理类)
# 用户管理类
class usermanger():
# 用户保存的位置
USER_SAVE_PATH = "d:/users/"
def __init__(self):
# 如果用户保存目录不存在,则创建
if os.path.exists(usermanger.USER_SAVE_PATH) is False:
os.makedirs(usermanger.USER_SAVE_PATH)
def add_user(self, u):
"""
添加用户
:param u: 需要添加的用户
:return:
"""
# d:/users/1.txt
filename = usermanger.USER_SAVE_PATH+str(u.id)+".txt" #
with open(filename,"w") as f:
f.write("编号:"+str(u.id)+"\n")
f.write("名字:" + u.name+"\n")
f.write("密码:" + u.pw)
return True
def query_user_by_id(self, id):
"""
根据id来查询用户
:param id:
:return:u 用户对象
"""
# 判断文件是否存在,存在就直接读取
filename = usermanger.USER_SAVE_PATH + str(id) + ".txt" #
if os.path.isfile(filename):
with open(filename) as f:
# str -> user
id = f.readline()[3:].replace("\n","")
name = f.readline()[3:].replace("\n","")
pw = f.readline()[3:]
return user(id,name,pw)
else:
return None
def delete_user_by_id(self, id):
"""
根据id来删除用户
:param id:
:return:
"""
filename = usermanger.USER_SAVE_PATH + str(id) + ".txt"
if os.path.isfile(filename):
os.remove(filename)
return True
return False
def update_user_by_id(self,u):
"""
根据id来修改
:param u:
:return:
"""
return self.add_user(u)
def query_users_by_name(self,name):
"""
根据名字来查询
:param name:
:return:[ users ]
"""
return [u for u in self.query_all() if u.name.count(name)>0]
def query_all(self):
"""
查询全部
:return:
"""
# 1 获取d:/users/所有的文件名 ['2.txt', '3.txt', '4.txt']
#filenames = os.listdir(usermanger.USER_SAVE_PATH)
# 2 然后分别把所有全名文件名(1.txt)提出出文件名(1) ['2', '3', '4']
#ids = [os.path.splitext(f)[0] for f in filenames]
# 3 根据文件名(1)来获取对应的对象(user)
#return [self.query_user_by_id(i) for i in ids]
return [self.query_user_by_id(os.path.splitext(f)[0]) for f in )]
3 menu (负责输入和输出)
# 定义菜单 负责输入和输出
class menu():
def __init__(self):
self.usermanger = usermanger()# 创建对象
def showmenu(self):
print("""
欢迎来到用户管理系统
1 添加用户
2 删除用户
3 修改用户
4 查询用户(根据id)
5 查询用户(根据名字模糊查询)
6 查询全部
7 退出
""")
type = int(input("请选择:"))
while type >= 1 and type <= 7:
if type == 1: # 添加
self.add_user_menu()
elif type == 2: # 删除
self.delete_user_menu()
elif type == 3: # 修改用户
self.update_user_menu()
elif type == 4: # 查询 (id)
self.query_user_by_id_menu()
elif type == 5: # 根据用户的名字来查询(模糊)
self.query_users_by_name_menu()
elif type == 6: # 查询全部
self.query_all_menu()
elif type == 7: # 退出
break
type = int(input("请选择:"))
def add_user_menu(self):
print("------添加用户------")
id = int(input("请输入id:"))
name = input("请输入名字:")
pw = input("请输入密码:")
u = user(id,name,pw)
if self.usermanger.add_user(u):
print("添加成功!")
else:
print("添加失败!")
def query_all_menu(self):
print("------查询全部----")
us = self.usermanger.query_all()
if len(us)>0:
for u in us:
u.showinfo()
print("-"*15)
else:
print("没有用户!")
def query_users_by_name_menu(self):
print("-----根据名字来查询-----")
name = input("请输入名字:")
us = self.usermanger.query_users_by_name(name)
if len(us)>0:
for u in us:
u.showinfo()
print("-"*15)
else:
print("没有用户!")
def query_user_by_id_menu(self):
print("-----根据id来查询------")
id = int(input("请输入id:"))
u = self.usermanger.query_user_by_id(id)
if u is not None:
u.showinfo()
else:
print("没有查询到!")
def update_user_menu(self):
print("-------修改用户-------")
id = int(input("请输入id:"))
u = self.usermanger.query_user_by_id(id)
if u is not None:
name= input("请输入名字:")
pw = input("请输入密码:")
if self.usermanger.update_user_by_id(user(id,name,pw)):
print("修改成功!")
else:
print("没有该用户!")
else:
print("修改失败!")
def delete_user_menu(self):
print("-------删除用户-----")
id = int(input("请输入id:"))
if self.usermanger.delete_user_by_id(id):
print("删除成功!")
else:
print("删除失败!")
m = menu()
m.showmenu()