import tkinter as tk
import tkinter.messagebox
import json
import random
import time
import os
# # 邮件发送相关模块###使用时请取消注释
# import smtplib
# from email.mime.text import MIMEText
# from email.utils import formataddr
"""为了存储数据将在与源文件相同路径下新建两个json文件,请不要随意删除"""
"""
普通管理员:可以完成对银行卡的各种操作
用户名:admin
密码:6818
超级管理员:可以查看所有用户的部分信息
用户名:superadmin
密码:000000
"""
"""有关Bank,Person,Card,Admin类的定义"""
class Admin:
def __init__(self):
self.num = 'admin'
self.password = '6818'
self.superadmin = 'superadmin'
self.superpassword = '000000'
class Card:
def __init__(self, cardid, password, money):
self.cardid = cardid
self.password = password
self.money = money
self.lock = False
class Person:
def __init__(self, name, age, phone, person_id,e_mail, card):
self.name = name # 姓名
self.person_id = person_id # 身份证号
self.age = age # 出生年份
self.phone = phone # 电话
self.e_mail = e_mail # 邮箱
self.card = card # Card类的实例化对象
class Bank:
def __init__(self, user_all, user_error):
self.user_all = user_all
self.user_error = user_error
def superlogin(self):
super_win = tk.Tk()
super_win.title('超级管理后台')
super_win.geometry('600x480')
all_list = []
lab_ti = tk.Label(super_win,text='银行系统信息统计', font=('宋体', 28))
lab_ti.place(x=160,y=60)
lab_ti = tk.Label(super_win, text='本系统共注册{}位用户'.format(self.user_all['count']), font=('宋体', 16))
lab_ti.place(x=170, y=128)
lab_titl = tk.Label(super_win, text="银行卡号"+' '*6+"户主姓名"+' '*6+"身份证号", font=('宋体', 12))
lab_titl.place(x=150, y=210)
for dic in self.user_all['users']:
st = (dic['card']['cardid']+' '*12+dic['person']['name'])
if len(st) <= 50:
y = 50 - len(st)
st += ' '*y
st += dic['person']['person_id']
all_list.append(st)
sc = tkinter.Scrollbar(super_win)
sc.pack(side=tkinter.RIGHT, fill=tkinter.Y)
lb = tk.Listbox(super_win, width=50, yscrollcommand=sc.set)
sc.config(command=lb.yview)
#
lb.place(x=140, y=240)
for item in all_list:
lb.insert(tk.END, item)
super_win.mainloop()
def getid(self,n=6):
"""生成随机卡号"""
s = ''
for i in range(n):
ch = chr(random.randrange(ord('0'), ord('9')+1))
s += ch
return s
def bankmain(self):
"""银行系统执行逻辑主程序"""
# 实例化一些对象
ad = Admin()
# 含有admin登录界面
win_admin_log = tk.Tk()
win_admin_log.title('银行系统管理员登录')
win_admin_log.geometry('680x460')
win_admin_log.resizable(0, 0)
# 标题
tit_lab = tk.Label(win_admin_log, text='银行管理系统', font=('华文彩云', 30))
tit_lab.place(x=250, y=80)
# 登录框
name_log = tk.Label(win_admin_log, text='管理员用户名', font=('宋体', 14))
name_log.place(x=140, y=240)
pasword_log = tk.Label(win_admin_log, text='管理员密码', font=('宋体', 14))
pasword_log.place(x=160, y=300)
# 登录entry
var_name = tk.StringVar()
var_name.set('') # 非测试时为空
en_name = tk.Entry(win_admin_log, textvariable=var_name, bd=4, font=('宋体', 14))
en_name.place(x=260, y=240)
var_pasw = tk.StringVar()
var_pasw.set('') # 非测试时为空
en_pasw = tk.Entry(win_admin_log, textvariable=var_pasw, bd=4, font=('宋体', 14), show='*')
en_pasw.place(x=260, y=300)
tk.Label(win_admin_log, text='当前时间:', font=('宋体', 12)).place(x=10, y=420)
clock = tk.Label(win_admin_log, text='', font=('ds-digital', 12))
clock.place(x=86, y=420)
def get_time():
"""获取时间"""
time2 = time.strftime('%Y-%m-%d %H:%M:%S')
clock.configure(text=time2)
clock.after(1000, get_time)
def check_admin():
"""检验身份"""
ad_name = var_name.get()
ad_pasw = var_pasw.get()
if ad_name == ad.num and ad_pasw == ad.password:
st = '登录成功!欢迎您,管理员!'
self.show_get('系统登录', st)
#win_admin_log.destroy()
# win_admin_log.withdraw()
self.menu_main()
else:
st = '密码错误或用户名错误!'
self.show_error('系统登录', st)
def check_superlogin():
ad_name = var_name.get()
ad_pasw = var_pasw.get()
if ad_name == ad.superadmin and ad_pasw == ad.superpassword:
st = '登录成功!欢迎您,超级管理员!'
self.show_get('系统登录', st)
# win_admin_log.destroy()
self.superlogin()
else:
st = '密码错误或用户名错误!'
self.show_error('系统登录', st)
# 程序说明界面驱动按钮
expl_a = tk.Button(win_admin_log, text='使用说明', font=('宋体', 10), command=self.explain)
expl_a.place(x=580, y=390)
# 登录按钮
login_a = tk.Button(win_admin_log, text='普通管理员登录', font=('宋体', 14), command=check_admin)
login_a.place(x=180, y=360)
# 按回车键可以进行普通管理员登录
def fucgo(event):
check_admin()
win_admin_log.bind('<Return>', fucgo)
# 超级管理员登录
login_super = tk.Button(win_admin_log, text='超级管理员登录', font=('宋体', 14), command=check_superlogin)
login_super.place(x=360, y=360)
# 获取时间
get_time()
# 系统用户数量
ls = tk.Label(win_admin_log, text='v2.0系统信息:本系统已注册{}位用户。'.format(user_all['count']), font=('宋体', 12))
ls.place(x=380, y=422)
# main loop
win_admin_log.mainloop()
def menu_main(self):
"""操作菜单及可视化页面"""
menu_win = tk.Tk()
menu_win.title('银行系统操作')
menu_win.geometry('600x500')
menu_win.resizable(0, 0)
# 标题
lab_maintitle = tk.Label(menu_win, text='功 能 菜 单', font=('华文琥珀',30))
lab_maintitle.place(x=200, y=70)
# 开户
n_getnew_card = tk.Button(menu_win, text='开 户', font=('宋体', 12), command=self.getnew_card, width=9, height=2)
n_getnew_card.place(x=70, y=160)
n_sech_card = tk.Button(menu_win, text='查 询', font=('宋体', 12), command=self.sech_card, width=9, height=2)
n_sech_card.place(x=270, y=160)
n_getmoney = tk.Button(menu_win, text='取 款', font=('宋体', 12), command=self.getmoney, width=9, height=2)
n_getmoney.place(x=470, y=160)
n_putmoney = tk.Button(menu_win, text='存 款', font=('宋体', 12), command=self.putmoney, width=9, height=2)
n_putmoney.place(x=70, y=260)
n_changemoney = tk.Button(menu_win, text='转 账', font=('宋体', 12), command=self.changemoney, width=9, height=2)
n_changemoney.place(x=270, y=260)
n_dellock = tk.Button(men
Python可视化银行管理系统(基于Tkinter)
需积分: 0 185 浏览量
更新于2023-03-16
收藏 9KB RAR 举报
Python可视化银行管理系统是一款基于Tkinter库开发的桌面应用程序,它为用户提供了一系列银行操作的功能,如开户、查询余额、取款、存款、转账以及销户和修改密码等。Tkinter是Python的标准GUI(图形用户界面)库,使得开发者可以创建出具有交互性的窗口应用。
在这款系统中,首先我们需要了解Tkinter库的基本用法。Tkinter提供了多种组件,如Label(标签)、Button(按钮)、Entry(输入框)等,用于构建用户界面。通过定义这些组件的属性,如text(文本)、command(回调函数)等,我们可以创建出与用户交互的控件。例如,创建一个"开户"按钮,就需要定义它的文本和点击后执行的函数。
开户功能涉及到数据库操作。Python中的SQLite是一个轻量级的嵌入式数据库,常用于小型项目。在这里,可能使用SQLite来存储客户信息和账户数据。需要编写SQL语句创建用户表,并实现插入新用户的逻辑,包括姓名、身份证号、账号、初始余额等信息。
查询功能则需要读取数据库中的特定记录。通过输入账号,系统查询对应的用户信息并显示在界面上。这需要执行SQL的SELECT语句,并将查询结果转化为易于展示的格式。
取款和存款功能涉及到金额的增减,这需要更新数据库中的账户余额。在取款时,需要检查余额是否充足,存款时则直接增加余额。这两项操作都需要在修改数据库后更新界面上的余额显示。
转账功能较为复杂,不仅需要更新转出方的账户余额,还要在接收方的账户中增加相应的金额。这需要两个数据库操作,并确保在事务处理中保持数据的一致性。
销户功能会永久删除用户及其关联的账户数据,需要执行SQL的DELETE语句,并清理界面中的相关信息。
改密功能涉及用户验证和密码更新。系统先验证当前密码,如果正确,再允许用户输入新密码并保存到数据库。
在开发过程中,为了提高代码的可维护性和复用性,通常会采用面向对象编程,将各个功能封装成类,如BankAccount(银行账户)、User(用户)等。同时,良好的异常处理也是必要的,以处理如输入错误、数据库操作失败等情况,保证程序的稳定运行。
Python可视化银行管理系统是一个综合运用了Python基础语法、Tkinter GUI设计、SQLite数据库操作以及面向对象编程技巧的项目。开发者需要具备扎实的Python基础知识,熟悉数据库操作,并了解如何创建用户友好的图形界面。通过这个项目,不仅可以提升编程技能,还能深入理解实际应用中数据管理的重要性。
li642041156
- 粉丝: 5
- 资源: 32
最新资源
- HTML5实现好看的多彩音乐演唱会门票官网源码.zip
- 学习Python的练习唱和备忘清单
- python-入门经典例子
- 98单面板专用软件,做单快,都在用这个软件
- 三相锁相环 在simulink中采用模块搭建了基于双二阶广义积分器的三相锁相环,整个仿真环境完全离散化,运行时间更快,主电路与控制部分以不同的步长运行,更加贴合实际 基于双二阶双二阶广义积分器的三
- 空间直线路径 圆弧过渡轨迹规划算法 可提供源码学习
- 过年烟花秀表演,送给朋友
- 飞娥扑火优化算法MFO对Elman的参数进行优化,建立多输入单输出的拟合预测模型 程序内注释详细直接替数据可用 程序语言为matlab
- 这是激光打印机驱动软件
- PMSM控制simulink仿真模型 包括了FOC部分,可以用来学习电机控制原理或基于MBD的设计参考,助你轻松学习pid等模块的搭建设计
- 离线辨识参数+EKF扩展卡尔曼滤波算法做电池SOC估计,在Simulink环境下对电池进行建模,包括: 1.电池模型 2.电流测量噪声下 采用simulink编写电池模型、EKF扩展卡尔曼滤波算法,在
- 基于随机配置网络(SCN)的时间序列预测 matlab代码,
- 电压型三相桥式逆变并网仿真Matlab2021 电路采用两电平拓扑,采用双环PI控制, 变部分加设PLL锁相环, 采用SPWM调制,逆变器输出端加设LCL滤波器,并入电网 可以得到逆变器输出端为三电
- 二极管钳位型NPC逆变器不平衡负载仿真 Matlab2021a 采用SPWM调制,双环PI参与控制, 逆变器连接LCL滤波器,连接不平衡负载,负载参数可调 可以得到输出线电压为五电平的电压波形,滤波
- 基于扩展卡尔曼滤波(Extended Kalmam Filter, EKF)的车辆状态观测器 Carsim与Simulink联合 可估计车辆Vx,β,γ(效果见图) EKF使用子函数形式编程,只要定义
- 松下PLC编程软件FP WIN Pro 注意,网上下载的版本是基本版,限制10000步,这个是全功能版 FPWIN GR是以梯形图为主的、是非常适合现场使用的操作简便的编程工具软件 FPWIN P