Python实现的银行系统模拟程序完整案例

作者:微信1257309054 时间:2023-03-15 21:00:26 

本文实例讲述了Python实现的银行系统模拟程序。分享给大家供大家参考,具体如下:

银行系统模拟程序

1、概述

使用面向对象思想模拟一个简单的银行系统,具备的功能:管理员登录/注销、用户开户、登录、找回密码、挂失、改密、查询、存取款、转账等功能。

编程语言:python。

2、目的

通过这个编程练习,可以熟悉运用面向对象的思想来解决实际问题,其中用到的知识点有类的封装、正则表达式、模块等。

3、体会

在编写这个程序时,实际上的业务逻辑还是要考虑的,比如修改密码时需要输入手机号、身份证号等。在进行类的封装时,实际上还是用面向过程的思想把一些基本的业务逻辑编写成函数,对一些重复使用的代码也可以封装成函数(就是自己造适合这个业务的轮子,实际开发中很多底层的函数是不用自己再次去实现的,可以直接调用),这些都是一些底层的封装,然后在实现主要业务时上就可以调用类中的方法实现,这时只需关注业务逻辑就好了。

使用面向对象的思想进行编程,考虑的点是:实现一个功能,有哪些方法可以让我进行调用(指挥者)。

使用面向过程的思想进行编程,考虑的点是:实现一个功能,我需要实现哪些方法(执行者)。

编写这个程序还用到一个很重要的概念,就是对程序进行模块化。模块化的好处是可以更好的对程序进行维护,条理也更清晰。

4、代码

源码Github地址:https://github.com/liangdongchang/pyBankSystem.git

1、bankSystem.py文件


from view import View
from atm import ATM
from person import Person
def func(view,atm,per):
 view.funcInterface()
 choice = input("请选择您要办理的业务:")
 if choice == '1':
   return per.checkMoney(atm)
 elif choice == '2':
   return per.saveMoney(atm)
 elif choice == '3':
   return per.getMoney(atm)
 elif choice == '4':
   return per.transferMoney(atm)
 elif choice == '5':
   return per.changePassword(atm)
 elif choice == '6':
   return per.unlockAccount(atm)
 elif choice == '7':
   return per.closeAccount(atm)
 elif choice == 'T':
   if per.exit(atm):
     return True
 else:
   print("输入有误!")
def main():
 # 管理员登录名为'admin',密码为'123'
 view = View("admin",'123')
 view.initface()
 atm = ATM()
 view.login()
 per = Person()
 while True:
   view.funcInit()
   choice = input("请选择您要办理的业务:")
   if choice == '1':
     per.newAccount(atm)
   elif choice == '2':
     if per.login(atm):
       while True:
         if func(view,atm,per) == None:
           continue
         else:
           break
   elif choice == '3':
     per.findBackPassword(atm)
   elif choice == '4':
     per.lockAccount(atm)
   elif choice == 'T':
     if per.exit(atm):
       # 管理员注销系统
       if view.logout():
          return True
   else:
     print("输入有误!")
if __name__ == '__main__':
 main()

2、card.py文件:


'''
卡:
类名:Card
属性:卡号【6位随机】  密码  余额 绑定的身份证号 手机号
'''
class Card(object):
 def __init__(self, cardId, password, money,identityId,phoneNum,cardLock='False'):
   self.cardId = cardId
   self.password = password
   self.money = money
   self.identityId = identityId
   self.phoneNum = phoneNum
   self.cardLock = cardLock

3、readAppendCard.py文件:


'''
功能:读取文件cardInfo.txt的信息
方法:读、写、删
'''
from card import Card
import json
# 读
class ReadCard(Card):
 def __init__(self, cardId='', password='', money=0, identityId='', phoneNum='', cardLock=''):
   Card.__init__(self, cardId, password, money, identityId, phoneNum, cardLock)
 def dict2Card(self, d):
   return self.__class__(d["cardId"], d["password"], d["money"],d["identityId"],d["phoneNum"], d["cardLock"])
 def read(self):
   # card对象转为字典
   with open("cardinfo.txt","r",encoding="utf-8") as fr:
     cards = []
     for re in fr.readlines():
       cards.append(self.dict2Card(eval(re)))
   return cards
# 写
class AppendCard(Card):
 def __init__(self):
   Card.__init__(self, cardId = '', password = '', money = 0, identityId = '', phoneNum = '', cardLock='')
 def card2Dict(self,card):
   return {"cardId": card.cardId, "password": card.password,
       "money": card.money, "identityId": card.identityId,
       "phoneNum": card.phoneNum, "cardLock": card.cardLock
       }
 def append(self,card,w= 'a'):
   # 默认是追加,如果w='w'就清空文件
   if w == 'w':
     with open("cardinfo.txt", "w", encoding="utf-8") as fa:
       fa.write('')
   else:
     with open("cardinfo.txt", "a", encoding="utf-8") as fa:
       json.dump(card, fa, default=self.card2Dict)
       fa.write('\n')
# 删
class Del(object):
 def del_(self,cardId):
   readcard = ReadCard()
   cards = readcard.read()
   for card in cards:
     # 删除输入的卡号
     if cardId == card.cardId:
       cards.remove(card)
       break
   else:
     print("卡号不存在!")
     return False
   # 重新写入文件
   appendcard = AppendCard()
   appendcard.append('',w='w')
   for card in cards:
     appendcard.append(card)
   return True

4、person.py


'''

类名:Person
行为:开户、查询、取款、存储、转账、改密、销户、退出
'''
class Person(object):
 def __init__(self,name='',identity='',phoneNum='',card=None):
   self.name = name
   self.identity = identity
   self.phoneNum = phoneNum
   self.card = card
 # 登录
 def login(self,atm):
   card = atm.login()
   if card:
     self.card = card
     return True
   else:
     return False
 # 开户
 def newAccount(self,atm):
   return atm.newAccount()
 #找回密码
 def findBackPassword(self,atm):
   return atm.findBackPassword()
 # 查询余额
 def checkMoney(self, atm):
   return atm.checkMoney(self.card)
 # 存钱
 def saveMoney(self, atm):
   return atm.saveMoney(self.card)
 # 取钱
 def getMoney(self, atm):
   return atm.getMoney(self.card)
 # 转账
 def transferMoney(self, atm):
   return atm.transferMoney(self.card)
 # 销户
 def closeAccount(self, atm):
   return atm.closeAccount(self.card)
 # 挂失
 def lockAccount(self, atm):
   return atm.lockAccount()
 # 解锁
 def unlockAccount(self, atm):
   return atm.unlockAccount(self.card)
 # 改密
 def changePassword(self, atm):
   return atm.changePassword(self.card)
 # 退出系统
 def exit(self, atm):
   return atm.exit()

5、view.py


'''
管理员界面
类名:View
属性:账号,密码
行为:管理员初始化界面  管理员登陆  系统功能界面 管理员注销
系统功能:开户 查询 取款 存储 转账 改密 销户 退出
'''
from check import Check
import time
class View(object):
 def __init__(self,admin,password):
   self.admin = admin
   self.password = password
 # 管理员初始化界面
 def initface(self):
   print("*------------------------------------*")
   print("|                  |")
   print("|  管理员界面正在启动,请稍候...  |")
   print("|                  |")
   print("*------------------------------------*")
   time.sleep(1)
   return
 #管理员登录界面
 def login(self):
   print("*------------------------------------*")
   print("|                  |")
   print("|      管理员登陆界面      |")
   print("|                  |")
   print("*------------------------------------*")
   check = Check()
   check.userName(self.admin,self.password)
   print("*-------------登陆成功---------------*")
   print("  正在跳转到系统功能界面,请稍候... ")
   del check
   time.sleep(1)
   return
 # 管理员注销界面
 def logout(self):
   print("*------------------------------------*")
   print("|                  |")
   print("|      管理员注销界面      |")
   print("|                  |")
   print("*------------------------------------*")
   #确认是否注销
   check = Check()
   if not check.isSure('注销'):
     return False
   check.userName(self.admin,self.password)
   print("*-------------注销成功---------------*")
   print("    正在关闭系统,请稍候...    ")
   del check
   time.sleep(1)
   return True
 #系统功能界面
 '''
 系统功能:开户,查询,取款,存储,转账,销户,挂失,解锁,改密,退出
 '''
 def funcInit(self):
   print("*-------Welcome To Future Bank---------*")
   print("|                   |")
   print("|   (1)开户      (2)登录    |")
   print("|   (3)找回密码    (4)挂失    |")
   print("|            (T)退出    |")
   print("|                   |")
   print("*--------------------------------------*")
 def funcInterface(self):
   print("*-------Welcome To Future Bank---------*")
   print("|                   |")
   print("|   (1)查询      (5)改密    |")
   print("|   (2)存款      (6)解锁    |")
   print("|   (3)取款      (7)销户    |")
   print("|   (4)转账      (T)退出    |")
   print("|                   |")
   print("*--------------------------------------*")

6、atm.py


'''
提款机:
类名:ATM
属性:
行为(被动执行操作):开户,查询,取款,存储,转账,销户,挂失,解锁,改密,退出
'''
from check import Check
from card import Card
from readAppendCard import ReadCard,AppendCard
import random
import time
class ATM(object):
 def __init__(self):
   # 实例化相关的类
   self.check = Check()
   self.readCard = ReadCard()
   self.appendCard = AppendCard()
   self.cards = self.readCard.read()
 # 显示功能界面
 def funcShow(self,ope):
   if ope != "找回密码":
     print("*-------Welcome To Future Bank-------*")
     print("|      %s功能界面      |"%ope)
     print("*------------------------------------*")
   else:
      # 显示找回密码界面
     print("*-------Welcome To Future Bank-------*")
     print("|     找回密码功能界面     |")
     print("*------------------------------------*")
 # 卡号输入
 def cardInput(self,ope=''):
   while True:
     cardId = input("请输入卡号:")
     password = input("请输入密码:")
     card = self.check.isCardAndPasswordSure(self.cards, cardId,password)
     if not card:
       print("卡号或密码输入有误!!!")
       if ope == 'login' or ope == 'lock':
         return False
       else:
         continue
     else:
       return card
 # 登录
 def login(self):
   self.funcShow("登录")
   return self.cardInput('login')
 #找回密码
 def findBackPassword(self):
   self.funcShow("找回密码")
   cardId = input("请输入卡号:")
   card = self.check.isCardIdExist(self.cards,cardId)
   if card:
     if not self.check.isCardInfoSure(card,"找回密码"):
       return
     newpassword = self.check.newPasswordInput()
     index = self.cards.index(card)
     self.cards[index].password = newpassword
     self.writeCard()
     print("找回密码成功!请重新登录!!!")
     time.sleep(1)
     return True
   else:
     print("卡号不存在!!!")
   return True
 # 开户
 def newAccount(self):
   self.funcShow("开户")
   # 输入身份证号和手机号
   pnum = self.check.phoneInput()
   iden = self.check.identifyInput()
   print("正在执行开户程序,请稍候...")
   while True:
     # 随机生成6位卡号
     cardId = str(random.randrange(100000, 1000000))
     # 随机生成的卡号存在就继续
     if self.check.isCardIdExist(self.cards,cardId):
       continue
     else:
       break
   # 初始化卡号密码,卡里的钱,卡的锁定状态
   card = Card(cardId, '888888', 0, iden, pnum , 'False')
   self.appendCard.append(card)
   print("开户成功,您的卡号为%s,密码为%s,卡余额为%d元!"%(cardId,'888888',0))
   print("为了账户安全,请及时修改密码!!!")
   # 更新卡号列表
   self.cards = self.readCard.read()
   return True
 # 查询
 def checkMoney(self,card):
   self.funcShow("查询")
   if self.check.isCardLock(card):
     print("查询失败!")
   else:
     print("卡上余额为%d元!" %card.money)
     time.sleep(1)
 # 存款
 def saveMoney(self,card):
   self.funcShow("存款")
   if self.check.isCardLock(card):
     print("存钱失败!")
   else:
     mon = self.check.moneyInput("存款")
     # 找到所有卡中对应的卡号,然后对此卡进行存款操作
     index = self.cards.index(card)
     self.cards[index].money += mon
     print("正在执行存款程序,请稍候...")
     time.sleep(1)
     self.writeCard()
     print("存款成功!卡上余额为%d元!"%self.cards[index].money)
     time.sleep(1)
 # 取款
 def getMoney(self,card):
   self.funcShow("取款")
   if self.check.isCardLock(card):
     print("取钱失败!")
   else:
     print("卡上余额为%d元!" %card.money)
     mon = self.check.moneyInput("取款")
     if mon:
       if mon > card.money:
         print("余额不足,您当前余额为%d元!"%card.money)
         time.sleep(1)
       else:
         print("正在执行取款程序,请稍候...")
         time.sleep(1)
         # 找到所有卡中对应的卡号,然后对此卡进行存款操作
         index = self.cards.index(card)
         self.cards[index].money -= mon
         self.writeCard()
         print("取款成功!卡上的余额为%d元!"%self.cards[index].money)
   time.sleep(1)
 # 转账
 def transferMoney(self,card):
   self.funcShow("转账")
   if self.check.isCardLock(card): #如果卡已锁定就不能进行转账操作
     print("转账失败!")
     return
   while True:
     cardId = input("请输入对方的账号:")
     if cardId == card.cardId:
       print("不能给自己转账!!!")
       return
     cardOther = self.check.isCardIdExist(self.cards,cardId)  #判断对方卡号是否存在
     if cardOther == False:
       print("对方账号不存在!!!")
       return
     else:
       break
   while True:
     print("卡上余额为%d元"%card.money)
     mon = self.check.moneyInput("转账")
     if not mon:  #输入的金额不对就返回
       return
     if mon > card.money:  #输入的金额大于卡上余额就返回
       print("余额不足,卡上余额为%d元!" % card.money)
       return
     else:
       break
   print("正在执行转账程序,请稍候...")
   time.sleep(1)
   index = self.cards.index(card) # 找到所有卡中对应的卡号,然后对此卡进行转账操作
   self.cards[index].money -= mon
   indexOther = self.cards.index(cardOther) #找到对卡卡号所处位置
   self.cards[indexOther].money += mon
   self.writeCard()
   print("转账成功!卡上余额为%d元!" % self.cards[index].money)
   time.sleep(1)
 # 销户
 def closeAccount(self,card):
   self.funcShow("销户")
   if not self.check.isCardInfoSure(card,"销户"):
     return
   if card.money >0:
     print("卡上还有余额,不能进行销户!!!")
     return
   if self.check.isSure("销户"):
     self.cards.remove(card) #移除当前卡号
     self.writeCard()
     print("销户成功!")
     time.sleep(1)
     return True
 # 挂失
 def lockAccount(self):
   self.funcShow("挂失")
   card = self.cardInput('lock')
   if not card:
     return
   if card.cardLock == "True":
     print("卡已处于锁定状态!!!")
     return
   if not self.check.isCardInfoSure(card,"挂失"):
     return
   if self.check.isSure("挂失"):
     index = self.cards.index(card) #找到所有卡中对应的卡号,然后对此卡进行挂失操作
     self.cards[index].cardLock = "True"
     self.writeCard()
     print("挂失成功!")
     time.sleep(1)
     return True
 # 解锁
 def unlockAccount(self,card):
   self.funcShow("解锁")
   if card.cardLock == 'False':
     print("无需解锁,卡处于正常状态!!!")
     return
   if not self.check.isCardInfoSure(card,"解锁"):
     return
   index = self.cards.index(card)
   self.cards[index].cardLock = "False"
   self.writeCard()
   print("解锁成功!")
   time.sleep(1)
   return True
 # 改密
 def changePassword(self,card):
   self.funcShow("改密")
   if self.check.isCardLock(card):
     print("卡处于锁定状态,不能进行改密!!!")
     return
   if not self.check.isCardInfoSure(card,"改密"):
     return
   # 输入旧密码
   while True:
     password = input("请输入旧密码:")
     if self.check.isPasswordSure(password,card.password):
       break
     else:
       print("卡号原密码输入错误!")
       return
   newpassword = self.check.newPasswordInput()
   index = self.cards.index(card)   #找到所有卡中对应的卡号,然后对此卡进行改密操作
   self.cards[index].password = newpassword
   self.writeCard()
   print("改密成功!请重新登录!!!")
   time.sleep(1)
   return True
 # 写入文件
 def writeCard(self):
   self.appendCard.append('', w='w')  #先清除原文件再重新写入
   for card in self.cards:
     self.appendCard.append(card)
 # 退出
 def exit(self):
   if self.check.isSure("退出"):
     return True
   else:
     return False

7、check.py


'''
验证类:
用户名、密码、卡号、身份证、手机号验证
使用正则表达式进行文本搜索
'''
import re
class Check(object):
 def __init__(self):
   pass
 #用户验证
 def userName(self,admin,password):
   self.admin = admin
   self.password = password
   while True:
     admin = input("请输入用户名:")
     password = input("请输入密码:")
     if admin != self.admin or password != self.password:
       print("用户名或密码输入有误,请重新输入!!!")
       continue
     else:
       return
 #是否确认某操作
 def isSure(self,operate):
   while True:
     res = input("是否确认%s?【yes/no】"%operate)
     if res not in ['yes','no']:
       print("输入有误,请重新输入!!!")
       continue
     elif res == 'yes':
       return True
     else:
       return False
 # 手机号验证
 def phoneInput(self):
   # 简单的手机号验证:开头为1且全部为数字,长度为11位
   while True:
     pnum = input("请输入您的手机号:")
     res = re.match(r"^1\d{10}$",pnum)
     if not res:
       print("手机号输入有误,请重新输入!!!")
       continue
     return pnum
 # 身份证号验证
 def identifyInput(self):
   # 简单的身份证号验证:6位,只有最后一可以为x,其余必须为数字
   while True:
     iden = input("请输入您的身份证号(6位数字):")
     res = re.match(r"\d{5}\d|x$",iden)
     if not res:
       print("身份证号输入有误,请重新输入!!!")
       continue
     return iden
 # 卡号是否存在
 def isCardIdExist(self,cards,cardId):
   for card in cards:
     if cardId == card.cardId:
       return card
   else:
     return False
 # 卡号和密码是否一致
 def isCardAndPasswordSure(self,cards,cardId,password):
   card = self.isCardIdExist(cards,cardId)
   if card:
     if card.password == password:
       return card
   return False
 # 密码二次确认是否正确
 def isPasswordSure(self, newassword,oldpassword):
   if newassword == oldpassword:
     return True
   else:
     return False
 # 卡号完整信息验证
 def isCardInfoSure(self,card,ope):
   phoneNum = input("请输入手机号:")
   iden = input("请输入身份证号:")
   if card.phoneNum == phoneNum and card.identityId == iden:
     return True
   print("%s失败!!!\n密码、手机号或身份证号与卡中绑定的信息不一致!!!"%ope)
   return False
 # 卡号是否锁定
 def isCardLock(self,card):
   if card.cardLock == "True":
     print("此卡已挂失!")
     return True
   return False
 # 输入金额验证
 def moneyInput(self,ope):
   mon = input("输入%s金额(100的倍数):"%ope)
   # 输入的钱必须是100的倍数
   if re.match(r"[123456789]\d*[0]{2}$", mon):
     return int(mon)
   print("输入有误,%s金额必须是100的倍数!请重新输入!!!"%ope)
   return False
 def newPasswordInput(self):
   while True:
     newpassword = input("请输入新密码:")
     if not re.match(r"\d{6}$",newpassword):
       print("密码必须是6位的纯数字!!!")
       continue
     newpasswordAgain = input("请重复输入新密码:")
     if self.isPasswordSure(newpassword, newpasswordAgain):
      break
     else:
       print("两次输入不一致!")
       continue
   return newpassword

希望本文所述对大家Python程序设计有所帮助。

来源:https://blog.csdn.net/lm_is_dc/article/details/80199278

标签:Python,银行系统,模拟程序
0
投稿

猜你喜欢

  • 基于Pyinstaller打包Python程序并压缩文件大小

    2023-11-10 06:41:05
  • SQLServer 循环批处理

    2024-01-20 02:39:46
  • Mysql中SQL语句不使用索引的情况

    2024-01-28 04:19:57
  • 用javascript实现给出的盒子的序列是否可连为一矩型

    2023-09-09 22:34:02
  • CentOS 6.5中安装Python 3.6.2的方法步骤

    2022-10-11 09:13:43
  • js页面文字选中后分享到新浪微博实现

    2011-03-17 12:55:00
  • 详解pycharm的python包opencv(cv2)无代码提示问题的解决

    2022-01-10 06:45:34
  • python将.ppm格式图片转换成.jpg格式文件的方法

    2023-02-16 19:19:54
  • 快速掌握ASP+Access数据库的18条安全法则

    2008-11-28 15:08:00
  • Python实现将DNA序列存储为tfr文件并读取流程介绍

    2021-08-04 08:02:23
  • 关于Pytorch的MNIST数据集的预处理详解

    2021-09-16 21:09:47
  • sql2008评估期已过的解决办法及序列号

    2024-01-13 10:32:11
  • Mysql存储引擎MyISAM的常见问题(表损坏、无法访问、磁盘空间不足)

    2024-01-14 22:07:53
  • 以一段代码为实例快速入门Python2.7

    2021-04-24 05:00:06
  • Python实现京东秒杀功能代码

    2021-08-14 15:41:27
  • 为你的网页添加背景音乐

    2007-02-03 11:39:00
  • python+opencv实现动态物体识别

    2023-10-31 01:15:00
  • Python的MongoDB模块PyMongo操作方法集锦

    2021-02-05 17:59:03
  • 关于JSON以及JSON在PHP中的应用技巧

    2023-11-16 00:03:38
  • Google中秋logo被恶搞

    2007-09-25 15:55:00
  • asp之家 网络编程 m.aspxhome.com