GUI编程2. 用户登录窗口,主窗口界面如图1、图2所示,编程实现用户注册和登录功能, 1)用户注册功能要求如下:(1)输入时要进行用户名、密码校验,规则为用户名不为空且必须包含数字和字母,即以数字或者字母开头,后面可以带数字、字母或者_;用户密码不为空且仅包含数字和字母。(2)当用户名不重复时,用户名、密码信息保存在当前文件夹下的文件user.txt中,并弹出消息窗口提示“注册成功!”;否则,弹出消息窗口提示“该用户名已存在,请重新输入”。 2)用户登录功能要求如下:(1)输入时要进行用户名、密码校验,当用户名、密码与文件user.txt中某一组用户账号(即用户名、密码)对应时,并弹出消息窗口提示“登录成功!”,关闭该消息窗口后再弹出子窗口;否则,弹出消息窗口提示“用户名或者密码错误”。
时间: 2024-03-17 18:44:29 浏览: 16
这是一个GUI编程的问题,需要用到相应的GUI框架和工具包进行实现。以下是使用Python和Tkinter框架实现的示例代码,供参考:
```python
import re
import tkinter as tk
from tkinter import messagebox
def validate_username(username):
pattern = r'^[a-zA-Z0-9][a-zA-Z0-9_]*$'
return bool(re.match(pattern, username))
def validate_password(password):
pattern = r'^[a-zA-Z0-9]+$'
return bool(re.match(pattern, password))
def register():
def on_register():
username = username_entry.get()
password = password_entry.get()
if not validate_username(username):
messagebox.showerror('错误', '用户名不符合规则,请重新输入')
return
if not validate_password(password):
messagebox.showerror('错误', '密码不符合规则,请重新输入')
return
with open('user.txt', 'r') as f:
users = f.readlines()
for user in users:
if user.strip().startswith(username + ','):
messagebox.showerror('错误', '该用户名已存在,请重新输入')
return
with open('user.txt', 'a') as f:
f.write(username + ',' + password + '\n')
messagebox.showinfo('提示', '注册成功!')
register_window.destroy()
register_window = tk.Toplevel(root)
register_window.title('用户注册')
register_window.geometry('300x200')
username_label = tk.Label(register_window, text='用户名:')
username_label.pack()
username_entry = tk.Entry(register_window)
username_entry.pack()
password_label = tk.Label(register_window, text='密码:')
password_label.pack()
password_entry = tk.Entry(register_window, show='*')
password_entry.pack()
register_button = tk.Button(register_window, text='注册', command=on_register)
register_button.pack()
def login():
def on_login():
username = username_entry.get()
password = password_entry.get()
with open('user.txt', 'r') as f:
users = f.readlines()
for user in users:
parts = user.strip().split(',')
if parts[0] == username and parts[1] == password:
messagebox.showinfo('提示', '登录成功!')
# TODO: 打开子窗口
login_window.destroy()
return
messagebox.showerror('错误', '用户名或者密码错误')
login_window = tk.Toplevel(root)
login_window.title('用户登录')
login_window.geometry('300x200')
username_label = tk.Label(login_window, text='用户名:')
username_label.pack()
username_entry = tk.Entry(login_window)
username_entry.pack()
password_label = tk.Label(login_window, text='密码:')
password_label.pack()
password_entry = tk.Entry(login_window, show='*')
password_entry.pack()
login_button = tk.Button(login_window, text='登录', command=on_login)
login_button.pack()
root = tk.Tk()
root.title('用户登录窗口')
root.geometry('400x300')
register_button = tk.Button(root, text='用户注册', command=register)
register_button.pack()
login_button = tk.Button(root, text='用户登录', command=login)
login_button.pack()
root.mainloop()
```
在这个示例代码中,我们首先定义了两个函数 `validate_username` 和 `validate_password`,功能与之前的示例代码相同。然后定义了两个函数 `register` 和 `login`,分别用于处理用户注册和登录。在 `register` 函数中,我们创建了一个新的窗口 `register_window`,其中包含了用户名和密码的输入框以及一个“注册”按钮。当用户点击“注册”按钮时,我们首先获取输入的用户名和密码,然后对其进行校验。如果校验通过,我们打开文件 `user.txt`,检查当前输入的用户名是否已经存在。如果不存在,则将用户名和密码写入文件中,完成注册。否则,弹出错误提示窗口。在 `login` 函数中,我们创建了一个新的窗口 `login_window`,其中包含了用户名和密码的输入框以及一个“登录”按钮。当用户点击“登录”按钮时,我们同样打开文件 `user.txt`,检查当前输入的用户名和密码是否与某一组用户账号匹配。如果匹配成功,则提示登录成功,并打开子窗口(此处代码省略)。如果匹配失败,则弹出错误提示窗口。最后,在主窗口中创建了两个按钮“用户注册”和“用户登录”,并分别绑定了相应的函数。当用户点击这两个按钮时,会打开对应的窗口。整个程序的运行通过 `root.mainloop()` 实现。