python-ATM机

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

结果展示
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()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Maven】更新依赖索引

有时候给idea配置完maven仓库信息后&#xff0c;在idea中依然搜索不到仓库中的jar包。这是因为仓库中的jar包索引尚未更新到idea中。这个时候我们就需要更新idea中maven的索引了&#xff0c;具体做法如下&#xff1a; 打开设置----搜索maven----Repositories----选中本地仓库-…

如何搭建eureka-server

在Spring Cloud项目的pom文件中添加eureka-server的starter依赖坐标 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://ma…

指针(3)

如图&#xff0c;这是比较常见的冒泡排序&#xff0c;不过只能对整形数据进行排序。本篇博文主要介绍如何模拟qsort函数实现冒泡排序对任何数据的排序。 如果我们想对任何数据进行排序&#xff0c;我们可以发现&#xff0c;排序的趟数是固定的&#xff0c;我们只需要对比较大…

CFS三层靶机内网渗透

CFS三层靶机内网渗透 一、靶场搭建1.基础参数信息2.靶场搭建2.1网卡配置2.2Target1配置2.2.1 网卡配置2.2.2 Target1 BT配置 2.3Target2配置2.3.1 网卡配置2.3.2 Target2 BT配置 2.4Target3配置 二、内网渗透Target11.1信息收集1.1.1IP收集1.1.2端口收集1.1.3目录收集 1.2 webs…

用 taichi 写个软渲染器

用 taichi 写个软渲染器 What 起点是&#xff1a;可以 setup 一个画布&#xff0c;drawPixel(x, y, color)&#xff0c;然后渲染到 GUI 或者 .png目标是&#xff1a;加载 obj 模型文件和 .tga 贴图文件&#xff0c;并渲染出来使用 taichi 作为 SIMD 加速 backend复现一些 RTR…

【4】PyQt输入框

1. 单行文本输入框 QLineEdit控件可以输入单行文本 from PyQt5.QtWidgets import QApplication, QWidget, QLineEdit, QVBoxLayout from PyQt5.QtCore import * from PyQt5.QtGui import QIcon import sysdef init_widget(w: QWidget):# 修改窗口标题w.setWindowTitle(单行输…

Python (一) 操作Mysql

程序员的公众号&#xff1a;源1024&#xff0c;获取更多资料&#xff0c;无加密无套路&#xff01; 最近整理了一份大厂面试资料《史上最全大厂面试题》&#xff0c;Springboot、微服务、算法、数据结构、Zookeeper、Mybatis、Dubbo、linux、Kafka、Elasticsearch、数据库等等 …

Google视频广告的格式和注意事项

随着互联网和移动设备的普及&#xff0c;视频广告成为了数字营销中重要的一环&#xff0c;Google作为全球最大的搜索引擎和广告平台之一&#xff0c;Google提供了广泛的视频广告服务&#xff0c;帮助企业推广产品以及品牌。那么Google视频广告的格式和注意事项是什么呢&#xf…

离线环境下使用百度地图(vue版)(展示自己的地图瓦片)3.0版本api

1.下载自己想要的地图网片 (1)瓦片图下载 提取百度网盘中文件&#xff0c;然后运行exe文件&#xff0c;选择要下载的层级及地区即可 百度网盘链接&#xff1a;https://pan.baidu.com/s/16sOJ9ws7HCgNH3EMf7Ejyg?pwd0q0e 提取码&#xff1a;0q0e (2)将瓦片图映射到网上 推荐使…

数电笔记之寄存器

数电 1 数字电路基础 1.2 二进制数据表达 1.2.1 二进制简介 1.2.2 用二进制表达文字 常用的中文字符集&#xff1a;GBK&#xff0c;UTF8 1.2.3 用二进制表达图片 图片像素化&#xff0c;像素数字化 1.2.4 用二进制表达声音 1.2.5 用二进制表达视频 1.3 数字电路 1.3…

mysql中year函数有什么用

YEAR()函数用于提取日期或日期时间值中的年份。可以用于提取DATE、DATETIME或TIMESTAMP列中的年份。 SELECT YEAR(date_column) FROM table;# 提取字符串中的数据SELECT YEAR(2023-07-19) FROM table_name;

day70

今日回顾 session 中间件 auth session Cookie虽然在一定程度上解决了“保持状态”的需求&#xff0c;但是由于Cookie本身最大支持4096字节&#xff0c;以及Cookie本身保存在客户端&#xff0c;可能被拦截或窃取&#xff0c;因此就需要有一种新的东西&#xff0c;它能支持更…

TsuKing: Coordinating DNS Resolvers and Queries into Potent DoS Amplifiers

目录 笔记后续的研究方向摘要引言之前的工作。我们的研究贡献 TsuKing: Coordinating DNS Resolvers and Queries into Potent DoS Amplifiers CCS 2023 笔记 本文介绍了一种名为 TsuKing 的新型 DNS 放大攻击。与以前利用单个DNS解析器的攻击不同&#xff0c;TsuKing协调多个…

MPC模型预测控制理论与实践

一、基本概念 最有控制的动机是在约束条件下达到最优的系统表现。 模型预测控制&#xff08;MPC&#xff0c;Model Predictive Control&#xff09;是通过模型来预测系统在某一未来时间段内的表现来进行优化控制&#xff0c;多用于数位控制&#xff0c;通常用离散型状态空间表…

树_二叉搜索树累加求和

//给出二叉 搜索 树的根节点&#xff0c;该树的节点值各不相同&#xff0c;请你将其转换为累加树&#xff08;Greater Sum Tree&#xff09;&#xff0c;使每个节点 node 的新值等于原树中大于或等于 // node.val 的值之和。 // // 提醒一下&#xff0c;二叉搜索树满足下列约束…

9.Unity搭建HTTP服务器

搭建HTTP服务器的几种方式 //1.使用别人做好的HTTP服务器软件&#xff0c;一般作为资源服务器时使用该方式&#xff08;学习阶段建议使用&#xff09; //2.自己编写HTTP服务器应用程序&#xff0c;一般作为Web服务器 或者 短链接游戏服务器时 使用该方式 使用别人做好的HTTP服…

ROS-ROS通信机制-服务通信

文章目录 一、服务通信基本知识二、自定义srv三、C实现四、Python实现 一、服务通信基本知识 服务通信也是ROS中一种极其常用的通信模式&#xff0c;服务通信是基于请求响应模式的&#xff0c;是一种应答机制。也即: 一个节点A向另一个节点B发送请求&#xff0c;B接收处理请求…

通过断点调试解决node 运行js程序直接退出(没有任何报错提示)的问题

现象&#xff1a; node运行程序直接退出&#xff0c;但是从echo $?的返回值可以知道&#xff1a; 一定出现了错误&#xff0c;但是没有显示出来 解决办法&#xff1a; 1. 使用node --inspect-brk 启动程序 然后在浏览器访问chrome://inspect 然后点击inspect 进行单步调试 …

软件设计之桥接模式

实现茶水间&#xff1a;茶可以分红茶和绿茶&#xff0c;每种茶又可以分大杯和中杯&#xff0c;现在你是服务员需要计算茶水的价格。 package Bridge;public class BlackTea implements TeaKind{private float redTeaPrice 2.0f;Overridepublic float price() {return redTeaPr…

“快慢指针”思想在物理或者逻辑循环中的应用

1 基础概念 1.1 什么是物理循环和逻辑循环&#xff1f; 物理循环是指物理索引访问顺序上相邻&#xff0c;逻辑上也相邻&#xff0c;比如循环链表&#xff0c;逻辑循环则指物理的索引上不一定相邻 1.2 快慢指针本质上可以解决逻辑循环问题&#xff0c;而物理循环也属于逻辑循…