├── xxxx │ ├── src.py │ └── fil_mode.py │ └── data_time.py │ └── loading.py │ └── data_time.py │ └── logger.py
src.py
python
# 導入須要用到的全部內置模塊 import logging import time import json import os from fil_mode import * from loading import * from data_time import * from logger import * #全局所須要用到的變量 login_name = [None] #用全局可變的受局部影響 goods_dict = { '0':['草泥馬',100], '1':['《nick寫真集》',1], '2':['奧特曼玩偶',50], '3':['鋼鐵俠真人套裝',10000], '4':['《產品經理強哥自傳》',188], '5':['《馬叉蟲是如何煉成的》',888], '6':['《YwY自傳》',8888888888888] } user_car = dict() #功能模塊 #註冊 def register(): print('\033[1;34;46m\t\t歡迎使用註冊功能\t\t\033[0m') register_name_Ture = 0 name_list = fil_info_name_list() while register_name_Ture==0: print('\033[1;34;43m\t\t請您輸入註冊帳號\t\t\033[0m') print('\033[1;34;43m\t\t帳號由全英文組成\t\t\033[0m') print('\033[1;31;m輸入Q退出程序\t\033[0m') register_name = input('請輸入:').strip() if register_name == 'Q': loading() return False elif len(register_name.replace(' ','')) != len(register_name): print('\033[1;31;m輸入帳號中有宮格請從新輸入\t\033[0m') continue elif not register_name.isalpha(): print('\033[1;31;m輸入帳號不是由全英文組成請從新輸入\t\t\033[0m') continue elif register_name in fil_info_name_list(): print('\033[1;31;m輸入帳號以存在請從新輸入\t\t\033[0m') else: register_name_Ture =1 print('\033[1;34;43m\t\t帳號名已註冊成功\t\t\033[0m') while True: print('\033[1;34;43m\t\t請您輸入註冊密碼\t\t\033[0m') print('\033[1;34;43m\t\t帳號由全數字組成\t\t\033[0m') register_pwd = input('請輸入:').strip() if len(register_pwd.replace(' ', '')) != len(register_pwd): print('\033[1;31;m輸入密碼中有宮格請從新輸入\t\033[0m') continue elif not register_pwd.isdigit(): print('\033[1;31;m輸入密碼不是由全數字組成請從新輸入\t\t\033[0m') continue else: print('\033[1;32;m\t\t註冊成功\t\t\033[0m') register_info_dict = {'name':None,'pwd':None,'balance':0,'integral':0,'freeze':0} register_info_dict['name'] = register_name register_info_dict['pwd'] = register_pwd fil_add_info_dict(register_info_dict) print('註冊成功') loading() break return True #登入 def login(): print('\033[1;34;46m\t\t歡迎使用登入功能\t\033[0m') name_list = fil_info_name_list() login_name_Ture = 0 login_count =0 if not name_list: print('\033[1;31;m沒有用戶註冊請先註冊\033[0m') loading() return False global login_name if not login_name[0]: while login_name_Ture == 0: print('\033[1;34;43m\t\t請您輸入帳號\t\t\033[0m') print('\033[1;31;m輸入Q退出程序\t\033[0m') login_username = input('請輸入:').strip() if login_username == 'Q': loading() return False elif len(login_username.replace(' ', '')) != len(login_username): print('\033[1;31;m輸入帳號中有宮格請從新輸入\t\033[0m') continue elif not login_username.isalpha(): print('\033[1;31;m輸入帳號不爲全英文\t\t\033[0m') continue elif not login_username in fil_info_name_list(): print('\033[1;31;m輸入帳號不存在\t\t\033[0m') continue else: login_name_Ture = 1 print('\033[1;34;43m\t\t帳號輸入正確\t\t\033[0m') while login_count < 5: print(f'\033[1;34;43m\t你有{5-login_count}次機會輸入密碼\t\t\033[0m') print('\033[1;34;43m\t\t請您輸入密碼\t\t\033[0m') login_pwd = input('請輸入:').strip() if len(login_pwd.replace(' ', '')) != len(login_pwd): print('\033[1;31;m輸入密碼中有宮格請從新輸入\t\033[0m') login_count += 1 continue elif not login_pwd.isdigit(): print('\033[1;31;m輸入密碼不爲全數字\t\t\033[0m') login_count += 1 continue else: user_dict = fil_userinfo(login_username) if user_dict['pwd'] != login_pwd: print('\033[1;31;m輸入密碼錯誤請從新輸入\t\t\033[0m') login_count += 1 continue else: if user_dict["freeze"] == 0: print('\033[1;32;m\t\t登入成功\t\t\033[0m') login_name[0] = login_username loading() logger_login(login_username) return True else: print('\033[1;31;m登入失敗\t\t\033[0m') print(f'\033[1;31;m帳戶{login_username}以被凍結\t\t\033[0m') loading() return False fil_info_frzzez_amend(login_username,1) print('\033[1;31;m\t\t登入失敗\t\t\033[0m') print(f'\033[1;31;m{login_username}帳號密碼登入失敗太多已被凍結\033[0m') loading() return False while True: print(38 * '-') print("\033[0;40;46m\t\t歡迎使用登入功能\t\t\t\033[0m") print(f'帳號{login_name[0]}已經登入') chiose = input('輸入1當前帳號退出並退出登入程序\n' '輸入2當前帳號退出並從新登入程序\n' '輸入Q退出當前程序') print(38 * '-') if chiose == '1': logger_exit(login_name[0]) login_name[0] = None return False elif chiose == '2': logger_exit(login_name[0]) login_name[0] = None login() return elif chiose == 'Q': loading() return True else: print('\033[1;31;m請正確輸入') #充值 def top_up(): print('\033[1;34;46m\t\t歡迎使用充值功能\t\033[0m') name_list = fil_info_name_list() login_name_Ture = 0 login_count =0 if not name_list: print('\033[1;31;m沒有用戶註冊請先註冊\033[0m') loading() return False global login_name if not login_name[0]: print('\033[1;31;m沒有用戶登入請先登入\033[0m') loading() return False info_dict = fil_userinfo(login_name[0]) print(f"\033[1;32;m當前帳戶{login_name[0]}可用餘額爲{info_dict['balance']}元\033[0m") while True : print('\033[1;34;43m\t\t請您輸入充值的金額\t\t\033[0m') print('\033[1;31;m輸入Q退出程序\t\033[0m') balance = input('請輸入:').strip() if balance == 'Q': loading() return False elif len(balance.replace(' ', '')) != len(balance): print('\033[1;31;m輸入金額中有宮格請從新輸入\t\033[0m') continue elif not balance.isdigit(): print('\033[1;31;m輸入金額不爲全數字\t\t\033[0m') continue else: balance_int = int(balance) info_dict['balance'] += balance_int fil_info_balance_amend(login_name[0],info_dict['balance']) print(f'\033[1;32;m充值成功\033[0m') print(f"\033[1;32;m當前帳戶{login_name[0]}可用餘額爲{info_dict['balance']}元\033[0m") print('\033[1;34;43m\t\t是否繼續充值\t\t\033[0m') print('\033[1;31;m輸入Q退出Y爲繼續\t\033[0m') while True: chiose = input('請輸入') if chiose not in ['Q','Y']: print(f'\033[1;32;m請好好輸入\033[0m') elif chiose == 'Q': loading() return False else: break #購物 def shopping(): a = '0' print('\033[1;34;46m\t\t歡迎使用購物功能\t\033[0m') name_list = fil_info_name_list() login_name_Ture = 0 login_count =0 if not name_list: print('\033[1;31;m沒有用戶註冊請先註冊\033[0m') loading() return False global login_name if not login_name[0]: print('\033[1;31;m沒有用戶登入請先登入\033[0m') loading() return False user_dict = fil_userinfo(login_name[0]) balance = user_dict["balance"] while a == '0': print(38*'-') print("\033[0;30;46m\t\t輸入0是草泥馬100元\t\t\t\t\033[5m") print("\033[0;30;46m\t\t輸入1是《nick寫真集》1元\t\t\t\033[5m") print("\033[0;30;46m\t\t輸入2是奧特曼玩偶50元 \t\t\t\033[5m") print("\033[0;30;46m\t\t輸入3是鋼鐵俠真人套裝10000元 \t\033[5m") print("\033[0;30;46m\t\t輸入4是《產品經理強哥自傳》18888元\033[5m") print("\033[0;30;46m\t\t輸入5是《馬叉蟲是如何煉成的》888元\033[5m") print("\033[0;30;46m\t\t輸入6是《YwY自傳》8888888888888元\033[5m") print("\033[0;31;m輸入q退出程序\t\t\t\t\t\033[5m") print(38 * '-') goods_chiose = input('請輸入你要購買的商品') if goods_chiose=='q': loading() return elif goods_chiose not in goods_dict: print('請好好輸入') continue else: a = '2' while True: goods_nums = input('請輸入商品的數量') if not goods_nums.isdigit(): print('請輸入數字') break goods = goods_dict[goods_chiose][0] price = goods_dict[goods_chiose][1]*int(goods_nums) #生成購物車 global user_car if goods not in user_car: user_car[goods] = [goods_nums,price] else: user_car[goods][0] += goods_nums user_car[goods][1] += price print('\033[1;32;m-'*50) date_time = data_time() print(f'您好{login_name[0]}:') print(f'當前日期{date_time}\n\n') money = 0 for user_car_info in user_car.items(): print(f'{user_car_info[0]}{user_car_info[1][0]}個 合計{user_car_info[1][1]}元\n') money += int(user_car_info[1][1]) print(f'\t\t\t\t\t一共{money}元') print('-' * 50) print('\033[0m',end='') judge = 1 while judge == 1: print(50 * '\033[1;32;m-') jump = input('\033[0m輸入0結算\n' '輸入1繼續購買\n' '輸入2清空購物車繼續購買\n' '輸入3清空購物車退出\n' '請輸入您的選擇\n' '\033[0m').strip() if jump not in ['0','1','2','3']: print('請正確輸入0,1,2,3中任意數字') continue if jump == '1': judge = 4 # 跳出功能選擇 a = '0' # 繼續購買 elif jump == '2': user_car = dict() # 清空購物車 judge = 4 # 跳出功能選擇 a = '0' # 繼續購買 elif jump == '3': user_car = dict() judge = 4 # 跳出功能選擇 print("-" * 50) print('\033[1;42;m\t歡迎下次光臨\t\033[0m') elif jump == '0': if money > balance: print('\033[1;31;m餘額不足\033[0m') else: judge = 4 # 跳出功能選擇 print("\033[1;32;m-" * 50) #打印內容 date_time = data_time() money = 0 print(f'您好{login_name[0]}:') print(f'當前日期{date_time}\n\n') for user_car_info in user_car.items(): print(f'{user_car_info[0]}{user_car_info[1][0]}個 合計{user_car_info[1][1]}元\n') money += int(user_car_info[1][1]) print(f'\t\t\t\t\t一共{money}元') print("-" * 50) print('\033[0m') balance -= money fil_info_balance_amend(login_name[0],balance) print('\033[1;42;m\t歡迎下次光臨\t\033[0m') logger_shopping(login_name[0],user_car) loading() return #餘額查詢 def balance_enquiry(): print('\033[1;34;46m\t\t歡迎使用餘額查詢功能\t\033[0m') name_list = fil_info_name_list() login_name_Ture = 0 login_count =0 if not name_list: print('\033[1;31;m沒有用戶註冊請先註冊\033[0m') loading() return False global login_name if not login_name[0]: print('\033[1;31;m沒有用戶登入請先登入\033[0m') loading() return False info_dict = fil_userinfo(login_name[0]) print(f"\033[1;32;m當前帳戶{login_name[0]}可用餘額爲{info_dict['balance']}元\033[0m") print('\033[1;42;m5秒後返回主界面\033[0m',end='') loading() time.sleep(4) #解凍 def freeze(): print('\033[1;34;46m\t\t歡迎使用帳號解凍功能\t\033[0m') name_list = fil_info_name_list() login_name_Ture = 0 login_count = 0 if not name_list: print('\033[1;31;m沒有用戶註冊請先註冊\033[0m') loading() return False while True: print('\033[1;34;43m\t\t請您輸入解凍帳號\t\t\033[0m') print('\033[1;31;m輸入Q退出程序\t\033[0m') name = input('請輸入:').strip() if name == 'Q': loading() return False elif len(name.replace(' ', '')) != len(name): print('\033[1;31;m輸入帳號中有宮格請從新輸入\t\033[0m') continue elif not name.isalpha(): print('\033[1;31;m輸入帳號不爲全英文字母\t\t\033[0m') continue elif name not in name_list: print('\033[1;31;m輸入帳號不存在\t\t\033[0m') continue else: user_dict = fil_userinfo(name) user_freeze = user_dict['freeze'] user_pwd = user_dict['pwd'] if user_freeze == 0: print(f'\033[1;31;m當前帳戶{name}未被凍結\t\t\033[0m') loading() return else: while True: print('-' * 50) a = input('輸入:楊大爺請幫我解凍\n請輸入:') if a != '楊大爺請幫我解凍': print('\033[1;31;m想解凍就好好輸入\033[0m') continue fil_info_frzzez_amend(name, 0) print(f'\033[1;32;m帳號{name}解凍成功\033[0m') loading() return #運行模塊 #功能列表 msg_dict ={ '1':login, '0':register, '2':top_up, '3':balance_enquiry, '4':shopping, '5':freeze, 'q':'quit' } app_name_dict ={ '1':'login', '0':'register', '2':'top_up', '3':'balance_enquiry', '4':'shopping', '5':'freeze' } #運行程序 if __name__ == '__main__': logger_start('程序主界面') while True: print("\033[0;31;44m\t\t楊大爺超市歡迎您\t\t\t\t\033[5m") print("\033[0;30;42m\t\t輸入0進入註冊界面\t\t\t\033[5m") print("\033[0;30;42m\t\t輸入1進入登入界面\t\t\t\033[5m") print("\033[0;30;42m\t\t輸入2進入充值界面\t\t\t\033[5m") print("\033[0;30;42m\t\t輸入3進入餘額查詢界面\t\t\033[5m") print("\033[0;30;42m\t\t輸入4進入購物界面\t\t\t\033[5m") print("\033[0;30;42m\t\t輸入5進入解凍界面\t\t\t\033[5m") print("\033[0;30;42m\t\t輸入q退出程序 \t\t\t\t\033[5m") print(38 * '-') user_shopping_chiose = input('請輸入你要選擇的功能') if user_shopping_chiose not in msg_dict: print('請好好輸入') continue elif user_shopping_chiose=='q': print('再見') logger_end('程序主界面') break else: logger_start(f'{app_name_dict[user_shopping_chiose]}') msg_dict[user_shopping_chiose]() logger_end(f'{app_name_dict[user_shopping_chiose]}')
fil_mode.py
ios
import json import os def fil_add_info_dict(dict,fil='用戶註冊信息.txt'): info_dict = json.dumps(dict) with open(fil,'a',encoding='utf8') as fa : fa.write(f'{info_dict}\n') return True def fil_info_name_list(fil='用戶註冊信息.txt'): name_list = list() with open(fil,'a+',encoding='utf-8') as fa : fa.seek(0) data = fa.read() if data: with open(fil,'r',encoding='utf-8') as fr : for info_dict in fr: info_dict = json.loads(info_dict) name_list.append(info_dict.get('name')) return name_list def fil_info_balance_amend(name,balance,fil='用戶註冊信息.txt'): name_list = fil_info_name_list(fil) #fil_info_name_list爲用字典裏面的全部名字生成的列表 if name in name_list: with open(fil,'r',encoding='utf8') as fr,\ open('1.txt','w',encoding='utf8') as fw: for info_dict in fr: info_dict = json.loads(info_dict) if name == info_dict['name']: info_dict['balance'] = balance info_dict =json.dumps(info_dict) fw.write(f'{info_dict}\n') fw.flush() os.remove(fil) os.rename('1.txt',fil) def fil_userinfo(name,fil='用戶註冊信息.txt'): with open(fil,'a+',encoding='utf8') as far: far.seek(0) for a in far: a = json.loads(a) if a['name'] == name: info_dict = a return info_dict return False def fil_info_frzzez_amend(name,freeze,fil='用戶註冊信息.txt'): name_list = fil_info_name_list(fil) #fil_info_name_list爲用字典裏面的全部名字生成的列表 if name in name_list: with open(fil,'r',encoding='utf8') as fr,\ open('1.txt','w',encoding='utf8') as fw: for info_dict in fr: info_dict = json.loads(info_dict) if name == info_dict['name']: info_dict["freeze"] = freeze info_dict =json.dumps(info_dict) fw.write(f'{info_dict}\n') fw.flush() os.remove(fil) os.rename('1.txt',fil)
loading.py
git
import time def loading(): txt = '返回主界面中loading' print(f'\033[1;42;m{txt}\033[0m',end='') for a in range(10): print(f'\033[1;42;m.\033[0m',end='') time.sleep(0.1) print('') return True
data_time.py
用於記錄時間json
import time def data_time(): return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
logger.pyapp
import logging def logger_login(user): logger_login = logging.getLogger('user_login') fli_show = logging.FileHandler('user_login.log') logger_format = logging.Formatter('登入時間:%(asctime)s %(levelname)s-用戶:%(message)s', datefmt='%Y-%m-%d %X' ) fli_show.setFormatter(logger_format) logger_login.addHandler(fli_show) logger_login.setLevel(10) logger_login.info(user) def logger_exit(user): logger_login = logging.getLogger('user_login') fli_show = logging.FileHandler('user_login.log') logger_format = logging.Formatter('退出時間:%(asctime)s %(levelname)s-用戶:%(message)s', datefmt='%Y-%m-%d %X' ) fli_show.setFormatter(logger_format) logger_login.addHandler(fli_show) logger_login.setLevel(10) logger_login.info(user) def logger_start(app): logger_login = logging.getLogger('start') fli_show = logging.FileHandler('app.log') logger_format = logging.Formatter('%(message)s程序啓動時間:%(asctime)s', datefmt='%Y-%m-%d %X' ) fli_show.setFormatter(logger_format) logger_login.addHandler(fli_show) logger_login.setLevel(10) logger_login.info(app) def logger_end(app): logger_login = logging.getLogger('end') fli_show = logging.FileHandler('app.log') logger_format = logging.Formatter('%(message)s程序關閉時間:%(asctime)s', datefmt='%Y-%m-%d %X' ) fli_show.setFormatter(logger_format) logger_login.addHandler(fli_show) logger_login.setLevel(10) logger_login.info(app) def logger_shopping(user,car): logger_login = logging.getLogger(user) fli_show = logging.FileHandler('user_shopping.log') logger_format = logging.Formatter('%(asctime)s %(levelname)s-%(name)s:%(message)s', datefmt='%Y-%m-%d %X' ) fli_show.setFormatter(logger_format) logger_login.addHandler(fli_show) logger_login.setLevel(10) logger_login.info(car)