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在指定目录下查找gif文件的方法
May 04 Python
给Python中的MySQLdb模块添加超时功能的教程
May 05 Python
python实现逆波兰计算表达式实例详解
May 06 Python
Python如何判断数独是否合法
Sep 08 Python
windows及linux环境下永久修改pip镜像源的方法
Nov 28 Python
Python与R语言的简要对比
Nov 14 Python
Django admin美化插件suit使用示例
Dec 12 Python
mac安装pytorch及系统的numpy更新方法
Jul 26 Python
python opencv 实现读取、显示、写入图像的方法
Jun 08 Python
Python 必须了解的5种高级特征
Sep 10 Python
scrapy头部修改的方法详解
Dec 06 Python
Python使用Turtle模块绘制国旗的方法示例
Feb 28 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
ThinkPHP利用PHPMailer实现邮件发送实现代码
2013/09/26 PHP
php删除左端与右端空格的方法
2014/11/29 PHP
PHP+Ajax+JS实现多图上传
2016/05/07 PHP
Laravel 5.4因特殊字段太长导致migrations报错的解决
2017/10/22 PHP
laravel 错误处理,接口错误返回json代码
2019/10/25 PHP
js版本A*寻路算法
2006/12/22 Javascript
javascript的onchange事件与jQuery的change()方法比较
2009/09/28 Javascript
jquery获取div距离窗口和父级dv的距离示例
2013/10/10 Javascript
js中不同的height, top的区别对比
2015/09/24 Javascript
jQuery unbind()方法实例详解
2016/01/19 Javascript
JavaScript希尔排序、快速排序、归并排序算法
2016/05/08 Javascript
sencha ext js 6 快速入门(必看)
2016/06/01 Javascript
微信小程序 flex实现导航实例详解
2017/04/26 Javascript
jQuery中hover方法搭配css的hover选择器,实现选中元素突出显示方法
2017/05/08 jQuery
动手写一个angular版本的Message组件的方法
2017/12/16 Javascript
详解Vue-Router源码分析路由实现原理
2019/05/15 Javascript
生产制造追溯系统之在线打印功能
2019/06/03 Javascript
微信小程序-API接口安全详解
2019/07/16 Javascript
区分vue-router的hash和history模式
2020/10/03 Javascript
跟老齐学Python之深入变量和引用对象
2014/09/24 Python
python使用urllib2提交http post请求的方法
2015/05/26 Python
Python标准库sched模块使用指南
2017/07/06 Python
详解python3中的真值测试
2018/08/13 Python
使用 Python 实现简单的 switch/case 语句的方法
2018/09/17 Python
Python二叉树的镜像转换实现方法示例
2019/03/06 Python
用Anaconda安装本地python包的方法及路径问题(图文)
2019/07/16 Python
Python面向对象程序设计之类和对象、实例变量、类变量用法分析
2020/03/23 Python
python列表的逆序遍历实现
2020/04/20 Python
在Keras中CNN联合LSTM进行分类实例
2020/06/29 Python
Python开发入门——迭代的基本使用
2020/09/03 Python
查找适用于matplotlib的中文字体名称与实际文件名对应关系的方法
2021/01/05 Python
pytorch 计算Parameter和FLOP的操作
2021/03/04 Python
幼儿园秋游感想
2014/03/12 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
讲座新闻稿
2015/07/18 职场文书
自荐信范文
2019/05/20 职场文书