python 模拟银行转账功能过程详解


Posted in Python onAugust 06, 2019

首先画出流程图,流程图与现实代码有出入,因为刚开始画流程图的时候,有些东西没考虑进去,后来写着写着就慢慢能想起来并实现了。

python 模拟银行转账功能过程详解

另有一点经验推荐给新手朋友,如果说碰到一个项目无从下手的话,就先慢慢去写,写着写着你就会往下写了,真的,亲身实践。望大神勿喷~

#!/usr/bin/env python
#encoding:utf-8
import re
import pickle
import time
def getUser():
  '''从数据文件里获取银行卡用户信息'''
  with open('cardinfo.db','r') as f:
    return pickle.load(f)
def panDing():
  '''判定用户银行卡信息跟密码信息的准确性'''
  while True:
    user_dict=getUser()
    print user_dict
    card_num=raw_input('请输入您的19位银行卡号(只包含数字):')#获取用户卡号
    if re.match('\d{19}',card_num) and card_num in user_dict:#判断卡号是否匹配
      card_passwd=(raw_input('请输入您的银行卡密码:'))
      # print '输入的密码是:%s,类型为:%s' % (int(card_passwd),type(int(card_passwd)))
      # print '存的密码是:%s,类型为:%s' % (user_dict[card_num]['password'],type(user_dict[card_num]['password']))
      if int(card_passwd) == user_dict[card_num]['password']:#判定密码对错
        break
      else:
        print '密码错误!'
        continue
    else:
      print '您输入的银行卡信息有误!'
  return card_num

def zhuanZhang(srcaccount):
  '''用户转账操作'''

  user_dict = getUser()
  while True:
    target_account = raw_input('请输入目标账户:')
    if re.match('\d{19}', target_account) :
      if target_account in user_dict: # 判断卡号是否匹配

        while True:
          tr_balance = int(raw_input('请输入转账金额:'))
          if tr_balance <= user_dict[srcaccount]['balance']:#对比转账金额跟账户余额
            break
          else:
            print '转账金额大于余额,请重新输入余额!'
        break
      else:
        print '卡号错误,请重新输入!'
    else:
      print '卡号不对'
  print '转入的账户为:%s ,金额为:%s' % (target_account,tr_balance)
  print '原账户为:%s ,余额为:%s' % (srcaccount,user_dict[srcaccount]['balance'])
  print user_dict
  user_dict[srcaccount]['balance']=user_dict[srcaccount]['balance']-tr_balance
  user_dict[target_account]['balance'] = user_dict[target_account]['balance'] + tr_balance
  print '转入的账户为:%s ,转入的金额为:%s' % (target_account, tr_balance)
  # print '转入账户为:%s ,余额为:%s' % (target_account, user_dict[target_account]['balance'])
  print '原账户为:%s ,余额为:%s' % (srcaccount, user_dict[srcaccount]['balance'])
  print user_dict
  with open('cardinfo.db','w') as f:
    pickle.dump(user_dict,f)
  with open('op.log','a+') as f:
    f.writelines('%s 账户%s转入到账户%s中%s人民币' % (time.strftime('%Y-%m-%d %H:%M:%S'),srcaccount,target_account,tr_balance),f)
    print '%s 账户%s转入到账户%s中%s人民币' % (time.strftime('%Y-%m-%d %H:%M:%S'),srcaccount,target_account,tr_balance)




def quXian(user_card):
  '''用户取现操作'''
  user_dict = getUser()
  while True:
    qx_balance=raw_input('请输入取现金额:')
    if re.match('\d+',qx_balance):
      print user_dict[user_card]['balance']
      if int(qx_balance) <= user_dict[user_card]['balance']:
        user_dict[user_card]['balance'] = user_dict[user_card]['balance'] - int(qx_balance)
        print user_dict
        with open('cardinfo.db', 'w') as f:
          pickle.dump(user_dict, f)
        with open('op.log', 'a') as f:
          f.write('%s 账户 %s 取现人民币 %s' % (time.strftime('%Y-%m-%d %H:%M:%S'), user_card,qx_balance))
          print '%s 账户[%s]取现人民币%s圆' % (time.strftime('%Y-%m-%d %H:%M:%S'), user_card,qx_balance)
        break
      else:
        print '余额不够!'
    else:
      print '输入的格式有误'
  # with open('cardinfo.db','r') as f:
  #   print pickle.load(f)
  # with open('op.log','r') as f:
  #   print pickle.load(f)

def chaBalance(user_dict,user_card):

  print '账户余额为:%s ' % user_dict[user_card]['balance']

def run():
  user_card = panDing()
  print user_card
  while True:
    user_dict=getUser()
    # print '账户余额为:%s ' % user_dict[user_card]['balance']
    choose_num=raw_input('请确认操作:(转账请按1,取现请按 2,余额查询请按3,退出请按4):')
    if re.match('[1234]',choose_num):#根据用户选择类型判断执行方法
      if re.match('[1234]',choose_num).group() == '1':#转帐
        zhuanZhang(user_card)
      elif re.match('[1234]',choose_num).group() == '2':#取现
        quXian(user_card)
      elif re.match('[1234]',choose_num).group() == '3':#余额查询
        chaBalance(user_dict, user_card)
      else:#退出
        break
if __name__ == '__main__':
  run()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的异常处理学习笔记
Jan 28 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
Feb 13 Python
ubuntu17.4下为python和python3装上pip的方法
Jun 12 Python
django小技巧之html模板中调用对象属性或对象的方法
Nov 30 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
May 04 Python
PyQt5 实现字体大小自适应分辨率的方法
Jun 18 Python
python读csv文件时指定行为表头或无表头的方法
Jun 26 Python
Django Rest framework认证组件详细用法
Jul 25 Python
Tensorflow获取张量Tensor的具体维数实例
Jan 19 Python
python 实现多维数组(array)排序
Feb 28 Python
PyCharm取消波浪线、下划线和中划线的实现
Mar 03 Python
Python matplotlib图例放在外侧保存时显示不完整问题解决
Jul 28 Python
Python 3 判断2个字典相同
Aug 06 #Python
django 控制页面跳转的例子
Aug 06 #Python
使用Pyinstaller转换.py文件为.exe可执行程序过程详解
Aug 06 #Python
django项目简单调取百度翻译接口的方法
Aug 06 #Python
python数据归一化及三种方法详解
Aug 06 #Python
python选取特定列 pandas iloc,loc,icol的使用详解(列切片及行切片)
Aug 06 #Python
PyQt 图解Qt Designer工具的使用方法
Aug 06 #Python
You might like
ninety plus是什么?ninety plus咖啡好吗?
2021/03/04 新手入门
PHP基于yii框架实现生成ICO图标
2015/11/13 PHP
php中使用websocket详解
2016/09/23 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
jquery 多级下拉菜单核心代码
2010/05/21 Javascript
详解强大的jQuery选择器之基本选择器、层次选择器
2012/02/07 Javascript
一些常用弹出窗口/拖放/异步文件上传等实用代码
2013/01/06 Javascript
javascript与cookie 的问题详解
2013/11/11 Javascript
jquery获取html元素的绝对位置和相对位置的方法
2014/06/20 Javascript
使用Object.defineProperty实现简单的js双向绑定
2016/04/15 Javascript
微信小程序 欢迎页面的制作(源码下载)
2017/01/09 Javascript
基于jquery实现多选下拉列表
2017/08/02 jQuery
javascript/jquery实现点击触发事件的方法分析
2019/11/11 jQuery
vue 获取url里参数的两种方法小结
2020/11/12 Javascript
[00:59]DOTA2背景故事第二期之四大基本法则
2020/07/07 DOTA
Python中SOAP项目的介绍及其在web开发中的应用
2015/04/14 Python
Python的Bottle框架中获取制定cookie的教程
2015/04/24 Python
python实现数据图表
2017/07/29 Python
matplotlib绘制动画代码示例
2018/01/02 Python
python在非root权限下的安装方法
2018/01/23 Python
python实现装饰器、描述符
2018/02/28 Python
浅谈pyqt5中信号与槽的认识
2019/02/17 Python
python实现按行分割文件
2019/07/22 Python
手机使用python操作图片文件(pydroid3)过程详解
2019/09/25 Python
Python实现新型冠状病毒传播模型及预测代码实例
2020/02/05 Python
匡威帆布鞋美国官网:Converse美国
2016/08/22 全球购物
MATCHESFASHION.COM法国官网:英国奢侈品零售商
2018/01/04 全球购物
艺术家策划的室内设计:Curious Egg
2019/03/06 全球购物
NOTINO英国:在线购买美容和香水
2020/02/25 全球购物
化学教师自荐信范文
2013/12/28 职场文书
5.1手机促销活动
2014/01/17 职场文书
团队拓展活动总结
2014/08/27 职场文书
2015仓库保管员年终工作总结
2015/05/13 职场文书
利用 JavaScript 构建命令行应用
2021/11/17 Javascript
海贼王十大潜力果实,路飞仅排第十,第一可毁世界(震震果实)
2022/03/18 日漫
解决springboot druid数据库连接失败后一直重连的方法
2022/04/19 Java/Android