python 之简单模拟银行系统功能(卡号申请、还款、支付、取现)
发表于:2026-11-04 作者:千家信息网编辑
千家信息网最后更新 2026年11月04日,一、简单说明1、源代码文件见附件Credit.zip2、关于转账功能,因时间问题,转账功能待续4、逻辑图二、代码1、包encryption中的(password.py文件)#!/usr/bin/env
千家信息网最后更新 2026年11月04日python 之简单模拟银行系统功能(卡号申请、还款、支付、取现)
一、简单说明
1、源代码文件见附件 Credit.zip
2、关于转账功能,因时间问题,转账功能待续
4、逻辑图

二、代码
1、包encryption中的(password.py文件)
#!/usr/bin/env python# -*- coding: utf-8 -*-"""Created on Thu Nov 10 14:47:29 2016密码相关功能@author: toby"""import hashlib, re#密码进行MD5加密def md5(passwd): hashs = hashlib.md5() #创建MD5对象 hashs.update(passwd) #生成加密串 return hashs.hexdigest() #获取加密串#密码位数检测,只能是6位数字def check_digit(passwd): com = re.compile('^\d{6,6}$') temps = com.findall(passwd) if len(temps) == 0: return False else: return True#检测银行卡号位数def check_card(card): com = re.compile('^\d{16,16}$') temps = com.findall(card) if len(temps) == 0: return False else: return True2、applys.py
#!/usr/bin/env python# -*- coding: utf-8 -*-"""Created on Thu Nov 10 14:42:29 2016卡号申请程序@author: toby"""from encryption import passwordimport shelve, random, getpass, time#申请资格评估def ssessment(income,age): if income >= 3000 and age >= 22 and age < 60: return True else: return False #确定额度def quota(money): if money > 3000 and money < 6000: return 5000 if money > 6000 and money < 10000: return 10000 if money > 10000 and money < 20000: return 15000#生成卡号def carid(): carid = "" for i in range(16): temp = random.randint(0,9) carid += str(temp) return carid#新申请的用户数据入库def examine(key,val): data = shelve.open('data.db') data[key] = valif __name__ == "__main__": print ''' 信用卡申请资格评估 ''' income = input('月收入:') age = input('年龄:') #评估申请资格 if ssessment(income,age) == False: print '评估结果:无申请资格' else: print ''' 评估结果:可申请 请填写详细资料 ''' name = raw_input('姓名:') card = raw_input('×××:') phone = raw_input('手机:') address = raw_input('地址:') #根据条件自动生成固定额度 fixed_amount = quota(income) #调用自动生成额度函数 #初次申请卡号,初始记录还款的key为0 repayment_amount = 0 #初始化还款金额,首次为0元 #自动生成卡号 kaid = carid() #调用自动生成16位卡号函数 while True: passwd1 = getpass.getpass('设置密码:') passwd2 = getpass.getpass('确认密码:') if passwd1 != passwd2: print '密码不一致' continue if password.check_digit(passwd1) == False: #检测密码合法性 print '只能输入6位数字密码' continue else: print '------卡号申请成功!------' print '卡号为: %s' % kaid print '可用额度: %s' % fixed_amount date = time.strftime('%Y-%m-%d %H:%M:%S') #记录申请时间 repayment_time = time.strftime('%Y-%m-%d') #申请通过当天日期为还款日 passwd_data = password.md5(passwd1) #密码使用MD5加密 temp = {'date':date,'name':name,'age':age,'income':income,'card':card,'phone':phone,'address':address,'passwd':passwd_data,'fixed_amount':fixed_amount,'temp_money':int(fixed_amount),'repayment_amount':repayment_amount,'repayment_time':repayment_time} examine(kaid,temp) #调用数据入库函数进行将新申请的数据存入模拟数据库 break3、login.py
# -*- coding: utf-8 -*-"""Created on Fri Nov 11 21:35:04 2016模拟取款机登录入口程序@author: toby"""from encryption import passwordimport getpassfrom data_function import *if __name__ == "__main__": try: while True: print ''' ------银行系统登录入口------ ''' card_number = raw_input('卡号:') card_password = getpass.getpass('口令:') if password.check_card(card_number) == False: print '卡号位数不正确,请仔细输入' continue if check_card_active(card_number) == False: print '对不起,该卡号不存在' continue if password.check_digit(card_password) == False: print '密码无效' continue passwd_md5 = password.md5(card_password) #将输入的密码进行加密,用于和数据库中的md5密码匹配 db_passwd = get_data(card_number,'passwd') #从数据库读取对应卡号的密码 if passwd_md5 != db_passwd: #输入的密码进行加密后和从数据库中读取的MD5密码串进行配对 print '密码错误' continue else: while True: print ''' XX银行欢迎您 1 ----------------- 取现 2 ----------------- 查询 3 ----------------- 还款 4 ----------------- 转账 5 ----------------- 退出 ''' main_menu = input('选择您需要的操作(1-5):') if main_menu == 1: cash_amount = input('取款金额:') print ''' 温馨提示:信用卡取现需收取5%手续费 ''' action = raw_input('是否继续套现(y/n):') if action == 'y': if cash_debit(card_number,int(cash_amount)): #调用套现接口 print '请提取现金' continue else: print '机器故障,无法提取' break if action == 'no': continue if main_menu == 2: print ''' 1 ----------------- 查询余额 2 ----------------- 查询明细 ''' sub_menu = input('选择您需要的操作(1-2):') if sub_menu == 1: get_all_data(card_number) action = raw_input('是否返回主菜单(y):') if action == 'y': continue if sub_menu == 2: get_water(card_number) #调用查询流水函数 action = raw_input('是否返回主菜单(y):') if action == 'y': continue if main_menu == 3: temp_money = get_data(card_number,'temp_money') #读取可用金额 repayment_amount = get_data(card_number,'repayment_amount') #读取需还款金额 print ''' 可用余额: %s (人民币) 您需还款: %s (人民币) ''' % (temp_money,repayment_amount) money = input('还款金额:') if repayment_interface(card_number,int(money)) == True: print '还款成功' else: print '还款失败' action = raw_input('是否返回主菜单(y):') if action == 'y': continue if main_menu == 4: print '转账功能正在开发' action = raw_input('是否返回主菜单(y):') if action == 'y': continue if main_menu == 5: print '柜员机系统已退出' break continue except Exception,e: print Exception,":::-->",e4、data_function.py
# -*- coding: utf-8 -*-"""Created on Fri Nov 11 16:10:05 2016数据操作相关功能#我的卡号:1098521606032848@author: toby"""from encryption import passwordimport shelve, getpass, time#数据库读取操作,这是一个全局动作f = shelve.open('data.db')#检测卡号是否存在def check_card_active(card_number): if f.get(card_number,None) != None: #判断对应卡号是否存在 return True else: return False#检测对应卡号中对应的关键字数据,例如检测对应卡号密码def get_data(card,keys): data = f[card] return data[keys]#查询对应卡号的所有数据def get_all_data(card): data = f[card] print ''' 卡号: %s 户名: %s 固定额度: %s (人民币) 可用余额: %s (人民币) 需还款: %s (人民币) 还款日: %s '''% (card,data['name'],data['fixed_amount'],data['temp_money'],data['repayment_amount'],data['repayment_time']) #扣款通用接口,正常POS机消费或者网银支付 ,无需手续费def pos_smart_pay(card_number,card_password,price): if check_card_active(card_number) == False: print '对不起,卡号有误!' return False passwd_md5 = password.md5(card_password) #将输入的密码进行加密,用于和数据库中的md5密码匹配 db_passwd = get_data(card_number,'passwd') #从数据库读取对应卡号的密码 if passwd_md5 != db_passwd: print '支付密码错误' return False else: data = f[card_number] #读取对应卡号信息 existing = data['temp_money'] #读取现有金额 if price > existing: print '对不起,余额不足' else: result = existing - price #现有金额减去正常消费价格 data['temp_money'] = int(result) #临时存储计算结果 f[card_number] = data #计算结果数据入库 current_repayment_amoount = data['repayment_amount'] #读取现有还款金额 res = current_repayment_amoount + price #现有还款金额 + 当前消费金额 = 需还款的金额 data['repayment_amount'] = int(res) f[card_number] = data #需还款金额数据入库 action = "POS消费" record_water(card_number,action,price) f.close() return True#取款机取款功能 需5%手续费def cash_debit(card_number,money): data = f[card_number] #读取对应卡号信息 existing = data['temp_money'] #读取现有可用金额 if money > existing: print ''' 对不起,余额不足,无法套现 您当前可用金额: %s ''' % existing else: repayment = money * 0.05 #套现时计算手续费 print ''' 取款金额: %s 手续费: %s ''' % (money, repayment) result = existing - money - repayment #现有金额-套现金额(再减去手续费) data['temp_money'] = int(result) #临时存储计算结果 f[card_number] = data #计算结果数据入库 current_repayment_amoount = data['repayment_amount'] #读取现有还款金额 temporary = current_repayment_amoount + money + (money * 0.05) #现有还款金额 + 当前套现金额+手续费 data['repayment_amount'] = int(temporary) f[card_number] = data #需还款金额数据入库 #调用记录流水的函数进行记录流水 action = "取款机套现" record_water(card_number,action,money) f.close() return True#通用还款接口def repayment_interface(card_number,money): try: data = f[card_number] current_repayment_amoount = data['repayment_amount'] #读取需还款金额 data['repayment_amount'] = current_repayment_amoount - money #需还款金额 - 传入进来的还款额 = 剩余还款额(全部还清后这里为0元,还多少减多少) f[card_number] = data #剩余还款额数据入库 existing = data['temp_money'] #读取现有可用金额 data['temp_money'] = existing + money #现有可用金额 + 已传入进来的需还金额 (累加到可用金额,还多少就会累加多少) f[card_number] = data #还款后累加可用后的金额数据入库 action = "还款" record_water(card_number,action,money) f.close() return True except Exception,e: print Exception,":::-->",e#通用记录流水接口def record_water(card_number,action,money): water = shelve.open('water_data/%s.list' % card_number) date = time.strftime('%Y-%m-%d %H:%M:%S') water[date] = "行为:%s, 金额:%s" % (action,money) water.close()#通用查询流水接口def get_water(card_number): water = shelve.open('water_data/%s.list' % card_number) for val in water: print val, water[val]5、payment_interface.py
# -*- coding: utf-8 -*-"""Created on Sat Nov 12 13:47:03 2016模拟第三方支付@author: toby"""import getpassfrom data_function import *#第三方支付接口while True: payment_card = raw_input('支付卡号:') payment_price = input('价格:') payment_password = getpass.getpass('支付密码:') if pos_smart_pay(payment_card,payment_password,int(payment_price)) == True: print '支付完成' break else: print '支付失败' continue
金额
卡号
密码
数据
支付
手续
手续费
数据库
加密
功能
接口
结果
查询
检测
生成
人民
人民币
余额
函数
流水
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
咖啡豆
手冲咖啡和咖啡机区别
互联网科技有限公司图片
科技服务与互联网
美国互联网科技
朗涯互联网科技
丰台科技园 互联网
互联网 视角下的科技创新
互联网科技论坛
联恩商钥互联网科技有限公司
互联网科技创新企业排名
中国科技互联网公司收入
阿里巴巴算科技企业还是互联网
世界互联网科技公司市值排名
有人说阿里系是互联网科技企业
云南互联网科技学费
银川新华互联网科技学校原画
众联互联网络科技
安徽九吞吴互联网科技有限公司
伍佰万互联网科技是干嘛的
天津市摩尔互联网科技
奇酷互联网科技公司
天津摩尔互联网科技
互联网科技创新服务
互联网还是高科技吗
阿大互联网科技有限公司
沐思想互联网科技有限公司
米泉互联网科技专业怎么样
互联网科技和医药行业
六子台科技互联网展会