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 生成不重复的随机数的代码
May 15 Python
python实现2014火车票查询代码分享
Jan 10 Python
python对字典进行排序实例
Sep 25 Python
python选择排序算法实例总结
Jul 01 Python
约瑟夫问题的Python和C++求解方法
Aug 20 Python
Python操作MySQL数据库9个实用实例
Dec 11 Python
python实现下载整个ftp目录的方法
Jan 17 Python
详解使用pymysql在python中对mysql的增删改查操作(综合)
Jan 18 Python
Python中模块与包有相同名字的处理方法
May 05 Python
详解Django 中是否使用时区的区别
Jun 14 Python
Python实现简单的猜单词小游戏
Oct 28 Python
python3.9实现pyinstaller打包python文件成exe
Dec 13 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中创建并处理图象
2006/10/09 PHP
PHP 和 MySQL 基础教程(一)
2006/10/09 PHP
PHP迅雷、快车、旋风下载专用链转换代码
2010/06/15 PHP
ThinkPHP之getField详解
2014/06/20 PHP
PHP计算日期相差天数实例分析
2016/02/23 PHP
php 调用百度sms来发送短信的实现示例
2018/11/02 PHP
JavaScript Event学习第九章 鼠标事件
2010/02/08 Javascript
jquery中使用循环下拉菜单示例代码
2014/09/24 Javascript
基于jQuery实现在线选座之高铁版
2015/08/24 Javascript
JavaScript判断对象是否为数组
2015/12/22 Javascript
javascript正则表达式定义(语法)总结
2016/01/08 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
最通俗易懂的javascript变量提升详解
2017/08/05 Javascript
JS库particles.js创建超炫背景粒子插件(附源码下载)
2017/09/13 Javascript
Angular中支持SCSS的方法
2017/11/18 Javascript
jquery实现联想词搜索框和搜索结果分页的示例
2018/10/10 jQuery
浅谈webpack devtool里的7种SourceMap模式
2019/01/14 Javascript
Python实现测试磁盘性能的方法
2015/03/12 Python
Python 使用requests模块发送GET和POST请求的实现代码
2016/09/21 Python
Python程序员面试题 你必须提前准备!
2018/01/16 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
python读取txt文件并取其某一列数据的示例
2019/02/19 Python
Python with用法:自动关闭文件进程
2019/07/10 Python
学python安装的软件总结
2019/10/12 Python
Python数据模型与Python对象模型的相关总结
2021/01/26 Python
Fnac西班牙官网:法国文化和电子产品零售商
2021/03/14 全球购物
写景作文评语集锦
2014/12/25 职场文书
感动中国何玥观后感
2015/06/02 职场文书
战马观后感
2015/06/08 职场文书
小学见习报告
2015/06/23 职场文书
迎新年主持词
2015/07/06 职场文书
计算机教师工作总结
2015/08/13 职场文书
90条交通安全宣传标语
2019/10/12 职场文书
七个Python必备的GUI库
2021/04/27 Python
POST提交数据常见的四种方式
2022/01/18 HTML / CSS