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 对象内存占用
Jul 15 Python
python中logging包的使用总结
Feb 28 Python
Python3.6.0+opencv3.3.0人脸检测示例
May 25 Python
python斐波那契数列的计算方法
Sep 27 Python
python登录WeChat 实现自动回复实例详解
May 28 Python
python实现动态数组的示例代码
Jul 15 Python
Pytorch在NLP中的简单应用详解
Jan 08 Python
Python按照list dict key进行排序过程解析
Apr 04 Python
什么是python类属性
Jun 10 Python
基于Python+QT的gui程序开发实现
Jul 03 Python
使用python向MongoDB插入时间字段的操作
May 18 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
php heredoc和phpwind的模板技术使用方法小结
2008/03/28 PHP
php将session放入memcached的设置方法
2014/02/14 PHP
使用php批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
PHP实现自动识别Restful API的返回内容类型
2015/02/07 PHP
jquery $.ajax入门应用二
2008/11/19 Javascript
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
字符串的replace方法应用浅析
2011/12/06 Javascript
基于jquery的simpleValidate简易验证插件
2014/01/31 Javascript
使用js判断当前时区TimeZone是否是夏令时
2014/02/23 Javascript
jQuery实现可高亮显示的二级CSS菜单效果
2015/09/01 Javascript
JS实现在状态栏显示打字效果完整实例
2015/11/02 Javascript
利用jquery制作滚动到指定位置触发动画
2016/03/26 Javascript
bootstrap插件treeview实现全选父节点下所有子节点和反选功能
2017/07/21 Javascript
深入浅析JavaScript中的RegExp对象
2017/09/18 Javascript
webpack项目轻松混用css module的方法
2018/06/12 Javascript
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
微信小程序下拉框组件使用方法详解
2018/12/28 Javascript
推荐15个最好用的JavaScript代码压缩工具
2019/02/13 Javascript
通过实例了解Nodejs模块系统及require机制
2020/07/16 NodeJs
[05:39]2014DOTA2国际邀请赛 DK晋级胜者组专访战队国士无双
2014/07/14 DOTA
python的re模块使用方法详解
2019/07/26 Python
如何解决python多种版本冲突问题
2020/10/13 Python
纯CSS实现聊天框小尖角、气泡效果
2014/04/04 HTML / CSS
html5 localStorage本地存储_动力节点Java学院整理
2017/07/06 HTML / CSS
HTML5 Canvas 旋转风车绘制
2017/08/18 HTML / CSS
AC Lens:购买隐形眼镜
2017/02/26 全球购物
实验教师岗位职责
2014/02/13 职场文书
数控技校生自我鉴定
2014/03/02 职场文书
节能环保演讲稿
2014/08/28 职场文书
民主生活会对照检查材料范文
2014/10/01 职场文书
违反交通安全法检讨书
2014/10/24 职场文书
学校财务管理制度
2015/08/04 职场文书
Python自然语言处理之切分算法详解
2021/04/25 Python
mybatis3中@SelectProvider传递参数方式
2021/08/04 Java/Android
css filter和getUserMedia的联合使用
2022/02/24 HTML / CSS
星际争霸:毕姥爷vs解冻01
2022/04/01 星际争霸