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 相关文章推荐
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
Jun 18 Python
Python3如何解决字符编码问题详解
Apr 23 Python
python之验证码生成(gvcode与captcha)
Jan 02 Python
python 实现图片旋转 上下左右 180度旋转的示例
Jan 24 Python
python中pygame安装过程(超级详细)
Aug 04 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
Mar 06 Python
pytorch 中的重要模块化接口nn.Module的使用
Apr 02 Python
Python常见反爬虫机制解决方案
Jun 01 Python
Python pip使用超时问题解决方案
Aug 03 Python
python opencv通过按键采集图片源码
May 20 Python
解决python3安装pandas出错的问题
May 20 Python
Python3 多线程(连接池)操作MySQL插入数据
Jun 09 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
php mssql 日期出现中文字符的解决方法
2009/03/10 PHP
PHP+jquery实时显示网站在线人数的方法
2015/01/04 PHP
PHP之将POST数据转化为字符串的实现代码
2016/11/03 PHP
Laravel中如何轻松容易的输出完整的SQL语句
2020/07/26 PHP
js动态在form上插入enctype=multipart/form-data的问题
2012/05/24 Javascript
js window.print实现打印特定控件或内容
2013/09/16 Javascript
js实现class样式的修改、添加及删除的方法
2015/01/20 Javascript
jQuery实现带渐显效果的人物多级关系图代码
2015/10/16 Javascript
全面解析bootstrap格子布局
2016/05/22 Javascript
js和C# 时间日期格式转换的简单实例
2016/05/28 Javascript
jQuery实现的表格展开伸缩效果实例
2016/09/07 Javascript
javascript比较语义化版本号的实现代码
2016/09/09 Javascript
js本地图片预览实现代码
2016/10/09 Javascript
浅谈使用React.setState需要注意的三点
2017/12/18 Javascript
基于vue 实现表单中password输入的显示与隐藏功能
2019/07/19 Javascript
Webpack中loader打包各种文件的方法实例
2019/09/03 Javascript
vue实现页面内容禁止选中功能,仅输入框和文本域可选
2019/11/09 Javascript
如何优雅地在Node应用中进行错误异常处理
2019/11/25 Javascript
JS猜数字游戏实例讲解
2020/06/30 Javascript
在react项目中使用antd的form组件,动态设置input框的值
2020/10/24 Javascript
js基于canvas实现时钟组件
2021/02/07 Javascript
JS实现百度搜索框
2021/02/25 Javascript
Python3使用requests登录人人影视网站的方法
2016/05/11 Python
Swift中的协议(protocol)学习教程
2016/07/08 Python
python 实现上传图片并预览的3种方法(推荐)
2017/07/14 Python
Python语言描述机器学习之Logistic回归算法
2017/12/21 Python
小米5s微信跳一跳小程序python源码
2018/01/08 Python
Anaconda下配置python+opencv+contribx的实例讲解
2018/08/06 Python
美国现代家具和家居商店:Apt2B
2016/08/29 全球购物
如何提高JDBC的性能
2013/04/30 面试题
数组越界问题
2015/10/21 面试题
税务专业毕业生自荐信
2013/11/10 职场文书
4s店总经理岗位职责
2013/12/31 职场文书
校园广播稿500字
2014/02/04 职场文书
实习评语大全
2014/04/26 职场文书
毕业酒会致辞
2015/07/29 职场文书