python-ATM机

news2024/11/15 21:02:52

编写程序,实现一个具有开户、查询、取款、存款、转账、锁定、解锁、退出功能的银行管理系统。

结果展示
result

1.Main主方法


from zzjmxy.class7.atm import ATM
from zzjmxy.class7.manager import Manager
# 主面板,实现主要逻辑

if __name__=="__main__":
    manager=Manager("admin","123456")
    if manager.login()==1:
        print("登录成功")
        atm=ATM()
        atm.hello()
        atm.option()
        print("欢迎下次使用")
    else:
        print("密码错误,程序退出,警察开始抓人")
        manager.logout()

2.Manager管理员类


class Manager:

    def __init__(self,name,passwd):
        self.name=name
        self.passwd=passwd

    def login(self):
        print("===登录===")
        name=input("请输入用户名")
        passwd=input("请输入密码")
        if self.name==name and self.passwd==passwd:
            return 1
        else:
            return 0
    def logout(self):
     print("退出")

3.用户类

import random
import string
from zzjmxy.class7.card import Card
class User:
    UIDs=[]
    name,id,phone,passwd,__isLocked,card="","","","",False,""
    def rollup(self):
        print("开户中......")
        self.name = input("请输入姓名:")
        self.id = input("请输入身份证号:")
        self.phone = input("请输入手机号:")
        money = int(input("请输入预存金额:"))
        while money<=0:
            money=int(input("金额过小,请输入密码:"))
        passwd1 = input("请输入密码:")
        passwd2 = input("请再次输入密码:")
        while passwd2!=passwd1:
            print("两次密码不一致,请重新输入:")
            passwd1 = input("请输入密码:")
            passwd2 = input("请再次输入密码:")

        self.passwd = passwd2
        print("请牢记你的密码:" + self.passwd)
        UID = ''.join(random.choices(string.digits, k=8))
        while UID in self.UIDs:
            UID = ''.join(random.choices(string.digits, k=8))
        self.UID = UID
        print("开户成功,你的UID为:" + UID)
        self.UIDs.append(UID)
        self.card=Card(money)
        return UID
    def lock(self):
        self.__isLocked=True
    def unlock(self):
        self.__isLocked=False
    def islock(self):
        return self.__isLocked
    def getUID(self):
        return ''.join(random.choices(string.digits, k=8))

4.Card银行卡类

class Card:
    credit=""
    def __init__(self,money):
        self.money=money
    def deposit(self,money):
        self.money+=money
        return self.money
    #判断交给前端,后端不进行判断
    def withdraw(self,money):
        self.money-=money
        return self.money

5.ATM类

from zzjmxy.class7.user import User


class ATM:
    yewu={1:"开户",
          2:"查询",
          3:"取款",
          4:"存款",
          5:"转账",
          6:"锁定",
          7:"解锁",
          8:"退出"}
    users={}
    flag=True
    def hello(self):
        print("="*30)
        print("="+" "*8+"欢迎来到atm机"+" "*9+"=")
        for i,v in self.yewu.items():
            print("="+" "*8+v+":"+str(i)+" "*15+"=")
        print("="*30)
    def option(self):
        while self.flag:
            option=int(input("请选择你要进行的业务(输入业务所代表的数字):") or "0")
            if(option==1):
                self.kaihu()
            elif option==2:
                UID = input("请输入账户ID:")
                self.chaxun(UID)
            elif option==3:
                UID = input("请输入账户ID")
                if self.isLocked(UID) == False:
                    print("账户为锁定状态")
                else:
                    money=int(input("请输入取款金额"))
                    self.qukuan(UID,money)
            elif option==4:
                UID = input("请输入账户ID:")
                if self.isLocked(UID):
                    print("账户为锁定状态")
                else:
                    money = int(input("请输入存款金额:"))
                    self.cunkuan(UID, money)
            elif option==5:
                # UIDin,UIDout,money
                UIDin=input("请输入转入ID:")
                UIDout = input("请输入转出ID:")
                money = int(input("请输入转账金额:"))
                self.zhuanzhang(UIDin,UIDout,money)
            elif option==6:
                UID = input("请输入锁定ID:")
                self.suoding(UID)
            elif option==7:
                UID=input("请输入解锁ID:")
                self.jiesuo(UID)
            elif option==8:
                self.tuichu()
            else:
                print("输入有误,默认退出")
                self.tuichu()

    def kaihu(self):
        print("开户")
        user=User()
        UID=user.rollup()
        self.users[UID]=user
    def chaxun(self,UID):
        print(f"查询结果余额为:{self.users[UID].card.money}")
    def qukuan(self,UID,outM):
        passwd=input("请输入账号密码:")
        Upasswd = self.users[UID].passwd
        if Upasswd==passwd:
            money=self.users[UID].card.money
            if(money>=outM):
                newMoney=self.users[UID].card.withdraw(outM)
                print(f"取款成功,当前金额为:{newMoney}")
                return 1
            else:
                print(f"取款失败,存款不足哦,当前{UID}金额为:{money}")
                return 0
        print("密码错误")
        return 0
    def cunkuan(self,UID,outM):
            newMoney=self.users[UID].card.deposit(outM)
            print(f"存款成功,当前存款为:{newMoney}")
            self.chaxun(UID)
            return 1
    def zhuanzhang(self,UIDin,UIDout,money):
        print("转账")
        # self.users[UIDin].card.deposit(money)
        # self.users[UIDout].card.withdraw(money)
        if self.isLocked(UIDin) and self.isLocked(UIDout):
            print("转账失败,有账户为锁定状态")
        if self.qukuan(UIDout,money):
            self.cunkuan(UIDin,money)
            print("转账成功")

    def suoding(self,UID):
        if self.isLocked(UID):
            print("已经锁定了")
            return 0
        self.users[UID].lock
        print("锁定成功")
        return 1

    def jiesuo(self,UID):
        if self.isLocked(UID):
            self.users[UID].unlock()
            print("锁定成功")
            return 1
        print("已经是解锁状态了")
        return 0
    def tuichu(self):
        self.flag=False
    def isLocked(self,UID):
        self.users[UID].islock()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1284860.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

你的AI生成物侵权了吗?

你的AI生成物侵权了吗&#xff1f; 本文目录&#xff1a; 一、前置背景 1.1、什么是版权 1.2、什么是作品 1.3、什么是创作 1.4、什么是肖像权 1.5、什么是名誉 二、AI生成的作品是否具备版权&#xff1f;如果具备&#xff0c;版权应该属于谁&#xff1f; 三、AI 学习时…

Hadoop进阶学习---Yarn资源调度架构

1.Yarn执行MR流程 1.客户端提交一个MR程序给ResourceManager(校验请求是否合法…) 2.如果请求合法,ResourceManager随机选择一个NodeManager用于生成appmaster(应用程序控制者,每个应用程序都单独有一个appmaster) 3.appmaster会主动向ResourceManager的应用管理器(applicatio…

启动 AWS Academy Learner Lab【教学】(Hadoop实验)

&#x1f525;博客主页&#xff1a; A_SHOWY&#x1f3a5;系列专栏&#xff1a;力扣刷题总结录 数据结构 云计算 第一部分 创建实例过程 首先&#xff0c;需要创建3台EC2&#xff0c;一台作主节点 (master node)&#xff0c;两台作从节点 (slaves node)。 1.镜像选择 EC2&…

金蝶云星空表单插件单据体批量删除,序号自增

文章目录 金蝶云星空表单插件单据体批量删除&#xff0c;序号自增字段标识说明表单插件获取单据体数据包移除物料为空的行其他移除物料为空的行的方式&#xff0c;但是测试不通过&#xff0c;不建议使用序号重新生成测试 金蝶云星空表单插件单据体批量删除&#xff0c;序号自增…

Hadoop进阶学习---HDFS分布式文件存储系统

1.hdfs分布式文件存储的特点 分布式存储:一次写入,多次读取 HDFS文件系统可存储超大文件,时效性较差. HDFS基友硬件故障检测和自动快速恢复功能. HDFS为数据存储提供很强的扩展能力. HDFS存储一般为一次写入,多次读取,只支持追加写入,不支持随机修改. HDFS可以在普通廉价的机器…

【新手解答8】深入探索 C 语言:递归与循环的应用

C语言的相关问题解答 写在最前面问题&#xff1a;探索递归与循环在C语言中的应用解析现有代码分析整合循环示例代码修改注意事项结论 延伸&#xff1a;递归和循环的退出条件设置解析使用递归使用循环选择适合的方法 写在最前面 一位粉丝私信交流&#xff0c;回想起了当初的我C…

葡萄酒的储存条件会影响葡萄酒的陈酿吗?

自20世纪末以来&#xff0c;葡萄酒储存有关的行业一直在增长&#xff0c;一些葡萄酒鉴赏家可能会选择将葡萄酒存放在家里的专用房间或壁橱里。 自云仓酒庄品牌雷盛红酒分享总所周知&#xff0c;瓶装葡萄酒的储存条件是会影响葡萄酒的陈酿&#xff0c;振动和热波动会加速葡萄酒的…

室内外融合便携式定位终端5G+UWB+RTK

一、介绍 便携式定位终端主要用于提供高精度的位置数据&#xff0c;支持室内UWB定位和室外北斗系统定位功能&#xff0c;支持5G公网和5G专网通信功能&#xff0c;便携式定位终端中超宽带(UWB)和实时动态(RTK)技术的集成代表了精确位置跟踪方面的重大进步。这款UWBRTK便携式定位…

fastadmin权限树。树形下拉框

fastadmin 笔记 权限树 在构造方法中编写相应的代码 值得一提的是&#xff0c;你的表必须有 id 字段以及 pid 字段。 // 必须将结果集转换为数组$ruleList \think\Db::name("state_list")->field(createtime,updatetime, true)->order(id ASC)->select();…

Vue中使用 v-for 循环遍历对象

Vue中使用 v-for 循环遍历对象 start 经常使用 v-for 去遍历我们的数组&#xff0c;然后渲染页面。其实也可以遍历对象&#xff0c;下面介绍一下遍历对象的写法。 代码示例 <template><div id"app"><div v-for"(value, key) in obj" :k…

【23-24 秋学期】NNDL 作业10 BPTT

习题6-1P 推导RNN反向传播算法BPTT. 习题6-2 推导公式(6.40)和公式(6.41)中的梯度&#xff0e; 习题6-3 当使用公式(6.50)作为循环神经网络的状态更新公式时&#xff0c; 分析其可能存在梯度爆炸的原因并给出解决方法&#xff0e; 习题6-2P 设计简单RNN模型&#xff0c;分别…

VSCode 配置JavaScript环境

首先下载node.js&#xff0c;我的电脑是Windows10版本 之后安装node 在这里插入图片描述 安装成功 如果发现运行的时候还是报错&#xff0c;则添加环境变量试试 在Windows10版本的搜索框&#xff0c;搜索环境变量&#xff0c;点击 D:\Program Files\nodejs\ %NODE_HOME…

ArcGIS平滑处理栅格数据

一、实验背景 基于栅格数据的空间分析&#xff0c;常常需要根据特定的分析场景对栅格数据进行处理&#xff0c;如栅格数据的噪声处理。噪声是属性值具有突跃特征的像元位置&#xff0c;直接对带有噪声的栅格数据进行分析会对结果造成较大的影响。而降噪的主要方法之一是平滑&a…

Vue 生成包含数字大小写字母的随机字符串

generateRandomID() {const characters 0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ;const idLength 30; // 字符串长度 这里生成30位的let randomID ;for (let i 0; i < idLength; i) {const randomIndex Math.floor(Math.random() * characters…

GitHub Copilot试用指南

GitHub Copilot试用指南 首先读这个文档&#xff0c;按照步骤开启30天的试用&#xff1a;管理个人帐户的 GitHub Copilot 订阅 然后读这个文档&#xff1a;使用 IDE 中的 GitHub Copilot 聊天 &#xff0c;在你习惯使用的IDE中配置copilot&#xff0c;暂时好像只支持jetbrai…

EM32DX-E4【C#】

1外观&#xff1a; ecat总线&#xff0c;分布式io 2电源&#xff1a; 靠近SW拨码&#xff1a;24V 中间&#xff1a;0V 靠近面板&#xff1a;PE接地 3DI&#xff1a; 6000H DI输入寄存器 16-bit &#xff08;16位输入&#xff09; 00H U8 子索引总数 01H Unsigned16 IN1…

YoloV5改进策略:Swift Parameter-free Attention,无参注意力机制,超分模型的完美迁移

摘要 https://arxiv.org/pdf/2311.12770.pdf https://github.com/hongyuanyu/SPAN SPAN是一种超分网络模型。SPAN模型通过使用参数自由的注意力机制来提高SISR的性能。这种注意力机制能够增强重要信息并减少冗余,从而在图像超分辨率过程中提高图像质量。 具体来说,SPAN模…

【Filament】Filament环境搭建

1 前言 Filament 是一个实时物理渲染引擎&#xff0c;用于 Android、iOS、Linux、macOS、Windows 和 WebGL 平台。该引擎旨在提供高效、实时的图形渲染&#xff0c;并被设计为在 Android 平台上尽可能小而尽可能高效。Filament 支持基于物理的渲染&#xff08;PBR&#xff09;&…

CefSharp 获取POST(AJAX)、GET消息返回值(request)

CefSharp作为专门为爬虫工具开发的库比Selenium这种开发目的是页面测试工具然后用来做爬虫的工具要贴心得多。我们操作网页的时候发送或者做了某个动作提交表单之后需要知道我们的动作或者提交是否成功&#xff0c;因为有的页面会因为网络延迟问题提交失败&#xff0c;需要准确…

2022 China Collegiate Programming Contest (CCPC) Guilin Site

A.Lily Problem - A - Codeforces 题意 思路 数所有周围没L的格子 #include <bits/stdc.h>using i64 long long;constexpr int N 2e5 10; constexpr int mod 1e9 7; constexpr int Inf 0x3f3f3f3f; constexpr double eps 1e-10;std::string s;int n;void solv…