用户管理系统(User Management System)长期以来一直是开发者们热衷的经典练手项目。然而,要真正打造一个功能完备、逻辑严谨、具备上线潜力的系统,涉及的技术要点其实相当广泛:文件持久化存储、多角色权限控制、交互式输入校验、数据一致性维护……任何一个环节考虑不周,后期都可能需要耗费数倍精力来修复漏洞。下面这份完整的 Python 用户管理系统代码,恰恰将这些关键环节都一一落地实现——从用户注册登录,到管理员的增删改查操作,再到文件拷贝等附加功能,全部整合在一个脚本中形成闭环。无论是 Python 初学者还是想夯实全栈开发能力的开发者,都值得深入拆解分析。

- 大作业 用户管理系统
pythonimport os
DATA_FILE = "user_info.txt"
login_dict = {"username": None, "role": None}
# ------------------------ 文件操作 ------------------------
def get_all_users():
"""读取文件,返回 {username: user_dict}"""
user_data = {}
if not os.path.exists(DATA_FILE):
return user_data
try:
with open(DATA_FILE, "r", encoding="utf-8") as fp:
for line in fp:
username, password, age, role, hobby_str = line.strip().split("|")
hobby = [h for h in hobby_str.split(", ") if h]
user_data[username] = {
"username": username,
"password": password,
"age": int(age),
"hobby": hobby,
"role": role,
}
except Exception as e:
print(f"读取文件失败: {e}")
return user_data
def sa ve_all_users(user_data):
"""将用户字典写回文件"""
lines = []
for info in user_data.values():
hobby = ", ".join(info["hobby"])
line = f"{info['username']}|{info['password']}|{info['age']}|{info['role']}|{hobby}n"
lines.append(line)
with open(DATA_FILE, "w", encoding="utf-8") as fp:
fp.writelines(lines)
# ------------------------ 辅助函数 ------------------------
def require_login():
"""检查是否已登录,未登录返回错误消息"""
if not login_dict["username"]:
return False, "请先登录!"
return True, ""
def require_admin():
"""检查是否为管理员,未登录或非管理员返回错误"""
ok, msg = require_login()
if not ok:
return False, msg
if login_dict["role"] != "admin":
return False, f"用户 {login_dict['username']} 没有权限执行此操作!"
return True, ""
def select_user_by_id(user_data):
"""显示所有用户的编号列表,返回用户选择的用户名,若取消则返回 None"""
if not user_data:
print("暂无任何用户数据!")
return None
id_map = {}
for idx, username in enumerate(user_data.keys(), start=1):
idx_str = str(idx).zfill(3)
print(f"ID: {idx_str}|用户名: {username}")
id_map[idx_str] = username
while True:
choice = input("请输入用户ID (直接回车取消): ").strip()
if not choice:
return None
if choice in id_map:
return id_map[choice]
print("无效ID,请重新输入。")
def input_hobby():
"""交互式输入爱好列表"""
hobby_list = []
print("请输入爱好(输入 q 结束):")
while True:
h = input("爱好: ").strip()
if h == "q":
break
if not h:
continue
if h in hobby_list:
print("爱好重复,请重新输入。")
else:
hobby_list.append(h)
print(f"已添加: {h},当前爱好: {', '.join(hobby_list)}")
return hobby_list
def input_age():
"""输入年龄,返回 (is_valid, age_or_error)"""
age_str = input("请输入年龄: ").strip()
if not age_str.isdigit():
return False, "年龄必须是数字!"
age = int(age_str)
if age < 0 or age > 150:
return False, "年龄超出正常范围(0~150)!"
return True, age
# ------------------------ 核心业务函数 ------------------------
def register():
print("n--- 用户注册 ---")
username = input("用户名: ").strip()
password = input("密码: ").strip()
ok, age_or_msg = input_age()
if not ok:
return False, age_or_msg
age = age_or_msg
hobby = input_hobby()
role = "admin" if (username == "dream" and password == "521") else "user"
users = get_all_users()
if username in users:
return False, f"用户名 {username} 已存在,请直接登录!"
users[username] = {
"username": username,
"password": password,
"age": age,
"hobby": hobby,
"role": role,
}
sa ve_all_users(users)
return True, f"用户 {username} 注册成功!"
def login():
print("n--- 用户登录 ---")
username = input("用户名: ").strip()
password = input("密码: ").strip()
users = get_all_users()
user = users.get(username)
if not user:
return False, f"用户 {username} 不存在,请先注册!"
if user["password"] != password:
return False, "用户名或密码错误!"
login_dict["username"] = username
login_dict["role"] = user["role"]
return True, f"登录成功!欢迎 {username}({'管理员' if user['role'] == 'admin' else '普通用户'})"
def view_self():
"""查看自己的信息"""
ok, msg = require_login()
if not ok:
return False, msg
users = get_all_users()
user = users.get(login_dict["username"])
if not user:
return False, "用户信息异常,请重新登录。"
role_cn = "管理员" if user["role"] == "admin" else "普通用户"
print(f"n========== 我的信息 ==========")
print(f"用户名: {user['username']}")
print(f"密码: {user['password']}")
print(f"年龄: {user['age']}")
print(f"爱好: {', '.join(user['hobby'])}")
print(f"身份: {role_cn}")
print("==============================")
return True, ""
def view_all_users():
"""管理员查看所有员工信息"""
ok, msg = require_admin()
if not ok:
return False, msg
users = get_all_users()
if not users:
return False, "暂无任何用户数据。"
print("n========== 所有员工信息 ==========")
for username, info in users.items():
role_cn = "管理员" if info["role"] == "admin" else "普通用户"
print(f"用户名: {username} | 年龄: {info['age']} | 爱好: {', '.join(info['hobby'])} | 身份: {role_cn}")
print("==================================")
return True, ""
def view_one_user():
"""查看指定用户信息:- 普通用户只能查看自己- 管理员可以选择查看任意用户"""
ok, msg = require_login()
if not ok:
return False, msg
users = get_all_users()
current_role = login_dict["role"]
current_name = login_dict["username"]
if current_role == "user":
target_name = current_name
else:
print("n--- 可查看的用户列表 ---")
target_name = select_user_by_id(users)
if not target_name:
return False, "未选择任何用户。"
user = users.get(target_name)
if not user:
return False, f"用户 {target_name} 不存在。"
role_cn = "管理员" if user["role"] == "admin" else "普通用户"
print(f"n========== 用户信息 ==========")
print(f"用户名: {user['username']}")
print(f"年龄: {user['age']}")
print(f"爱好: {', '.join(user['hobby'])}")
print(f"身份: {role_cn}")
print("==============================")
return True, ""
def update_user():
"""修改用户信息:- 普通用户只能修改自己的信息- 管理员可以修改任意用户的信息- 支持修改用户名、密码、年龄、爱好,留空表示不修改"""
ok, msg = require_login()
if not ok:
return False, msg
users = get_all_users()
current_role = login_dict["role"]
current_name = login_dict["username"]
if current_role == "user":
target_name = current_name
else:
print("n--- 可修改的用户列表 ---")
target_name = select_user_by_id(users)
if not target_name:
return False, "未选择任何用户。"
old_info = users.get(target_name)
if not old_info:
return False, f"用户 {target_name} 不存在。"
print(f"n正在修改用户: {target_name}(留空表示不修改)")
new_username = input(f"新用户名(原: {target_name}): ").strip()
new_password = input(f"新密码(原: {old_info['password']}): ").strip()
age_input = input(f"新年龄(原: {old_info['age']}): ").strip()
print("新爱好(留空则保留原爱好,输入 q 结束爱好输入):")
modify_hobby = input("是否修改爱好?(y/n): ").strip().lower()
if modify_hobby == "y":
new_hobby = input_hobby()
else:
new_hobby = old_info["hobby"]
final_username = new_username if new_username else target_name
if final_username != target_name and final_username in users:
return False, f"用户名 {final_username} 已存在,修改失败。"
final_password = new_password if new_password else old_info["password"]
if age_input:
ok, age_val = input_age()
if not ok:
return False, age_val
final_age = age_val
else:
final_age = old_info["age"]
del users[target_name]
users[final_username] = {
"username": final_username,
"password": final_password,
"age": final_age,
"hobby": new_hobby,
"role": old_info["role"],
}
sa ve_all_users(users)
if target_name == current_name:
login_dict["username"] = final_username
return True, f"用户 {target_name} 信息修改成功!" + (f" 用户名已变更为 {final_username}" if final_username != target_name else "")
def delete_user():
"""删除指定用户(仅限管理员)"""
ok, msg = require_admin()
if not ok:
return False, msg
users = get_all_users()
if not users:
return False, "没有可删除的用户。"
print("n--- 可删除的用户列表 ---")
target_name = select_user_by_id(users)
if not target_name:
return False, "未选择任何用户。"
confirm = input(f"确认删除用户 {target_name} 吗?(y/n): ").strip().lower()
if confirm != "y":
return False, "取消删除。"
del users[target_name]
sa ve_all_users(users)
if target_name == login_dict["username"]:
login_dict.clear()
return True, f"用户 {target_name} 已删除。您已被强制登出。"
return True, f"用户 {target_name} 删除成功!"
def delete_all_users():
"""清空所有用户数据(仅限管理员)"""
ok, msg = require_admin()
if not ok:
return False, msg
confirm = input("警告:此操作将删除所有用户数据,确认吗?(y/n): ").strip().lower()
if confirm != "y":
return False, "取消删除所有用户。"
sa ve_all_users({})
login_dict.clear()
return True, "所有用户数据已清空。您已被强制登出。"
def add_employee():
"""管理员添加新员工"""
ok, msg = require_admin()
if not ok:
return False, msg
print("n--- 添加新员工 ---")
username = input("用户名: ").strip()
if not username:
return False, "用户名不能为空。"
password = input("密码: ").strip()
if not password:
return False, "密码不能为空。"
ok, age_or_msg = input_age()
if not ok:
return False, age_or_msg
age = age_or_msg
hobby = input_hobby()
role_choice = input("身份 (1.管理员 0.普通用户): ").strip()
if role_choice == "1":
role = "admin"
elif role_choice == "0":
role = "user"
else:
return False, "无效身份选项,请输入 1 或 0。"
users = get_all_users()
if username in users:
return False, f"用户名 {username} 已存在,无法添加。"
users[username] = {
"username": username,
"password": password,
"age": age,
"hobby": hobby,
"role": role,
}
sa ve_all_users(users)
return True, f"员工 {username} 添加成功!"
def copy_file():
"""文件拷贝(仅限管理员)"""
ok, msg = require_admin()
if not ok:
return False, msg
src = input("请输入源文件路径: ").strip()
if not os.path.exists(src):
return False, "源文件不存在。"
dst_dir = input("请输入目标目录: ").strip()
if not os.path.exists(dst_dir):
return False, "目标目录不存在。"
new_name = input("新文件名(留空则使用原文件名): ").strip()
if not new_name:
new_name = os.path.basename(src)
dst = os.path.join(dst_dir, new_name)
try:
with open(src, "rb") as f_src:
with open(dst, "wb") as f_dst:
f_dst.write(f_src.read())
return True, f"文件已从 {src} 复制到 {dst}"
except Exception as e:
return False, f"拷贝失败: {e}"
# ------------------------ 主菜单 ------------------------
def show_menu():
print("""
***************** 员工管理系统 *****************
1. 注册
2. 登录
3. 查看我的信息
4. 查看所有员工信息(管理员)
5. 查看指定用户信息
6. 修改用户信息
7. 删除用户(管理员)
8. 删除所有用户(管理员)
9. 添加员工(管理员)
10. 文件拷贝(管理员)
11. 退出
***************** 员工管理系统 *****************
""")
def main():
func_map = {
"1": register,
"2": login,
"3": view_self,
"4": view_all_users,
"5": view_one_user,
"6": update_user,
"7": delete_user,
"8": delete_all_users,
"9": add_employee,
"10": copy_file,
"11": "exit",
}
while True:
show_menu()
choice = input("请输入功能编号: ").strip()
if choice not in func_map:
print("无效编号,请重新选择。")
continue
func = func_map[choice]
if func == "exit":
print("感谢使用,再见!")
break
ok, msg = func()
if msg:
print(msg if ok else f"错误:{msg}")
print("-" * 50)
if __name__ == "__main__":
main()
