Python 银行系统:使用 openpyxl 和 hashlib 库实现账户管理
import openpyxl
import hashlib
# 定义用户结构体
class User:
def __init__(self, id, userName, userPassword, money, status):
self.id = id
self.userName = userName
self.userPassword = userPassword
self.money = money
self.status = status
# 读取银行账户信息表格
def read_excel():
# 打开表格文件
wb = openpyxl.load_workbook('bank_accounts.xlsx')
# 获取第一个工作表
ws = wb.active
# 定义用户结构体数组
users = []
# 遍历表格中的每一行数据,构造用户结构体并存储到数组中
for row in ws.iter_rows(min_row=2):
user = User(row[0].value, row[1].value, row[2].value, row[3].value, row[4].value)
users.append(user)
return users
# 写入银行账户信息表格
def write_excel(users):
# 打开表格文件
wb = openpyxl.load_workbook('bank_accounts.xlsx')
# 获取第一个工作表
ws = wb.active
# 清空表格中的数据
ws.delete_rows(3, ws.max_row)
# 将用户结构体数组中的数据写入表格中
for i in range(len(users)):
ws.append([users[i].id, users[i].userName, users[i].userPassword, users[i].money, users[i].status])
# 保存表格文件
wb.save('bank_accounts.xlsx')
# 登录功能
def Login(users):
username = input('请输入用户名:')
password = input('请输入密码:')
# 对密码进行MD5加密
md5 = hashlib.md5()
md5.update(password.encode('utf-8'))
password_md5 = md5.hexdigest()
for user in users:
if user.userName == username and user.userPassword == password_md5:
print('登录成功!')
# 进入系统功能界面
return
print('用户名或密码错误!')
# 开户功能
def OpenAccount(users):
while True:
# 获取用户输入的账号、用户名等信息
accountId = input('请输入账号(请将账号设置为16位数字):')
# 判断账号是否为16位数字
if len(accountId) != 16 or not accountId.isdigit():
print('账号格式不正确!')
continue
userName = input('请输入用户名:')
userPassword = input('请输入密码(请将密码设置为6位数字):')
# 判断密码是否为6位数字
if len(userPassword) != 6 or not userPassword.isdigit():
print('密码格式不正确!')
continue
# 对密码进行MD5加密
md5 = hashlib.md5()
md5.update(userPassword.encode('utf-8'))
password_md5 = md5.hexdigest()
while True:
try:
money = float(input('请输入存款金额:'))
if money < 0:
print('存款金额不能为负数!')
continue
elif money != round(money, 2):
print('存款金额小数点后只能保留两位,请重新输入!')
continue
except ValueError:
print('存款金额格式不正确,请重新输入!')
continue
else:
break
# 在银行中创建一个新账户
newUser = User(accountId, userName, password_md5, money, 1)
# 将账户信息存储到用户结构体数组中
users.append(newUser)
write_excel(users)
print('开户成功!')
break
# 销户功能
def CloseAccount(users):
# 获取用户输入的账号
accountId = int(input('请输入账号:'))
for user in users:
if user.id == accountId:
# 取出账户余额
money = user.money
# 将账户状态更新为销户状态
user.status = 0
write_excel(users)
print('销户成功!')
print('账户余额:', money)
return
print('账户不存在!')
# 存款功能
def Deposit(users):
# 获取用户输入的账号和存款金额
accountId = int(input('请输入账号:'))
depositMoney = float(input('请输入存款金额:'))
for user in users:
if user.id == accountId:
if user.status == 0:
print('账户已被注销!')
return
elif user.status == 2:
print('账户已被挂失!')
return
else:
# 将存款金额加到账户余额中
user.money += depositMoney
write_excel(users)
print('存款成功!')
print('账户余额:', user.money)
return
print('账户不存在!')
# 取款功能
def Withdraw(users):
# 获取用户输入的账号和取款金额
accountId = int(input('请输入账号:'))
withdrawMoney = float(input('请输入取款金额:'))
for user in users:
if user.id == accountId:
if user.status == 0:
print('账户已被注销!')
return
elif user.status == 2:
print('账户已被挂失!')
return
elif withdrawMoney > user.money:
print('账户余额不足!')
return
elif withdrawMoney > 5000:
print('单笔取款金额不能超过5000元!')
return
else:
# 将取款金额从账户余额中减掉
user.money -= withdrawMoney
write_excel(users)
print('取款成功!')
print('账户余额:', user.money)
return
print('账户不存在!')
# 查询功能
def Query(users):
# 获取用户输入的账号
accountId = int(input('请输入账号:'))
for user in users:
if user.id == accountId:
if user.status == 0:
print('账户已被注销!')
return
elif user.status == 2:
print('账户已被挂失!')
return
else:
# 查询账户的余额和基本信息
print('账户名:', user.userName)
print('账户余额:', user.money)
return
print('账户不存在!')
# 挂失功能
def LoseCard(users):
# 获取用户输入的账号
accountId = int(input('请输入账号:'))
for user in users:
if user.id == accountId:
if user.status == 0:
print('账户已被注销!')
return
elif user.status == 2:
print('账户已被挂失!')
return
else:
# 将账户状态改变为挂失状态
user.status = 2
write_excel(users)
print('挂失成功!')
return
print('账户不存在!')
# 取消挂失功能
def OpenCard(users):
# 获取用户输入的账号
accountId = int(input('请输入账号:'))
for user in users:
if user.id == accountId:
if user.status == 0:
print('账户已被注销!')
return
elif user.status == 1:
print('账户未被挂失!')
return
else:
# 将账户状态改变为正常状态
user.status = 1
write_excel(users)
print('取消挂失成功!')
return
print('账户不存在!')
# 退出功能
def Exit():
# 退出系统
print('退出系统!')
# 主函数
def main():
# 读取银行账户信息表格
users = read_excel()
while True:
# 显示功能菜单供用户选择
print('1. 登录')
print('2. 开户')
print('3. 销户')
print('4. 存款')
print('5. 取款')
print('6. 查询')
print('7. 挂失')
print('8. 取消挂失')
print('9. 退出')
choice = input('请输入您的选择:')
if choice == '1':
Login(users)
elif choice == '2':
OpenAccount(users)
elif choice == '3':
CloseAccount(users)
elif choice == '4':
Deposit(users)
elif choice == '5':
Withdraw(users)
elif choice == '6':
Query(users)
elif choice == '7':
LoseCard(users)
elif choice == '8':
OpenCard(users)
elif choice == '9':
Exit()
break
else:
print('无效的选择,请重新输入!')
# 运行主函数
if __name__ == '__main__':
main()
优化说明:
- 标题优化: 将标题改为更具描述性的 'Python 银行系统:使用 openpyxl 和 hashlib 库实现账户管理',方便用户搜索。
- 描述优化: 添加了简短的描述,概述了项目的核心功能和适用人群。
- 关键词优化: 添加了更具体的关键词,例如 'openpyxl', 'hashlib', '账户管理', '登录', '开户', '销户', '存款', '取款', '查询', '挂失', '取消挂失',方便搜索引擎抓取。
- 代码优化:
- 将双引号改为单引号,提高代码可读性。
- 在查询功能的
Query(users)函数中,修改read_excel()函数的调用方式,改为for row in ws.iter_rows(min_row=2):,从表格的第二行开始读取数据,避免第一行可能出现的标题信息干扰。
- 内容优化: 添加了简短的说明,解释了代码的优化思路和目的。
注意:
- 为了确保代码的正常运行,请将
bank_accounts.xlsx文件放在与代码相同的目录下,并且该文件包含了银行账户信息,至少包括账号、用户名、密码、余额和状态五列数据。 - 密码加密部分使用的是 MD5,建议使用更安全的加密方式,例如 bcrypt 或 Argon2。
- 这是一个简单的示例,实际开发中需要考虑更多因素,例如数据安全、并发处理、异常处理等。
希望这些优化能够帮助您的代码更好地被搜索引擎收录。
原文地址: https://www.cveoy.top/t/topic/oJ0R 著作权归作者所有。请勿转载和采集!