1. 程式人生 > 程式設計 >Python實現ATM系統

Python實現ATM系統

今天偶爾在知乎上看到某大佬用Python寫的ATM系統案例,然後觀摩了下他的實現思路和原始碼,感覺受益頗多,於是就根據自己的思路和目前掌握的Python程式設計基礎將ATM實現了一下,以下是案例解析的過程:

案例剖析:

1.atm主頁面顯示.
2.賬號驗證.
3.查詢餘額.
4.存款.
5.取款.
6.修改密碼.

ps:我的思路是將以上的功能分成幾大塊,通過函式,迴圈和返回值來實現,話不多說直接上程式碼.

程式碼:

1.atm主頁面顯示

def index(nowUser):
 print('=' * 10,'自動存取款機','=' * 10)
 print(getName(nowUser),'歡迎登陸!')
 print('{:<10}{:^10}{:<10}'.format('1.修改密碼',' ','2.查詢餘額'))
 print('{:<10}{:^12}{:<10}'.format('3.存錢','4.取錢'))
 print('輸入\'exit\'退出操作')

ps:使用format來進行格式的定義.

2.賬號驗證

def getId(nowUser):
 '''獲取當前使用者在列表中的位置'''
 index = -1
 for i in range(len(userList)):
  if userList[i]['cardid'] == nowUser:
   index = i # 如果使用者存在則返回它在列表中的下標
   break
 return index # 如果使用者不存在則返回-1


def getName(nowUser):
 ''' 獲取使用者姓名'''
 index = getId(nowUser)
 return userList[index]['name']


def checkUser(cardid,password):
 '''自定義使用者檢測功能,包括卡號及密碼檢測'''
 index = getId(cardid)
 if index == -1: # 如果使用者不存在
  return 'noCardId' # 卡號不存在
 else:
  if userList[index]['cardid'] == cardid and userList[index]['password'] == password: # 使用者存在並且賬號密碼正確
   return 'login' # 密碼正確
  else:
   return 'errorPW' # 密碼錯誤

ps:使用迴圈和返回值來進行賬號的對比和檢測.

3.查詢餘額

def showMoney(nowUser):
 '''查詢餘額'''
 index = getId(nowUser)
 print('您當前的賬戶餘額為:',userList[index]['money'],'元')

4.存錢

def saveMoney(nowUser,money):
 '''存錢'''
 index = getId(nowUser)
 print("輸入的金額是:",money)
 userList[index]['money'] += int(money)
 print('存入成功!')

5.取錢

def drawMoney(nowUser,money):
 '''取錢'''
 index = getId(nowUser)
 nowMoney = userList[index]['money']
 if nowMoney >= int(money):
  userList[index]['money'] -= int(money)
  print('已取出',money,'元')
 else:
  print('賬戶餘額不足!')

6.修改密碼

def changePW(nowUser,newPW):
 '''修改密碼'''
 index = getId(nowUser)
 userList[index]['password'] = newPW

7.定義使用者操作函式

# 使用者操作
def userChoice(nowUser):
 choices = ['1','2','3','4','exit']
 # 迴圈獲取使用者操作
 while True:
  index(nowUser)
  choice = input('請選擇操作:')
  if choice == '1': # 選擇修改密碼
   oldPW = input('請輸入原始密碼:')
   flag = checkUser(nowUser,oldPW)
   if flag == "errorPW":
    # print('密碼錯誤!請重新輸入,或輸入\'back\'返回上一級')
    print('密碼錯誤!返回主介面')
   elif flag == 'login':
    changePW(nowUser,input('請輸入新密碼:'))
    print('修改密碼成功!')
    continue
  elif choice == '2': # 選擇查詢餘額
   showMoney(nowUser)
   continue
  elif choice == '3': # 選擇存錢
   saveMoney(nowUser,input('請輸入存入金額:'))
   continue
  elif choice == '4': # 選擇取錢
   drawMoney(nowUser,input('請輸入取出金額:'))
   continue
  elif choice == 'exit':
   main() # 返回主介面
  elif choice not in choices:
   print('錯誤操作,請重新輸入選項!')
   continue

8.定義main主函式

# 主介面
def main():
 # 定義錯誤次數
 errorTime = 0
 if errorTime >= 3: # 錯誤次數達三次退出系統後清零
  errorTime = 0
 while True:
  # crs登陸主介面
  print('=' * 10,'=' * 10)
  nowUser = ''
  # 使用者輸入卡號和密碼
  cardid = input('請輸入卡號:')
  password = input('請輸入密碼:')

  # 判斷卡號密碼是否存在正確
  # 卡號不存在
  flag = checkUser(cardid,password)

  if flag == 'noCardId':
   print('卡號不存在!請重新輸入')
   continue

  # 密碼錯誤
  elif flag == 'errorPW':
   errorTime += 1
   print('密碼錯誤!錯誤次數達三次將自動退出本系統!')
   print("錯誤次數:",errorTime)
   if errorTime >= 3: # 錯誤次數達三次自動退出
    print('密碼輸錯三次,自動退出系統!')
    exit(0)
   continue

  # 卡號密碼正確進入系統
  else:
   nowUser = cardid
   userChoice(nowUser)

9.最後定義函式主入口,進行ATM系統的測試

if __name__ == '__main__':

 main()

收穫:

通過ATM案例,將之前學習的Python基礎重新進行了一次鞏固,梳理和融會貫通,個人感覺 Python的函式和返回值是個特別神奇的東西,當然這個案例還有很大的改進空間,大家有什麼好的建議也可以給我留言,我之後會慢慢進行改良噠!

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支援我們。