银行系统(python基础实现)

使用Python实现银行管理系统 在本篇博文中,我们将使用Python编写一个简单的银行管理系统,该系统具有开户、查询、取款、存款、转账、锁定、解锁、存盘和退出等功能。我们将逐步分析每个功能,并提供相应的代码实现。 阅读详情

银行提款机系统

首先应该明确有哪些类和哪些属性,方法

用户身份证类

class IdCard(object):
    def __init__(self, name, cardId):
        self.__name = name
        self.__cardId = cardId

    @property
    def name(self):
        return self.__name
    @name.setter
    def name(self, value):
        self.__name = value

    @property
    def cardId(self):
        return self.__cardId
    @cardId.setter
    def cardId(self, value):
        self.__cardId = value


银行类

此处假设只有一个银行,用单例实现


def single(cls):
    instance = {}
    def inner(*args, **kwargs):
        if cls not in instance:
            instance[cls] = cls(*args, **kwargs)
        return instance[cls]
    return inner


@single
class Bank(object):
    def __init__(self, name=None):
        self.name = name
        self.atmsList = []
        self.usersDict = {}
        self.cardsDict = {}

多个atm机类


from idCard import IdCard
from bank import Bank
from bankCard import BankCard
import random

class Atm(object):
    def __init__(self, atmId, money):
        self.atmId = atmId
        self.__money = money

    @property
    def money(self):
        if self.__money >= 0:
            return self.__money
        else:
            return 0
    @money.setter
    def money(self, value):
        self.__money = value

    # 开户
    def open_account(self):
        userName = input("输入您的姓名:")
        userCardId = input("输入您的身份证号码:")
        sunckBank = Bank()
        #判断银行中改用是否存储过信息
        user = sunckBank.usersDict.get(userCardId)
        if not user:
            # 创建身份证对象
            user = IdCard(userName, userCardId)
            sunckBank.usersDict[userCardId] = user

        #随机生成卡号
        bankCardId = self.getBankCardNum()
        passwd = input("设置密码:")
        if not self.checkPasswd(passwd):
            #验证密码失败
            print("两次密码不一致,开户失败")
            return
        phone = input("请输入您的手机号:")


        #创建银行卡
        bankCard = BankCard(bankCardId,passwd, phone, user)
        #将卡存入银行
        sunckBank.cardsDict[bankCardId] = bankCard
        print("开户成功,请牢记卡号%s"%(bankCardId))


    #插卡
    def insertCard(self):
        bankCardId = input("请输入您的银行卡号码:")
        #验证是否存在
        if self.checkBankCardNum(bankCardId):
            print("卡号不存在,请重新操作!")
            return
        sunckBank = Bank()
        bankCard = sunckBank.cardsDict.get(bankCardId)
        # 验证是否锁定
        if bankCard.flag == 0:
            print("该卡被锁定,请解锁后操作!")
            return
        if not self.checkPasswd(bankCard.passwd):
            #密码输入错误,锁卡,结束
            bankCard.flag = 0
            print("三次密码错误,该卡已被锁定!")
            return
        return bankCard





    # 存款
    def deposit(self, card):
        money = int(input("请输入存款金额:"))
        card.money = card.money + money
        #提款机的money也要增加
        self.money = self.money + money
        print("存款成功!")
    # 取款
    def withdrawal(self, card):
        money = int(input("请输入取款金额:"))
        if card.money < money:
            print("余额不足(%d),取款失败!"%(card.money))
            return
        if self.money < money:
            print("ATM机器现金不足(%d),取款失败!"%(self.money))
            return
        card.money = card.money - money
        self.money = self.money - money
        print("取款成功!")
    # 查询
    def query(self, card):
        print("余额:%d"%(card.money))
    # 转账
    def transfer_accounts(self, card):
        transferCardId = input("请输入对方卡号:")
        if self.checkBankCardNum(transferCardId):
            print("卡号不存在,转账失败!")
            return

        #显示对方用户名验证是否正确
        sunckBank = Bank()
        transferCard = sunckBank.cardsDict.get(transferCardId)
        flag = input("用户名为%s,是否确认转账,输入y/Y表示转账,否则退出"%(transferCard.idCard.name))
        if not (flag == "y" or flag == "Y"):
            return

        transferMoney = int(input("请输入转账金额:"))
        if card.money < transferMoney:
            print("余额不足,转账失败!")
            return
        card.money = card.money - transferMoney
        transferCard.money = transferCard.money + transferMoney
        print("转账成功!")


    # 锁卡
    def lock_card(self, card):
        cardId = input("请输入您的身份证号码:")
        if cardId != card.idCard.cardId:
            print("身份验证失败,锁卡失败!")
            return False
        phone = input("请输入您的手机号码:")
        if phone != card.phone:
            print("手机验证失败,锁卡失败!")
            return False
        card.flag = 0
        print("锁卡成功!")
        return True
    # 解卡
    def unlock_card(self):
        bankCardId = input("请输入您的银行卡号码:")
        # 验证是否存在
        if self.checkBankCardNum(bankCardId):
            print("卡号不存在,请重新操作!")
            return
        sunckBank = Bank()
        bankCard = sunckBank.cardsDict.get(bankCardId)
        # 验证是否锁定
        if bankCard.flag == 1:
            print("该卡未被锁定,无需解锁!")
            return

        cardId = input("请输入您的身份证号码:")
        if cardId != bankCard.idCard.cardId:
            print("身份验证失败,解卡失败!")
            return
        phone = input("请输入您的手机号码:")
        if phone != bankCard.phone:
            print("手机验证失败,解卡失败!")
            return

        passwd = input("请输入密码:")
        if bankCard.passwd != passwd:
            print("密码错误,解卡失败!")
            return

        bankCard.flag = 1
        print("解卡成功,可继续其他操作!")



    # 改密
    def change_password(self, card):
        cardId = input("请输入您的身份证号码:")
        if cardId != card.idCard.cardId:
            print("身份验证失败,改密失败!")
            return False
        phone = input("请输入您的手机号码:")
        if phone != card.phone:
            print("手机验证失败,改密失败!")
            return False

        passwd = input("请设置新密码:")
        if not self.checkPasswd(passwd):
            print("两次密码不一致,修改失败!")
            return False

        card.passwd = passwd
        print("密码修改成功,请重新登录")
        return True
    # 补卡
    def reissue_card(self):
        bankCardId = input("请输入您的银行卡号码:")
        # 验证是否存在
        if self.checkBankCardNum(bankCardId):
            print("卡号不存在,请重新操作!")
            return
        sunckBank = Bank()
        bankCard = sunckBank.cardsDict.get(bankCardId)
        # 验证是否锁定
        if bankCard.flag == 0:
            print("该卡被锁定,请先解锁!")
            return

        cardId = input("请输入您的身份证号码:")
        if cardId != bankCard.idCard.cardId:
            print("身份验证失败,补卡失败!")
            return
        phone = input("请输入您的手机号码:")
        if phone != bankCard.phone:
            print("手机验证失败,补卡失败!")
            return

        passwd = input("请输入密码:")
        if bankCard.passwd != passwd:
            print("密码错误,补卡失败!")
            return

        #补卡操作
        #获取新卡号
        newCardId = self.getBankCardNum()
        #删除原有键值对
        sunckBank.cardsDict.pop(bankCardId)
        #修改对象中的卡号
        bankCard.cardId = newCardId
        sunckBank.cardsDict[newCardId] = bankCard

        print("补卡成功,请牢记新卡号:%s"%(newCardId))

    # 销户
    def closing_account(self, card):
        cardId = input("请输入您的身份证号码:")
        if cardId != card.idCard.cardId:
            print("身份验证失败,销户失败!")
            return False
        phone = input("请输入您的手机号码:")
        if phone != card.phone:
            print("手机验证失败,销户失败!")
            return False


        sunckBank = Bank()
        sunckBank.cardsDict.pop(card.cardId)
        print("销户成功!")
        return True

    @classmethod
    def view1(cls):
        print("----------------------------------")
        print("-      welecome to guabank       -")
        print("-             开户(1)            -")
        print("-             插卡(2)            -")
        print("-             解锁(3)            -")
        print("-             补卡(4)            -")
        print("----------------------------------")
    @classmethod
    def view2(cls):
        print("----------------------------------")
        print("-      welecome to guabank       -")
        print("-       查询(1)    转账(2)        -")
        print("-       存款(3)    取款(4)        -")
        print("-                  锁卡(5)        -")
        print("-       改密(6)    注销(7)        -")
        print("-             退卡(8)             -")
        print("----------------------------------")



    @staticmethod
    def checkBankCardNum(bankCardId):
        sunckBank = Bank()
        card = sunckBank.cardsDict.get(bankCardId)
        if card:
            #有卡
            return False
        else:
            return True
    @staticmethod
    def getBankCardNum():
        while 1:
            c = ""
            for i in range(6):
                c += random.choice("1234567890")
            if Atm.checkBankCardNum(c):
                return c

    @staticmethod
    def checkPasswd(passwd):
        for i in range(3):
            passwd1 = input("输入密码:")
            if passwd == passwd1:
                return True
        return False


银行卡类



class BankCard():
    def __init__(self, cardId, passwd, phone, idCard):
        self.cardId = cardId
        self.__passwd = passwd
        self.__money = 0
        self.__flag = 1
        self.__phone = phone
        self.__idCard = idCard

    @property
    def passwd(self):
        return self.__passwd
    @passwd.setter
    def passwd(self, value):
        self.__passwd = value

    @property
    def money(self):
        return self.__money
    @money.setter
    def money(self, value):
        self.__money = value

    @property
    def flag(self):
        return self.__flag
    @flag.setter
    def flag(self, value):
        self.__flag = value

    @property
    def phone(self):
        return self.__phone
    @phone.setter
    def phone(self, value):
        self.__phone= value

    @property
    def idCard(self):
        return self.__idCard
    @idCard.setter
    def idCard(self, value):
        self.__idCard = value


主模块

from atm import Atm
from bank import Bank
import uuid

def main(at):
    while 1:
        Atm.view1()
        option1 = int(input("请输入操作:"))
        #开户
        if option1 == 1:
            at.open_account()
        elif option1 == 2:
            #插卡
            card = at.insertCard()
            if card:
                while 1:
                    Atm.view2()
                    option2 = int(input("请输入操作:"))
                    if option2 == 1:
                        at.query(card)
                    elif option2 == 2:
                        at.transfer_accounts(card)
                    elif option2 == 3:
                        at.deposit(card)
                    elif option2 == 4:
                        at.withdrawal(card)
                    elif option2 == 5:
                        if at.lock_card(card):
                            break
                    elif option2 == 6:
                        if at.change_password(card):
                            break
                    elif option2 == 7:
                        if at.closing_account(card):
                            break
                    elif option2 == 8:
                        print("请收好您的卡片!")
                        break
                    else:
                        print("输入有误!")
        elif option1 == 3:
            at.unlock_card()
        elif option1 == 4:
            at.reissue_card()
        else:
            print("输入有误!")

银行ATM系统(python) 1.定义一个全局变量:money,用于记录银行卡余额(默认5000000)3.存款、取款后,都应显示一下当前余额 (取款余额不足时,会显示当前余额)2.定义一个全局变量:name,用于记录客户姓名(启动程序默认)4.客户选择退出或者输入错误,程序会退出,否则会一直运行。2.查询余额、存款、取款后都会返回主菜单。-取款函数 get_money()-查询余额函数 query()-主菜单函数 main()1.程序启动后要求输入客户姓名。-存款函数 save() 阅读详情

相关推荐

Python实现银行管理系统

它可以帮助银行实现客户账户管理、存款和取款、转账、贷款管理等功能。在本文中,我将使用Python编程语言来实现一个简单的银行管理系统,并提供相应的源代码。首先,我们需要定义一个银行账户类(BankAccount),该类将包括账户持有人的姓名、账户号码、余额等属性,以及存款、取款和查询余额等方法。当然,这只是一个基础的版本,你可以根据需求进行扩展和修改,例如添加转账功能、贷款管理等。接下来,我们可以创建一个银行类(Bank),该类将包括多个银行账户对象,并提供创建账户、存款、取款和查询余额等方法。

ByteLegend的博客 1524

python实现银行管理系统

银行管理系统,实现用户的开户,转账,取款,存款,查询,锁定,解锁账户等七大功能

weixin_56853728的博客 6750

银行家算法

银行家算法(Banker’s Algorithm)是一种资源分配与死锁预防算法,由艾兹格·迪杰斯特拉在1965年为T.H.E系统设计。该算法以银行借贷系统的分配策略为基础,判断并保证系统的安全运行。

max500600的博客 506

使用python实现简单的银行管理系统

一个简单的基于python的银行管理系统的代码实现。

XiaoHei123的博客 5597

基于Flask的Python网上银行管理系统设计与实现

Flask是一个用Python编写的轻量级Web应用框架,它是Werkzeug WSGI工具集和Jinja2模板引擎的结合体。Flask的设计哲学是用最简单的方式实现Web应用的开发,它不强制使用特定的数据库或模板语言,让开发者拥有最大的自由度。

weixin_31419153的博客 860

银行管理系统python代码

一个简单且实用的银行管理系统python代码,通俗易懂,可直接在python编辑器上运行

Python基础项目实践之:面向对象方法实现模拟银行管理系统

面向对象方法实现模拟银行管理系统代码如下: import prettytable as pt # 表格形式显示 import time bank_log = [] # 初始化银行交易日志

My_daily_life的博客 1844

【C++】auto关键字(C++11,超详细解析,小白必看系列)

本文详细解析了C++中的“auto”关键字,介绍了其定义、基本用法、限制和高级用法,特别是与范围for循环和Lambda表达式结合的应用。

m0_73494049的博客 6万+

python对于银行家算法的实现

python对于银行家算法的实现 近段时间在搞操作系统的课程设计,其中要求做一个银行家算法,下面的代码是一个最基础的算法实现,如果想要增加功能比如划分不同的资源种类,可以再此代码上进行改进。 pcb=[] n=int(input('请输入你的进程数:')) Available = int(input("请输入系统已有的资源数")) #输入函数 def inputFun(): i = 0 ...

Ivan__1999的博客 1812

Windsurf 入门指南:从安装到实战(免费AI IDE新选择)

本文是Windsurf AI IDE的详细入门指南,涵盖从下载安装到核心功能实战的全过程。通过对比分析,文章指出Windsurf凭借其免费、小白友好的特性及强大的上下文感知能力,成为学习编程和提升开发效率的新选择,特别适合零基础开发者和寻求高效AI编程工具的开发者。

weixin_29237635的博客 855

RJ45以太网接口EMC设计方案

RJ45以太网接口EMC设计方案 一、 接口概述 RJ45以太网接口是目前应用最广泛的通讯设备接口,以太网口的电磁兼容性能关系到通讯设备的稳定运行。赛盛技术应用电磁兼容设计平台(EDP)软件从接口原理图、结构设计,线缆设计三个方面来设计以太网口的EMC设计方案。 二、 接口电路 原理图的EMC设计 百兆以太网接口2KV防雷滤波设计 图1 百兆以太网接口2KV防雷滤波设计 接口电路设计概述: 本方案从EMC原理上,进行了相关的抑制干扰和抗敏感度的设计;从设计层次解决EMC问题;同时此电路兼容了百兆以太网接

兰陵笑笑生SD的博客 1万+

银行ATM系统|python实现

通过python实现银行ATM系统的简易功能

很开心你能来~ 942

【Verilog模块例化全解析:从入门到精通】

本文详细解析了Verilog模块例化的核心概念与方法。主要内容包括: 模块定义与例化的基本概念,强调模块例化会生成独立硬件电路; 两种端口连接方式:位置映射(按顺序连接)和名称映射(按端口名连接),推荐使用名称映射提高可读性; 参数化例化方法,通过parameter实现可配置模块设计; 多层模块嵌套的实战应用,展示复杂设计的层次化实现。 文章通过2位加法器等代码示例,对比分析了不同例化方式的优缺点,为硬件设计中的模块复用提供了实用指导。重点推荐名称映射和参数化设计方法,以提高代码可维护性和设计灵活性。

m0_58476824的博客 1328

基于Python的网上银行综合管理系统

在此基础上,结合现有网上银行综合管理体系的特点,运用新技术,构建了以Django为基础的网上银行综合管理信息化管理体系。首先,以需求为依据,对目前传统的网上银行综合管理基础业务进行了较为详尽的了解和分析。根据需求分析结果进行了系统的设计,并将其划分为管理员和用户两种角色:主要功能包括首页,个人中心,用户管理,银行账户管理,存款信息管理,取款信息管理,转账信息管理,挂失信息管理等。

qq 79856539的博客 802

Linkage Mapper 输出文件夹结构解析——LCPs(栅格廊道)、LinkagePaths(矢量廊道)、Nodes(节点)

Linkage Mapper输出文件解析摘要 Linkage Mapper是生态连通性分析的重要工具,通过最小累积阻力模型(MCR)识别物种迁移廊道。其输出包含三类核心文件: LCPs(栅格廊道):存储累积阻力值的栅格数据,直观展示低阻力路径,适用于空间分析和廊道质量评估。 LinkagePaths(矢量廊道):以矢量线状要素精确记录廊道位置和走向,便于地图可视化及连通性分析。 Nodes(节点):标记廊道关键点(起点/终点/交汇点),为保护策略制定提供依据。 典型应用场景包括: 山地物种(如大熊猫)栖息地

走向CTO的路上... 1332

基于STM32的智能手环心率血氧体温监测系统(完整设计)

本文设计了一款基于STM32单片机的多功能智能手环系统,集成心率、血氧、体温实时监测功能,并支持运动数据管理与健康预警。系统采用MAX30102传感器实现心率血氧监测,DS18B20检测体温,ADXL345进行步数统计,通过OLED屏幕显示数据。研究通过低功耗硬件选型与模块化软件架构设计,实现了多参数同步采集、阈值预警及蓝牙数据传输功能。测试结果表明,系统在健康监测精度、续航能力及用户交互体验上均达到预期目标,为个人健康管理提供了实用解决方案。

3254968421的博客 701

15分钟学 Python 第27天 : 网络编程基础-简易银行系统

Socket是网络通讯的一种基础形式,它提供了一个在网络中进行数据发送和接收的双向通道。流式Socket(TCP):面向连接的,可靠的数据传输。数据报Socket(UDP):无连接,不保证数据传输的可靠性。TCP(传输控制协议): 确保数据的准确和完整传输。IP(互联网协议): 负责在网络中传输数据包,并找到目标位置。本课程通过构建一个简易银行系统,实践了Python网络编程的基本概念,包括Socket的使用、客户端-服务器模型及数据处理。

weixin_40780178的博客 1211

java项目反编译工具记录,共计6个工具

java项目反编译工具记录,共计6个工具

橙-极纪元-JJYCheng 1801

基于python的网上银行综合管理系统

Java领域优质创作者🏆、专注于Java技术领域和学生毕业项目实战,高校老师/讲师/同行交流合作。

2301_79727522的博客 988

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

Python 实现简易银行 ATM 系统

2.金额验证 3.登录 4.存取款 5. 主流程控制 :入口函数,提供 “登录、注册、退出” 三大主功能选择;:登录成功后显示操作菜单,跳转至查询、存取款、改密等功能。

SPD123456789的博客 404

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

使用 Python 实现银行账户管理系统

该代码实现了一个简易银行账户管理系统,包含余额查询、存款、取款和退出功能。

StarPrayers.的博客 367

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

深入Python封装:从基础到实战的全面解析!!

封装是Python面向对象编程(OOP)的四大特征之一。

AI Agent 首席体验官 2305

用Python队列模拟银行窗口业务:从PTA数据结构题到真实场景的代码实现

本文详细介绍了如何使用Python队列模拟银行窗口业务,从基础的PTA数据结构题目出发,逐步升级为面向对象的工程化实现。文章涵盖了队列应用的核心概念、代码重构技巧以及真实场景中的边界条件处理,帮助开发者掌握数据结构在实际业务中的应用。

weixin_30074763的博客 219

Python综合练习:从基础语法到实战项目,构建简易银行账户管理系统

在Python编程学习中,掌握基础语法只是第一步,如何将变量、循环、条件判断、函数和类等零散知识点融会贯通,是迈向实战开发的关键。综合练习正是打通这一关节的核心方法,它通过模拟真实场景,训练开发者用代码解决具体问题的工程化思维。其技术价值在于帮助初学者建立知识连接、暴露思维盲区,并通过项目实践获得正向反馈。常见的应用场景包括开发小游戏、数据处理脚本或管理系统等。本文以构建一个“简易银行账户管理系统”为例,深入讲解如何利用字典、列表、函数和循环等基础语法,结合输入验证、异常处理等实战技巧,完成一个结构清晰、功

weixin_33600816的博客 350
上一篇: python的异常处理和调试
下一篇: 文件的读写操作和遍历目录
Are you ready
博客等级 码龄8年 312粉丝 33原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值