Python实现登陆界面+生日界面

news2024/11/18 11:33:16

文章目录

  • 1. 需求分析
    • 1.1 功能分析
    • 1.2 性能分析
  • 2. 技术原理
  • 3. 详细设计
    • 3.1 登录界面
    • 3.2 注册界面
    • 3.3 修改密码
    • 3.4 注销账户
    • 3.5 生日界面
  • 4. 功能实现
    • 4.1 登陆界面
    • 4.2 注册界面
    • 4.3 修改密码
    • 4.4 注销账户
    • 4.5 生日界面

1. 需求分析

1.1 功能分析

① 登录界面实现用户的登录、注册、修改密码以及注销用户的功能,登录信息包括用户的账号以及密码,登录成功后跳转到生日界面。

② 生日界面实现个人生日信息的录入、查询以及删除功能,录入信息包括个人姓名以及生日日期。

1.2 性能分析

① 系统易操作性

所开发的系统就做到操作简单,尽量使系统操作不受用户对电脑知识水平的限制。

② 系统具有可维护性

由于系统涉及的信息比较广,TXT中的数据需要定期修改,系统可利用的空间及性能也随之下降,为了使系统更好地运转。

2. 技术原理

本项目主要运用了 python 的函数、文件、tkinter 界面设计以及 pickle 模块等技术原理,其中:

① 生日界面的具体技术原理包括Tkinter GUI编程、pickle序列化、文件读写等。这些技术可以帮助开发者快速地构建出实用的桌面应用程序。

② 登录界面的具体技术原理包括pickle模块进行文件操作和序列化、Tkinter GUI编程实现用户界面、条件控制语句实现逻辑判断。

3. 详细设计

3.1 登录界面

① 程序设计

root=tk.Tk()
root.title('登录账户')
screenheight=root.winfo_screenheight()
screenwidth=root.winfo_screenwidth()
height=300
width=500
x=(screenwidth-width)//2
y=(screenheight-height)//2
root.geometry('%dx%d+%d+%d'%(width,height,x,y))
tk.Label(root,text='欢迎光临我的世界',font=('宋体',20),bg='white',fg='blue',width=20,height=2).pack()
tk.Label(root,text='账户',font=('宋体',12)).place(x=140,y=80)
tk.Label(root,text='密码',font=('宋体',12)).place(x=140,y=120)
name=tk.StringVar()
entry_name=tk.Entry(root,textvariable=name,font=('宋体',12),show=None)
entry_name.place(x=180,y=80)
key=tk.StringVar()
entry_key=tk.Entry(root,textvariable=key,font=('宋体',12),show=None)
entry_key.place(x=180,y=120)
login=tk.Button(root,text='登录账户',font=('宋体',12),bg='blue',fg='white',width=10,height=1,command=user_login)
login.place(x=150,y=180)
sign=tk.Button(root,text='注册账户',font=('宋体',12),bg='red',fg='white',width=10,height=1,command=user_sign)
sign.place(x=250,y=180)
change=tk.Button(root,text='修改密码',font=('宋体',12),bg='green',fg='white',width=10,height=1,command=user_change)
change.place(x=150,y=220)
deluser=tk.Button(root,text='注销账户',font=('宋体',12),bg='black',fg='white',width=10,height=1,command=user_del)
deluser.place(x=250,y=220)
root.mainloop()

② 程序分析

这段代码使用Tkinter库创建了一个用户登录界面,提供了登录、注册、修改密码、注销账户等操作。界面包含了标签、输入框、按钮等多种控件。通过使用Tkinter库提供的函数和方法,可以定位、布局、编辑和响应用户界面中的各种控件,实现用户交互功能。具体技术包括Tkinter GUI编程、事件响应机制、条件控制语句等。

3.2 注册界面

① 程序设计

def user_sign():
    try:
        with open('d:\\user.pickle','rb') as user_file:
            user_info=pickle.load(user_file)
    except FileNotFoundError:
        with open('d:\\user.pickle','wb') as user_file:
            user_info={'admin':'12345'}
            pickle.dump(user_info,user_file)
            user_file.close()
    sign_root=tk.Toplevel(root)
    sign_root.title('注册账户')
    screenheight=sign_root.winfo_screenheight()
    screenwidth=sign_root.winfo_screenwidth()
    h=220
    w=300
    x=(screenwidth-w)//2
    y=(screenheight-h)//2
    sign_root.geometry("%dx%d+%d+%d"%(w,h,x,y))
    new_name=tk.StringVar()
    tk.Label(sign_root,text='欢迎来到注册系统',font=('宋体',20),bg='white',fg='red',width=20,height=1).place(x=7,y=10)
    tk.Label(sign_root,text='新的账户',font=('宋体',12)).place(x=20,y=60)
    entry_name=tk.Entry(sign_root,textvariable=new_name,font=('宋体',12),show=None).place(x=100,y=60)
    new_key=tk.StringVar()
    tk.Label(sign_root,text='新的密码',font=('宋体',12)).place(x=20,y=100)
    entry_key=tk.Entry(sign_root,textvariable=new_key,font=('宋体',12),show='*').place(x=100,y=100)
    same_key=tk.StringVar()
    tk.Label(sign_root,text='请确认密码',font=('宋体',12)).place(x=10,y=140)
    entry_keys=tk.Entry(sign_root,textvariable=same_key,font=('宋体',12),show='*').place(x=100,y=140)
    def sign_check():
        name=new_name.get()
        key1=new_key.get()
        key2=same_key.get()
        with open('d:\\user.pickle','rb') as user_file:
            user_info=pickle.load(user_file)
            user_file.close()
        if name in user_info:
            tkinter.messagebox.showerror('提示','该账户已存在!')
        elif key1!=key2:
            tkinter.messagebox.showerror('提示','两次输入密码不一致,请重新输入!')
        else:
            user_info[name]=key1
            with open(r'd:\\user.pickle','wb') as user_file:
                pickle.dump(user_info,user_file)
                user_file.close()
            with open(r'd:\\%s.pickle'%(name),'wb') as name_file:
                dicts={}
                pickle.dump(dicts,name_file)
                name_file.close()
            tkinter.messagebox.showinfo('提示','注册成功!')
            sign_root.destroy()
tk.Button(sign_root,text='注册',font=('宋体',12),bg='red',fg='white',width=5,height=1,command=sign_check).place(x=130,y=180)

② 程序分析

这段代码实现了用户注册的功能,使用了pickle模块读取和写入本地文件,并通过Tkinter创建了一个子窗口用来输入用户名和密码。当用户输入的用户名不在本地文件中时,程序会把新的用户名和密码添加到本地文件中。当用户输入的用户名已经存在时,程序会提示用户该账户已存在。当用户输入的密码不一致时,程序会提示用户两次输入密码不一致。具体技术原理包括pickle模块的读写处理、Tkinter库的子窗口创建及布局、按钮事件响应语句等。

3.3 修改密码

① 程序设计

def user_change():
    try:
        with open('d:\\user.pickle','rb') as user_file:
            user_info=pickle.load(user_file)
    except FileNotFoundError:
        with open('d:\\user.pickle','wb') as user_file:
            user_info={'admin':'12345'}
            pickle.dump(user_info,user_file)
            user_file.close()
    change_root=tk.Toplevel(root)
    old_name=tk.StringVar()
    old_key=tk.StringVar()
    new_key=tk.StringVar()
    same_key=tk.StringVar()
    change_root.title('修改密码')
    screenheight=change_root.winfo_screenheight()
    screenwidth=change_root.winfo_screenwidth()
    h=220
    w=300
    x=(screenwidth-w)//2
    y=(screenheight-h)//2
    change_root.geometry("%dx%d+%d+%d"%(w,h,x,y))
    tk.Label(change_root,text='欢迎来到修改密码系统',font=('宋体',20),bg='white',fg='green',width=20,height=1).place(x=5,y=10)
    tk.Label(change_root,text='请输入你的账号',font=('宋体',12),width=15,height=1).place(x=5,y=60)
    tk.Entry(change_root,textvariable=old_name,show=None).place(x=130,y=60)
    tk.Label(change_root,text='请输入原始密码',font=('宋体',12),width=15,height=1).place(x=5,y=90)
    tk.Entry(change_root,textvariable=old_key,show=None).place(x=130,y=90)
    tk.Label(change_root,text='请输入修改密码',font=('宋体',12),width=15,height=1).place(x=5,y=120)
    tk.Entry(change_root,textvariable=new_key,show='*').place(x=130,y=120)
    tk.Label(change_root,text='请确认你的密码',font=('宋体',12),width=15,height=1).place(x=5,y=150)
    tk.Entry(change_root,textvariable=same_key,show='*').place(x=130,y=150)
    def change_check():
        name=old_name.get()
        key1=old_key.get()
        key2=new_key.get()
        key3=same_key.get()
        with open("d:\\user.pickle",'rb') as user_file:
            user_info=pickle.load(user_file)
            user_file.close()
        if name in user_info:
            if key1==user_info[name]:
                if key2==key3:
                    user_info[name]=key2
                    with open('d:\\user.pickle','wb') as user_file:
                        pickle.dump(user_info,user_file)
                        user_file.close()
                    tkinter.messagebox.showinfo('提示',"修改成功!")
                    change_root.destroy()
                else:
                    tkinter.messagebox.showerror('提示','两次密码不一致,请重新输入!')
            else:
                tkinter.messagebox.showerror('提示','密码错误,请重新输入!')
        else:
            exist=tkinter.messagebox.askyesno('提示','该账户不存在,是否立即注册账户?')
            if exist:
                user_sign()
    tk.Button(change_root,text='修改',font=('宋体',12),bg='green',fg='white',command=change_check).place(x=130,y=180)

② 程序分析

这段代码实现了用户修改密码的功能,通过创建Tkinter库的子窗口实现用户输入信息,并使用pickle模块读取和写入本地文件进行存储。当用户输入的用户名和密码都正确时,程序会将新的密码替换原有的密码保存在本地文件中。当用户输入的用户名不存在时,程序会提示用户是否立即注册该账户。当用户输入的密码不一致时,程序会提示用户两次输入密码不一致。具体技术原理包括pickle模块的读写处理、Tkinter库的子窗口界面创建、条件判断语句等。

3.4 注销账户

① 程序设计

def user_del():
    try:
        with open('d:\\user.pickle','rb') as user_file:
            user_info=pickle.load(user_file)
    except FileNotFoundError:
        with open('d:\\user.pickle','wb') as user_file:
            user_info={'admin':'12345'}
            pickle.dump(user_info,user_file)
            user_file.close()
    old_name=tk.StringVar()
    old_key=tk.StringVar()
    same_key=tk.StringVar()
    del_root=tk.Toplevel(root)
    del_root.title('注销账户')
    screenheight=del_root.winfo_screenheight()
    screenwidth=del_root.winfo_screenwidth()
    h=220
    w=300
    x=(screenwidth-w)//2
    y=(screenheight-h)//2
    del_root.geometry("%dx%d+%d+%d"%(w,h,x,y))
    tk.Label(del_root,text='欢迎来到注销账户系统',font=('宋体',20),bg='white',fg='black',width=20,height=1).place(x=5,y=10)
    tk.Label(del_root,text='请输入你的账号',font=('宋体',12),width=15,height=1).place(x=5,y=60)
    tk.Entry(del_root,textvariable=old_name,show=None).place(x=130,y=60)
    tk.Label(del_root,text='请输入原始密码',font=('宋体',12),width=15,height=1).place(x=5,y=100)
    tk.Entry(del_root,textvariable=old_key,show=None).place(x=130,y=100)
    tk.Label(del_root,text='请确认你的密码',font=('宋体',12),width=15,height=1).place(x=5,y=140)
    tk.Entry(del_root,textvariable=same_key,show='*').place(x=130,y=140)
    def del_check():
        name=old_name.get()
        key1=old_key.get()
        key2=same_key.get()
        with open('d:\\user.pickle','rb') as user_file:
            user_info=pickle.load(user_file)
            user_file.close()
        if name in user_info:
            if key1==key2:
                if key1==user_info[name]:
                    user_info.pop(name)
                    with open('d:\\user.pickle','wb') as user_file:
                        pickle.dump(user_info,user_file)
                        user_file.close()
                    tkinter.messagebox.showinfo('提示','注销成功!')
                else:
                    tkinter.messagebox.showerror('提示','密码错误!')
            else:
                tkinter.messagebox.showerror('提示','两次密码不一致!')
        else:
            exist=tkinter.messagebox.askyesno('提示','该账户不存在,是否立即注册?')
            if exist:
                user_sign()
    tk.Button(del_root,text='注销',font=('宋体',12),bg='black',fg='white',command=del_check).place(x=130,y=180)

② 程序分析

这段代码实现了用户注销账户的功能,同样使用了Tkinter库的子窗口,通过pickle模块对本地文件进行读写存储。当用户输入的用户名和密码都正确时,程序会将该账户从本地文件中删除。当用户输入的用户名不存在时,程序会提示用户是否立即注册该账户。当用户输入的密码不一致时,程序会提示用户两次输入密码不一致的错误信息。具体技术原理包括pickle模块的读写处理、Tkinter库的子窗口界面创建、条件判断语句等。

3.5 生日界面

① 程序设计

def birth():
    birthday=tk.Toplevel(root)
    birthday.title('欢迎光临')
    screenheight=root.winfo_screenheight()
    screenwidth=root.winfo_screenwidth()
    height=300
    width=500
    x=(screenwidth-width)//2
    y=(screenheight-height)//2
    birthday.geometry('%dx%d+%d+%d'%(width,height,x,y))
    var1=tk.StringVar()
    var2=tk.StringVar()
    var3=tk.StringVar()
    var4=tk.StringVar()
    tk.Label(birthday,text='欢迎%s进入系统'%(user_name),font=('宋体',12),bg='blue',fg='white',width=20,height=3).place(x=160,y=20)
    tk.Label(birthday,text='姓名',font=('宋体',12),bg='white',fg='black').place(x=20,y=100)
    tk.Label(birthday,text='生日',font=('宋体',12),bg='white',fg='black').place(x=240,y=100)
    tk.Label(birthday,text='姓名',font=('宋体',12),bg='white',fg='black').place(x=20,y=170)
    tk.Label(birthday,text='生日',font=('宋体',12),bg='white',fg='black').place(x=240,y=170)
    tk.Entry(birthday,textvariable=var1).place(x=80,y=100)
    tk.Entry(birthday,textvariable=var2).place(x=300,y=100)
    tk.Entry(birthday,textvariable=var3).place(x=80,y=170)
    tk.Entry(birthday,textvariable=var4).place(x=150,y=240)
    def write():
        key=var1.get()
        value=var2.get()
        with open('d:\\%s.pickle'%(user_name),'rb') as file:
            dicts=pickle.load(file)
        dicts[key]=value
        with open('d:\\%s.pickle'%(user_name),'wb') as file:
            pickle.dump(dicts,file)
            file.close()
    def read():
        name=var3.get()
        with open('d:\\%s.pickle'%(user_name),'rb') as file:
            dicts=pickle.load(file)
            file.close()
        if name in dicts and dicts[name]!='':
            re=dicts[name]
        else:
            re='ERROR!'
        t.delete(1.0,tk.END)
        t.insert('end',re)
    def delete():
        name=var4.get()
        with open('d:\\%s.pickle'%(user_name),'rb') as file:
            dicts=pickle.load(file)
            file.close()
        if name in dicts:
            del name
            tk.messagebox.showinfo("提示","删除成功!")
        else:
            tk.messagebox.showerror("警告","删除失败!")
            pass
        with open('d:\\%s.pickle'%(user_name),'wb') as file:
            pickle.dump(dicts,file)
            file.close()
    t=tk.Text(birthday,font=('宋体',12),bg='white',fg='black',width=20,height=1)
    t.place(x=290,y=170)
    tk.Button(birthday,text='录入',font=('宋体',12),bg='red',fg='white',command=write).place(x=220,y=130)
    tk.Button(birthday,text='查询',font=('宋体',12),bg='yellow',fg='white',command=read).place(x=220,y=200)
    tk.Button(birthday,text='删除',font=('宋体',12),bg='black',fg='white',command=delete).place(x=300,y=235)
    birthday.mainloop()

② 程序分析

这段代码实现了一个记录用户生日的小功能,通过Tkinter库创建一个子窗口,用户可以输入姓名和生日,并将其保存在本地pickle文件中。程序还提供了查询和删除用户生日的功能。具体技术原理包括Tkinter库的子窗口创建、布局和事件响应,pickle模块的读写处理等。

4. 功能实现

4.1 登陆界面

1

4.2 注册界面

2

4.3 修改密码

3

4.4 注销账户

4

4.5 生日界面

5

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/756578.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

消费者行为分析VR情景模拟演练系统

VR虚拟现实技术是一种先进的技术,利用VR开展消费者行为分析课程是一种创新的教育方式,它可以提高学生的学习兴趣和效果,同时也可以为企业提供更好的人才培训和发展机会。 1.帮助学生更好地理解和应用心理学概念:VR技术可以让学生…

【Vite搭建Vue3项目】如何使用自定义的svg

Vite搭建Vue3项目如何使用自定义的svg 1. 准备一份svg图标集放入到自己想放的目录2. 下载对应的插件并进行配置3. 测试使用 绪论:当用 vite 构建 vue3 项目的时候,咱可以使用 Element-plus 为我们提供的图标,但是它是一个个标签,当…

HTTP1.1 wireshark分析

本地springboot启动一个简单的服务,然后请求测试 tcpdump -i lo0 -nnvv -w tmp.cap tcpdump 本地回环网卡 http1.1 HTTP/1.0 每进行一次通信,都需要经历建立连接、传输数据和断开连接三个阶段。当一个页面引用了较多的外部文件时,这个建立…

两种异步日志方案的介绍

文章目录 一、日志写入逻辑1.1 相关接口函数1.2 写入逻辑 二、log4cpp 日志框架2.1 下载和编译2.2 日志级别2.3 日志格式2.4 日志输出2.5 日志回滚 三、muduo 异步日志库3.1 异步日志机制3.2 双缓冲机制3.3 前端日志写入3.4 后端日志落盘3.5 coredump 查找未落盘的日志3.6 总结…

复习第六课 C语言-排序,初识指针

目录 【1】冒泡排序&#xff08;从小到大&#xff09; 【2】选择排序 【3】二维数组 【4】指针 【5】指针修饰 【6】大小端 【7】初见二级指针 练习&#xff1a; 【1】冒泡排序&#xff08;从小到大&#xff09; #include <stdio.h> //数组哪里的\0?自己和字符串…

论文阅读-2:基于深度学习的大尺度遥感图像建筑物分割研究

一、该网络中采用了上下文信息捕获模块。通过扩大感受野&#xff0c;在保留细节信息的同时&#xff0c;在中心部分进行多尺度特征的融合&#xff0c;缓解了传统算法中细节信息丢失的问题&#xff1b;通过自适应地融合局部语义特征&#xff0c;该网络在空间特征和通道特征之间建…

SSH框架简介篇

文章目录 概述目录结构 strutsSpringHibernate总结 概述 SSH框架&#xff08;Struts Spring Hibernate&#xff09;是一种广泛应用的Java企业级开发框架组合&#xff0c;它将Struts、Spring和Hibernate三个优秀的框架有机地结合在一起&#xff0c;提供了一套完整的解决方案&…

cmake 函数相关

目录 cmake函数和宏基础 demo cmake函数和宏的参数处理 cmake函数和宏的基本使用 demo cmake函数和宏使用变量 demo demo cmake函数和宏需要注意的地方 demo cmake函数和宏的关键字参数 demo 使用第二种形式cmake_parse_arguments() demo 关键字list demo singl…

GDB 调试代码

目录 一、其他调试代码的工具 二、GDB调试 1、调试准备 2、开始调试 3、调试命令 1.运行程序 2.退出gdb 3.传参 4.查看代码 5.设置或删除断点及相关操作 6.继续运行 7.运行中打印某些值及其类型 8.自动的打印某些值和信息及其相关操作 9.单步调试 10.设置变量的…

http-server 的安装与使用

文章目录 问题背景http-server简介安装nodejs安装http-server开启http服务http-server参数 问题背景 打开一个文档默认使用file协议打开&#xff0c;不能发送ajax请求&#xff0c;只能使用http协议才能请求资源&#xff0c;所以此时我们需要在本地建立一个http服务&#xff0c…

基于java的智能停车场管理系统

背景 智能停车场管理系统的主要使用者分为管理员和用户&#xff0c;实现功能包括管理员&#xff1a;个人中心、用户管理、车位信息管理、车位租用管理、车位退租管理、违规举报管理、论坛交流、系统管理&#xff0c;用户&#xff1a;个人中心、车位租用管理、车位退租管理、违…

MySQL每日一练——MySQL多表查询进阶挑战

目录 1、首先创建表 t_dept: t_emp: 2、插入数据 t_dept表&#xff1a; t_tmp表: 3、修改表 4、按条件查找 1、首先创建表 t_dept: CREATE TABLE t_dept (id INT(11) NOT NULL AUTO_INCREMENT,deptName VARCHAR(30) DEFAULT NULL,address VARCHAR(40) DEFAULT NULL,P…

为什么单片机可以直接烧录程序的原因是什么?

单片机&#xff08;Microcontroller&#xff09;可以直接烧录程序的原因主要有以下几点&#xff1a; 集成性&#xff1a;单片机是一种高度集成的芯片&#xff0c;内部包含了处理器核心&#xff08;CPU&#xff09;、存储器&#xff08;如闪存、EEPROM、RAM等&#xff09;、输入…

JavaScript 使用URL跳转传递数组对象数据类型的方法

文章目录 首先了解一下正常传递基本数据类型JavaScript 跳转页面方法JavaScript 路由传递参数JavaScript 路由接收参数传递对象、数组效果&#xff1a; 在前端有的时候会需要用链接进行传递参数&#xff0c;基本数据类型的传递还是比较简单的&#xff0c;但是如果要传递引用数据…

AWS 解决方案架构师「免费考」

周五晚&#xff0c;AWS 推出了的训练营活动&#xff0c;这对于正在准备 Cloud Practitioner 的我来说&#xff0c;简直不要太开心。官方文章原文链接《限定&#xff01;直冲「云」霄训练营开营啦》。 PART-01 训练营简介 看到推送后第一时间点了进去&#xff0c;活动的情况简…

Socket API使用——模拟http协议

Socket API使用——模拟http协议 简单的c/s程序——服务端实例 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.net.ServerSocket; import java.net.Socket; import java.nio.char…

Python np.unique()函数详解

np.unique()函数详解&#xff1a;返回数组的唯一值唯一值默认已进行从小到大的排序 一些重要参数 return_index&#xff1a;bool, optional。如果设置为True,返回数组中唯一值的索引号&#xff1b;否则不返回。 注意&#xff1a;返回的数组和输入的数组的大小不相同&#xf…

第十五章——友元、异常

友元 类并非只能拥有友元函数&#xff0c;也可以将类作为友元。在这种情况下&#xff0c;友元类的所有方法都可以访问原始类的私有成员和保护成员。因此尽管友元被授予从外部访问类的私有部分的权限&#xff0c;但它们并不与面向对象的编程思想相悖&#xff0c;相反提高了共有…

《C++程序设计原理与实践》笔记 第20章 容器和迭代器

本章和下一章将介绍STL&#xff0c;即C标准库的容器和算法部分。关键概念序列和迭代器用于将容器&#xff08;数据&#xff09;和算法&#xff08;处理&#xff09;联系在一起。 20.1 存储和处理数据 首先考虑一个简单的例子&#xff1a;Jack和Jill各自在测量车速&#xff0c…

echarts x轴文字过长 文字换行显示

xAxis: {type: "category",data: [四美休闲娱乐文化场馆, 资讯, 大咖分享],axisLabel: {show: true,fontSize: 10,interval: 0,color: "#CAE8EA",formatter: function (params) {var newParamsName "";var paramsNameNumber params.length;var…