亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

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

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

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

自己寫的練手小程序,練習(xí)面向?qū)ο蟮母拍?,代碼中都有注釋,剛學(xué)的同學(xué)也可以很容易看懂(需要自己用pickle模塊新建一個(gè)database.txt文件,用來存儲(chǔ)用戶數(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 # 卡號(hào) :用戶

 # 確認(rèn)密碼
 def checkPwd(self, realPwd):
 myList = [3, 2, 1, 0]
 for i in myList:
  # 如果密碼輸入錯(cuò)誤超過三次
  if i == 0:
  return False
  rePass = input('請(qǐng)?jiān)俅屋斎朊艽a:')
  if realPwd == rePass:
  return True
  elif (i - 1) != 0:
  print('輸入錯(cuò)誤,你還有%d次輸入的機(jī)會(huì)!' % (i - 1))

 # 隨機(jī)生成開戶卡號(hào)
 def randomId(self):
 while True:
  # 存儲(chǔ)卡號(hào)
  str = ''

  # 隨機(jī)生成6位卡號(hào)
  for i in range(6):
  ch = chr(random.randrange(ord('0'), ord('9') + 1))
  str += ch

  # 判斷卡號(hào)是否重復(fù)
  if not self.allUsersInfo.get(str):
  return str

 # 開卡操作
 def createUser(self):
 try:
  name = input('請(qǐng)輸入姓名:') # 用戶姓名
  idCard = input('請(qǐng)輸入身份證號(hào)碼:') # 用戶身份證號(hào)
  phone = input('請(qǐng)輸入電話號(hào)碼:') # 用戶的電話號(hào)碼
  preMoney = int(input('請(qǐng)輸入預(yù)存金額:')) # 用戶的預(yù)存金額

  # 預(yù)存金額少于0則開戶失敗
  if preMoney < 0:
  print('預(yù)存金額有誤,開戶失??!')
  return -1

  # 設(shè)置密碼
  onePwd = input('請(qǐng)輸入密碼:') # 第一次密碼
  twoPwd = self.checkPwd(onePwd)

  if not twoPwd:
  print('確認(rèn)密碼錯(cuò)誤,開戶失??!')
  return -1

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

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

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

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

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

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

 except Exception as e:
  print('抱歉,系統(tǒng)出現(xiàn)故障,暫時(shí)無法操作!')
  return

 # 判斷卡號(hào)是否存在
 def isExistence(self, cardStrInp):
 # 卡號(hào)不存在,直接退回到選項(xiàng)界面
 if self.allUsersInfo.get(cardStrInp):
  return True

 # 卡號(hào)不存在的情況下
 else:
  print('卡號(hào)不存在!')
  return False

 # 做查詢等操作時(shí),輸入密碼
 def secretOption(self, cardStrInp):
 myList = [3, 2, 1, 0]
 for i in myList:
  # 如果密碼輸入錯(cuò)誤超過三次
  if i == 0:
  return False
  passInp = input('請(qǐng)輸入密碼:')
  if passInp == self.allUsersInfo[cardStrInp].cardInfo.cardPwd:
  return True
  elif (i - 1) != 0:
  print('輸入錯(cuò)誤,你還有%d次輸入的機(jī)會(huì)!' % (i - 1))


 # 查詢用戶信息
 def searchUserInfo(self):
 cardStrInp = input('請(qǐng)輸入卡號(hào):') # 用戶想要查詢的卡號(hào)

 # 判斷卡號(hào)的狀態(tài)
 isExist = self.isExistence(cardStrInp)

 # 卡號(hào)存在
 if isExist:
  # 是否被鎖定
  if not self.allUsersInfo[cardStrInp].cardInfo.isLock:
  # 輸入密碼并判斷
  # 密碼正確則輸出余額
  if self.secretOption(cardStrInp):
   print('賬號(hào):%s 余額:%d' % (cardStrInp, self.allUsersInfo[cardStrInp].cardInfo.cardMoney))
   return 0

  # 密碼錯(cuò)誤則鎖定卡號(hào)
  else:
   print('密碼輸入錯(cuò)誤超過3次,卡號(hào)已被鎖定,請(qǐng)先解鎖!')
   self.allUsersInfo[cardStrInp].cardInfo.isLock = True
   return -1
  else:
  print('該卡號(hào)已被鎖定,請(qǐng)先解鎖!')
  return -1


 # 取錢
 def getMoney(self):
 cardStrInp = input('請(qǐng)輸入卡號(hào):')

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

 # 如果卡號(hào)存在
 if isExist:
  # 如果沒被鎖定
  if not self.allUsersInfo[cardStrInp].cardInfo.isLock:

  # 如果密碼正確
  if self.secretOption(cardStrInp):
   getMoney = int(input('請(qǐng)輸入取款金額:'))

   # 如果取款金額超出余額
   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('密碼輸入錯(cuò)誤超過3次,卡號(hào)已被鎖定,請(qǐng)先解鎖!')
   self.allUsersInfo[cardStrInp].cardInfo.isLock = True
   return -1
  else:
  print('該卡號(hào)已被鎖定,請(qǐng)先解鎖!')
  return -1


 # 存錢
 def saveMoney(self):
 cardStrInp = input('請(qǐng)輸入卡號(hào):')

 isExist = self.isExistence(cardStrInp)

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

  # 如果密碼正確
  if self.secretOption(cardStrInp):
   saveMoney = int(input('請(qǐng)輸入存款金額:'))
   if saveMoney <= 0:
   print('無效的存款金額!')
   return -1
   else:
   # 存款成功
   self.allUsersInfo[cardStrInp].cardInfo.cardMoney += saveMoney
   print('存款成功,卡內(nèi)余額為%d!' % self.allUsersInfo[cardStrInp].cardInfo.cardMoney)
  else:
   print('密碼輸入錯(cuò)誤超過3次,卡號(hào)已被鎖定,請(qǐng)先解鎖!')
   self.allUsersInfo[cardStrInp].cardInfo.isLock = True
   return -1
  else:
  print('該卡號(hào)已被鎖定,請(qǐng)先解鎖!')
  return -1

 # 轉(zhuǎn)賬
 def transMoney(self):
 cardInp = input('請(qǐng)輸入卡號(hào):')

 isExist = self.isExistence(cardInp)

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

   # 要轉(zhuǎn)賬的卡號(hào)存在
   if isExistTrans:
   # 要轉(zhuǎn)賬的卡號(hào)沒被鎖定
   if not self.allUsersInfo[transCardInp].cardInfo.isLock:
    # 要轉(zhuǎn)賬的卡號(hào)不是自己的卡號(hào)
    if transCardInp != cardInp:
    transMoneyInp = int(input('請(qǐng)輸入要轉(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('對(duì)方卡號(hào)已被鎖定,無法轉(zhuǎn)賬,請(qǐng)先解鎖!')
    return -1
  else:
   print('密碼輸入錯(cuò)誤超過3次,卡號(hào)已被鎖定,請(qǐng)先解鎖!')
   self.allUsersInfo[cardInp].cardInfo.isLock = True
   return -1
  else:
  print('該卡號(hào)已被鎖定,請(qǐng)先解鎖!')
  return -1


 # 改密
 def changePwd(self):
 cardStrInp = input('請(qǐng)輸入卡號(hào):')

 isExist = self.isExistence(cardStrInp)

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

  # 如果密碼正確
  if self.secretOption(cardStrInp):
   # 輸入修改后的密碼
   changePwd = input('請(qǐng)輸入新密碼:')

   # 不允許新密碼和舊密碼相同
   if changePwd != self.allUsersInfo[cardStrInp].cardInfo.cardPwd:
   myList = [3, 2, 1, 0]
   for i in myList:
    # 如果密碼輸入錯(cuò)誤超過三次
    if i == 0:
    print('確認(rèn)密碼錯(cuò)誤次數(shù)超過3次,修改密碼失敗!')
    return -1
    passInp = input('請(qǐng)確認(rèn)新密碼:')

    # 如果新密碼確認(rèn)成功,則修改密碼
    if passInp == changePwd:
    print('密碼修改成功!')
    self.allUsersInfo[cardStrInp].cardInfo.cardPwd = changePwd
    return 0
    elif (i - 1) != 0:
    print('輸入錯(cuò)誤,你還有%d次輸入的機(jī)會(huì)!' % (i - 1))
   # 新密碼和舊密碼相同,不允許修改,提示并退出
   else:
   print('新密碼不允許和舊密碼相同!')
   return -1
  # 密碼不正確
  else:
   print('密碼輸入錯(cuò)誤超過3次,卡號(hào)已被鎖定,請(qǐng)先解鎖!')
   self.allUsersInfo[cardStrInp].cardInfo.isLock = True
   return -1
  else:
  print('該卡號(hào)已被鎖定,請(qǐng)先解鎖!')
  return -1


 # 解鎖
 def unlockUser(self):
 cardStrInp = input('請(qǐng)輸入卡號(hào):')

 isExist = self.isExistence(cardStrInp)

 # 存在
 if isExist:
  # 被鎖定
  if self.allUsersInfo[cardStrInp].cardInfo.isLock:
  # 如果密碼正確
  if self.secretOption(cardStrInp):
   # 輸入身份證號(hào)信息做確認(rèn)
   idCardInp = input('請(qǐng)輸入身份證號(hào):')

   # 身份證號(hào)信息匹配
   if idCardInp == self.allUsersInfo[cardStrInp].idCard:
   # 解鎖成功
   print('解鎖成功!')
   self.allUsersInfo[cardStrInp].cardInfo.isLock = False
   return 0
   else:
   print('身份證號(hào)信息不匹配,解鎖失?。?)
   return -1
  # 密碼不正確
  else:
   print('密碼輸出錯(cuò)誤,解鎖失??!')
   return -1
  else:
  print('該卡號(hào)未被鎖定,無需解鎖!')
  return -1
# card.py
# 卡類
class Card(object):
 def __init__(self, cardStr, cardPwd, cardMoney):
 self.cardStr = cardStr # 卡號(hào)
 self.cardPwd = cardPwd # 卡密
 self.cardMoney = cardMoney # 卡中余額

 self.isLock = False # 卡號(hào)是否被鎖
# main.py
# 主函數(shù)
from view import View
import pickle
from atm import ATM
import time

def main():
 # 定義管理員對(duì)象
 admin = View()

 # 管理員登錄界面
 admin.printAdminView()

 # 如果管理員賬號(hào)、密碼輸入錯(cuò)誤則退出
 if admin.adminOption():
 return -1

 # 讀取存儲(chǔ)在文件中的所有用戶的信息
 file = open('database.txt', 'rb')
 allUsersInfo = pickle.load(file) # 將所有用戶信息存儲(chǔ)到 allUsersInfo中去
 file.close() # 關(guān)閉文件

 # 打印所有用戶信息,以便驗(yàn)證
 print('*' * 10)
 print('usersInfo:', allUsersInfo)

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

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

 # 提示用戶輸入功能選項(xiàng)進(jìn)行操作
 option= input('請(qǐng)輸入操作選項(xiàng)(數(shù)字):')

 # 對(duì)用戶的操作選項(xiàng)進(jìn)行判斷
 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()

 # 以下操作暫時(shí)未寫
 # elif option == "q": # 退出操作
 # # atm.quitSys()
 # print('退出')

 # elif option == "9": # 補(bǔ)卡操作
 # print("補(bǔ)卡")
 #
 # elif option == "0": # 銷戶操作
 # print("銷戶")

 elif option == "8": # 退出系統(tǒng)
  return 0

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

 # 將新信息寫入文件
 # 將當(dāng)前系統(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 # 用戶身份證號(hào)
 self.phone = phone # 用戶的手機(jī)號(hào)碼
 self.cardInfo = cardInfo # 用戶的卡的信息(卡號(hào)、密碼、余額)
# 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("* 補(bǔ)卡(9)    銷戶(0)  *")
 # print("*    退出(t)    *")
 print("*****************************************************************")

 def adminOption(self):
 inputAdmin = input('請(qǐng)輸入管理員賬號(hào):')

 if inputAdmin != self.admin:
  print('賬號(hào)錯(cuò)誤!')
  return -1

 inputPwd = input('請(qǐng)輸入管理員密碼:')

 if inputPwd != self.pwd:
  print('密碼錯(cuò)誤!')
  return -1

 # 管理員賬號(hào)和密碼全部正確
 print('操作成功,請(qǐng)稍后...')
 time.sleep(2)
 return 0

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

更多學(xué)習(xí)資料請(qǐng)關(guān)注專題《管理系統(tǒng)開發(fā)》。

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

相關(guān)文章

  • Python+OpenCV之圖像輪廓詳解

    Python+OpenCV之圖像輪廓詳解

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

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

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

    OpenCV圖像處理之自定義濾波

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

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

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

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

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

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

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

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

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

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

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

    Python使用PIL進(jìn)行JPEG圖像壓縮的簡易教程

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

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

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

最新評(píng)論