python实现简单银行管理系统

本文为大家分享了python银行管理系统的具体代码,供大家参考,具体内容如下

自己写的练手小程序,练习面向对象的概念,代码中都有注释,刚学的同学也可以很容易看懂(需要自己用pickle模块新建一个database.txt文件,用来存储用户数据信息)。

# atm.py
# 各种操作类
import random
from card import Card
from user import User
import time

class ATM(object):
 # 初始化
 def __init__(self, allUsersInfo):
 # 将所有用户信息传递过来,以便后续操作
 self.allUsersInfo = allUsersInfo # 卡号 :用户

 # 确认密码
 def checkPwd(self, realPwd):
 myList = [3, 2, 1, 0]
 for i in myList:
  # 如果密码输入错误超过三次
  if i == 0:
  return False
  rePass = input('请再次输入密码:')
  if realPwd == rePass:
  return True
  elif (i - 1) != 0:
  print('输入错误,你还有%d次输入的机会!' % (i - 1))

 # 随机生成开户卡号
 def randomId(self):
 while True:
  # 存储卡号
  str = ''

  # 随机生成6位卡号
  for i in range(6):
  ch = chr(random.randrange(ord('0'), ord('9') + 1))
  str += ch

  # 判断卡号是否重复
  if not self.allUsersInfo.get(str):
  return str

 # 开卡操作
 def createUser(self):
 try:
  name = input('请输入姓名:') # 用户姓名
  idCard = input('请输入身份证号码:') # 用户身份证号
  phone = input('请输入电话号码:') # 用户的电话号码
  preMoney = int(input('请输入预存金额:')) # 用户的预存金额

  # 预存金额少于0则开户失败
  if preMoney < 0:
  print('预存金额有误,开户失败!')
  return -1

  # 设置密码
  onePwd = input('请输入密码:') # 第一次密码
  twoPwd = self.checkPwd(onePwd)

  if not twoPwd:
  print('确认密码错误,开户失败!')
  return -1

  # 以上全部完成,则开户所需的信息准备齐全,开户成功
  # 系统生成开户卡号

  # 生成卡号
  cardStr = self.randomId()

  # 创建一个卡的实例,用于存储卡的信息
  card = Card(cardStr, onePwd, preMoney)

  # 创建一个用户实例,用于存储用户的信息
  user = User(name, idCard, phone, card)

  # 按 卡号 : 用户信息 键值对的形式存入字典中
  self.allUsersInfo[cardStr] = user

  # 提示用户,已经开户成功
  time.sleep(1)
  print('开户成功,请牢记卡号({})...'.format(cardStr))

 except Exception as e:
  print('抱歉,系统出现故障,暂时无法操作!')
  return

 # 判断卡号是否存在
 def isExistence(self, cardStrInp):
 # 卡号不存在,直接退回到选项界面
 if self.allUsersInfo.get(cardStrInp):
  return True

 # 卡号不存在的情况下
 else:
  print('卡号不存在!')
  return False

 # 做查询等操作时,输入密码
 def secretOption(self, cardStrInp):
 myList = [3, 2, 1, 0]
 for i in myList:
  # 如果密码输入错误超过三次
  if i == 0:
  return False
  passInp = input('请输入密码:')
  if passInp == self.allUsersInfo[cardStrInp].cardInfo.cardPwd:
  return True
  elif (i - 1) != 0:
  print('输入错误,你还有%d次输入的机会!' % (i - 1))

 # 查询用户信息
 def searchUserInfo(self):
 cardStrInp = input('请输入卡号:') # 用户想要查询的卡号

 # 判断卡号的状态
 isExist = self.isExistence(cardStrInp)

 # 卡号存在
 if isExist:
  # 是否被锁定
  if not self.allUsersInfo[cardStrInp].cardInfo.isLock:
  # 输入密码并判断
  # 密码正确则输出余额
  if self.secretOption(cardStrInp):
   print('账号:%s 余额:%d' % (cardStrInp, self.allUsersInfo[cardStrInp].cardInfo.cardMoney))
   return 0

  # 密码错误则锁定卡号
  else:
   print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
   self.allUsersInfo[cardStrInp].cardInfo.isLock = True
   return -1
  else:
  print('该卡号已被锁定,请先解锁!')
  return -1

 # 取钱
 def getMoney(self):
 cardStrInp = input('请输入卡号:')

 isExist = self.isExistence(cardStrInp)
 # print(isExist)

 # 如果卡号存在
 if isExist:
  # 如果没被锁定
  if not self.allUsersInfo[cardStrInp].cardInfo.isLock:

  # 如果密码正确
  if self.secretOption(cardStrInp):
   getMoney = int(input('请输入取款金额:'))

   # 如果取款金额超出余额
   if getMoney > self.allUsersInfo[cardStrInp].cardInfo.cardMoney:
   print('余额不足,取款失败!')
   return -1

   # 余额足够的情况,取款成功
   else:
   self.allUsersInfo[cardStrInp].cardInfo.cardMoney -= getMoney
   print('取款成功,卡上余额:%d' % self.allUsersInfo[cardStrInp].cardInfo.cardMoney)
   return 0
  else:
   print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
   self.allUsersInfo[cardStrInp].cardInfo.isLock = True
   return -1
  else:
  print('该卡号已被锁定,请先解锁!')
  return -1

 # 存钱
 def saveMoney(self):
 cardStrInp = input('请输入卡号:')

 isExist = self.isExistence(cardStrInp)

 if isExist:
  # 如果没被锁定
  if not self.allUsersInfo[cardStrInp].cardInfo.isLock:

  # 如果密码正确
  if self.secretOption(cardStrInp):
   saveMoney = int(input('请输入存款金额:'))
   if saveMoney <= 0:
   print('无效的存款金额!')
   return -1
   else:
   # 存款成功
   self.allUsersInfo[cardStrInp].cardInfo.cardMoney += saveMoney
   print('存款成功,卡内余额为%d!' % self.allUsersInfo[cardStrInp].cardInfo.cardMoney)
  else:
   print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
   self.allUsersInfo[cardStrInp].cardInfo.isLock = True
   return -1
  else:
  print('该卡号已被锁定,请先解锁!')
  return -1

 # 转账
 def transMoney(self):
 cardInp = input('请输入卡号:')

 isExist = self.isExistence(cardInp)

 # 卡号存在
 if isExist:
  # 没被锁定
  if not self.allUsersInfo[cardInp].cardInfo.isLock:
  # 密码正确
  if self.secretOption(cardInp):
   transCardInp = input('请输入要转账的卡号:')
   isExistTrans = self.isExistence(transCardInp)

   # 要转账的卡号存在
   if isExistTrans:
   # 要转账的卡号没被锁定
   if not self.allUsersInfo[transCardInp].cardInfo.isLock:
    # 要转账的卡号不是自己的卡号
    if transCardInp != cardInp:
    transMoneyInp = int(input('请输入要转账的金额:'))
    # 判断转账金额是否大于卡内余额
    if transMoneyInp > self.allUsersInfo[cardInp].cardInfo.cardMoney:
     print('余额不足,转账失败!')
     return -1
    else:
     self.allUsersInfo[cardInp].cardInfo.cardMoney -= transMoneyInp
     self.allUsersInfo[transCardInp].cardInfo.cardMoney += transMoneyInp
     print('转账成功,卡内余额为%d!' % self.allUsersInfo[cardInp].cardInfo.cardMoney)
    else:
    print('无法转入自己的账户!')
    return -1
   else:
    print('对方卡号已被锁定,无法转账,请先解锁!')
    return -1
  else:
   print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
   self.allUsersInfo[cardInp].cardInfo.isLock = True
   return -1
  else:
  print('该卡号已被锁定,请先解锁!')
  return -1

 # 改密
 def changePwd(self):
 cardStrInp = input('请输入卡号:')

 isExist = self.isExistence(cardStrInp)

 if isExist:
  # 如果没被锁定
  if not self.allUsersInfo[cardStrInp].cardInfo.isLock:

  # 如果密码正确
  if self.secretOption(cardStrInp):
   # 输入修改后的密码
   changePwd = input('请输入新密码:')

   # 不允许新密码和旧密码相同
   if changePwd != self.allUsersInfo[cardStrInp].cardInfo.cardPwd:
   myList = [3, 2, 1, 0]
   for i in myList:
    # 如果密码输入错误超过三次
    if i == 0:
    print('确认密码错误次数超过3次,修改密码失败!')
    return -1
    passInp = input('请确认新密码:')

    # 如果新密码确认成功,则修改密码
    if passInp == changePwd:
    print('密码修改成功!')
    self.allUsersInfo[cardStrInp].cardInfo.cardPwd = changePwd
    return 0
    elif (i - 1) != 0:
    print('输入错误,你还有%d次输入的机会!' % (i - 1))
   # 新密码和旧密码相同,不允许修改,提示并退出
   else:
   print('新密码不允许和旧密码相同!')
   return -1
  # 密码不正确
  else:
   print('密码输入错误超过3次,卡号已被锁定,请先解锁!')
   self.allUsersInfo[cardStrInp].cardInfo.isLock = True
   return -1
  else:
  print('该卡号已被锁定,请先解锁!')
  return -1

 # 解锁
 def unlockUser(self):
 cardStrInp = input('请输入卡号:')

 isExist = self.isExistence(cardStrInp)

 # 存在
 if isExist:
  # 被锁定
  if self.allUsersInfo[cardStrInp].cardInfo.isLock:
  # 如果密码正确
  if self.secretOption(cardStrInp):
   # 输入身份证号信息做确认
   idCardInp = input('请输入身份证号:')

   # 身份证号信息匹配
   if idCardInp == self.allUsersInfo[cardStrInp].idCard:
   # 解锁成功
   print('解锁成功!')
   self.allUsersInfo[cardStrInp].cardInfo.isLock = False
   return 0
   else:
   print('身份证号信息不匹配,解锁失败!')
   return -1
  # 密码不正确
  else:
   print('密码输出错误,解锁失败!')
   return -1
  else:
  print('该卡号未被锁定,无需解锁!')
  return -1
# card.py
# 卡类
class Card(object):
 def __init__(self, cardStr, cardPwd, cardMoney):
 self.cardStr = cardStr # 卡号
 self.cardPwd = cardPwd # 卡密
 self.cardMoney = cardMoney # 卡中余额

 self.isLock = False # 卡号是否被锁
# main.py
# 主函数
from view import View
import pickle
from atm import ATM
import time

def main():
 # 定义管理员对象
 admin = View()

 # 管理员登录界面
 admin.printAdminView()

 # 如果管理员账号、密码输入错误则退出
 if admin.adminOption():
 return -1

 # 读取存储在文件中的所有用户的信息
 file = open('database.txt', 'rb')
 allUsersInfo = pickle.load(file) # 将所有用户信息存储到 allUsersInfo中去
 file.close() # 关闭文件

 # 打印所有用户信息,以便验证
 print('*' * 10)
 print('usersInfo:', allUsersInfo)

 # 创建atm实例,并将所有用户信息传递过去,进行初始化
 atm = ATM(allUsersInfo)

 # 循环进行操作选项
 while True:
 # 调用功能显示方法,显示功能选项
 admin.printSysFunctionView()

 # 提示用户输入功能选项进行操作
 option= input('请输入操作选项(数字):')

 # 对用户的操作选项进行判断
 if option == "1": # 开户操作
  atm.createUser()

 elif option == "2": # 查询余额操作
  atm.searchUserInfo()

 elif option == "3": # 取钱操作
  atm.getMoney()

 elif option == "4": # 存钱操作
  atm.saveMoney()

 elif option == "5": # 转账操作
  atm.transMoney()

 elif option == "6": # 改密码操作
  atm.changePwd()

 elif option == "7": # 解锁操作
  atm.unlockUser()

 # 以下操作暂时未写
 # elif option == "q": # 退出操作
 # # atm.quitSys()
 # print('退出')

 # elif option == "9": # 补卡操作
 # print("补卡")
 #
 # elif option == "0": # 销户操作
 # print("销户")

 elif option == "8": # 退出系统
  return 0

 # 如果用户输入的不是上述操作
 else:
  print('无效的操作选项!')
  return -1

 # 将新信息写入文件
 # 将当前系统中的用户信息保存到文件中
 f = open('database.txt', "wb")
 pickle.dump(allUsersInfo, f)
 f.close()

if __name__ == '__main__':
 main()
# user.py
# 用户信息类
class User(object):
 def __init__(self, name, idCard, phone, cardInfo):
 self.name = name # 用户姓名
 self.idCard = idCard # 用户身份证号
 self.phone = phone # 用户的手机号码
 self.cardInfo = cardInfo # 用户的卡的信息(卡号、密码、余额)
# view.py
# 视图类
import time

class View(object):
 admin = '1'
 pwd = '1'

 # 管理员登录界面
 def printAdminView(self):
 print("*****************************************************************")
 print("*        *")
 print("*        *")
 print("*   欢迎登陆丹丹的银行   *")
 print("*        *")
 print("*        *")
 print("*****************************************************************")

 def printSysFunctionView(self):
 print("*****************************************************************")
 print("* 开户(1)    查询(2)  *")
 print("* 取款(3)    存款(4)  *")
 print("* 转账(5)    改密(6)  *")
 print("* 解锁(7)    退出(8)  *")
 # print("* 补卡(9)    销户(0)  *")
 # print("*    退出(t)    *")
 print("*****************************************************************")

 def adminOption(self):
 inputAdmin = input('请输入管理员账号:')

 if inputAdmin != self.admin:
  print('账号错误!')
  return -1

 inputPwd = input('请输入管理员密码:')

 if inputPwd != self.pwd:
  print('密码错误!')
  return -1

 # 管理员账号和密码全部正确
 print('操作成功,请稍后...')
 time.sleep(2)
 return 0

# view = View()
# view.printAdminView()
# view.adminOption()
# view.printSysFunctionView()

更多学习资料请关注专题《管理系统开发》。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

(0)

相关推荐

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

    本文实例讲述了Python实现的银行系统模拟程序.分享给大家供大家参考,具体如下: 银行系统模拟程序 1.概述 ​ 使用面向对象思想模拟一个简单的银行系统,具备的功能:管理员登录/注销.用户开户.登录.找回密码.挂失.改密.查询.存取款.转账等功能. ​ 编程语言:python. 2.目的 ​ 通过这个编程练习,可以熟悉运用面向对象的思想来解决实际问题,其中用到的知识点有类的封装.正则表达式.模块等. 3.体会 ​ 在编写这个程序时,实际上的业务逻辑还是要考虑的,比如修改密码时需要输入手机号.身

  • python实现银行管理系统

    python实现银行管理系统,供大家参考,具体内容如下 有的地方用的方法的比较复杂,主要是为回顾更多的知识 test1用来存类和函数 #test1.py import random #用来随机产生卡号 import pickle #序列化,用来存放和取出产生的用户数据 import os #产生文件 import re #正则表达式,用来判断身份证和手机号,其他地方也可以使用 class Card: def __init__(self,cardId,password,money=0): self

  • Python3 适合初学者学习的银行账户登录系统实例

    一.所用知识点: 1. for循环与if判断的结合 2. %s占位符的使用 3. 辅助标志的使用(标志位) 4. break的使用 二.代码示例: ''' 银行登录系统 ''' uname = "bob" passwd = 123 judgment = 0 choice = 2 for i in range(3): username = input("请输入用户名:") password = int(input("请输入密码:")) if use

  • Python银行系统实战源码

    本文实例为大家分享了Python银行系统的具体代码,供大家参考,具体内容如下 import time import random import pickle import os class Card(object): def __init__(self, cardId, cardPasswd, cardMoney): self.cardId = cardId self.cardPasswd = cardPasswd self.cardMony = cardMoney self.cardLock

  • python银行系统实现源码

    本文实例为大家分享了python实现银行系统的具体代码,供大家参考,具体内容如下 1.admin.py 定义管理员信息和主界面显示 #!/usr/bin/env python # coding:UTF-8 """ @version: python3.x @author:曹新健 @contact: 617349013@qq.com @software: PyCharm @file: admin.py @time: 2018/9/11 10:14 ""&quo

  • python实现简单银行管理系统

    本文为大家分享了python银行管理系统的具体代码,供大家参考,具体内容如下 自己写的练手小程序,练习面向对象的概念,代码中都有注释,刚学的同学也可以很容易看懂(需要自己用pickle模块新建一个database.txt文件,用来存储用户数据信息). # atm.py # 各种操作类 import random from card import Card from user import User import time class ATM(object): # 初始化 def __init__

  • java实现简单银行管理系统

    本文实例为大家分享了java银行管理系统的具体代码,供大家参考,具体内容如下 账户类 package Account; public abstract class Account { private int id;//账号 private String password;//密码 private String name;//姓名 private String personId;//身份证号码 private String email;//邮箱 private double ceiling;//贷

  • python实现简单图书管理系统

    用python实现一个简单的图书管理系统 ,供大家参考,具体内容如下 1.工具:PyCharm3.6 社区版 我创建了一个工程叫fairy,把解释器换成Pytnon3.6 创建一个pytnon file:图书管理系统.py 2.实现简单界面如下: """ 图书管理系统 1.查询图书 2.增加图书 3.借阅图书 4.归还图书 5.退出系统 """ 3.代码实现 # 书的属性:书名,作者,状态,位置 # 管理系统: class Book(object

  • 基于Python实现简单学生管理系统

    学生信息管理系统负责编辑学生信息,供大家参考,具体内容如下 第一次发帖,下面通过python实现一个简单的学生信息管理系统 要求如下: 1.添加学生的信息 2.删除学生的信息 3.修改的信息 4.查询学生的信息 5.遍历学生的信息 6.退出系统 写法: 1.先考虑整体的框架(即搭框架),不要刚开始就考虑函数. 2.提示用户选择功能. 3.获取用户选择的功能. 4.根据用户的选择,执行相应的功能. 代码如下: # 0.学生管理系统界面 def showInfo(): print("-"*

  • python实现简单名片管理系统

    前言 之前看过一遍的python教程,真的是自己看过一遍,python的程序能看懂,但是很难去实现.比较困难的自己实现一些代码,找工作原因,自己又认认真真的看书,敲代码,后来看到了这个题目,想把之前学习的python常用的数据类型复习下.花了一点儿时间,编程实现了. python实现名片管理系统 能实现如下功能: ***************** 名片管理系统 1.添加名片 2.删除名片 3.修改名片 4.查询名片 5.退出系统 0.显示所有名片 ***************** 添加名片

  • python实现简单通讯录管理系统

    本文实例为大家分享了python实现通讯录管理系统的具体代码,供大家参考,具体内容如下 =====欢迎使用通讯录管理系统=====1.添加2.修改3.册除4.查询5.排序6.退出========================= 请选择你要执行的操作的序号,具体要求: 1)通讯录要以文件的形式存储在硬盘上(比如D:\tongxunlu) ,每一条数据(联系人姓名和手机号码)存储一行,如果一个联系人有多个手机号,则都存储在同一行,即通讯录中每个联系入的数据占一行. 2)系统运行时初始菜单如上,根据

  • python实现简单的学生管理系统

    本文实例为大家分享了python实现简单学生管理系统的具体代码,供大家参考,具体内容如下 学生管理系统 相信大家学各种语言的时候,练习总是会写各种管理系统吧,管理系统主要有对数据的增删查改操作,原理不难,适合作为练手的小程序 数据的结构 要保存数据就需要数据结构,比如c里面的结构体啊,python里面的列表,字典,还有类都是常用的数据类型 在这里,我使用了链表来作为学生数据的数据结构, 即 Node类 和 Student_LinkList类,来实现链表 数据的持久化 我们在程序中产生的数据是保存

  • 基于java实现简单的银行管理系统

    页面代码之一: package org.vector.view; import java.awt.Font; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.ArrayList; import java.util.List; import javax.swing.ImageIcon; import javax.swing.JButton; import javax.

  • 基于python实现银行管理系统

    一.python银行管理系统 二.分析部分 三.代码部分 import random class bankUser: # 卡号,用户姓名,身份证号,手机,预存,密码 Count_id = "" Count_Name = "" Count_IDCard = "" Count_phone = "" Count_Money = 0.00 Count_password = "" Count_Root = True

随机推荐