# 用户注册与登录功能实现


技术难点:密码验证逻辑、文件读写、数据结构存储及GUI交互设计


技术思路分析

  1. GUI设计
    使用 tkinter 创建窗口,包含用户名和密码输入框,通过键盘事件处理进行交互。通过 textvariable 变量保存输入内容,实现交互性。

  2. 密码验证逻辑

    • 验证密码长度(12位以内)
    • 检查至少包含大小写字母和数字
    • 保存密码到文件(密码.txt)
    • 异常处理密码字符不满足条件时提示用户重新输入
  3. 文件读写
    • 使用 open() 函数读取密码文件,实现密码的读取与存储
    • 确保文件路径明确,并记录密码内容
  4. 数据结构
    • 使用 str 类保存用户名和密码
    • 存储密码信息并输出说明

代码实现

import tkinter as tk

def register_user():
    username = entry_username.get()
    password = entry_password.get()

    # 验证密码规则
    if not username or not password:
        messagebox.showerror("错误", "用户名和密码必须填写!")
        return

    if len(password) < 12 or not any(c.isalnum() for c in password):
        messagebox.showerror("错误", "密码必须包含大小写字母和数字!")
        return

    # 保存密码到文件
    with open("password.txt", "w") as f:
        f.write(f"用户名: {username}\n密码: {password}\n")

    messagebox.showinfo("注册成功", "注册成功!用户名:{username},密码:{password}\n\n文件已保存至 password.txt")

def main():
    root = tk.Tk()
    root.title("用户注册")
    root.geometry("300x150")

    label_username = tk.Label(
        root,
        text="用户名:",
        font=("微软雅黑", 14)
    )
    label_username.pack(pady=10)

    entry_username = tk.Entry(
        root,
        font=("微软雅黑", 14),
        width=30,
        textvariable=tk.StringVar()
    )
    entry_username.pack(pady=10)

    label_password = tk.Label(
        root,
        text="密码:",
        font=("微软雅黑", 14)
    )
    label_password.pack(pady=10)

    entry_password = tk.Entry(
        root,
        font=("微软雅黑", 14),
        width=30,
        textvariable=tk.StringVar()
    )
    entry_password.pack(pady=10)

    # 注册按钮
    button_register = tk.Button(
        root,
        text="注册",
        font=("微软雅黑", 14),
        command=register_user
    )
    button_register.pack(pady=5)

    root.mainloop()

if __name__ == "__main__":
    main()

总结

本实现通过 tkinter 创建用户注册与登录界面,包含用户输入框及密码验证逻辑。使用 open() 读取密码文件并存储,确保密码信息的安全性。实现了以下功能:
1. 清晰的用户交互逻辑
2. 完整的密码验证规则
3. 文件读写与数据存储功能
4. 项目独立运行且可运行

项目通过1~3天完成,符合简单编程项目的要求。


发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注