python中ATM系统的实现

这是一个用Python编写的ATM系统模拟程序,包括卡类(Card)和用户类(Person),支持用户登录、开户、查询余额、取款、存款、转账、修改密码、锁定和解锁卡等功能。用户数据存储在pickle文件中进行持久化。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

‘’’
ATM系统
卡:卡号,密码,金额,锁
用户:name,idcard,phonenum,card
ATM系统:
属性:用户列表 登录状态
行为: 1.登陆 2.开户 3.查询 4.取款 5.存款 0.退出
6.转账 7.改密 8.锁卡 9.解锁
‘’’
‘’’
import time
import random
import pickle
class Card:
def init(self,kahao,mima,money,suo=False):
self.kahao=kahao
self.mima=mima
self.money=money
self.suo=suo
class Person:
def init(self,name,idcard,phonenum,card):
self.name=name#input(‘请输入姓名:’)
self.idcard=idcard#input(“请输入身份证号:”)
self.phonenum=phonenum#input(‘请输入手机号:’)
self.card=card
class ATM:
i=1
personDict={}
islogin=None
@staticmethod
def welcome():
print(
# **********************
# * *
# * welcome to bank *
# * *
# **********************
)
@staticmethod
def select():
print(
# **********************
# * 1.登陆 2.开户 *
# * 3.查询 4.取款 *
# * 5.存款 0.退出 *
# * 6.转账 7.改密 *
# * 8.锁卡 9.解锁 *
# **********************
)
num = input(“请选择服务项目:”)
return num
@classmethod
def getcard(cls):
while 1:
kahao=’’
for i in range(6):
kahao+=str(random.randrange(0,10))
if kahao not in cls.personDict:
# return kahao
return kahao

@classmethod
def openUser(cls):
    name = input("请输入您的姓名:")
    idcard = input("请输入您的身份证号码:")
    phonenum = input("请输入您的电话号码:")
    psd = input("请设置您的密码:")
    psd2 = input("请确认您的密码:")
    if psd == psd2:
        mon = int(input("请输入您的预存余额:"))
        if mon > 0:
            cardnum = cls.getcard()
            card = Card(cardnum, psd, mon)
            user = Person(name, idcard, phonenum, card)
            cls.personDict[cardnum] = user
            print("开卡成功,您的卡号为%s,请牢记..." % cardnum)

        else:
            print("预存余额非法,开卡失败...")

    else:
        print("两次输入密码不一致,开卡失败...")
@classmethod
def login(cls):
    if cls.i>2:
        # cls.personDict.get(cls.islogin).card.suo=True
        print('的卡已被锁你住,请解锁')
        # cls.personDict.get(cls.islogin).card.suo = True
    else:
        cardnum=input('请输入您的卡号:')
        user=cls.personDict.get(cardnum)
        if user:
            psd=input('请输入您的密码:')
            if psd==user.card.mima:
                print('恭喜你登陆成功')
                cls.islogin=cardnum
            else:
                cls.i+=1
                print('密码错误,登陆失败')
        else:
            print('卡号不存在')
@classmethod
def search(cls):
    if cls.islogin:
        print("您当前的余额为%d" % (cls.personDict.get(cls.islogin).card.money))
    else:
        print("请登录后查询")

@classmethod
def qukuan(cls):
    if cls.islogin:
        n = int(input('请输入取款金额:'))
        if n>cls.personDict.get(cls.islogin).card.money:
            print('你卡里没那麽多钱')
        else:
            cls.personDict.get(cls.islogin).card.money -= n
    else:
        print("请登录后取款")
@classmethod
def cunkuan(cls):
    if cls.islogin:
        n = int(input('请输入存款金额:'))
        cls.personDict.get(cls.islogin).card.money += n
    else:
        print("请登录后存款")

@classmethod
def zhuan(cls):
    if cls.islogin:
        kahao=int(input('请输入转帐账号:'))
        n = int(input('请输入转帐金额:'))
        if n>cls.personDict.get(cls.islogin).card.money:
            print('你卡里没那麽多钱')
        else:
            cls.personDict.get(cls.islogin).card.money -= n
    else:
        print("请登录后转帐")
@classmethod
def mima(cls):
    if cls.islogin:
        print('您的原密码为%s'%cls.personDict.get(cls.islogin).card.mima)
        mima=input('请输入新的密码:')
        cls.personDict.get(cls.islogin).card.mima=mima
        print('恭喜你改密成功')
    else:
        print("请登录后改密")
@classmethod
def suo(cls):
    cls.i=3
    print('您的卡已经被锁住')
@classmethod
def jiesuo(cls):
    cls.i=0
    print('解锁成功')

if name == ‘main’:
ATM.welcome()
try:
with open(‘use.txt’,‘rb’)as f:
ATM.personDict=pickle.load(f)
except:
pass
while True:
time.sleep(1)
print(ATM.personDict)
num = ATM.select()
if num == “2”:
print(“开户”)
ATM.openUser()
elif num==‘1’:
print(‘登陆’)
ATM.login()
elif num==‘3’:
print(‘查询’)
ATM.search()
elif num == ‘4’:
ATM.qukuan()
elif num == ‘5’:
ATM.cunkuan()
elif num == ‘6’:
ATM.zhuan()
elif num == ‘7’:
ATM.mima()
elif num == ‘8’:
ATM.suo()
elif num==‘9’:
ATM.jiesuo()
elif num == “0”:
print(“退出”)
with open(‘user.txt’,‘rb’)as f2:
pickle.dump(ATM.personDict,f2)
break
else:
print(“选择有误请重新选择…”)

‘’’

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值