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 相关文章推荐
Java中重定向输出流实现用文件记录程序日志
Jun 12 Python
解析Python编程中的包结构
Oct 25 Python
Python网络编程详解
Oct 31 Python
Python根据欧拉角求旋转矩阵的实例
Jan 28 Python
Python获取好友地区分布及好友性别分布情况代码详解
Jul 10 Python
django 环境变量配置过程详解
Aug 06 Python
python实现XML解析的方法解析
Nov 16 Python
python绘制无向图度分布曲线示例
Nov 22 Python
浅析python表达式4+0.5值的数据类型
Feb 26 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
Mar 23 Python
如何在Anaconda中打开python自带idle
Sep 21 Python
python 制作本地应用搜索工具
Feb 27 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
在PWS上安装PHP4.0正式版
2006/10/09 PHP
小偷PHP+Html+缓存
2006/12/20 PHP
PHP中防止SQL注入实现代码
2011/02/19 PHP
php全局变量和类配合使用深刻理解
2013/06/05 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
2个比较经典的PHP加密解密函数分享
2014/07/01 PHP
PHP中怎样防止SQL注入分析
2014/10/23 PHP
PHP中mysqli_affected_rows作用行数返回值分析
2014/12/26 PHP
DEDECMS首页调用图片集里的多张图片
2015/06/05 PHP
javaScript checkbox 全选/反选及批量删除
2010/04/28 Javascript
ajax请求乱码的解决方法(中文乱码)
2014/04/10 Javascript
jQuery窗口、文档、网页各种高度的精确理解
2014/07/02 Javascript
jQuery表格行上移下移和置顶的实现方法
2015/10/08 Javascript
jQuery解析Json实例详解
2015/11/24 Javascript
jquery ezUI 双击行记录弹窗查看明细的实现方法
2016/06/01 Javascript
Nodejs下用submit提交表单提示cannot post错误的解决方法
2016/11/21 NodeJs
JS简单获取日期相差天数的方法
2017/04/24 Javascript
w3c编程挑战_初级脚本算法实战篇
2017/06/23 Javascript
javascript算法之二叉搜索树的示例代码
2017/09/12 Javascript
JavaScript中Require调用js的实例分享
2017/10/27 Javascript
对vue中v-if的常见使用方法详解
2018/09/28 Javascript
浅谈VUE防抖与节流的最佳解决方案(函数式组件)
2019/05/22 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
[48:51]完美世界DOTA2联赛PWL S2 Magma vs InkIce 第一场 11.28
2020/12/02 DOTA
Python中文编码那些事
2014/06/25 Python
编写同时兼容Python2.x与Python3.x版本的代码的几个示例
2015/03/30 Python
Python下rrdtool模块的基本使用方法
2015/11/13 Python
Python使用win32com实现的模拟浏览器功能示例
2017/07/13 Python
Python基于list的append和pop方法实现堆栈与队列功能示例
2017/07/24 Python
python发送邮件实例分享
2017/07/28 Python
TensorFlow实现创建分类器
2018/02/06 Python
教你利用Python玩转histogram直方图的五种方法
2018/07/30 Python
解决pip install psycopg2出错问题
2020/07/09 Python
linux面试题参考答案(8)
2016/04/19 面试题
2015年春节标语口号
2014/12/09 职场文书
雨雪天气温馨提示
2015/07/15 职场文书