Python登陆系统
前言
#源码见文末公众号哈#

登录系统
一个简单的登录系统包含了登录账户、注册账户、修改密码以及注销账户的操作。
1. 登录账户
登录系统主要需要判断账户是否存在,不存在就注册一个账户,如果第一次登录系统,我们需要先新建一个文件,保存管理员的账户以及密码,具体代码如下:
def user_login():
user_name=name.get()
user_key=key.get()
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()
if user_name in user_info:
if user_key == user_info[user_name]:
tkinter.messagebox.showinfo(title='提示', message='登录成功!' )
else:
tkinter.messagebox.showerror('提示','密码错误!请重新输入')
else:
exist = tkinter.messagebox.askyesno('提示','该用户名未注册,是否立即注册?')
if exist:
user_sign()
2. 注册账户
注册账户时需要判断该账户是否存在,如果已经存在时提醒用户重新注册即可。
注册时还要输入两次密码,判断是否一致。
具体代码如下:
def user_sign():
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()
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)
3. 修改密码
修改密码时需要先确定需要修改密码的账户是否存在,不存在无法修改密码。
修改密码时如果账户存在,还要判断原密码是否一致以及新输入的两次密码是否一致。
具体源码如下:
def user_change():
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)
4. 注销账户
注销账户时需要先判断账户是否存在,然后输入两次原密码,当输入的两次原密码相同时即可注销
成功。
具体代码如下:
def user_del():
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)
相关文章:
Python登陆系统
前言 #源码见文末公众号哈# 登录系统 一个简单的登录系统包含了登录账户、注册账户、修改密码以及注销账户的操作。 1. 登录账户 登录系统主要需要判断账户是否存在,不存在就注册一个账户,如果第一次登录系统,我们需要先新建一个文件&…...
【新2023】华为OD机试 - 重组字符串(Python)
华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 重组字符串 题目 给定一个非空字符串 S,其被 N 个‘-’分隔成 N+1 的子串,给定正整数 K, 要求除第一个子串外,其余的子串每 K 个字符组成新的子串,并用‘-’分隔。 对于新组成的每一个子串,如果它…...
视频监控流程图
<html> <head> <meta http-equiv"Content-Type" content"text/html; charsetUTF-8"/> <link rel"stylesheet" type"text/css" href"visio.css"/> <title> 视频监控流程图 </title> <…...
普通单双面板的生产工艺流程之图形转移,华秋一文告诉你
衔接上文,继续为朋友们分享普通单双面板的生产工艺流程。 如图,第五道主流程为图形转移。 图形转移的目的为: 利用光化学原理,将图形线路的形状转移到印制板上,再利用化学原理,将图形线路在印制板上制作出…...
1.8 providers
生成providersnest g service <name>providers的注入方式构造函数注入Injectable() export class KeywordService {constructor(private readonly httpService: HttpService,private readonly pro: ProService,) {} }Inject()注入export class KeywordController {Inject…...
如何编写一个基本的 Verilog Module(模块)
1、概述这篇文章主要介绍了 Verilog 在 FPGA 设计中的概念和使用方法。首先讨论使用模块(module)关键字构造 Verilog 设计的方式,以及这与所描述的硬件的关系。这包括对参数、端口(port)和例化(instantiato…...
让乔布斯想要「发动核战争」的 Android,为何成了占有率最高的系统?
2008 年 9 月 23 日,Apple 的创始人和 CEO 史蒂夫乔布斯像往常一样走进了公司,此时距离初代 iPhone 的发布会才过了一年半,这款充满了争议的产品就像一块从山崖滚落的巨岩,一路电光石火的给手机市场的《小石潭记》来了场焚书坑儒。…...
FPGA开发软件(vivado + modelsim)环境搭建(附详细安装步骤+软件下载)
本文详细介绍了vivado软件和modelsim软件的安装,以及vivado中配置modelsim仿真设置,每一步都加文字说明和图片。一、软件安装包下载1、vivado vivado版本很多,目前最新的已更新到vivado2022.2,版本越高,安装包越大&…...
TypeScript 学习之类型
布尔类型 类型: boolean最简单的类型,值只有 true/false let isDone: boolean true;数字类型 类型:number数字都是浮点数,支持二进制、八进制、十进制、十六进制。 let decLiteral: number 16; // 十进制 let hexLiteral: number 0xf0…...
基于MATLAB计算MIMO信道容量(附完整代码与分析)
目录 一.介绍 二. 代码 三. 运行结果及分析 3.1 MIMO信道容量:固定发射天线数为4 3.2 MIMO信道容量:固定接收天线数为4 3.3 AWGN信道与瑞利信道容量 四. 总结 一.介绍 本文章将在MATLAB环境中分析MIMO信道容量,AWGN信道容量…...
CSDN城市开发者联盟、C友会期待你的加入
文章目录🌟 课前小差🌟 chatGPT🌟 CSDN中的持续学习🌟 23年原力计划🌟 C友会、CDC🌟 如何关联本地的开发者?🌟 写在最后🌟 课前小差 哈喽,大家好,…...
【新2023】华为OD机试 - 吃火锅(Python)
华为 OD 清单查看地址:blog.csdn.net/hihell/category_12199275.html 吃火锅 题目 入职后,导师会请你吃饭,你选择了火锅, 火锅里会在不同时间下很多菜, 不同食材要煮不同时间,才能变得刚好合适, 你希望吃到最多的刚好合适的菜, 但是你的手速不够快用m代替手速, 每次…...
类似LeetCode的登录页面(小程序版)
前言每一个项目都会有用户端的注册和登录页面,对于刚入门的小白来说,在UI设计方面不太擅长,就算大致的UI界面设计出来了,但是落实到代码上来实现的时候就很容易卡住。这篇博客主要介绍的就是仿作一个类似LeetCode登录的简约大方页…...
CUDA的统一内存
CUDA的统一内存 文章目录CUDA的统一内存N.1. Unified Memory IntroductionN.1.1. System RequirementsN.1.2. Simplifying GPU ProgrammingN.1.3. Data Migration and CoherencyN.1.4. GPU Memory OversubscriptionN.1.5. Multi-GPUN.1.6. System AllocatorN.1.7. Hardware Coh…...
MySQL-其他函数(补充)
格式化函数FORMAT(x, n) 例:将数字x进行格式化,以四舍五入的方式保留n位小数,结果以字符串的形式返回mysql> select format(12.3456,3),format(2.2,4),format(9.333,0); --------------------------------------------------- | format(12…...
MySQL Study Notes Design in 2023
文章目录1 概述1.1 MySQL相关概述1.2 数据模型1.3 SQL分类2 数据库设计-DDL2.1 约束2.2 字段3 数据库操作-DML3.1 增加(insert)1 概述 1.1 MySQL相关概述 数据库:英文为 DataBase,简称DB,它是存储和管理数据的仓库。 数据库管理系统…...
C++ 修改防火墙firewall设置(Windows)
文章目录1、简介1.1 防火墙概述1.2 入站,还是出站?1.3 防火墙规则优先级2、系统界面方式3、命令行方式3.1 防火墙基本状态设置3.2 入站出站规则设置3.3 其他设置3.4 telnet检测端口4、C方式4.1 注册表4.2 COM(Windows XP)4.3 COM&…...
Spring 入门教程详解
✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…...
day43【代码随想录】动态规划之一和零、完全背包理论基础
文章目录前言一、一和零(力扣474)二、完全背包前言 1、一和零 2、完全背包理论基础 一、一和零(力扣474) 求装满这个背包最多有多少个物品 给你一个二进制字符串数组 strs 和两个整数 m 和 n 。 请你找出并返回 strs 的最大子集…...
GEE学习笔记 七十八:干涸的洪泽湖
今天看了一篇报道直击60年一遇气象干旱:洪泽湖缩小近一半,鱼蟹受灾严重!_新华报业网(直击60年一遇气象干旱:洪泽湖缩小近一半,鱼蟹受灾严重!),既然玩GEE那就要玩出点花样…...
label-studio的使用教程(导入本地路径)
文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...
C++:std::is_convertible
C++标志库中提供is_convertible,可以测试一种类型是否可以转换为另一只类型: template <class From, class To> struct is_convertible; 使用举例: #include <iostream> #include <string>using namespace std;struct A { }; struct B : A { };int main…...
DockerHub与私有镜像仓库在容器化中的应用与管理
哈喽,大家好,我是左手python! Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库,用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...
UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
Java - Mysql数据类型对应
Mysql数据类型java数据类型备注整型INT/INTEGERint / java.lang.Integer–BIGINTlong/java.lang.Long–––浮点型FLOATfloat/java.lang.FloatDOUBLEdouble/java.lang.Double–DECIMAL/NUMERICjava.math.BigDecimal字符串型CHARjava.lang.String固定长度字符串VARCHARjava.lang…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
回溯算法学习
一、电话号码的字母组合 import java.util.ArrayList; import java.util.List;import javax.management.loading.PrivateClassLoader;public class letterCombinations {private static final String[] KEYPAD {"", //0"", //1"abc", //2"…...
AGain DB和倍数增益的关系
我在设置一款索尼CMOS芯片时,Again增益0db变化为6DB,画面的变化只有2倍DN的增益,比如10变为20。 这与dB和线性增益的关系以及传感器处理流程有关。以下是具体原因分析: 1. dB与线性增益的换算关系 6dB对应的理论线性增益应为&…...
适应性Java用于现代 API:REST、GraphQL 和事件驱动
在快速发展的软件开发领域,REST、GraphQL 和事件驱动架构等新的 API 标准对于构建可扩展、高效的系统至关重要。Java 在现代 API 方面以其在企业应用中的稳定性而闻名,不断适应这些现代范式的需求。随着不断发展的生态系统,Java 在现代 API 方…...
AI语音助手的Python实现
引言 语音助手(如小爱同学、Siri)通过语音识别、自然语言处理(NLP)和语音合成技术,为用户提供直观、高效的交互体验。随着人工智能的普及,Python开发者可以利用开源库和AI模型,快速构建自定义语音助手。本文由浅入深,详细介绍如何使用Python开发AI语音助手,涵盖基础功…...
