大家好,我是被白菜拱的猪。

一个热爱学习废寝忘食头悬梁锥刺股,痴迷于girl的潇洒从容淡然coding handsome boy!


文章目录

  • 前因
  • 功能介绍
  • NO 代码 YOU SAY 个 JB!
  • view.py
  • user.py
  • card.py
  • atm.py(主要的代码都在里面)
  • main.py
  • 来个完美的收尾
  • 悲伤的大结局


前因

嘀嘀嘀嘀,微信几百年没有消息的我,几个嘀嘀打破了下午的宁静

哥啊,发你一个python…ok,包在我身上。就是这么的热心肠。

python的atm机程序 利用python编写自动取款机_不执行


但是哈哈哈哈哈

python的atm机程序 利用python编写自动取款机_不执行_02


辛苦钱辛苦钱,这给了我几年后的几十万彩礼钱又添了些瓦片。假如我未来的对象现在看到的话,你可一定要感动的稀里哗啦。这么好的男人那里找???好了不扯犊子了,我对象兴许还在上幼儿园呢,哪里现在会看到这篇博客。

功能介绍

我擦泪,答应这么爽快,自己python学的那么菜,一学期都没怎么听课,上哪给他搞这个课设去,于是乎狡诈的我点开了码云和github搜了搜哈哈哈,无奈没有找到合适的,这么不要不需要太复杂,于是我想起了寒假b站学python的时候看了一个视频,里面有一个银行自动提款机系统,ok,就他了。
嗐,为了能让学弟对象整明白,那我也得看一遍敲一遍啊。这里我不禁头涔涔而泪潸潸了。他这个视频还只是部分代码,想哭,还得我独自补全。

好了,废话不多说,下面开始严肃的介绍一个这个小系统,这个系统主要是基于管理员操作,也就是说一切都是管理员操作的,主要有,开户,查询,取款,转账,ok,no picture you say 个 jb!小二,上图片。

python的atm机程序 利用python编写自动取款机_python的atm机程序_03


是不是还蛮高大上,别那页面那么简单,其实里面考虑的还蛮全面的。像什么密码输入三次要锁定啦,密码要验证啦。另外所有的输入是以字典的形式存入到allusers.txt文件下的。下面是文件的层次,方便copy,有View界面类,用户类,卡类,ATM类,还有一个主函数,主要的代码还是在atm类里面。

python的atm机程序 利用python编写自动取款机_用户信息_04

NO 代码 YOU SAY 个 JB!

view.py

其实叫admin类会更好一些,目的弟弟python能力尚浅,见谅见谅

import  time

#界面类
class View(object):

    #管理员默认账号,密码
    admin="admin"
    password="admin"

    #打印管理员界面
    def printAdminView(self):
        print("*************************************************")
        print("*                                               *")
        print("*                                               *")
        print("*                  欢迎光临                      *")
        print("*                                               *")
        print("*                                               *")
        print("*************************************************")

    '''
        打印好界面之后,然后管理员登录,该系统是管理员实行的,将输入的管理员账号密码
        进行比对,为了方便,这里账号密码设置为admin,admin
    '''
    def login(self):
        inputAdmin=input("请输入管理员账号:")
       #假如输入的账号与默认账号不匹配,就返回-1
        if(self.admin!=inputAdmin):
            print("账号输入错误,退出系统...")
            return -1
        #账号输入正确,开始密码验证,同样不符合返回-1
        inputPassword=input("请输入管理员密码:")
        if(inputPassword!=self.password):
            print("密码输入错误,退出系统...")
            return -1

        #走到这一步,密码账号都正确了  返回0 代表成功,成功之后就是展示功能页面
        print("登录成功,请稍后...")
        #延时0.5秒
        time.sleep(0.5)
        return 0

    def printSysFunctionView(self):
        #打印功能界面
        print("*************************************************")
        print("*    开户(1)               查询(2)             *")
        print("*    取款(3)               存款(4)             *")
        print("*    转账(5)               改密(6)             *")
        print("*    锁定(7)               解锁(8)             *")
        print("*    补卡(9)               销户(0)             *")
        print("*               退出(q)                         *")
        print("*************************************************")
        return 0

user.py

#用户类,包含了姓名,身份证号,手机号,卡
class User(object):
    def __init__(self,name,idCard,phone,card):
        self.name=name
        self.idCard=idCard
        self.phone=phone
        self.card=card

card.py

#卡类,包含卡号,密码,存款
class Card(object):
    def __init__(self,cardId,password,money):
        self.cardId=cardId
        self.password=password
        self.money=money
        #锁定,默认是不锁定
        self.cardLock=False

atm.py(主要的代码都在里面)

#ATM类(包含各种操作)

import random
import time
from card import Card
from user import User

class ATM(object):

    #ATM存储了所有的用户信息
    def __init__(self,allUser):
        #allUser存用户信息
        self.allUser=allUser

   #开户
    def createUser(self):
        #开户的对象使用字典存储,键值对<卡号-用户信息>
        name=input("请输入你的姓名:")
        idCard=input("请输入你的身份证号码:")
        phone=input("请输入你的电话号码:")

        preMoney=int(input("请输入你的预存款金额:"))
        #钱不不可能是负数,所以在这里做一个判断
        if(preMoney<0):
            print("你的输入有误,开户失败...")
            return -1

        #最后输入密码,然后在输入一次密码要验证
        onePassword=input("请输入你的密码:")

        #验证密码,密码错误
        if not self.checkPassword(onePassword):
            print("你的输入有误,开户失败...")
            return -1

        #走到这一步说明密码输入正确,然后随机生成卡号
        strId=self.randomCardId()
        #创建card对象
        card=Card(strId,onePassword,preMoney)
        #创建user对象
        user=User(name,idCard,phone,card)

        #存入字典中,就说明开卡成功
        self.allUser[strId]=user
        print("开卡成功...请牢记卡号(%s)"%(strId))
        time.sleep(1)

    #查询,包含个人信息以及卡号信息
    def searchUserInfo(self):
        cardId=input("请输入你要查询的卡号:")
        #验证是否存在卡号
        user=self.allUser.get(cardId)
        if not user:
            print("卡号不存在,查询失败...")
            return -1
        # 判断卡是否被锁定
        if user.card.cardLock:
            print("该卡被锁定!请解锁后在进行其他操作...")
            return -1
        #有该卡号信息,保护隐私,验证密码之后才能显示个人信息
        if not self.checkPassword(user.card.password):
            user.card.cardLock=True
            print("密码输入错误,该卡被锁定,请解锁后在进行操作...")
            return -1

        #密码输入正确之后展示个人信息
        print("-----个人信息-----")
        print("姓名:%s"%(user.name))
        print("身份证号:%s"%(user.idCard))
        print("手机号:%s"%(user.phone))
        print("卡号:%s "%(user.card.cardId))
        print("余额:%f"%(user.card.money))
        time.sleep(1)

    # 取款
    def getMoney(self):
        cardNum = input("请输入您的卡号:")
        #  验证是否存在该卡号
        user = self.allUser.get(cardNum)
        if not user:  # 如果有这个用户就不执行下面的语句,没有这个用户就执行
            print("该卡号不存在,取款失败...")
            return -1
        # 判断卡是否被锁定
        if user.card.cardLock:
            print("该卡被锁定,请解锁后在进行其他操作...")
            return -1
        #  验证密码
        if not self.checkPassword(user.card.password):
            print("密码输入错误...该卡已被锁定,请解锁后在进行其他操作...")
            user.card.cardLock = True
            return -1

        # 取款验证
        money = int(input("请输入取款金额:"))
        if money > user.card.money:
            print("余额不足,取款失败...")
            return -1
        if money < 0:
            print("余额输入错误,取款失败...")
            return -1
        # 取款
        user.card.money -= money
        print("取款成功,还剩余额: %d" % (user.card.money))


        #  存款
    def saveMoney(self):
        cardNum = input("请输入您的卡号:")
        #  验证是否存在该卡号
        user = self.allUser.get(cardNum)
        if not user:  # 如果有这个用户就不执行下面的语句,没有这个用户就执行
            print("该卡号不存在,存款失败...")
            return -1

        # 判断卡是否被锁定
        if user.card.cardLock:
            print("该卡被锁定,请解锁后在进行其他操作...")
            return -1

        #  验证密码
        if not self.checkPassword(user.card.password):
            print("密码输入错误,该卡已被锁定,请解锁后在进行其他操作...")
            user.card.cardLock = True
            return -1

        # 存款验证
        money = int(input("验证成功!!请输入您的存款金额:"))
        if money <0:
            print("存款金额有误,存款失败!")
            return -1
        # 开始存款
        user.card.money += money
        print("您存款%d元,最新余额为%d元!"% (money, user.card.money))


    #  转账
    def transferMoney(self):
        cardNum = input("请输入您的卡号:")
        #  验证是否存在该卡号
        user = self.allUser.get(cardNum)
        if not user:  # 如果有这个用户就不执行下面的语句,没有这个用户就执行
            print("该卡号不存在,转账失败...")
            return -1

        # 判断卡是否被锁定
        if user.card.cardLock:
            print("该卡被锁定,请解锁后在进行其他操作...")
            return -1

        #  验证密码
        if not self.checkPassword(user.card.password):
            print("密码输入错误,该卡已被锁定!请解锁后在进行其他操作...")
            user.card.cardLock = True
            return -1

        # 转账验证
        money = int(input("验证成功!!请输入您的转账金额:"))
        if money > user.card.money or money < 0:
            print("金额有误,转账失败")
            return -1

        # 开始转账
        newcardNum = input("请输入转入账户:")
        toUser = self.allUser.get(newcardNum)
        if not toUser:
            print("该卡号不存在,转账失败!")
            return -1
        # 判断要转的账户是否锁定
        if  toUser.card.cardLock:
            print("该卡已被锁定!!请解锁后再使用其功能!")
            return -1
        user.card.money -= money
        toUser.card.money += money
        time.sleep(1)
        print("转账成功,请稍后...")
        time.sleep(1)
        print("转账金额%d元,余额为%d元!" % (money, user.card.money))
    #  改密
    def changePasswd(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUser.get(cardNum)
        if not user:
            print("该卡号不存在,改密失败!")
            return -1

        # 判断是否被锁
        if user.card.cardLock:
            print("该卡已锁定,请解锁后在使用其功能...")
            return -1

        # 验证密码
        if not self.checkPassword(user.card.password):
            print("密码输入错误,该卡已被锁定,请解锁后在进行其他操作...")
            user.card.cardLock = True
            return -1

        # 开始改密
        newPasswd = input("请输入新密码:")
        # 如果新密码和原始密码一样就判定为改密失败
        if not self.checkPassword(newPasswd):
            print("密码错误,改密失败")
            return -1
        user.card.password = newPasswd
        print("改密成功!!请稍后...")




    #锁定
    def lockUser(self):
        cardId = input("请输入你要锁定的卡号:")
        # 验证是否存在卡号
        user = self.allUser.get(cardId)
        if not user:
            print("卡号不存在,锁定失败...")
            return -1
        # 验证卡是否被锁定
        if user.card.cardLock:
            print("该卡已被锁定!请解锁后在使用其他功能...")
            return -1

        # 验证密码,判断是否为本人
        if not self.checkPassword(user.card.password):
            print("密码输入错误!锁定失败...")
            return -1
        # 验证身份证号码
        tempId=input("请输入你的身份证号码:")
        if tempId != user.idCard:
            print("身份证号码输入错误,锁定失败...")
            return -1
        # 锁卡
        user.card.cardLock = True
        print("锁定成功...")

    #解锁, 跟锁定逻辑相同
    def unlockUser(self):
        cardId = input("请输入你要解锁的卡号:")
        # 验证是否存在卡号
        user = self.allUser.get(cardId)
        if not user:
            print("卡号不存在,解锁失败...")
            return -1
        # 验证卡是否被锁定
        if not user.card.cardLock:
            print("该卡已被解锁!无需解锁...")
            return -1

        # 验证密码,判断是否为本人
        if not self.checkPassword(user.card.password):
            print("密码输入错误!解锁失败...")
            return -1
        # 验证身份证号码
        tempId = input("请输入你的身份证号码:")
        if tempId != user.idCard:
            print("身份证号码输入错误,解锁失败...")
            return -1
            # 锁卡
        user.card.cardLock = False
        print("解锁成功...")

    #  补卡
    def newCard(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        #user = self.allUser.get(cardNum)
        user = self.allUser.get(cardNum)
        if not user:
            print("该卡号不存在")
            return -1

        tempname = input("请输入您的姓名:")
        tempidcard = input("请输入您的省份证号码:")
        tempphone = input("请输入您的手机号:")
        if tempname != self.allUser[cardNum].name\
                or tempidcard != self.allUser[cardNum].idCard\
                or  tempphone != self.allUser[cardNum].phone:
            print("信息输入有误,补卡失败!")
            return -1
        newPasswd = input("请输入您的新密码:")
        if not self.checkPassword(newPasswd):
            print("密码错误,补卡失败!")
            return -1
        self.allUser[cardNum].card.cardPasswd = newPasswd
        time.sleep(1)
        print("补卡成功,请牢记您的新密码...")




    #  销户
    def killUser(self):
        cardNum = input("请输入您的卡号:")
        # 验证是否存在该卡号
        user = self.allUser.get(cardNum)
        if not user:
            print("该卡号不存在,销户!")
            return -1
        # 判断是否锁定
        if user.card.cardLock:
            print("该卡已锁定,请解锁后再使用其功能...")
            return -1

        # 验证密码
        if not self.checkPassword(user.card.password):
            print("密码输入有误,该卡已锁定,请解锁后再使用其功能...")
            user.card.cardLock = True
            return -1

        del self.allUser[cardNum]
        time.sleep(1)
        print("销户成功,请稍后!")



    #判断密码是否输入正确
    def checkPassword(self,realPassword):
        #输入正确,直接返回,输入错误,有三次判断机会
        for i in range(3):
            password=input("请输入你的密码:")
            if password==realPassword:
                return True
        return False

    # 随机生成6位数的卡号,并且保证了卡号唯一性
    def randomCardId(self):
        while True:
            str = ""
            for i in range(6):
                ch = chr(random.randrange(ord('0'), ord('9') + 1))
                str += ch
            # 判断是否重复,假如在字典里面能够根据卡号取到值,则说明卡号存在
            if not self.allUser.get(str):
                return str

main.py

#引包

from view import View
from atm import ATM
import time
import pickle

#主方法
def main():

    filePath = r"./data/allusers.txt"
    f = open(filePath, "rb")
    allUsers = pickle.load(f)
    print(allUsers)

    #先创建一个view对象
    view=View()
    #调用其打印欢迎界面的方法
    view.printAdminView()
    #然后登录,根据返回值,判断是否登录成功,登录失败,退出程序
    if view.login():
        return -1

    #登录没有问题,就展示功能页面

    #创建一个atm的对象
    atm=ATM(allUsers)

    while True:
        #每次执行操作前,先展示功能页面
        view.printSysFunctionView()
        #等待用户选择操作
        option=input("请选择你的操作:")
        #展示操作
        if option == "1":  # 当用户选择选项后调用ATM类
            #  开户
            atm.createUser()
        elif option == "2":
            #  查询
            atm.searchUserInfo()
        elif option == "3":
            #  取款
            atm.getMoney()
        elif option == "4":
            #  存款
            atm.saveMoney()
        elif option == "5":
            #  转账
            atm.transferMoney()
        elif option == "6":
            #  改密码
            atm.changePasswd()
        elif option == "7":
            #  锁定
            atm.lockUser()
        elif option == "8":
            #  解锁
            atm.unlockUser()
        elif option == "9":
            #  补卡
            atm.newCard()
        elif option == "0":
            #  销户
            atm.killUser()
        elif option =="q":
            #退出,将user信息保存在allusers.txt中,方面下次使用
            f=open(filePath,"wb")
            #写入文件
            pickle.dump(atm.allUser,f,0)
            f.close()
            print("退出成功...")
            return -1
        time.sleep(1)





if __name__=="__main__":
    main()

来个完美的收尾

别忘了还有allusers.txt文件哦,上一篇博客还记录如何将该文件打包成了.exe文件

好了,如果喜欢作者就给个小红心吧。

大家好,我是被白菜拱的猪。

一个热爱学习废寝忘食头悬梁锥刺股,痴迷于girl的潇洒从容淡然coding handsome boy!

古德拜~

悲伤的大结局

代码屁颠屁颠的发给他们之后,网上居然有一模一样的,啊啊啊哭泣,当初谁呀跟我一样看那个视频,把代码敲出来放网上了,木得办再写一个,这次独立自主的写个学生成绩管理系统,在一样我就吃屎。太秃然了。早知道就不做了,我计算机网络,概率论还没看呢。唉难受。