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实现自动登录人人网并访问最近来访者实例
Sep 26 Python
查看Python安装路径以及安装包路径小技巧
Apr 28 Python
Python实现给文件添加内容及得到文件信息的方法
May 28 Python
Python实现简单HTML表格解析的方法
Jun 15 Python
python 搭建简单的http server,可直接post文件的实例
Jan 03 Python
基于python3监控服务器状态进行邮件报警
Oct 19 Python
如何获取Python简单for循环索引
Nov 21 Python
详解Django配置JWT认证方式
May 09 Python
Python类及获取对象属性方法解析
Jun 15 Python
Python中读取文件名中的数字的实例详解
Dec 25 Python
Python结合百度语音识别实现实时翻译软件的实现
Jan 18 Python
使用Python通过企业微信应用给企业成员发消息
Apr 18 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水印技术
2007/02/14 PHP
PHP对字符串的递增运算分析
2010/08/08 PHP
fleaphp rolesNameField bug解决方法
2011/04/23 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
php实现的一段简单概率相关代码
2016/05/30 PHP
thinkphp 抓取网站的内容并且保存到本地的实例详解
2017/08/25 PHP
javascript 动态数据下的锚点错位问题解决方法
2008/12/24 Javascript
function foo的原型与prototype属性解惑
2010/11/19 Javascript
javascript跟随滚动效果插件代码(javascript Follow Plugin)
2013/08/03 Javascript
JS小游戏之仙剑翻牌源码详解
2014/09/25 Javascript
nodejs教程之制作一个简单的文章发布系统
2014/11/21 NodeJs
零基础搭建Node.js、Express、Ejs、Mongodb服务器及应用开发入门
2014/12/20 Javascript
js仿3366小游戏选字游戏
2016/04/14 Javascript
JS获取和修改元素样式的实例代码
2016/08/06 Javascript
利用JavaScript实现拖拽改变元素大小
2016/12/14 Javascript
JavaScript中的一些隐式转换和总结(推荐)
2017/12/22 Javascript
vue select二级联动第二级默认选中第一个option值的实例
2018/01/10 Javascript
微信小程序实现验证码获取倒计时效果
2018/02/08 Javascript
element UI upload组件上传附件格式限制方法
2018/09/04 Javascript
HTML+JS实现“代码雨”效果源码(黑客帝国文字下落效果)
2020/03/17 Javascript
使用eslint和githooks统一前端风格的技巧
2020/07/29 Javascript
Vuex实现购物车小功能
2020/08/17 Javascript
Vue父子组件传值的一些坑
2020/09/16 Javascript
全面解读Python Web开发框架Django
2014/06/30 Python
Tornado高并发处理方法实例代码
2018/01/15 Python
django执行原始查询sql,并返回Dict字典例子
2020/04/01 Python
工艺工程师岗位职责
2014/03/04 职场文书
2014年元旦感言
2014/03/06 职场文书
单位委托函范文
2015/01/29 职场文书
期末个人总结范文
2015/02/13 职场文书
德能勤绩廉个人总结
2015/02/14 职场文书
公司聚餐通知
2015/04/22 职场文书
运动会广播稿200字
2015/08/19 职场文书
教师学习中国梦心得体会
2016/01/05 职场文书
python_tkinter事件类型详情
2022/03/20 Python
vue 数字翻牌器动态加载数据
2022/04/20 Vue.js