Python - 银行账户管理系统

这篇具有很好参考价值的文章主要介绍了Python - 银行账户管理系统。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

题目

  • 设计并实现一个简单的银行账户管理系统,具有以下功能:
    • 记录用户的账户信息,包括账户名,账户号码和余额
    • 允许用户进行存款和取款操作
    • 允许用户查询账户余额
    • 请设计响应的类和方法,并编写代码实现该银行账户管理系统。

思路

  1. 首先设计一个账户类:Account,类中包含账户ID、用户名、用户密码和账户金额 成员
  2. 再设计另外一个账户管理类
    • 成员: 账户(Account)、存储账户信息的文件及操作的金额(取钱或者存钱的金额)
    • 成员函数:
      • createAccount() - 创建新账户,账户的ID会自动生成

      • getAccount() - 查询账户,获取账户信息

      • updateData() - 更新数据

      • drawMoney() - 取钱

      • saveMoney() - 存钱

      • getMaxAccoutID() - 获取最大用户ID

  3. 定义一个AccountManageSystem()函数,主要用来提供一些人机交互,并实现人机交互相关动作背后的功能

注意

  • 在运行的时候,需要在和代码文件同目录下创建一个名为'AccountInfo.txt'文件。

代码文章来源地址https://www.toymoban.com/news/detail-767989.html

import os
from typing import Any
class Account:                                                                     #账户类
    def __init__(self, **kwargs):                                                  #构造函数
        self.accountID = kwargs.get("accountID")                                   #账户ID
        self.name = kwargs.get("name")                                             #用户名
        self.password = kwargs.get("password")                                     #用户密码
        self.blance = kwargs.get("blance")                                         #账户金额
    def __str__(self) -> str:                                                      #重写__str__
        return str(self.accountID)+","+str(self.name)+","+str(self.password)+","+str(self.blance)+"\n" #返回组合后字符串
    

class AccountManagement:    
    def __init__(self, **kwargs):
        self.account = kwargs.get("account")                                       #账户
        self.filePath = kwargs.get("filePath")                                     #存储账户信息的文件
        self.operMoney = kwargs.get("operMoney")                                   #操作的金额

    def createAccount(self):                                                       #创建新账户
        with open(file=self.filePath, mode="a") as file:                          #打开存储账户信息的文件
            strAccountID = self.getMaxAccoutID()                                   #获取文件最后的账户ID
            
            if strAccountID == "空文件":                                            #空文件
                self.account.accountID = "A000001"                                 #第一个账户ID
                print("test debug:"+self.account.name)
            else:                                                                  #非空文件
                tempID =  int(strAccountID[1:])+1                                  #账户ID+1
                self.account.accountID = "A"+f'{tempID:0>6}'                       #格式化
            #print("test debug2:"+self.filePath)
            file.write(self.account.__str__())                                     #新的账户写入文件
            
    
    def getAccount(self):                                                          #查询账户,获取账户信息    
        with open(file=self.filePath, mode="r") as file:                           #打开文件
            for line in file:                                                      #逐行遍历
                if(line.find(self.account.accountID) != -1) and (line.find(self.account.password) != -1):#找到用户ID且密码正确
                    self.account.name = line.split(",")[1]                         #获取账户用户名
                    self.account.blance = float(line.split(",")[3])                #获取用户账户金额
                    return True                                                    #找到账户,返回true
        return False                                                               #没找到账户,返回false
    
    def updateData(self):                                                          #更新数据
        with open(file=self.filePath, mode="r",encoding="utf-8") as f1, open("%s.bak"%self.filePath,mode="w",encoding="utf-8") as f2:#打开文件
            for line in f1:                                                        #逐行遍历                                                        
                if line.find(self.account.accountID) != -1:                        #找到原账户信息
                    f2.write(self.account.__str__())                               #新文件中写入账户的新信息 
                else:                                                              #不是原账户
                    f2.write(line)                                                 #直接写入
        os.remove(self.filePath)                                                   #移除老文件
        os.rename("%s.bak"%self.filePath,self.filePath)                            #更改新文件的文件名


    def drawMoney(self) -> str:                                                    #取钱
        if self.getAccount():                                                      #得到用户账户信息
            if(self.account.blance < self.operMoney):                              #当前账户余额小于取款金额
                return "账户余额不足"                                               #返回结果
            else:                                                                  #余额充足
                self.account.blance -= self.operMoney                              #余额更新
                self.updateData()                                                  #更新数据
                return "取款成功,取款后余额为:%.2f" %self.account.blance           #返回结果
            
    def saveMoney(self) -> str:
        if self.getAccount():                                                      #得到用户账户信息
            self.account.blance += self.operMoney                                  #余额更新
            self.updateData()                                                      #更新数据
            return "存款成功,存款后余额为:%.2f" %self.account.blance               #返回结果
        
    def getMaxAccoutID(self) -> str:                                               #获取最大用户ID
        with open(file=self.filePath, mode="r") as f:
            lines = len(f.readlines())                                             #计算文件行数
            if(lines == 0):                                                        #空文件
                return "空文件"                                                                                                
            f.seek(0, 0)                                                           #移动文件读写指针到最后一行
            for i in range(lines-1):
                f.readline()                                                       #读取最后一行数据
            last_line = f.readline()                                               #最后一行值赋给变量
            return last_line.split(",")[0]                                         #返回最后一行Account ID
    

def AccountManageSystem():
    account = Account()                                                           #创建已个账户类对象
    accMang = AccountManagement()                                                 #创建账户管理类对象
    accMang.account= account                                                      #赋值 - 账户
    accMang.filePath = os.path.dirname(os.path.abspath(__file__))+"\AccountInfo.txt" #赋值 - 当前文件所在目录下的文件
    tmpName = ""                                                                  #临时变量,用来存储用户名
    tmpPwd = ""                                                                   #临时变量,用来存储用户密码
    tmpBlance = 0.0                                                               #临时变量,用来存储用户账户金额

    while True:
        print("欢迎使用银行账户管理系统,请选择(输入数字):")                          #交互提示信息
        print("1--创建新的账户     2--查询账户余额")                                 #交互提示信息
        print("3--存钱             4--取钱")                                       #交互提示信息
        print("5--退出\n")                                                         #交互提示信息
        while True:
            try:
                num = int(input("请输入:"))                                        #提示用户输入
            except ValueError as err:                                              #捕捉到异常
                print("输入错误!")                                                  #提示用户输入错误
            else:                                                                  #输入为数字
                if num>=1 and num <=5:                                             #输入数字为1~5
                    break                                                          #输入正常,退出循环
                else:                                                              #输入错误
                   print("输入错误!")                                               #提示用户输入错误
        if num == 1:                                                               #创建新的账户
            adminName = input("请输入系统管理员用户名:")                             #提示输入
            adminPwd = input("请输入系统管理员密码:")                                #提示输入
            if adminName == "admin" and adminPwd == "admin":                       #系统管理员账户和密码正确
                #print("系统管理员为:%s" %adminName)
                while True:                                                        #当用户名不符合要求,循环输入
                    tmpName = input("请输入用户名:")                                #获取输入的用户名
                    if tmpName != "":                                              #用户名不为空
                        break                                                      #退出循环
                    else:                                                          #用户名为空
                        print("用户名不能为空,请重新输入!")                         #提示重新输入
                while True:                                                        #当密码不符合要求,循环输入
                    tmpPwd = input("请设置用户密码(由字母和数字组成):")               #获取第一次输入的密码
                    tmpPwd2 = input("请再次输入用户密码(由字母和数字组成):")          #获取第二次输入的密码
                    if tmpPwd != "" and tmpPwd2 != "":                             #两次密码都不为空
                        if tmpPwd == tmpPwd2:                                      #两次密码一致
                            if tmpPwd.isalnum():                                   #判断密码是否由字母和数字组成
                                break                                              #退出循环
                            else:                                                  #含有除字母和数字之外的字符
                                print("密码只能由字母和数字组成,请重新输入!")        #提示重新输入
                        else:                                                      #两次密码不一致
                            print("两次密码不一致,请重新设置!")                     #提示重新输入
                    else:                                                          #密码为空
                        print("密码不能为空,请重新输入!")                          #提示重新输入
                while True:                                                        #当存款金额不符合要求,循环输入
                    try:
                        tmpBlance = float(input("请输入首次存款金额:"))             #获取输入的存款金额
                    except ValueError as err:                                      #捕捉到异常
                        print("金额输入错误,请重新输入!")                           #提示用户输入错误
                    else:                                                          #输入可以转换为float
                        if tmpBlance > 0:                                          #金额大于0
                            break                                                  #退出循环
                        else:                                                      #输入金额不大于0
                            print("首次存款必须大于0,请重新输入!")                   #提示重新输入
                account.name = tmpName                                             #赋值
                account.password = tmpPwd                                          #赋值
                account.blance = tmpBlance                                         #赋值
                accMang.createAccount()                                            #创建新账户
                print("\n-----账户创建成功,请牢记账户ID作为存取款的依据-----")        #提示信息
                print("当前账户ID为:%s"%account.accountID)                         #提示信息
                print("当前账户余额为:%.2f\n"%account.blance)                       #提示信息
                account.accountID = ""                                              #操作完成,清空对象ID
                account.name = ""                                                   #操作完成,清空对象用户名
                account.password = ""                                               #操作完成,清空对象密码
                account.blance = 0                                                  #操作完成,清空对象金额
                tmpName = ""                                                        #临时变量,用来存储用户名
                tmpPwd = ""                                                         #临时变量,用来存储用户密码
                tmpBlance = 0.0                                                     #临时变量,用来存储用户账户金额
            else:                                                                   #系统账户用户名或者密码错误
                print("系统管理员用户名或者密码错误")                                  #提示信息
        elif num == 2:                                                              #查询账户
            account.accountID = input("请输入账户ID:")                               #获取输入的账户ID
            account.password = input("请输入账户密码:")                              #获取输入的账户ID
            if accMang.getAccount():                                                #找到账户
                print("\n-----查询结果如下-----")                                    #打印查询信息
                print("你好,%s"%account.name)                                      #打印查询信息
                print("账户余额为:%.2f\n"%account.blance)                           #打印查询信息
                account.accountID = ""                                              #操作完成,清空对象ID
                account.name = ""                                                   #操作完成,清空对象用户名
                account.password = ""                                               #操作完成,清空对象密码
                account.blance = 0                                                  #操作完成,清空对象金额
            else:                                                                   #账户或者密码错
                print("账户ID不存在或者密码错误!\n")                                 #提示信息
        elif num == 3:                                                              #存钱
            account.accountID = input("请输入账户ID:")                               #获取输入的账户ID
            account.password = input("请输入账户密码:")                              #获取输入的账户ID
            if accMang.getAccount():                                                #找到账户
                print("你好,%s"%account.name)                                      #打印当前信息
                print("账户余额为:%.2f\n"%account.blance)                           #打印当前信息
                while True:                                                        #当存款金额不符合要求,循环输入
                    try:
                        tmpBlance = float(input("请输入存款金额:"))                 #获取输入的存款金额
                    except ValueError as err:                                      #捕捉到异常
                        print("金额输入错误,请重新输入!")                           #提示用户输入错误
                    else:                                                          #输入可以转换为float
                        if tmpBlance > 0:                                          #金额大于0
                            account.blance += tmpBlance                            #更新存款金额
                            accMang.updateData()                                   #最近的金额写入文件
                            print("\n-----存款成功-----")                           #打印提示信息
                            print("存款后,账户余额为:%.2f\n"%account.blance)       #打印存款信息
                            account.accountID = ""                                 #操作完成,清空对象ID
                            account.name = ""                                      #操作完成,清空对象用户名
                            account.password = ""                                  #操作完成,清空对象密码
                            account.blance = 0                                     #操作完成,清空对象金额
                            break                                                  #退出循环
                        else:                                                      #输入金额不大于0
                            print("存款必须大于0,请重新输入!")                       #提示重新输入
            else:                                                                   #账户或者密码错
                print("账户ID不存在或者密码错误!\n")                                 #提示信息
        elif num == 4:                                                              #取钱
            account.accountID = input("请输入账户ID:")                               #获取输入的账户ID
            account.password = input("请输入账户密码:")                              #获取输入的账户ID
            if accMang.getAccount():                                                #找到账户
                print("你好,%s"%account.name)                                      #打印当前信息
                print("账户余额为:%.2f\n"%account.blance)                           #打印当前信息
                while True:                                                        #当存款金额不符合要求,循环输入
                    try:
                        tmpBlance = float(input("请输入取款金额:"))                 #获取输入的取款金额
                    except ValueError as err:                                      #捕捉到异常
                        print("金额输入错误,请重新输入!")                           #提示用户输入错误
                    else:                                                          #输入可以转换为float
                        if tmpBlance > 0:                                          #金额大于0
                            if tmpBlance <= account.blance:                        #取款金额小于等于账户金额
                                account.blance -= tmpBlance                        #更新存款金额
                                accMang.updateData()                               #最近的金额写入文件
                                print("\n-----取款成功-----")                       #打印提示信息
                                print("取款后,账户余额为:%.2f\n"%account.blance)   #打印存款信息
                                account.accountID = ""                             #操作完成,清空对象ID
                                account.name = ""                                  #操作完成,清空对象用户名
                                account.password = ""                              #操作完成,清空对象密码
                                account.blance = 0                                 #操作完成,清空对象金额
                                break                                              #退出循环
                            else:                                                  #取款金额大于账户余额
                                print("取款金额大于账户余额不能取款!")                #提示信息
                        else:                                                      #输入金额不大于0
                            print("存款必须大于0,请重新输入!")                       #提示重新输入
            else:                                                                   #账户或者密码错
                print("账户ID不存在或者密码错误!\n")                                 #提示信息
        elif num == 5:                                                              #退出系统
            break                                                                   #退出循环


if __name__ == "__main__":
    AccountManageSystem()

到了这里,关于Python - 银行账户管理系统的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 银行管理系统--课后程序(Python程序开发案例教程-黑马程序员编著-第7章-课后作业)

    从早期的钱庄到现如今的银行,金融行业在不断地变革;随着科技的发展、计算机的普及,计算机技术在金融行业得到了广泛的应用。银行管理系统是一个集开户、查询、取款、存款、转账、锁定、解锁、退出等一系列的功能的管理系统,该系统中各功能的介绍如下。 开户功

    2024年02月04日
    浏览(47)
  • python_学生信息管理系统

    学习python时自己做的小东西,供大家学习参考。源码放到最后。 运行《学生信息管理系统》即可进入如图1所示的系统主界面。在该界面中可以选择要使用功能对应的菜单进行不同的操作。在选择功能菜单时,有两种方法,一种是输入1,另一种是按下键盘上的↑或↓方向键进

    2024年02月03日
    浏览(52)
  • 学生信息管理系统(Python实现)

    目录 1.功能介绍 2.代码模块 3.全局代码 摘剑!!! 采用列表+类的组合来实现对信息的增删改查,整体代码比较简单,只用了100余行 1)添加学生信息 2)查询学生信息 3)删除学生信息 4)修改学生信息 5)遍历学生信息 1)学生类 2)菜单menu 3)添加insert  4)查询search 5)删

    2024年02月13日
    浏览(58)
  • 基于Python的学生信息管理系统

    注意,该项目为Python基础语法的一个综合,项目数据库。  

    2023年04月11日
    浏览(42)
  • 图书信息管理系统(python,sqlite)

           sqlite数据库具体的结构设计和数据的截图放最后,因为图片有点多,但是能更好的帮助大家理解和实现该系统  目录 一、任务描述 二、功能实现 三、数据库设计​编辑 四、程序流程图(某些新加功能没有)  五、python代码(带注释) 六、具体数据库结构设计截图

    2024年02月03日
    浏览(45)
  • 基于Python的图书信息管理系统

    进入21世纪以来,信息技术从根本上推动了图书馆的飞速发展,计算机和计算机管理系统已成为图书馆进行图书管理的主要设备和系统。虽然目前很多大型的图书馆已经有一整套比较完善的管理系统,但是在一些中小型的图书馆中,大部分工作仍需手工完成,工作起来效率比

    2024年02月04日
    浏览(51)
  • 商品信息管理系统(Python)完整版

    目录 功能模块: 实现思路: 运行功能演示: 具体实现过程: 定义商品类: 定义商品管理类 定义显示商品信息函数 输入销量函数: 添加商品信息: 删除商品信息 修改商品信息 导入商品信息 导出商品信息 求商品平均销量 求商品最高销量 求商品最低销量 最后定义菜单函

    2024年02月08日
    浏览(39)
  • 学生信息管理系统(Python)完整版

    目录 功能模块: 实现思路: 运行功能演示: 具体实现过程: 定义学生类: 定义学生管理类 定义显示学生信息函数 输入成绩函数: 添加学生信息: 删除学生信息 修改学生信息 导入学生信息 导出学生信息 求课程平均分 求课程最高分 求课程最低分 最后定义菜单函数和主

    2024年02月03日
    浏览(33)
  • 免费分享一套PyQt6学生信息管理系统 Python管理系统 Python源码,挺漂亮的

    大家好,我是java1234_小锋老师,看到一个不错的PyQt6学生信息管理系统 Python管理系统 Python源码,分享下哈。 【免费】PyQt5 学生信息管理系统 Python管理系统 Python源码 Python毕业设计_哔哩哔哩_bilibili 【免费】PyQt5 学生信息管理系统 Python管理系统 Python源码 Python毕业设计项目来自

    2024年02月03日
    浏览(41)
  • Python课程设计之学生信息管理系统

    核心代码 运行效果 核心代码 运行效果 核心代码 运行效果 核心代码 运行效果 核心代码 运行效果 核心代码 运行效果 核心代码 运行效果 核心代码 运行效果 点击下载

    2024年02月11日
    浏览(46)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包