Python实现atm机的功能
生活随笔
收集整理的這篇文章主要介紹了
Python实现atm机的功能
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
主要還是參考網上內容,自己做了修改。雖然代碼有小bug,但是不影響學習和測試。
功能:
1.額度:8000
2.可以提現,手續費5%
3.每月最后一天出賬單,寫入文件
4.記錄每月日常消費流水
5.提供還款接口
1.atm的腳本
[root@python?atm]#?cat?atm.py#!/usr/bin/env?python #?-*-?coding:?utf-8?-*- ''' Date:2017-03-23 Author:Bob '''import?os import?time import?pickle import?readline?#解決退格鍵和上下鍵引起的亂碼,需要安裝readline和readline-devel包#定義賬單,商品和購物車 Bill?=?{} products?=?{} shoplist?=?[]#define?Bill?function,?used?to?record?billing?details(account/time/describe/money). def?Bill(Account,Time,Description,RMB):Bill?=?{"Account":Account,"Time":Time,"Description":Description,"RMB":RMB}#用pickle模塊把賬單信息存入到bill文件中去pickle.dump(Bill,open("bill","a"))#購物功能 def?shop():print?'\033[;32mWelcome?to?shopping!\n\033[0m'with?open('shops.txt')?as?f:for?line?in?f.readlines():print?'{}'.format(line.strip())while?1:with?open('shops.txt')?as?f:for?line?in?f.readlines():line?=?line.strip()commodity?=?line.split()[0]price?=?line.split()[1]products[commodity]?=?pricechoice?=?raw_input("\n\033[;36mPlease?enter?what?you?want?to?buy,if?you?want?back,you?can?enter\033[0m?\033[;31mback\033[0m:").strip()if?len(choice)?==?0:continueelif?choice?==?'back':list()#如果有這個商品,就判斷商品價格,如果商品價格大于余額,就提示余額不足if?products.has_key(choice):#從userinfo文件中讀取并反序列化remaining?=?pickle.load(open('userinfo','rb'))if?int(products[choice])?>?remaining[accountAuth][2]:print?'In?your?card?remaining?sum?already?insufficiency,?please?prompt?sufficient?value!'else:while?1:#把購買的商品追加到購物車shoplist.append(choice)#計算余額,余額就是總金額減去購買的商品價格new_remaining?=?int(remaining[accountAuth][2])?-?int(products[choice])userInfo[accountAuth][2]?=?int(new_remaining)#把余額信息序列化并存到userinfo文件中pickle.dump(userInfo,open("userinfo","wb"))#把購買的記錄和賬單寫到Bill文件中Bill(accountAuth,time.strftime("%Y-%m-%d?%H:%M:%S"),choice,"-%d"?%?int(products[choice]))#打印消費的金額和剩余金額print?"\033[;32mConsumption?is?%r?Money?is?%r\033[0m"?%?(products[choice],new_remaining)#打印購物車的商品print?"\033[;33mThe?shopping?list?%s?\033[0m"?%?shoplistbreakelse:print?'You?choose?{}?is?not?in?the?shoplist!'.format(choice)shop()#查詢余額功能 def?query_money():userInfo?=?pickle.load(open('userinfo','rb'))totalmoney?=?userInfo[accountAuth][1]remaining?=?userInfo[accountAuth][2]print?'Your?total?money?is?{},?remaining?money?is?\033[1;31m{}\033[0m!'.format(totalmoney,?remaining)#存錢功能 def?save_money():while?1:save_desc?=?raw_input("Please?describe?save?money?the?details:").strip()if?len(save_desc)?==?0:continuetry:save_money?=?int(raw_input("Please?save?the?money:"))except?ValueError:print?"\033[;31mYou?entered?must?be?number.\033[0m"save_money()if?save_money?%?100?!=?0:print?'You?must?enter?an?integer?of?100!'continueuserInfo?=?pickle.load(open('userinfo',?'rb'))remaining?=?int(userInfo[accountAuth][2])?+?save_moneyuserInfo[accountAuth][2]?=?remainingpickle.dump(userInfo,?open('userinfo',?'wb'))print?'Your?total?money?is?%s,?your?remaining?is?\033[;31m%s\033[0m!'?%(userInfo[accountAuth][1],?userInfo[accountAuth][2])Bill(accountAuth,time.strftime("%Y-%m-%d?%H:%M:%S"),save_desc,"+%d"?%?float(save_money))next?=?raw_input("1.continue?\n2.return?\n3.exit?\nPlease?select:?").strip()if?next?==?'1':continueelif?next?==?'2':list()elif?next?==?'3':exit()else:print?'Please?enter?the?correct?content!'#取錢功能 def?draw_money():while?1:draw_desc?=?raw_input("Please?describe?draw?money?the?details:").strip()if?len(draw_desc)?==?0:continuetry:draw_money?=?int(raw_input("Please?draw?the?money:"))except?ValueError:print?"\033[;31mYou?entered?must?be?number.\033[0m"draw_money()if?draw_money?%?100?!=?0:print?'You?must?enter?an?integer?of?100!'continueuserInfo?=?pickle.load(open('userinfo',?'rb'))#There?are?bugs?here!if?draw_money?>?int(userInfo[accountAuth][2]):print?'\033[;31mYour?remaining?is?insufficient!\033[0m'list()userInfo?=?pickle.load(open('userinfo',?'rb'))remaining?=?int(userInfo[accountAuth][2])?-?draw_money?-?draw_money?*?0.05userInfo[accountAuth][2]?=?remainingpickle.dump(userInfo,?open('userinfo',?'wb'))print?'Your?total?money?is?%s,?your?remaining?is?\033[;31m%s\033[0m!'?%(userInfo[accountAuth][1],?userInfo[accountAuth][2])Bill(accountAuth,time.strftime("%Y-%m-%d?%H:%M:%S"),draw_desc,"+%d"?%?float(draw_money))next?=?raw_input("1.continue?\n2.return?\n3.exit?\nPlease?select:?").strip()if?next?==?'1':continueelif?next?==?'2':list()elif?next?==?'3':exit()else:print?'Please?enter?the?correct?content!'#轉賬功能,和上面的邏輯基本一樣 def?transfer_money():while?1:userInfo?=?pickle.load(open('userinfo',?'rb'))transfer_desc?=?raw_input("Please?describe?transfer?money:?").strip()if?len(transfer_desc)?==?0:continued_account?=?raw_input("Please?input?transfer?account:?").strip()if?len(d_account)?==?0:continueif?userInfo.has_key(d_account)?is?False:print?"\033[;31mThis?account?does?not?exist\033[0m"transfer_money()d_money?=?int(raw_input("Please?input?transfer?amount?money:?"))if?d_money?%?100?!=?0:print?"\033[;31mDeposit?amount?must?be?100?integer?times\033[0m"continueif?d_money?>?int(userInfo[accountAuth][2]):print?"\033[;31mYour?balance?is?insufficient\033[0m"continueuserInfo[accountAuth][2]?=?int(userInfo[accountAuth][2])?-?d_money?-?d_money?*?0.10userInfo[d_account][2]?=?int(userInfo[d_account][2])?+?d_moneypickle.dump(userInfo,open('userinfo',?'wb'))print?"\033[;32mYour?credit?is?%r,Your?balance?is?%r\033[0m"?%?(userInfo[accountAuth][1],userInfo[accountAuth][2])Bill(accountAuth,time.strftime("%Y-%m-%d?%H:%M:%S"),transfer_desc,"-%d"?%?(userInfo[accountAuth][2]?-?d_money?-?d_money?*?0.10))next?=?raw_input("1.continue?\n2.return?\n3.exit?\nPlease?select:?").strip()if?next?==?'1':continueelif?next?==?'2':list()elif?next?==?'3':exit()else:print?'Please?enter?the?correct?content!'#賬單功能 def?query_bill():Income?=?[]Spending?=?[]num?=?0print?"Account\t\tTime\t\tDescription\t\t??RMB"with?open('bill',?'rb')?as?f:while?True:try:line?=?pickle.load(f)if?line["Account"]?==?accountAuth:if?'+'?in?line["RMB"]:print?"\033[;33m%r\t%r\t%r\t\t\t%r\033[0m"?%?(line["Account"],line["Time"],line["Description"],line["RMB"])income?=?line["RMB"].strip("+")Income.append(income)else:print?"%r\t%r\t%r\t\t\t%r"?%?(line["Account"],line["Time"],line["Description"],line["RMB"])spending?=?line["RMB"].strip("-")Spending.append(spending)except:breakfor?i?in?Income:num?=?num?+?int(i)income?=?numprint?"Income?is?%r"?%?numfor?i?in?Spending:num?=?num?+?int(i)spending?=?numprint?"Spending?is?%r"?%?numprint?"Total?is?%r"?%?(int(income)?+?int(spending))#修改密碼功能 def?modify_passwd():userInfo?=?pickle.load(open('userinfo',?'rb'))?old_passwd?=?raw_input("Please?enter?old?password:").strip()while?1:if?old_passwd?==?userInfo[accountAuth][0]:new_passwd?=?raw_input("Please?enter?new?password:").strip()if?len(new_passwd)?<?6:print?'Your?password?is?too?simple!'continueconfirm_new_password?=?raw_input("Please?confirm?new?password?again:").strip()if?new_passwd?!=?confirm_new_password:print?'Two?passwords?do?not?match!'else:userInfo[accountAuth][0]?=?confirm_new_passwordpickle.dump(userInfo,?open('userinfo',?'wb'))print?'\033[;32mYour?password?is?changed?successful!\033[0m'exit()else:print?'Your?password?is?error!'modify_passwd()#ATM機所有功能 def?list():print?'''\033[;32m ################################################### #????????????welcome?to?ATM!??????????????????????# #?????????????????????????????????????????????????# #????1.shop???????????????2.query?money???????????# #????3.save?money?????????4.draw?money????????????# #????5.transfer?money?????6.query?bill????????????# #????7.modify?password????8.exit??????????????????# #?????????????????????????????????????????????????# ################################################### \033[0m'''while?1:choice?=?raw_input("Please?choose?according?to?your?needs:").strip()if?len(choice)?==?0:continueelif?choice?==?'1':shop()elif?choice?==?'2':query_money()elif?choice?==?'3':save_money()elif?choice?==?'4':draw_money()elif?choice?==?'5':transfer_money()elif?choice?==?'6':query_bill()elif?choice?==?'7':modify_passwd()else:print?"\n\033[;35mYou?have?been?exit?the?system!\033[0m"exit()#用戶登錄功能 userInfo?=?pickle.load(open('userinfo',?'rb')) while?1:accountAuth?=?raw_input("Please?input?user?account:").strip()if?len(accountAuth)?==?0:continueif?userInfo.has_key(accountAuth):if?'lock'?in?userInfo[accountAuth]:print?'%s?has?been?locked!'?%?accountAuthexit()for?num?in?range(3,0,-1):passwdAuth?=?raw_input("Please?input?user?password:").strip()if?len(passwdAuth)?==?0:continueif?passwdAuth?==?userInfo[accountAuth][0]:list()else:print?"Wrong?password,?Can?try?again?\033[;31m%r\033[0m?itmes"?%?numcontinueelse:lockaccount?=?userInfo[accountAuth]lockaccount.append('lock')pickle.dump(userInfo,open('userinfo',?'wb'))print?"\033[;31mAccount?freeze?within?24?hours\033[0m"exit()else:print?"\033[;31mWrong?account?%r,retype\033[0m"?%?accountAuth2.商品表
3.初始化賬號密碼
4.顯示余額變化
[root@python?atm]#?cat?cat.py #!/usr/bin/env?python #?-*-?coding:?utf-8?-*-import?pickleuserinfo?=?open('userinfo',?'r') while?True:try:line?=?pickle.load(userinfo)print?lineexcept:break[root@python?atm]#?python?cat.py? {'xdg':?['888',?'3000',?'3000'],?'bob':?['666',?'8000',?1000],?'xtd':?['123456',?'150000',?'150000']}5.使用方法
[root@python?atm]#?python?atm.py? Please?input?user?account:bob Please?input?user?password:666################################################### #????????????welcome?to?ATM!??????????????????????# #?????????????????????????????????????????????????# #????1.shop???????????????2.query?money???????????# #????3.save?money?????????4.draw?money????????????# #????5.transfer?money?????6.query?bill????????????# #????7.modify?password????8.exit??????????????????# #?????????????????????????????????????????????????# ###################################################Please?choose?according?to?your?needs:2 Your?total?money?is?8000,?remaining?money?is?1000! Please?choose?according?to?your?needs:6.流程圖
轉載于:https://blog.51cto.com/whnba/1909696
總結
以上是生活随笔為你收集整理的Python实现atm机的功能的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件测试小白学习之路
- 下一篇: 【Python实践】Python部分实际