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序列之list和tuple常用方法以及注意事项
Jan 09 Python
Python2.6版本中实现字典推导 PEP 274(Dict Comprehensions)
Apr 28 Python
Python实现快速排序算法及去重的快速排序的简单示例
Jun 26 Python
Python中django学习心得
Dec 06 Python
Python基于回溯法解决01背包问题实例
Dec 06 Python
django启动uwsgi报错的解决方法
Apr 08 Python
基于python实现的百度音乐下载器python pyqt改进版(附代码)
Aug 05 Python
Python3 filecmp模块测试比较文件原理解析
Mar 23 Python
Python 利用OpenCV给照片换底色的示例代码
Aug 03 Python
Python用dilb提取照片上人脸的示例
Oct 26 Python
如何用python批量调整视频声音
Dec 22 Python
详细介绍python类及类的用法
May 31 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 变量定义方法
2009/06/14 PHP
php 5.3.5安装memcache注意事项小结
2011/04/12 PHP
php数组的概述及分类与声明代码演示
2013/02/26 PHP
360通用php防护代码(使用操作详解)
2013/06/18 PHP
设置php页面编码的两种方法示例介绍
2014/03/03 PHP
如何通过Linux命令行使用和运行PHP脚本
2015/07/29 PHP
PHP安全之register_globals的on和off的区别
2020/07/23 PHP
jquery 学习笔记一
2010/04/07 Javascript
动态加载图片路径 保持JavaScript控件的相对独立性
2010/09/06 Javascript
jQuery 中使用JSON的实现代码
2011/12/01 Javascript
js获得鼠标的坐标值的方法
2013/03/13 Javascript
JS的Document属性和方法小结
2013/09/17 Javascript
js清空form表单中的内容示例
2014/05/20 Javascript
JavaScript中的fontsize()方法使用详解
2015/06/08 Javascript
js获取所有checkbox的值的简单实例
2016/05/30 Javascript
JS模拟的Map类实现方法
2016/06/17 Javascript
javascript创建对象的3种方法
2016/11/02 Javascript
简单实现js菜单栏切换效果
2017/03/04 Javascript
JavaScript观察者模式(publish/subscribe)原理与实现方法
2017/03/30 Javascript
node通过npm写一个cli命令行工具
2017/10/12 Javascript
vue-cli 如何打包上线的方法示例
2018/05/08 Javascript
jQuery插件实现的日历功能示例【附源码下载】
2018/09/07 jQuery
IntelliJ IDEA编辑器配置vue高亮显示
2019/09/26 Javascript
js+css3实现简单时钟特效
2020/09/13 Javascript
Vue +WebSocket + WaveSurferJS 实现H5聊天对话交互的实例
2020/11/18 Vue.js
解决windows下Sublime Text 2 运行 PyQt 不显示的方法分享
2014/06/18 Python
解决pandas使用read_csv()读取文件遇到的问题
2018/06/15 Python
PYQT5设置textEdit自动滚屏的方法
2019/06/14 Python
python-tornado的接口用swagger进行包装的实例
2019/08/29 Python
解决Django layui {{}}冲突的问题
2019/08/29 Python
美国大城市最热门旅游景点门票:CityPASS
2016/12/16 全球购物
2014年档案管理员工作总结
2014/12/01 职场文书
如何写新闻稿
2015/07/18 职场文书
新手入门Mysql--概念
2021/06/18 MySQL
如何使用 resize 实现图片切换预览功能
2021/08/23 HTML / CSS
根德5570型九灯四波段立体声收音机是电子管收音机的楷模 ? 再论5570
2022/04/05 无线电