欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python實現(xiàn)簡單銀行管理系統(tǒng)

 更新時間:2019年10月25日 09:36:07   作者:喜歡海呀  
這篇文章主要為大家詳細介紹了python實現(xiàn)簡單銀行管理系統(tǒng),文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下

本文為大家分享了python銀行管理系統(tǒng)的具體代碼,供大家參考,具體內(nèi)容如下

自己寫的練手小程序,練習面向?qū)ο蟮母拍?,代碼中都有注釋,剛學的同學也可以很容易看懂(需要自己用pickle模塊新建一個database.txt文件,用來存儲用戶數(shù)據(jù)信息)。

# atm.py
# 各種操作類
import random
from card import Card
from user import User
import time


class ATM(object):
 # 初始化
 def __init__(self, allUsersInfo):
 # 將所有用戶信息傳遞過來,以便后續(xù)操作
 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

  # 以上全部完成,則開戶所需的信息準備齊全,開戶成功
  # 系統(tǒng)生成開戶卡號

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

  # 創(chuàng)建一個卡的實例,用于存儲卡的信息
  card = Card(cardStr, onePwd, preMoney)

  # 創(chuàng)建一個用戶實例,用于存儲用戶的信息
  user = User(name, idCard, phone, card)

  # 按 卡號 : 用戶信息 鍵值對的形式存入字典中
  self.allUsersInfo[cardStr] = user

  # 提示用戶,已經(jīng)開戶成功
  time.sleep(1)
  print('開戶成功,請牢記卡號({})...'.format(cardStr))

 except Exception as e:
  print('抱歉,系統(tǒng)出現(xiàn)故障,暫時無法操作!')
  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('請輸入卡號:') # 用戶想要查詢的卡號

 # 判斷卡號的狀態(tài)
 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('存款成功,卡內(nèi)余額為%d!' % self.allUsersInfo[cardStrInp].cardInfo.cardMoney)
  else:
   print('密碼輸入錯誤超過3次,卡號已被鎖定,請先解鎖!')
   self.allUsersInfo[cardStrInp].cardInfo.isLock = True
   return -1
  else:
  print('該卡號已被鎖定,請先解鎖!')
  return -1

 # 轉(zhuǎn)賬
 def transMoney(self):
 cardInp = input('請輸入卡號:')

 isExist = self.isExistence(cardInp)

 # 卡號存在
 if isExist:
  # 沒被鎖定
  if not self.allUsersInfo[cardInp].cardInfo.isLock:
  # 密碼正確
  if self.secretOption(cardInp):
   transCardInp = input('請輸入要轉(zhuǎn)賬的卡號:')
   isExistTrans = self.isExistence(transCardInp)

   # 要轉(zhuǎn)賬的卡號存在
   if isExistTrans:
   # 要轉(zhuǎn)賬的卡號沒被鎖定
   if not self.allUsersInfo[transCardInp].cardInfo.isLock:
    # 要轉(zhuǎn)賬的卡號不是自己的卡號
    if transCardInp != cardInp:
    transMoneyInp = int(input('請輸入要轉(zhuǎn)賬的金額:'))
    # 判斷轉(zhuǎn)賬金額是否大于卡內(nèi)余額
    if transMoneyInp > self.allUsersInfo[cardInp].cardInfo.cardMoney:
     print('余額不足,轉(zhuǎn)賬失?。?)
     return -1
    else:
     self.allUsersInfo[cardInp].cardInfo.cardMoney -= transMoneyInp
     self.allUsersInfo[transCardInp].cardInfo.cardMoney += transMoneyInp
     print('轉(zhuǎn)賬成功,卡內(nèi)余額為%d!' % self.allUsersInfo[cardInp].cardInfo.cardMoney)
    else:
    print('無法轉(zhuǎn)入自己的賬戶!')
    return -1
   else:
    print('對方卡號已被鎖定,無法轉(zhuǎn)賬,請先解鎖!')
    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('確認密碼錯誤次數(shù)超過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
# 主函數(shù)
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)

 # 創(chuàng)建atm實例,并將所有用戶信息傳遞過去,進行初始化
 atm = ATM(allUsersInfo)

 # 循環(huán)進行操作選項
 while True:
 # 調(diào)用功能顯示方法,顯示功能選項
 admin.printSysFunctionView()

 # 提示用戶輸入功能選項進行操作
 option= input('請輸入操作選項(數(shù)字):')

 # 對用戶的操作選項進行判斷
 if option == "1": # 開戶操作
  atm.createUser()

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

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

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

 elif option == "5": # 轉(zhuǎn)賬操作
  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": # 退出系統(tǒng)
  return 0

 # 如果用戶輸入的不是上述操作
 else:
  print('無效的操作選項!')
  return -1

 # 將新信息寫入文件
 # 將當前系統(tǒng)中的用戶信息保存到文件中
 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("* 轉(zhuǎn)賬(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()

更多學習資料請關注專題《管理系統(tǒng)開發(fā)》。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Python+OpenCV之圖像輪廓詳解

    Python+OpenCV之圖像輪廓詳解

    這篇文章主要為大家詳細介紹了Python?OpenCV實現(xiàn)圖像輪廓的方法,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的可以了解一下
    2022-09-09
  • 詳解基于python的圖像Gabor變換及特征提取

    詳解基于python的圖像Gabor變換及特征提取

    這篇文章主要介紹了基于python的圖像Gabor變換及特征提取,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2020-10-10
  • OpenCV圖像處理之自定義濾波

    OpenCV圖像處理之自定義濾波

    濾波處理分為兩大類:線性濾波和非線性濾波,OpenCV里有這些濾波的函數(shù),使用起來非常方便,這篇文章主要給大家介紹了關于OpenCV圖像處理之自定義濾波的相關資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2021-08-08
  • 使用Python實現(xiàn)提取PDF文件中指定頁面的內(nèi)容

    使用Python實現(xiàn)提取PDF文件中指定頁面的內(nèi)容

    在日常工作和學習中,我們經(jīng)常需要從PDF文件中提取特定頁面的內(nèi)容,本文主要為大家詳細介紹了如何使用Python編程語言和兩個強大的庫——pymupdf和wxPython來實現(xiàn)這個任務,需要的可以了解下
    2023-12-12
  • python中匿名函數(shù)的應用方法

    python中匿名函數(shù)的應用方法

    這篇文章主要介紹了python中匿名函數(shù)的應用方法,匿名函數(shù)是無需使用def定義的函數(shù),只需使用關鍵字lambda進行聲明,且只可使用一次,只有一個返回值,需要的朋友可以參考下
    2023-07-07
  • 利用python來跟蹤ip地址的方法

    利用python來跟蹤ip地址的方法

    今天來介紹一個流行的 python庫 ip2geotools,使用它可以確定 IP地址 對應的 國家、地區(qū)、城市、緯度和經(jīng)度等,文中通過代碼示例介紹了如何使用python來跟蹤ip地址,需要的朋友可以參考下
    2023-06-06
  • tensorflow實現(xiàn)簡單的卷積神經(jīng)網(wǎng)絡

    tensorflow實現(xiàn)簡單的卷積神經(jīng)網(wǎng)絡

    這篇文章主要為大家詳細介紹了tensorflow實現(xiàn)簡單的卷積神經(jīng)網(wǎng)絡,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-05-05
  • Python替換NumPy數(shù)組中大于某個值的所有元素實例

    Python替換NumPy數(shù)組中大于某個值的所有元素實例

    這篇文章主要介紹了Python替換NumPy數(shù)組中大于某個值的所有元素實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • Python使用PIL進行JPEG圖像壓縮的簡易教程

    Python使用PIL進行JPEG圖像壓縮的簡易教程

    本文介紹了如何使用Python編程語言和wxPython圖形用戶界面庫進行JPEG圖像的壓縮,通過添加滑塊控件,我們可以調(diào)整壓縮質(zhì)量,并將壓縮后的照片另存為原來的名稱加上后綴"壓縮+質(zhì)量數(shù)字"的新文件,需要的朋友可以參考下
    2023-09-09
  • 如何利用pygame實現(xiàn)打飛機小游戲

    如何利用pygame實現(xiàn)打飛機小游戲

    pygame是python的一個做游戲的庫,非常適合做游戲開發(fā),這篇文章主要給大家介紹了關于如何利用pygame實現(xiàn)打飛機小游戲的相關資料,需要的朋友可以參考下
    2021-05-05

最新評論