基于python的一个简单的ATM实现

基于python的一个简单的ATM实现,使用了面对对象思想,josn序列化对数据进行持久化处理。

登陆主界面

在这里插入图片描述
类的设计:

class Card:
    def __init__(self,cardNum,Password,money,boolOne=False):
        self.cardNum = cardNum
        self.__Password = Password
        self.__money = money
        self.boolOne = boolOne
    @property
    def Password(self):
        return self.__Password
    @Password.setter
    def Password(self,Password):
        self.__Password = Password
    @property
    def money(self):
        return self.__money
    @money.setter
    def money(self, money):
        self.__money = money
class User:
    def __init__(self,name,idcard,phonenum,card):
        self.name = name
        self.idcard = idcard
        self.phonenum = phonenum
        self.card = card

注册功能:

@classmethod
    def OpenAccount(cls):
        name = input("请输入你的姓名:")
        idcard = input("请输入你的身份证号码:")
        phonenum = input("请输入你的电话号码:")
        password = input("请输入你的银行卡密码:")
        password1 = input("请确认你的银行卡密码:")
        if password == password1:
            cardnum = cls.getcardnum()
            Card1 = Card(cardnum,password1,money=0,boolOne=False)
            User1 = User(name,idcard,phonenum,Card1)
            cls.ATMDict[cardnum] = User1
            cls.addObj(User1)
            print("开户成功!你的卡号为%s,请牢记!"%cardnum)
        else:
            print("开户失败")

json处理数据的读写:
系统数据的读写是使用json进行文件的修改,先用Xg函数匹配出修改的位置然后进行文件的修改,因为无法直接修改导入了fileinput模块实现文件的按行删除具体在delLine函数。需要修改就删除需要修改的一行数据,然后添加一个新的数据,原信息不变,修改修改的地方。

def User2dict(User):
    return User.__dict__
def User2User(b):
    return User(b["name"],b["idcard"],b["phonenum"],Card(b["card"]["cardNum"],b["card"]["_Card__Password"],
                                                         b["card"]["_Card__money"],b["card"]["boolOne"]))
def UserA(Num):
    with open("User.txt","r",encoding="utf-8") as f:
        for line in f.readlines():
            dict1 = json.loads(line)
            x = User2User(dict1)
            if x.card.cardNum == Num:
                return x
        else:
            return None
def Xg(cardNum1,key,value):
    with open("User.txt", "r", encoding="utf-8") as f:
        for line in f.readlines():
            dict1 = json.loads(line)
            x = User2User(dict1)
            if x.card.cardNum ==cardNum1:
                dict1["card"][key] = value
                x2 = User2User(dict1)
                return x2
        else:
            return None
def delLine(cardNum1):
    for line in fileinput.input("User.txt",inplace=True):
        if cardNum1 in line:
            pass
        else:
            print(line.rstrip())

文件数据写入

@classmethod     #数据写入文件
    def addObj(cls, obj):
        with open(cls.path, "a", encoding="utf-8") as f:
            json.dump(obj, f, default=User2dict)
            f.write("\n")
@classmethod  #开户账号随机函数
   def getcardnum(cls):
        while True:
            cardnum = ""
            for x in range(6):
                cardnum += str(random.randrange(0,10))
            if cardnum not in cls.ATMDict:
                return cardnum

开户操作

@classmethod
    def OpenAccount(cls):
        name = input("请输入你的姓名:")
        idcard = input("请输入你的身份证号码:")
        phonenum = input("请输入你的电话号码:")
        password = input("请输入你的银行卡密码:")
        password1 = input("请确认你的银行卡密码:")
        if password == password1:
            cardnum = cls.getcardnum()
            Card1 = Card(cardnum,password1,money=0,boolOne=False)
            User1 = User(name,idcard,phonenum,Card1)
            cls.ATMDict[cardnum] = User1
            cls.addObj(User1)
            print("开户成功!你的卡号为%s,请牢记!"%cardnum)
        else:
            print("开户失败")

登陆

@classmethod
   def Login(cls):
       cardnum = input("        账号名:")
       user = UserA(cardnum)
       if user:
           if user.card.boolOne == False:
               if user:
                   psd = input("        密码:")
                   if psd == user.card.Password:
                       print("        登陆成功!")
                       cls.islogin = user.card.cardNum
                   else:
                       cls.index += 1
                       if cls.index ==3:
                           print("        你的卡号已经被锁,请联系管理员解锁")
                           m=Xg(user.card.cardNum,"boolOne",True)
                           delLine(user.card.cardNum)
                           ATM.addObj(m)
                       else:
                           print("        登陆失败!你还有%d次机会登陆" % (3 - cls.index))
           else:
               print("        你的卡号已经被锁,请联系管理员解锁")
       else:
           print("        账号名密码错误!")

存款取款

@classmethod
   def Deposit(cls):
       if cls.islogin:
           print("您当前的余额为%d" % UserA(cls.islogin).card.money)
           num = input("请输入存款金额:")
           # UserA(cls.islogin).card.money += int(num)
           Num=UserA(cls.islogin).card.money+int(num)
           m = Xg(UserA(cls.islogin).card.cardNum, "_Card__money",Num)
           delLine(UserA(cls.islogin).card.cardNum)
           ATM.addObj(m)
           print("存款成功!")
       else:
           print("请登陆后存款")

   @classmethod
   def Withdrawal(cls):
       if cls.islogin:
           print("您当前的余额为%d" % UserA(cls.islogin).card.money)
           num = input("请输入取款金额:")
           if UserA(cls.islogin).card.money > int(num):
               # UserA(cls.islogin).card.money -= int(num)
               Num = UserA(cls.islogin).card.money - int(num)
               m = Xg(UserA(cls.islogin).card.cardNum, "_Card__money", Num)
               delLine(UserA(cls.islogin).card.cardNum)
               ATM.addObj(m)
               print("取款成功!")
           else:
               print("余额不足,请重新选择!")
       else:
           print("请登陆后取款")

解锁、锁卡

@classmethod
   def LockCard(cls):
       if cls.islogin:
           cardnum = input("        请输入你需要锁卡的账号名:")
           user = UserA(cardnum)
           if user:
               m = Xg(user.card.cardNum, "boolOne", True)
               delLine(user.card.cardNum)
               ATM.addObj(m)
               print("        锁卡成功")
           else:
               print("        不存在此卡号!!!")
       else:
           print("请登陆后进行锁卡操作")

   @classmethod
   def UnLock(cls):
       cardnum = input("        请输入你需要解锁的账号名:")
       user = UserA(cardnum)
       if user:
           m = Xg(user.card.cardNum, "boolOne", False)
           delLine(user.card.cardNum)
           ATM.addObj(m)
           print("        解锁成功")
       else:
           print("        不存在此卡号!!!")

查询、转账

@classmethod
   def search(cls):

       if cls.islogin:
           print("        您当前的余额为%d"%UserA(cls.islogin).card.money)
       else:
           print("        请登陆后查询")

   @classmethod
   def Transfer(cls):
       if cls.islogin:
           cardnum =input("请输入你的转账账户:")
           if UserA(cardnum):
               num = input("请输入转账金额:")

               x=UserA(cls.islogin).card.money - int(num)
               m = Xg(UserA(cls.islogin).card.cardNum, "_Card__money", x)
               delLine(UserA(cls.islogin).card.cardNum)
               ATM.addObj(m)


               x1=UserA(cardnum).card.money + int(num)
               i = Xg(UserA(cardnum).card.cardNum, "_Card__money", x1)
               delLine(UserA(cardnum).card.cardNum)
               ATM.addObj(i)
               print("转账成功")

           else:
               print("不好意思没有此卡信息!")
       else:
           print("        请登陆后进行转账操作")

以上代码基于pythonATM系统的实现,有什么不对的地方还望指正,欢迎大家交流!以后会持续更新关于爬虫、Django、机器学习、数据挖掘、数据分析相关技术分析以及个人见解。
如有需求,欢迎大家访问GitHub基于python的ATM系统的实现去下载此项目

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值