中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

python實現簡單銀行管理系統

發布時間:2020-08-30 17:44:02 來源:腳本之家 閱讀:2168 作者:喜歡海呀 欄目:開發技術

本文為大家分享了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()

更多學習資料請關注專題《管理系統開發》。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

尚志市| 通城县| 时尚| 怀远县| 霞浦县| 永济市| 噶尔县| 池州市| 浪卡子县| 奉贤区| 北碚区| 鄂托克旗| 合川市| 山西省| 白山市| 渑池县| 饶平县| 呈贡县| 淳化县| 堆龙德庆县| 南宫市| 广平县| 富川| 马尔康县| 湘潭县| 蓬莱市| 乌拉特后旗| 白山市| 沽源县| 仁化县| 泉州市| 托里县| 黎川县| 湘西| 金门县| 科技| 顺昌县| 潮州市| 崇信县| 鄂托克旗| 峡江县|