1 1、函数从ATM_Program--core下的main文件运行,其中的ATM功能只能有三次登录机会。登陆成功失败与否均不允许再次登陆。 2 2、文件Bin下的atm.py是信用卡操作主程序:例如账户间转账、存钱、提现功能 3 3、文件夹Bin下的是manager.py是信用卡的管理端:例如冻结账户、改变信用卡额度、添加账户。 4 4、manager.py的主程序在accounts.py里。 5 5、logger.py日志记录模块。记录账户登陆和,购物的流水。 6 6、transaction.py与settings.py与db_handler.py与transaction.py均暂时没有内容 7 7、db文件是用户数据存储的地方,account_sample.py能生成初始账户数据。 8 8、accounts文件夹下面存放各个账户,一个账户一个文件 9 9、log文件夹下面存放日志:用户访问和交易日志存放在同一个文件夹。 10 10、shooping_mall是电子商城程序。
Readme
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # Author:Source 4 import os,sys 5 import getpass 6 site_core = os.path.dirname(os.path.abspath(__file__)) 7 site_atm= os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 8 sys.path.append(site_atm) 9 sys.path.append(site_core) 10 from db import account_sample 11 from core import auth,small_function 12 for i in range(3): 13 @auth.auth 14 def log_in(): 15 account = input(‘Please input your account.‘) 16 password = input(‘Please enter your password.‘) 17 # if password.isdigit(): 18 # password = int(password) 19 return (account,password) 20 log_in() 21 consequence = auth.return_result()#consequence中记载的是登录账户,每次只会记录一个 22 if consequence !=‘False‘: 23 while True: 24 operation_choose = input("Please enter your next action is:\nExample:\033[32;1m‘Transfer‘\033[0m" 25 ",\033[32;1m‘To save money‘\033[0m,\033[32;1m‘Cash‘\033[0m") 26 if operation_choose == ‘Transfer‘:#转账 27 transfer_account = input(‘Please enter the target account to be transferred:‘) 28 judge = auth.auth_account(transfer_account) 29 if judge == True : 30 transfer_money = input(‘Please enter the transfer amount:‘) 31 auth.operation_money(consequence,transfer_account,transfer_money) 32 small_function.progress_bar() 33 print("\033[23;1m\nOperation succeed.\033[0m") 34 else: 35 pass 36 elif operation_choose == ‘To save money‘:#存钱功能 37 save_money = input("Please enter the deposit amount:") 38 auth.save_money(consequence,save_money) 39 elif operation_choose == ‘Cash‘:#取现功能 40 cash_money = input("Please enter the withdrawal amount:") 41 auth.cash(consequence,cash_money) 42 elif operation_choose == ‘q‘: 43 break 44 else: 45 print(‘\033[31;1mPlease enter the currect opeartion.\033[0m‘) 46 else: 47 pass 48 #print(consequence)#test
atm.py
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # Author:Source 4 import os,sys 5 site_core = os.path.dirname(os.path.abspath(__file__)) 6 site_atm= os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 7 sys.path.append(site_atm) 8 sys.path.append(site_core) 9 from db import account_sample 10 while True: 11 choose = input("please input you want to do function.such as: \033[32;1m‘add account‘\033[0m,\033[32;1m" 12 "‘change user quota‘\033[0m,\033[32;1m‘frozen account‘\033[0m.".capitalize()) 13 if choose ==‘add account‘: 14 add_account = input(‘Please enter the account you want to add.‘) 15 add_passworld = input(‘Please enter the password you want to add.‘) 16 print(‘\033[33;1mRepeat for safety reasons.\033[0m‘) 17 add_again_account = input(‘Please enter the account you want to add.‘) 18 add_again_passworld = input(‘Please enter the password you want to add.‘) 19 if add_account == add_again_account and add_passworld == add_again_passworld: 20 add_money_choose = input(‘Do you want to initialize the amount?‘) 21 if add_money_choose != ‘N‘: 22 while True: 23 add_money = input(‘Please enter amount. ‘) 24 if add_money.isdigit(): 25 add_money = int(add_money) 26 account_sample.account_initial(add_account,add_passworld,add_money) 27 break 28 else: 29 print(‘\033[31;1mPlease enter number.\033[0m‘) 30 else: 31 account_sample.account_initial(add_account,add_passworld) 32 else: 33 print(‘\033[36;1mAccount or password error!\033[0m‘) 34 elif choose ==‘change user quota‘: 35 from core import accounts 36 change_account = input("Please enter you want to change account .") 37 change_money = input("Please enter the amount you want to change.") 38 accounts.quota(change_account,change_money) 39 elif choose == ‘frozen account‘: 40 from core import accounts 41 frozen_account =input("Please enter you want to frozen account.") 42 accounts.frozen_account(frozen_account) 43 elif choose == ‘q‘or choose ==‘Q‘: 44 break 45 else: 46 print(‘\033[37;1mplease enter legal character.\033[0m‘)
manager.py
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # Author:Source 4 import json,sys,os 5 site_core = os.path.dirname(os.path.abspath(__file__)) 6 sys.path.append(site_core) 7 import small_function 8 def account(): 9 ‘打印账户名‘ 10 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/account_total.json‘,‘r‘)as f: 11 print_account = json.load(f) 12 print("These are the account names:",print_account) 13 return print_account 14 def quota(acco,money): 15 ‘改变账户额度‘ 16 account_sum = account() 17 if acco in account_sum: 18 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/%s.json‘%acco,‘r‘) as f1: 19 money_befor = json.load(f1) 20 if money.isdigit: 21 money = int(money) 22 money_befor[2][0] = money 23 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/%s.json‘%acco,‘w‘)as f2: 24 json.dump(money_befor,f2) 25 small_function.progress_bar()#进度条 26 print("\n\033[38;1mAleady change quoto\033[0m") 27 else: 28 print("\033[31;1mPlease enter number.\033[0m") 29 else: 30 print("\033[31;1mAccount have error.\033[0m") 31 #quota(‘admin‘,‘5200‘)#测试 32 def frozen_account(f_account): 33 ‘冻结账户,没有这个账户以及已经存在该账户均会报警‘ 34 account_sum = account() 35 if f_account in account_sum: 36 with open("C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/" 37 "account_frozen.json",‘r‘)as f3: 38 account_ice=json.load(f3) 39 if f_account in account_ice: 40 print("\033[21;1mThe account have been frozen.\033[0m") 41 else: 42 with open("C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/" 43 "account_frozen.json",‘w‘)as f4: 44 account_ice.append(f_account) 45 json.dump(account_ice,f4) 46 small_function.progress_bar()#进度条 47 print("\n\033[39;1mAleady frozen account\033[0m") 48 else: 49 print("\033[39;1mThe account you entered does not exist.\033[0m") 50 #frozen_account(‘test‘)#测试
accounts.py
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # Author:Source 4 import os,sys,json 5 site_atm= os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 6 sys.path.append(site_atm) 7 #print(site_atm) 8 from db import account_sample 9 from core import logger,small_function 10 def auth(func): 11 ‘验证登录的装饰器‘ 12 def account_call(): 13 ‘输入指定参数可以调用账户‘ 14 login=func() 15 account = login[0] 16 password = login[1] 17 with open("C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/" 18 "account_frozen.json",‘r‘)as f3: 19 ice_account=json.load(f3) 20 if account in ice_account: 21 login_false() 22 print("\033[22;1mThe account have been frozen.\033[0m") 23 else: 24 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/account_total.json‘,‘r‘)as f2: 25 list_account=json.load(f2) 26 if account in list_account: 27 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/%s.json‘%(account),‘r‘)as f_call: 28 test = json.load(f_call) 29 if test[1]==password : 30 info =‘‘‘ 31 ---------------Welcome \033[22;1m{account}\33[0m to login--------------- 32 Account = \033[22;1m{account}\33[0m 33 Password = \033[22;1m{password}\33[0m 34 -------------------------------------------------------- 35 ‘‘‘.format(account=login[0],password=login[1]) 36 login_succeed(login[0]) 37 small_function.progress_bar() 38 print(info) 39 logger.record_log(login[0]) 40 else: 41 login_false() 42 print(‘\033[35;1mPassword error!\033[0m‘) 43 else: 44 login_false() 45 print(‘\033[34;1mAccount error!\033[0m‘) 46 return account_call 47 def login_succeed(enter): 48 ‘向verify文件写入一个True,以供接下来的判断‘ 49 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/verify.json‘,‘w‘)as f: 50 json.dump(enter,f) 51 def login_false(): 52 ‘向verify文件写入一个False,以供接下来的判断‘ 53 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/verify.json‘,‘w‘)as f1: 54 json.dump(‘False‘,f1) 55 def return_result(): 56 ‘读取verify文件,以供接下来的判断‘ 57 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/verify.json‘,‘r‘)as f_2: 58 result=json.load(f_2) 59 return result 60 def operation_money(func1,func2,func3): 61 ‘将账户func1的钱func3转给账户func2,自动判断func3是否是合法字符‘ 62 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/%s.json‘%func1,‘r‘)as f3: 63 old_money = json.load(f3) 64 #print(type(old_money[2][0]))#测试 65 if func3.isdigit():#是数字才可以进行交易: 66 func3 = int(func3) 67 surplus = old_money[2][0]-func3 68 if surplus>=0:#钱有够才可以进行转账 69 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/%s.json‘%func2,‘r‘)as f4: 70 target_account_money = json.load(f4) 71 target_account_money[2][0] = target_account_money[2][0]+func3 72 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/%s.json‘%func2,‘w‘)as f5: 73 json.dump(target_account_money,f5) 74 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/%s.json‘%func1,‘w‘)as f6: 75 old_money[2][0]=surplus 76 json.dump(old_money,f6) 77 else: 78 print("\033[33;1mTrading money operates account amonunts.\033[0m") 79 else: 80 print("\033[32;1m‘func3‘Not numbers.\033[0m") 81 #operation_money(‘source‘,‘shui‘,‘500‘)#test 82 def auth_account(exist): 83 ‘验证账户是否存在以及是否在黑名单中‘ 84 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/account_total.json‘,‘r‘)as f7: 85 total_account = json.load(f7) 86 if exist in total_account: 87 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/account_frozen.json‘,‘r‘)as f8: 88 frozen_account = json.load(f8) 89 if exist in frozen_account: 90 print("\033[22;1mThe account have been frozened.\033[0m") 91 else: 92 return True 93 else: 94 print("\033[24;1mAcoount does not exist.\033[0m") 95 #test = auth_account(‘source‘)#测试 96 def save_money(func,how): 97 ‘存钱功能‘ 98 judge = auth_account(func)#只要在登录程序就可以了 99 if judge == True: 100 if how.isdigit(): 101 how = int(how) 102 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/%s.json‘%func,‘r‘)as f9: 103 func_total = json.load(f9) 104 func_total[2][0] = func_total[2][0]+how 105 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/%s.json‘%func,‘w‘)as f10: 106 json.dump(func_total,f10) 107 small_function.progress_bar() 108 print("\nOperation is successful.") 109 else: 110 print("\033[32;1m‘func3‘Not numbers.\033[0m") 111 else: 112 pass 113 #test_save_money = save_money(‘source‘,‘3000‘)#测试 114 def cash(account,money): 115 "‘account‘卡里的钱‘money’取出" 116 if money.isdigit(): 117 money = int(money) 118 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/%s.json‘%account,‘r‘)as f11: 119 account_total = json.load(f11) 120 if account_total[2][0]>(money+money*0.05): 121 account_total[2][0] = account_total[2][0]-money*(1+0.05) 122 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/%s.json‘%account,‘w‘)as f12: 123 json.dump(account_total,f12) 124 small_function.progress_bar() 125 print("\nThe balance of the credit card is \033[26;1m[%s]\033[0m"%account_total[2][0]) 126 else: 127 print("\033[25;1mExcess deposit amount.\033[0m") 128 else: 129 print("\033[32;1m‘func3‘Not numbers.\033[0m") 130 #test_cash = cash(‘source‘,‘1000‘)#测试 131 #print(__file__)
auth
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 #coding utf-8 4 import logging 5 logging.basicConfig(level=logging.DEBUG,format=‘Asctime:%(asctime)s,levelname:%(levelname)s,%(message)s,filename: %(filename)s‘, 6 filename=‘C:/Users/ys106/PycharmProjects/Source/day4/log/access.log‘,datefmt=‘[%d/%b/%Y %H:%M:%S]‘,filemode=‘a‘ 7 ) 8 def record_log(*args): 9 logging.info(‘%s Log in time.‘%args) 10 def Goods_flowing_water(*args): 11 logging.info(‘Sell [%s] goods.‘%args)
logger.py
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # Author:Source 4 import os,sys 5 site_core = os.path.dirname(os.path.abspath(__file__)) 6 site_atm= os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 7 sys.path.append(site_atm) 8 sys.path.append(site_core) 9 sys.path.append("C:\\Users\\ys106\\PycharmProjects\\Source\\day4\\homework\\ATM_Program") 10 while True: 11 function_choose = input(‘Do you want to use \‘\033[32;1mATM\033[0m\‘ function or \‘\033[32;1mShopping\033[0m\‘or ‘ 12 ‘\‘\033[32;1mother\033[0m\‘ function? Just say it once ,press \‘q\‘to quit.‘) 13 if function_choose ==‘ATM‘: 14 from bin import atm 15 elif function_choose ==‘Shopping‘: 16 from shopping_mall import go_shopping 17 elif function_choose == ‘other‘: 18 from bin import manage 19 elif function_choose ==‘q‘: 20 break 21 else: 22 print(‘\033[31;1mPlease enter legal characters.\033[0m‘)
main.py
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # Author:Source 4 import sys,time 5 def progress_bar(): 6 ‘进度条‘ 7 for i in range(50): 8 sys.stdout.write("#") 9 sys.stdout.flush() 10 time.sleep(0.1)
small_function.py
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 # Author:Source 4 import json 5 def account_initial(account_new,password_new,*args): 6 ‘调用函数输入指定参数可以创建一个账户‘ 7 account = account_new 8 password = password_new 9 if args != ‘‘: 10 amount = args 11 else: 12 amount = 15000 13 test_list = [account,password,amount] 14 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/%s.json‘%(account),‘w‘)as f: 15 json.dump(test_list,f) 16 print(‘Creat account succeed!‘) 17 f1 = open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/account_total.json‘,‘r‘) 18 test = json.load(f1) 19 #print(test) 20 f1.closed 21 if account in test: 22 pass 23 else: 24 test.append(account) 25 #print(test) 26 with open(‘C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/account_total.json‘,‘w‘)as f2: 27 json.dump(test,f2) 28 #account_initial(‘source‘,‘159753‘,12000)#测试
account_sample.py
#!/usr/bin/env python # -*- coding: utf-8 -*- # Author:Source import json,os,sys,getpass #site_homework = os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))) #sys.path.append(site_homework) site_ATM_Program= os.path.dirname(os.path.dirname(os.path.abspath(__file__))) sys.path.append(site_ATM_Program) sys.path.insert(0,"C:\\Users\\ys106\\PycharmProjects\\Source\\day4\\homework\\ATM_Program\\atm") from core import auth from core import logger commodity=[ ("iphoneX".title(),8388), ("ipad mini4".title(),2400), ("dragon fruit".title(),6), ("alkaline mineral water".title(),2), ("toothpaste".title(),12), ] """ ‘json文件读写测试‘ with open("test.json",‘w‘)as f_write: json.dump(commodity,f_write) with open("test.json","r")as f_read: test_total=json.load(f_read) print(len(test_total))""" shopping_cart=[] #print(commodity) while True: for item in commodity: print(commodity.index(item),item) #for i,item in enumerate(commodity):#python 的for in # print(i,item) number=input("Please enter the item number you want to buy:") if number.isdigit(): number=int(number) #print(len(commodity))#显示商品列表的长度 if number<len(commodity) and number>=0: list_price=commodity[number] shopping_cart.append(list_price) print("[%s] have been added to the shopping cart. "%(list_price[0])) else: print("\033[25;1mThe number does not exist.\033[0m") elif number == ‘q‘or number ==‘Q‘: print("Shopping cart aleady exist goods.") for goods in shopping_cart: print("\033[31;1m",shopping_cart.index(goods),goods,"\033[0m") choose_shopping_cart = input("Confirm the purchase? if there is an item you do not want to buy,just select its number:") if choose_shopping_cart.isdigit(): choose_shopping_cart = int(choose_shopping_cart) del shopping_cart[choose_shopping_cart] elif choose_shopping_cart == ‘‘: transition =0 for goods in shopping_cart: goods_money = goods[1] transition += goods_money print("The total value of goods is:\033[27;1m%s.\033[0m"%transition) @auth.auth def log_in(): account = input(‘Please input your account.‘) password = input(‘Please enter your password.‘) return (account,password) log_in() consequence = auth.return_result()#consequence中记载的是登录账户,每次只会记录一个 if consequence !=‘False‘: with open("C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/%s.json"%consequence,‘r‘)as f_account_begin: account_total = json.load(f_account_begin) if account_total[2][0]<transition: print("\033[27;1mNot enough money.\033[0m") else: account_total[2][0] = account_total[2][0]-transition with open("C:/Users/ys106/PycharmProjects/Source/day4/homework/ATM_Program/atm/db/accounts/%s.json"%consequence,‘w‘)as f_account_finish: json.dump(account_total,f_account_finish) logger.Goods_flowing_water(shopping_cart) print("Operation is successful.") else: print("\033[25;1mPlease enter legal characters.\033[0m") else: print("\033[25;1mPlease enter legal characters.\033[0m")
go_shopping.py
原文地址:https://www.cnblogs.com/source12/p/9783526.html
时间: 2024-10-27 21:15:07