返回顶部
首页 > 资讯 > 后端开发 > Python >Python实现atm机的功能
  • 765
分享到

Python实现atm机的功能

功能Pythonatm 2023-01-31 06:01:08 765人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

主要还是参考网上内容,自己做了修改。虽然代码有小bug,但是不影响学习和测试。功能:1.额度:80002.可以提现,手续费5%3.每月最后一天出账单,写入文件4.记录每月日常消费流水5.提供还款接口1.atm的脚本[root@python 

主要还是参考网上内容,自己做了修改。虽然代码有小bug,但是不影响学习测试


功能:

1.额度:8000

2.可以提现,手续费5%

3.每月最后一天出账单,写入文件

4.记录每月日常消费流水

5.提供还款接口


1.atm的脚本

[root@python atm]# cat atm.py

#!/usr/bin/env Python
# -*- coding: utf-8 -*-
'''
Date:2017-03-23
Author:Bob
'''

import os
import time
import pickle
import readline #解决退格键和上下键引起的乱码,需要安装readline和readline-devel包


#定义账单,商品和购物车
Bill = {}
products = {}
shoplist = []


#define Bill function, used to record billing details(account/time/describe/money).
def Bill(Account,Time,Description,RMB):
    Bill = {"Account":Account,"Time":Time,"Description":Description,"RMB":RMB}
    #用pickle模块把账单信息存入到bill文件中去
    pickle.dump(Bill,open("bill","a"))


#购物功能
def shop():
    print '\033[;32mWelcome to shopping!\n\033[0m'
    with open('shops.txt') as f:
        for line in f.readlines():
            print '{}'.fORMat(line.strip())

    while 1:
        with open('shops.txt') as f:
            for line in f.readlines():
                line = line.strip()
                commodity = line.split()[0]
                price = line.split()[1]
                products[commodity] = price

            choice = raw_input("\n\033[;36mPlease enter what you want to buy,if you want back,you can enter\033[0m \033[;31mback\033[0m:").strip()
            if len(choice) == 0:
                continue
            elif choice == 'back':
                list()
            #如果有这个商品,就判断商品价格,如果商品价格大于余额,就提示余额不足
            if products.has_key(choice):
                #从userinfo文件中读取并反序列化
                remaining = pickle.load(open('userinfo','rb'))
                if int(products[choice]) > remaining[accountAuth][2]:
                    print 'In your card remaining sum already insufficiency, please prompt sufficient value!'
                else:
                    while 1:
                        #把购买的商品追加到购物车
                        shoplist.append(choice)
                        #计算余额,余额就是总金额减去购买的商品价格
                        new_remaining = int(remaining[accountAuth][2]) - int(products[choice])
                        userInfo[accountAuth][2] = int(new_remaining)
                        #把余额信息序列化并存到userinfo文件中
                        pickle.dump(userInfo,open("userinfo","wb"))
                        #把购买的记录和账单写到Bill文件中
                        Bill(accountAuth,time.strftime("%Y-%m-%d %H:%M:%S"),choice,"-%d" % int(products[choice]))
                        #打印消费的金额和剩余金额
                        print "\033[;32mConsumption is %r Money is %r\033[0m" % (products[choice],new_remaining)
                        #打印购物车的商品
                        print "\033[;33mThe shopping list %s \033[0m" % shoplist
                        break
            else:
                print 'You choose {} is not in the shoplist!'.format(choice)
                shop()


#查询余额功能
def query_money():
    userInfo = pickle.load(open('userinfo','rb'))
    totalmoney = userInfo[accountAuth][1]
    remaining = userInfo[accountAuth][2]
    print 'Your total money is {}, remaining money is \033[1;31m{}\033[0m!'.format(totalmoney, remaining)


#存钱功能
def save_money():
    while 1:
        save_desc = raw_input("Please describe save money the details:").strip()
        if len(save_desc) == 0:
            continue
        try:
            save_money = int(raw_input("Please save the money:"))
        except ValueError:
            print "\033[;31mYou entered must be number.\033[0m"
            save_money()

        if save_money % 100 != 0:
            print 'You must enter an integer of 100!'
            continue

        userInfo = pickle.load(open('userinfo', 'rb'))
        remaining = int(userInfo[accountAuth][2]) + save_money
        userInfo[accountAuth][2] = remaining
        pickle.dump(userInfo, open('userinfo', 'wb'))
        print 'Your total money is %s, your remaining is \033[;31m%s\033[0m!' %(userInfo[accountAuth][1], userInfo[accountAuth][2])

        Bill(accountAuth,time.strftime("%Y-%m-%d %H:%M:%S"),save_desc,"+%d" % float(save_money))

        next = raw_input("1.continue \n2.return \n3.exit \nPlease select: ").strip()
        if next == '1':
            continue
        elif next == '2':
            list()
        elif next == '3':
            exit()
        else:
            print 'Please enter the correct content!'


#取钱功能
def draw_money():
    while 1:
        draw_desc = raw_input("Please describe draw money the details:").strip()
        if len(draw_desc) == 0:
            continue
        try:
            draw_money = int(raw_input("Please draw the money:"))
        except ValueError:
            print "\033[;31mYou entered must be number.\033[0m"
            draw_money()
    
        if draw_money % 100 != 0:
            print 'You must enter an integer of 100!'
            continue
     
        userInfo = pickle.load(open('userinfo', 'rb'))
        #There are bugs here!
        if draw_money > int(userInfo[accountAuth][2]):
            print '\033[;31mYour remaining is insufficient!\033[0m'
            list()

        userInfo = pickle.load(open('userinfo', 'rb'))
        remaining = int(userInfo[accountAuth][2]) - draw_money - draw_money * 0.05
        userInfo[accountAuth][2] = remaining
        pickle.dump(userInfo, open('userinfo', 'wb'))
        print 'Your total money is %s, your remaining is \033[;31m%s\033[0m!' %(userInfo[accountAuth][1], userInfo[accountAuth][2])
        Bill(accountAuth,time.strftime("%Y-%m-%d %H:%M:%S"),draw_desc,"+%d" % float(draw_money))
        next = raw_input("1.continue \n2.return \n3.exit \nPlease select: ").strip()
        if next == '1':
            continue
        elif next == '2':
            list()
        elif next == '3':
            exit()
        else:
            print 'Please enter the correct content!'


#转账功能,和上面的逻辑基本一样
def transfer_money():
    while 1:
        userInfo = pickle.load(open('userinfo', 'rb'))
        transfer_desc = raw_input("Please describe transfer money: ").strip()
        if len(transfer_desc) == 0:
            continue
        d_account = raw_input("Please input transfer account: ").strip()
        if len(d_account) == 0:
            continue
        if userInfo.has_key(d_account) is False:
            print "\033[;31mThis account does not exist\033[0m"
            transfer_money()
        d_money = int(raw_input("Please input transfer amount money: "))
        if d_money % 100 != 0:
            print "\033[;31mDeposit amount must be 100 integer times\033[0m"
            continue
        if d_money > int(userInfo[accountAuth][2]):
            print "\033[;31mYour balance is insufficient\033[0m"
            continue
        userInfo[accountAuth][2] = int(userInfo[accountAuth][2]) - d_money - d_money * 0.10
        userInfo[d_account][2] = int(userInfo[d_account][2]) + d_money
        pickle.dump(userInfo,open('userinfo', 'wb'))
        print "\033[;32mYour credit is %r,Your balance is %r\033[0m" % (userInfo[accountAuth][1],userInfo[accountAuth][2])

        Bill(accountAuth,time.strftime("%Y-%m-%d %H:%M:%S"),transfer_desc,"-%d" % (userInfo[accountAuth][2] - d_money - d_money * 0.10))

        next = raw_input("1.continue \n2.return \n3.exit \nPlease select: ").strip()
        if next == '1':
            continue
        elif next == '2':
            list()
        elif next == '3':
            exit()
        else:
            print 'Please enter the correct content!'



#账单功能
def query_bill():
    Income = []
    Spending = []
    num = 0
    print "Account\t\tTime\t\tDescription\t\t  RMB"
    with open('bill', 'rb') as f:
        while True:
            try:
                line = pickle.load(f)
                if line["Account"] == accountAuth:
                    if '+' in line["RMB"]:
                        print "\033[;33m%r\t%r\t%r\t\t\t%r\033[0m" % (line["Account"],line["Time"],line["Description"],line["RMB"])
                        income = line["RMB"].strip("+")
                        Income.append(income)
                    else:
                        print "%r\t%r\t%r\t\t\t%r" % (line["Account"],line["Time"],line["Description"],line["RMB"])
                        spending = line["RMB"].strip("-")
                        Spending.append(spending)
            except:
                break
    for i in Income:
        num = num + int(i)
    income = num
    print "Income is %r" % num
    for i in Spending:
        num = num + int(i)
    spending = num
    print "Spending is %r" % num
    print "Total is %r" % (int(income) + int(spending))



#修改密码功能
def modify_passwd():
    userInfo = pickle.load(open('userinfo', 'rb')) 
    old_passwd = raw_input("Please enter old passWord:").strip()
    while 1:
        if old_passwd == userInfo[accountAuth][0]:
            new_passwd = raw_input("Please enter new password:").strip()
            if len(new_passwd) < 6:
                print 'Your password is too simple!'
                continue
            confirm_new_password = raw_input("Please confirm new password again:").strip()
            if new_passwd != confirm_new_password:
                print 'Two passwords do not match!'
            else:
                userInfo[accountAuth][0] = confirm_new_password
                pickle.dump(userInfo, open('userinfo', 'wb'))
                print '\033[;32mYour password is changed successful!\033[0m'
                exit()
        else:
            print 'Your password is error!'
            modify_passwd()


#ATM机所有功能
def list():
    print '''\033[;32m
###################################################
#            welcome to ATM!                      #
#                                                 #
#    1.shop               2.query money           #
#    3.save money         4.draw money            #
#    5.transfer money     6.query bill            #
#    7.modify password    8.exit                  #
#                                                 #
###################################################
\033[0m'''

    while 1:
        choice = raw_input("Please choose according to your needs:").strip()
        if len(choice) == 0:
            continue
        elif choice == '1':
            shop()
        elif choice == '2':
            query_money()
        elif choice == '3':
            save_money()
        elif choice == '4':
            draw_money()
        elif choice == '5':
            transfer_money()
        elif choice == '6':
            query_bill()
        elif choice == '7':
            modify_passwd()
        else:
            print "\n\033[;35mYou have been exit the system!\033[0m"
            exit()



#用户登录功能
userInfo = pickle.load(open('userinfo', 'rb'))
while 1:
    accountAuth = raw_input("Please input user account:").strip()
    if len(accountAuth) == 0:
        continue
    if userInfo.has_key(accountAuth):
        if 'lock' in userInfo[accountAuth]:
            print '%s has been locked!' % accountAuth
            exit()

        for num in range(3,0,-1):
            passwdAuth = raw_input("Please input user password:").strip()
            if len(passwdAuth) == 0:
                continue
            if passwdAuth == userInfo[accountAuth][0]:
                list()
            else:
                print "Wrong password, Can try again \033[;31m%r\033[0m itmes" % num
                continue
        else:
                lockaccount = userInfo[accountAuth]
                lockaccount.append('lock')
                pickle.dump(userInfo,open('userinfo', 'wb'))
                print "\033[;31Maccount freeze within 24 hours\033[0m"
                exit()
    else:
        print "\033[;31mWrong account %r,retype\033[0m" % accountAuth


2.商品表

[root@python atm]# cat shops.txt 
computer 6000
iphone 5000
mouse 250
keyboard 40
camera 8000
package 500
power 230


3.初始化账号密码

[root@python atm]# cat create_userinfo.py 
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pickle
userInfo = {'xtd':['123456','150000','150000'],
            'bob':['666','8000','8000'],
            'xdg':['888','3000','3000']
            }

pickle.dump(userInfo,open('userinfo', 'w'))

userinfo = open('userinfo', 'r')
while True:
    try:
        line = pickle.load(userinfo)
        print line
    except:
        break
[root@python atm]# python create_userinfo.py 
{'xdg': ['888', '3000', '3000'], 'bob': ['666', '8000', '8000'], 'xtd': ['123456', '150000', '150000']}


4.显示余额变化

[root@python atm]# cat cat.py
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import pickle

userinfo = open('userinfo', 'r')
while True:
    try:
        line = pickle.load(userinfo)
        print line
    except:
        break
[root@python atm]# python cat.py 
{'xdg': ['888', '3000', '3000'], 'bob': ['666', '8000', 1000], 'xtd': ['123456', '150000', '150000']}


5.使用方法

[root@python atm]# python atm.py 
Please input user account:bob
Please input user password:666

###################################################
#            welcome to ATM!                      #
#                                                 #
#    1.shop               2.query money           #
#    3.save money         4.draw money            #
#    5.transfer money     6.query bill            #
#    7.modify password    8.exit                  #
#                                                 #
###################################################

Please choose according to your needs:2
Your total money is 8000, remaining money is 1000!
Please choose according to your needs:


6.流程图

wKiom1jThB6hNNPLAATxxOm0TPE429.jpg

--结束END--

本文标题: Python实现atm机的功能

本文链接: https://lsjlt.com/news/190416.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Python实现atm机的功能
    主要还是参考网上内容,自己做了修改。虽然代码有小bug,但是不影响学习和测试。功能:1.额度:80002.可以提现,手续费5%3.每月最后一天出账单,写入文件4.记录每月日常消费流水5.提供还款接口1.atm的脚本[root@python ...
    99+
    2023-01-31
    功能 Python atm
  • 用Java实现简单ATM机功能
    本文实例为大家分享了Java实现简单ATM机功能的具体代码,供大家参考,具体内容如下 项目介绍 基于大家使用银行卡在ATM机取款操作,进行相对应ATM机操作流程的实现。 项目功能 1...
    99+
    2024-04-02
  • C#实现模拟ATM自动取款机功能
    目录(1)关于用户帐号的类:Account(2)关于银行数据库的类:BankDatabase(3)关于ATM屏幕显示的类:Screen(4)关于ATM键盘的类:Keypad(5)关于...
    99+
    2024-04-02
  • java方法实现简易ATM功能
    用java方法写简易ATM,供大家参考,具体内容如下 本文需求:用java写一个简易ATM 功能:有登陆,有查询资金功能,有存款功能,有取款功能,有转账功能,有退出; 简述: (ja...
    99+
    2024-04-02
  • Python实战之ATM取款机的实现
    目录一、项目视图分析二、文件结构分析三、完整代码1.start.py2.conf3.core4.interface5.db6.lib7.readme一、项目视图分析 通过上图,我们...
    99+
    2024-04-02
  • 使用java怎么实现一个ATM功能
    使用java怎么实现一个ATM功能?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Java的特点有哪些Java的特点有哪些1.Java语言作为静态面向对象编程语言...
    99+
    2023-06-14
  • python实现简易ATM
    环境:python2.7可以进一步完善# -*- coding: utf-8 -*- print u"+========================================+" print u"+=============201...
    99+
    2023-01-31
    简易 python ATM
  • Java模拟实现ATM机
    Java模拟ATM机,供大家参考,具体内容如下 实现登录,查询,转账,取款,修改密码,退出功能。 源码 package bank; import java.io.*; impo...
    99+
    2024-04-02
  • C语言简单实现银行ATM存取款功能
    这里使用的运行工具是DEV C++。老铁们一定要看仔细了。是DEV C++ 一、课程设计的目的 掌握C语言程序设计的基础知识、基本理论、原理和实现技术。 二、课程设计的题目 银行...
    99+
    2024-04-02
  • java实现ATM机系统(2.0版)
    java实现银行ATM自助取款机,实现功能:用户登录、余额查询、存钱、取钱、转账、修改密码、退出系统。 用java实现一个ATM机系统(2.0版) 设计思路 设计五个类包括测试类: ...
    99+
    2024-04-02
  • javaGUI实现ATM机系统(3.0版)
    写个小项目了解一下GUI。用java GUI实现银行ATM自动取款机,实现登录界面、登录成功界面、各个操作功能实现界面。 用java GUI实现一个ATM机系统(3.0版) 设计思路...
    99+
    2024-04-02
  • Java实现ATM机操作系统
    本文实例为大家分享了Java实现ATM机操作系统的具体代码,供大家参考,具体内容如下 用IO流操作txt文件作为数据库模拟实现一个ATM业务操作系统---->网上银行,实现登录...
    99+
    2024-04-02
  • java模拟实现银行ATM机操作
    java模拟银行ATM机操作(基础版),供大家参考,具体内容如下 实现的功能需求: 修改密码之后,就会自动退出登录,再重新登录,若登录成功才能验证修改密码成功,这里用到 【跳出指定循...
    99+
    2024-04-02
  • Java如何实现ATM机模拟系统
    这篇“Java如何实现ATM机模拟系统”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java如何实现ATM机模拟系统”文章吧...
    99+
    2023-07-02
  • Java详解实现ATM机模拟系统
    目录一、概述二、程序概要设计三、程序详细设计四、程序演示一、概述 (1)选题分析 (2) 开发环境 开发环境,选择IDEA这一Java开发软件,基于JDK1.8版本,在本机windo...
    99+
    2024-04-02
  • Java如何实现ATM机操作系统
    这篇“Java如何实现ATM机操作系统”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“Java如何实现ATM机操作系统”文章吧...
    99+
    2023-06-30
  • python实现FTP功能
    如果只是想下载文件,那么urllib2模块就可以轻松完成这个任务,而且比FTP更简单,但是FTP一些特殊功能urllib2模块不具备。(网络编程基础P277)   #!/usr/bin/python #-*- coding:UTF-8 -*...
    99+
    2023-01-31
    功能 python FTP
  • C#实现关机功能
    在网上找的一个在C#中实现关机的类,非常简单,就是一个winapi的封装。在这里记录一下,以备不时之需。 public static class Shutdown { [St...
    99+
    2024-04-02
  • C语言实现ATM机存取款系统
    本文实例为大家分享了C语言实现ATM机存取款系统的具体代码,供大家参考,具体内容如下 利用结构体和构造函数并且采用输入输出文件实现ATM机系统。 主要功能有: 利用三种方法查询、开户...
    99+
    2024-04-02
  • Python+uiautomator2实现手机锁屏解锁功能
    业务需求:需要测试手机滑动解锁失败时事件的次数及等待的时间,本来想利用Python+Appium实现,但是Appium运行时自动给我解锁了.... 部分解释摘抄自:https://testerhome.com/top...
    99+
    2022-06-02
    python uiautomator2手机锁屏解锁 python 手机锁屏 python手机解锁
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作