Python 银行账户管理系统

本代码使用 Python 语言,结合 openpyxlhashlib 库,构建了一个简单的银行账户管理系统。系统提供登录、开户、销户、存款、取款、查询、挂失和取消挂失等功能,并使用 Excel 文件存储账户信息。

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
                money = round(money, 2) # 将存款金额四舍五入到小数点后两位
            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()

使用说明:

  1. 将代码保存为 .py 文件,例如 bank_system.py
  2. 创建一个名为 bank_accounts.xlsx 的 Excel 文件,并在第一行添加以下列名:id, userName, userPassword, money, status
  3. 运行代码,根据提示选择功能。

注意事项:

  • 账户 ID 必须为 16 位数字。
  • 密码必须为 6 位数字。
  • 存款金额不能为负数,小数点后最多保留两位。
  • 单笔取款金额不能超过 5000 元。

功能说明:

  • 登录: 输入用户名和密码登录系统。
  • 开户: 输入账号、用户名、密码和存款金额开户。
  • 销户: 输入账号销户。
  • 存款: 输入账号和存款金额存款。
  • 取款: 输入账号和取款金额取款。
  • 查询: 输入账号查询账户余额和基本信息。
  • 挂失: 输入账号挂失。
  • 取消挂失: 输入账号取消挂失。
  • 退出: 退出系统。

代码示例:

# 打开银行账户管理系统
# 选择“开户”功能
# 输入账号、用户名、密码和存款金额
# 开户成功
# 选择“存款”功能
# 输入账号和存款金额
# 存款成功
# 选择“查询”功能
# 输入账号
# 查询账户余额和基本信息
# 选择“退出”功能
# 退出系统

改进方向:

  • 使用数据库存储账户信息,提高效率和安全性。
  • 添加更多功能,例如转账、修改密码等。
  • 使用图形界面,提升用户体验。

希望本代码能够帮助你更好地理解 Python 的应用和开发。

Python 银行账户管理系统:使用 openpyxl 和 hashlib 库

原文地址: https://www.cveoy.top/t/topic/oJ67 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录