python atm小脚本

用python写的一个自助信用卡的小脚本,有‘取现,查询记录,转账,还款,购物‘功能,用到了picked序列化,prettytable等功能

下面是测试和代码

[email protected]:~# python atm.py 
plz enter your card id: 0000
plz enter your password: 

                                    欢迎登录信用卡系统!

            可选操作:
                1. 取现: 不能超限额,手续费5%           4. 转账: 可转账到不同用户
                2. 查询: 查询余额和交易明细            5. 购物
                3. 还款: 现金还款                      6. 退出
        
选择操作: 1
请输入金额: 5000
cash:5000,FEE:250.0

                                    欢迎登录信用卡系统!

            可选操作:
                1. 取现: 不能超限额,手续费5%           4. 转账: 可转账到不同用户
                2. 查询: 查询余额和交易明细            5. 购物
                3. 还款: 现金还款                      6. 退出
        
选择操作: 3
请输入金额: 10000
repay 10000

                                    欢迎登录信用卡系统!

            可选操作:
                1. 取现: 不能超限额,手续费5%           4. 转账: 可转账到不同用户
                2. 查询: 查询余额和交易明细            5. 购物
                3. 还款: 现金还款                      6. 退出
        
选择操作: 4
请输入对方账号: 0001
请输入金额: 2000
transfer to 0001, 2000RMB

                                    欢迎登录信用卡系统!

            可选操作:
                1. 取现: 不能超限额,手续费5%           4. 转账: 可转账到不同用户
                2. 查询: 查询余额和交易明细            5. 购物
                3. 还款: 现金还款                      6. 退出
        
选择操作: 5

        商品列表:
            1. iphone       标价: 5000RMB
            2. MacBook      标价: 12000RMB
            3. iMac         标价: 20000RMB
            4. car          标价: 50000RMB
            5. 退出购物车
        
输入商品标签: 2
Spend: 12000RMB

        商品列表:
            1. iphone       标价: 5000RMB
            2. MacBook      标价: 12000RMB
            3. iMac         标价: 20000RMB
            4. car          标价: 50000RMB
            5. 退出购物车
        
输入商品标签: 5
欢迎下次光临!

                                    欢迎登录信用卡系统!

            可选操作:
                1. 取现: 不能超限额,手续费5%           4. 转账: 可转账到不同用户
                2. 查询: 查询余额和交易明细            5. 购物
                3. 还款: 现金还款                      6. 退出
        
选择操作: 2
+---------------------+----------+----------------------------+---------+
|       datetime      |  action  |            log             | balance |
+---------------------+----------+----------------------------+---------+
| 2015-02-04 15:22:03 |   cash   |     cash:500,FEE:25.0      | 14475.0 |
| 2015-02-04 15:22:55 |  repay   |        repay 50000         | 64475.0 |
| 2015-02-04 15:23:37 | tramsfer | transfer to 0001, 20000RMB | 44475.0 |
| 2015-02-04 15:23:48 | shopping |       Spend: 5000RMB       | 39475.0 |
| 2015-02-04 16:09:45 |   cash   |    cash:5000,FEE:250.0     | 34225.0 |
| 2015-02-04 16:10:05 |  repay   |        repay 10000         | 44225.0 |
| 2015-02-04 16:10:19 | tramsfer | transfer to 0001, 2000RMB  | 42225.0 |
| 2015-02-04 16:10:29 | shopping |      Spend: 12000RMB       | 30225.0 |
+---------------------+----------+----------------------------+---------+

                                    欢迎登录信用卡系统!

            可选操作:
                1. 取现: 不能超限额,手续费5%           4. 转账: 可转账到不同用户
                2. 查询: 查询余额和交易明细            5. 购物
                3. 还款: 现金还款                      6. 退出
        
选择操作: 6
Welcome to again!
# coding: utf-8
import pickle
import time
from prettytable import PrettyTable

def userInfo():    # 读取文件,生成用户字典
    userDict = {}
    with open(‘user_info.txt‘, ‘r‘) as f:
        for line in f.xreadlines():
            Id, pwd, status = line.split(‘|‘)
            userDict[Id] = [pwd, status]
    return userDict

def login(card_id):    # 用户登录认证
    import getpass

    if card_id in userDict and userDict[card_id][1] != ‘1‘:
        for i in xrange(3):
            p = getpass.getpass(‘plz enter your password: ‘)
            if userDict[card_id][0] == p:
                return 1
            else:
                print ‘password error.‘
        else:
            print ‘id locked!‘
            userDict[card_id][1] = ‘1‘
    else:
        print ‘no card id or id locked.‘

def operat(card_id):    # 功能菜单
    tag = True
    while tag:
        print u‘‘‘
                                    欢迎登录信用卡系统!

            可选操作:
                1. 取现: 不能超限额,手续费5%           4. 转账: 可转账到不同用户
                2. 查询: 查询余额和交易明细            5. 购物
                3. 还款: 现金还款                      6. 退出
        ‘‘‘
        choose = raw_input(‘选择操作: ‘)
        if choose == ‘1‘:
            cash(card_id)
        elif choose == ‘2‘:
            showLog(card_id)
        elif choose == ‘3‘:
            repay(card_id)
        elif choose == ‘4‘:
            transfer(card_id)
        elif choose == ‘5‘:
            shopping(card_id)
        elif choose == ‘6‘:
            tag = False
            print ‘Welcome to again!‘
        else:
            print u‘请输入正确的选项‘

def getBalance(card_id):   # 获取用余额
    try:
        id_info = pickle.load(open(‘idInfo‘, ‘rb‘))
    except Exception:
        id_info = {card_id: [float(15000)]}
        pickle.dump(id_info, open(‘idInfo‘, ‘wb‘))
        return id_info[card_id][0]
    else:
        if card_id in id_info:
            return id_info[card_id][0]
        else:
            id_info[card_id] = [float(15000)]
            pickle.dump(id_info, open(‘idInfo‘, ‘wb‘))
            return id_info[card_id][0]

def insertBal(card_id, num):    # 插入用户余额
    id_info = pickle.load(open(‘idInfo‘, ‘rb‘))
    id_info[card_id] = [float(num)]
    pickle.dump(id_info, open(‘idInfo‘, ‘wb‘))

def repay(card_id):     # 还款
    num = raw_input(‘请输入金额: ‘)
    if len(num) != 0 and num.isdigit() and float(num) > 0:
        re_num = getBalance(card_id) + float(num)
        insertBal(card_id, float(re_num))
        log = ‘repay %s‘ % num
        print log
        nowtime = time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime(time.time()))
        genLog(card_id, ‘repay‘, nowtime, getBalance(card_id), log)
    else:
        print u‘请输入正确的金额‘

def cash(card_id):      # 取现
    bal = getBalance(card_id)
    money = raw_input(‘请输入金额: ‘)
    if money.isdigit() and len(money) != 0 and float(money) + float(money) * 0.05 < bal:
        num = bal - (float(money) + float(money) * 0.05)
        insertBal(card_id, num)
        log = ‘cash:%s,FEE:%s‘ % (money, float(money) * 0.05)
        print log
        nowtime = time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime(time.time()))
        genLog(card_id, ‘cash‘, nowtime, str(num), log)
    else:
        print u‘余额不足或输入错误!‘

def genLog(card_id, action, date, balance, description):    # 生成日志文件,用了picke
    msg = [date, action, description, str(balance)]
    try:
        log_info = pickle.load(open(‘logInfo‘, ‘rb‘))
    except Exception:
        log_info = {card_id: [msg]}
        pickle.dump(log_info, open(‘logInfo‘, ‘wb‘))
    else:
        if card_id in log_info:
            log_info[card_id].append(msg)
            pickle.dump(log_info, open(‘logInfo‘, ‘wb‘))
        else:
            log_info[card_id] = [msg]
            pickle.dump(log_info, open(‘logInfo‘, ‘wb‘))

def showLog(card_id):       # 输入日志
    try:
        log_info = pickle.load(open(‘logInfo‘, ‘rb‘))
    except:
        print u‘之前没有过任何操作‘
    else:
        x = PrettyTable([‘datetime‘, ‘action‘, ‘log‘, ‘balance‘])
        for i in log_info[card_id]:
            x.add_row(i)
        print x

def transfer(card_id):      # 转账功能
    des_id = raw_input(‘请输入对方账号: ‘)
    if len(des_id) == 4 and des_id.isdigit() and des_id in userDict and des_id != card_id:
        money = raw_input(‘请输入金额: ‘)
        sor_bal = getBalance(card_id)
        if len(money) != 0 and money.isdigit() and 0 < float(money) < sor_bal:
            nowtime = time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime(time.time()))
            des_bal = getBalance(des_id)
            des_bal += float(money)
            log = ‘%s transfer to you %s RMB.‘ % (card_id, money)
            genLog(des_id, ‘transfer‘, nowtime, des_bal, log)
            insertBal(des_id, des_bal)
            sor_bal -= float(money)
            insertBal(card_id, sor_bal)
            log = ‘transfer to %s, %sRMB‘ % (des_id, money)
            genLog(card_id, ‘tramsfer‘, nowtime, sor_bal, log)
            print log
        else:
            print u‘输入错误或余额不足‘
    else:
        print u‘输入错误或账号不存在‘

def shopping(card_id):          # 购物功能
    tag = True
    while tag:
        print u‘‘‘
        商品列表:
            1. iphone       标价: 5000RMB
            2. MacBook      标价: 12000RMB
            3. iMac         标价: 20000RMB
            4. car          标价: 50000RMB
            5. 退出购物车
        ‘‘‘
        choose = raw_input(‘输入商品标签: ‘)
        bal = getBalance(card_id)
        nowtime = time.strftime(‘%Y-%m-%d %H:%M:%S‘, time.localtime(time.time()))
        if choose == ‘1‘:
            if bal > 5000:
                log = ‘Spend: 5000RMB‘
                print log
                bal -= 5000
                insertBal(card_id, float(bal))
                genLog(card_id, ‘shopping‘, nowtime, getBalance(card_id), log)
            else:
                print u‘余额不足‘
        elif choose == ‘2‘:
            if bal > 12000:
                log = ‘Spend: 12000RMB‘
                print log
                bal -= 12000
                insertBal(card_id, float(bal))
                genLog(card_id, ‘shopping‘, nowtime, getBalance(card_id), log)
            else:
                print u‘余额不足‘
        elif choose == ‘3‘:
            if bal > 20000:
                log = ‘Spend: 20000RMB‘
                print log
                bal -= 20000
                insertBal(card_id, float(bal))
                genLog(card_id, ‘shopping‘, nowtime, getBalance(card_id), log)
            else:
                print u‘余额不足‘
        elif choose == ‘4‘:
            if bal > 50000:
                log = ‘Spend: 50000RMB‘
                print log
                bal -= 50000
                insertBal(card_id, float(bal))
                genLog(card_id, ‘shopping‘, nowtime, getBalance(card_id), log)
            else:
                print u‘余额不足‘
        elif choose == ‘5‘:
            tag = False
            print u‘欢迎下次光临!‘
        else:
            print u‘请输入正确的选项‘

if __name__ == ‘__main__‘:
    userDict = userInfo()
    cardId = raw_input(‘plz enter your card id: ‘).strip()
    if login(cardId):
        operat(cardId)
时间: 2024-10-10 01:35:37

python atm小脚本的相关文章

【工作中的Python】随机点名小脚本

背景:项目组每周的例会中,有一项固定内容就是技术分享,可以是与工作相关或无关的任何技术主题.进行技术分享讲解的同学是随机抽签的.由此做了一个Python的小脚本用于抽取姓名. 脚本内容如下: #!/usr/bin/python import os import sys import tty, termios import random name_list = ["member_1","member_2","member_3"] input = '

查看Linux服务器网卡流量小脚本shell和Python各一例

有时我们需要较为实时的查看服务器上的网卡流量,这里我写了两个小脚本,一个用shell(先写的,一次只能查看一个网卡),另一个用Python(后写的,一次可查看多个网卡).脚本中都用了while true"死循环",每隔10s从"/proc/net/dev"中取一次值并根据10s内的差值计算10s内的平均带宽:按ctrl+c停止执行.脚本兼容centos6和7 两个脚本都不太复杂,而且脚本中注释也比较细致,所以我就不过多解释脚本内容了.直接上图上脚本: shell版-

分享一个刷网页PV的python小脚本

下面分享一个小脚本,用来刷网页PV. [[email protected] ~]# cat www.py #!/usr/bin/python# coding: UTF-8import webbrowser as webimport timeimport osimport randomdata = raw_input('请输入网址:')count = random.randint (3,5)j = 0while j <count: i = 0 while i <= 3: web.open_new

入侵渗透专用的python小脚本

渗透的很多时候,找到的工具并不适用,自己码代码才是王道,下面三个程序都是渗透时在网络上找不到合适工具,自己辛苦开发的,短小实用. 一.记录root密码小工具 root.py #!/usr/bin/python import os, sys, getpass, time current_time = time.strftime("%Y-%m-%d %H:%M") logfile="/dev/shm/.su.log"              //密码获取后记录在这里

python 小脚本升级-- 钉钉群聊天机器人

一则小脚本(工作中用) 在这篇文章中写的监控的脚本,发送监控的时候 是利用的邮箱,其实在实际,邮箱查收有着不方便性,于是乎升级, 我们工作中,经常用钉钉,那么如果要是能用到钉钉多好,这样我们的监控成功后直接发送给我们的钉钉,简单方便 在钉钉开发文档有这么一个地方 ,自定义机器人 这个应该能够满足我们的办公要求吧,先来实验实验,打开钉钉,选择机器人管理. 使用自定义的机器人,点击 选择群,选择生成的机器人 然后创建, 这样我们的机器人创建成功,我们去看着文档的要求去,可惜官方没有python版本,

用Python实现一个爬取XX大学电费通知的小脚本

内容简要 1分析网站 2简单爬取 3进阶自定义爬取 4保存进数据库 学校基础设施太差,宿舍电量过低提醒虽然贴在楼下,但是作为低头一族,经常忘记看提醒导致宿舍酣战时突然黑屏,为了避免这种尴尬的场景以及强化PY学习,我决定制作一个简单的爬虫. 首先我通过学校的微信公众号找到了一个十分隐蔽的查低电量提醒网站.它的界面是这样的: 手机适应的页面当然在电脑上会有一些崩=.=,但是不要介意,我们要的是功能.下面是查询到的界面 虽然看起来low而且经常不更新,但是它至少能用.于是我决定用它来制作低电量提醒查询

百度搜索小脚本

最近在提高自己编程能力,拿一些现实的小脚本练下.该脚本为python语言,主要涉及模块urllib,和正则表达式. 功能:输入要查询的关键字,和查询条数,会返回关键字的百度搜索结果的url和条数,一次最多查50条. import urllib.request import urllib.parse import re while True: x = input("请输入需要搜索的关键字(输入"q!"退出程序):") if x == 'q!': print('bye!

用 Python 替代 Bash 脚本(转)

add by zhj: 其实作者是想说用Python来做那些Bash实现起来比较麻烦的部分,即将Bash与Python结合使用. 英文原文:http://www.linuxjournal.com/content/python-scripts-replacement-bash-utility-scripts 作者:Richard Delaney 翻译原文:http://www.oschina.net/translate/python-scripts-replacement-bash-utility

使电脑蜂鸣器发声小脚本

平时写点小脚本玩,我希望程序运行结束时,能提醒我一下 第一步:让电脑发出声音 实现方法一:使用c语言实现,见下面代码以  cb.c文件存储,编译成出可执行文件 cb .exe #include<stdio.h> int main() { printf("%c",'\a'); } 注:无限循环printf("%c",'\a')电脑会卡死 实现方法二:使用批操作bat文件,见下面代码以  bb.bat文件存储,方块为震铃符,可能无法显示,复制就行 @echo