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 reduce 函数使用详解
Dec 05 Python
Tensorflow 利用tf.contrib.learn建立输入函数的方法
Feb 08 Python
Python split() 函数拆分字符串将字符串转化为列的方法
Jul 16 Python
Django认证系统实现的web页面实现代码
Aug 12 Python
python如何实现不可变字典inmutabledict
Jan 08 Python
将tensorflow模型打包成PB文件及PB文件读取方式
Jan 23 Python
浅谈python多线程和多线程变量共享问题介绍
Apr 17 Python
Python读取Excel一列并计算所有对象出现次数的方法
Sep 04 Python
Pycharm新手使用教程(图文详解)
Sep 17 Python
python 实现性别识别
Nov 21 Python
Pytest测试框架基本使用方法详解
Nov 25 Python
python+opencv实现视频抽帧示例代码
Jun 11 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
yii框架表单模型使用及以数组形式提交表单数据示例
2014/04/30 PHP
Linux中用PHP判断程序运行状态的2个方法
2014/05/04 PHP
微信公众平台开发关注及取消关注事件的方法
2014/12/23 PHP
php制作动态随机验证码
2015/02/12 PHP
php实现留言板功能
2017/03/05 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
thinkphp5 URL和路由的功能详解与实例
2017/12/26 PHP
网页和浏览器兼容性问题汇总(draft1)
2009/06/01 Javascript
js数组的操作详解
2013/03/27 Javascript
JavaScript sub方法入门实例(把字符串显示为下标)
2014/10/17 Javascript
推荐5 个常用的JavaScript调试技巧
2015/01/08 Javascript
JS实现带提示的星级评分效果完整实例
2015/10/30 Javascript
在Linux系统中搭建Node.js开发环境的简单步骤讲解
2016/01/26 Javascript
js实现人民币大写金额形式转换
2016/04/27 Javascript
微信小程序 http请求详细介绍
2016/10/09 Javascript
js数字舍入误差以及解决方法(必看篇)
2017/02/28 Javascript
jquery.guide.js新版上线操作向导镂空提示jQuery插件(推荐)
2017/05/20 jQuery
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
解决eclipse中没有js代码提示的问题
2018/10/10 Javascript
jquery登录的异步验证操作示例
2019/05/09 jQuery
Python制作钉钉加密/解密工具
2016/12/07 Python
python批量添加zabbix Screens的两个脚本分享
2017/01/16 Python
Python网络爬虫中的同步与异步示例详解
2018/02/03 Python
python 实现保存最新的三份文件,其余的都删掉
2019/12/22 Python
Flask中sqlalchemy模块的实例用法
2020/08/02 Python
如何用Python提取10000份log中的产品信息
2021/01/14 Python
CSS实现圆形放大镜狙击镜效果 只有圆圈里的放大
2012/12/10 HTML / CSS
详解CSS3选择器:nth-child和:nth-of-type之间的差异
2017/09/18 HTML / CSS
针对HTML5的Web Worker使用攻略
2015/07/12 HTML / CSS
乌克兰的第一家手表店:Deka
2020/03/05 全球购物
Java的类可以定义为Protected或者Private得吗
2015/09/25 面试题
元旦晚会上单位领导演讲稿
2014/01/05 职场文书
师范类求职信
2014/06/21 职场文书
我的未来不是梦演讲稿
2014/09/02 职场文书
SQLServer RANK() 排名函数的使用
2022/03/23 SQL Server
Python绘制散乱的点构成的图的方法
2022/04/21 Python