python模擬ATM系統
阿新 • • 發佈:2017-07-03
python模擬atm系統
一、環境及程序功能說明
python 2.7.12模擬與銀行ATM功能,主要功能如下:
1,登錄查詢余額
2,轉賬功能
3,提現功能
4,流水查詢
5,密碼修改
6,還款功能
7,退出(切換賬號)
采用pickle存儲賬號密碼相關信息,以賬號名為日誌文件名存儲該賬號的流水日誌~
為了實現測試,先寫一個提供測試文件的小腳本,代碼如下:
#coding:utf-8 import pickle import time import os IOSTIME = ‘%Y-%m-%d %X‘ Now = time.strftime(IOSTIME,time.localtime()) Counts = {‘9168‘:[‘1234‘,‘0‘,15000,[Now]],‘9198‘:[‘4567‘,‘0‘,10000,[Now]],‘9999‘:[‘6789‘,‘1‘,12000,[Now]]} bank_count = open("banks_counts.pkl",‘w‘) pickle.dump(Counts,bank_count) os.chdir(".") for log in Counts.keys(): os.popen("rm -rf %s" %log) print("測試數據已經生成:\n:%s" %Counts)
二、ATM系統實現
#!/usr/bin/env python #coding=utf8 import pickle import sys import time import os IOSTIME = ‘%Y-%m-%d %X‘ Now = time.strftime(IOSTIME,time.localtime()) reload(sys) sys.setdefaultencoding(‘utf-8‘) ##現在時間 def NOW(): global Now Now = time.strftime(IOSTIME,time.localtime()) return Now ##讀入數據 with open(‘banks_counts.pkl‘) as bank_infos: UserInfos = pickle.load(bank_infos) print UserInfos ##完成寫入功能 def Write_DB(): with open(‘banks_counts.pkl‘,‘w‘) as New_bank_infos: pickle.dump(UserInfos,New_bank_infos) #for userinfo in UserInfos.keys(): # print UserInfos[userinfo] ##查詢金額 def LookHow(HM): print "現在時間是: %s,銀行余額: %s RMB!" %(NOW(),HM) #提現功能 def TakeCrash(HOW,WHO): ShouXuFei = HOW * 0.01 #手續費為1/100 if (HOW + ShouXuFei) > WHO: print "余額不足提取!" else: WHO = WHO - HOW- ShouXuFei print "您要提取的金額為:%s,手續費: %s,余額為:%s RMB!" %(HOW,ShouXuFei,WHO) with open(UserCard,‘a+‘) as f: f.write("%s:%s提款%s\n" %(NOW(),UserCard,HOW)) UserInfos[UserCard][2] = WHO ####轉賬功能 def ZhuangZ(From,TO,How): print From,TO if How > From: print "%s 賬號余額不足!" %How else: From = From - How TO = TO + How print "轉出金額: %s RMB,余額為: %s RMB" %(How,From) UserInfos[UserCard][2] = From UserInfos[TO_Card][2] = TO with open(UserCard,"a+") as f1: f1.write("%s:%s扣款%s,輸出到:%s!\n" %(NOW(),UserCard,How,TO_Card)) with open(TO_Card,"a+") as f2: f2.write("%s:%s收到來自%s的%s款!\n" %(NOW(),TO_Card,UserCard,How)) ###還款功能 def AddMoney(HOW,WHO): if HOW > 0: print("確定還款:%s" %HOW) UserInfos[WHO][2] = UserInfos[WHO][2] + HOW with open(WHO,"a+") as f: f.write("%s:還款%s\n" %(NOW(),HOW)) ##流水查詢 def Logs(WHO): if os.path.isfile(os.path.join(os.getcwd(),WHO)): with open(WHO,‘r‘) as f: for line in f.readlines(): else: print("該賬號還沒有產生交易流水!") ##最後一次訪問時間 def LastAccess(WHO): UserInfos[WHO][3] = NOW() # Write_DB() ##密碼修改 def ChgPwd(WHO,NewPass): UserInfos[WHO][0] = NewPass print("密碼修改成功!") Contex = ["查詢余額","轉賬","提現","流水","還款","修改密碼","退出"] ErrorCount = 0 while ErrorCount < 3 : for userinfo in UserInfos.keys(): UserCard = raw_input("[輸入quit|exit退出系統]請輸入您的銀行卡:").strip() # if UserCard == ‘quit‘:sys.exit("您選擇退出!") if UserCard == ‘‘:continue elif UserCard == ‘quit‘ or UserCard == ‘exit‘: sys.exit("您選擇退出!") elif UserCard not in UserInfos.keys(): print("您輸入的銀行卡不存在!") continue # else: # print("您輸入的有誤!") UserPwd = raw_input("[輸入quit|exit退出系統]請輸入您的密碼:").strip() if UserPwd == ‘quit‘ or UserPwd == "exit": sys.exit("您選擇退出!") try: if UserInfos[UserCard][1] != ‘0‘: print "%s 賬號被鎖定!" % UserCard ErrorCount +=1 continue except KeyError: print "%s 賬號不存在!" %UserCard ErrorCount +=1 continue if len(UserPwd) == 0 or UserPwd != UserInfos[UserCard][0]: print "密碼錯誤!" ErrorCount +=1 continue else: print "%s 登錄成功!您最後一次訪問在: %s" %(UserCard,UserInfos[UserCard][3]) LastAccess(UserCard) #登錄成功,寫入訪問時間 while True: print(("請選擇你需要的服務:").center(90,"+")) print for i in range(len(Contex)): print i,Contex[i].decode("utf-8"),‘\t‘, print print("+" * 80 + ‘\n‘) choice = raw_input("[按6或輸入quit退出系統]請選擇您的業務編號:") if len(choice) == 0:continue elif choice == ‘quit‘ or int(choice) == 6 : Write_DB() print("您選擇退出系統!") break elif int(choice) == 0: LookHow(UserInfos[UserCard][2]) elif int(choice) == 1: TO_Card = raw_input("請輸入對方銀行卡:").strip() if len(TO_Card) == 0 or TO_Card == UserInfos[UserCard]: print "賬號錯誤!" continue HowZ = raw_input("輸入轉賬金額:").strip() if len(HowZ) == 0: print "轉賬金額不能為0!" try: UserInfos[TO_Card] except KeyError: print "對方賬號: %s 不存在!" % TO_Card continue else: UserInfos[TO_Card][2] = int(UserInfos[TO_Card][2]) ZhuangZ(UserInfos[UserCard][2],UserInfos[TO_Card][2],int(HowZ)) elif int(choice) == 2: HowTake = raw_input("請選擇提取金額:") HowTake = int(HowTake) TakeCrash(HowTake,UserInfos[UserCard][2]) Write_DB() elif int(choice) == 4: # print UserCard HowAdd = int(raw_input("請輸入您要還款的金額:")) AddMoney(HowAdd,UserCard) Write_DB() elif int(choice) == 3: Logs(UserCard) elif int(choice) == 5: NewPass = raw_input("請輸入新的密碼:") NewPass2 = raw_input("請再輸入一次新密碼:") if NewPass == NewPass2: ChgPwd(UserCard,NewPass) Write_DB() else: sys.exit("兩次輸入的密碼不一致!退出密碼修改!") else: print("你的賬號已鎖,請到櫃臺解鎖!") UserInfos[UserCard][1] = ‘1‘ UserInfos[UserCard][3] = NOW() Write_DB()
三、功能測試如
$python creat_bank.py
$ python looks_bank.py
四、所有文件如下
$ls -alh
寫著用來練習,如有錯誤之處歡迎指正,交流!
本文出自 “學無止境,學以致用” 博客,請務必保留此出處http://dyc2005.blog.51cto.com/270872/1944150
python模擬ATM系統