24.ATM+购物车项目(思路版)
一、先写好项目的基本文件夹和文件
conf(文件夹)
settings.py
core(文件夹)
admin.py
src.py
db(文件夹)
user_data(文件夹)
db_handler.py
interface(文件夹)
admin_interface.py
bank_interface.py
shop_interface.py
user_interface.py
lib(文件夹)
common.py
log(文件夹)
readme.md
start.py
二、先写启动文件start.py中的代码
start.py
from core import src if __name__ == '__main__': src.run()
三、start.py中调用了src.run(),因此,接下来开始写src.py中的代码
(1)先写run()函数
1 def run(): 2 while True: 3 print(''' 4 ============ATM + 购物车============ 5 0.退出功能 6 1.注册功能 7 2.登录功能 8 3.查看余额 9 4.提现功能 10 5.还款功能 11 6.转账功能 12 7.查看流水 13 8.购物功能 14 9.查看购物车 15 10.管理员功能 16 ============ end ================== 17 ''')
(2)提示用户输入
1 def run(): 2 while True: 3 print(''' 4 ============ATM + 购物车============ 5 0.退出功能 6 1.注册功能 7 2.登录功能 8 3.查看余额 9 4.提现功能 10 5.还款功能 11 6.转账功能 12 7.查看流水 13 8.购物功能 14 9.查看购物车 15 10.管理员功能 16 ============ end ================== 17 ''') 18 choice = input('请输入指令编号:').strip()
(3)判断用户输入的编号是否在函数字典中
func_dic = { '0': exit, '1': register, '2': login, '3': check_banlance, '4': withdraw, '5': repay, '6': transfer, '7': check_flow, '8': shopping, '9': check_shop_car, '10': admin, } def run(): while True: print(''' ============ATM + 购物车============ 0.退出功能 1.注册功能 2.登录功能 3.查看余额 4.提现功能 5.还款功能 6.转账功能 7.查看流水 8.购物功能 9.查看购物车 10.管理员功能 ============ end ================== ''') choice = input('请输入指令编号:').strip() if choice in func_dic: func_dic.get(choice)() continue else: print('输入的质量编号不正确,请重新输入!')
(4)写函数字典中的各个函数
1 # 1.注册功能 2 def register(): 3 pass 4 5 # 2.登录功能 6 def login(): 7 pass 8 9 # 3.查看余额 10 11 def check_banlance(): 12 pass 13 14 # 4.提现功能 15 16 def withdraw(): 17 pass 18 19 # 5.还款功能 20 21 def repay(): 22 pass 23 24 # 6.转账功能 25 26 def transfer(): 27 pass 28 29 # 7.查看流水 30 31 def check_flow(): 32 pass 33 34 35 # 8.购物功能 36 37 def shopping(): 38 pass 39 40 # 9.查看购物车 41 42 def check_shop_car(): 43 pass 44 45 # 10.管理员功能 46 47 def admin(): 48 pass 49 50 51 func_dic = { 52 '0': exit, 53 '1': register, 54 '2': login, 55 '3': check_banlance, 56 '4': withdraw, 57 '5': repay, 58 '6': transfer, 59 '7': check_flow, 60 '8': shopping, 61 '9': check_shop_car, 62 '10': admin, 63 } 64 65 66 def run(): 67 while True: 68 print(''' 69 ============ATM + 购物车============ 70 0.退出功能 71 1.注册功能 72 2.登录功能 73 3.查看余额 74 4.提现功能 75 5.还款功能 76 6.转账功能 77 7.查看流水 78 8.购物功能 79 9.查看购物车 80 10.管理员功能 81 ============ end ================== 82 ''') 83 choice = input('请输入指令编号:').strip() 84 if choice in func_dic: 85 func_dic.get(choice)() 86 continue 87 else: 88 print('输入的质量编号不正确,请重新输入!')
(5)写register功能
def register(): while True: username = input('请输入用户名:').strip() password = input('请输入密码:').strip() re_password = input('请再次输入密码:').strip() if password == re_password: flag,msg = user_interface.register_interface( username,password ) if flag: print(msg) break else: print(msg) else: print('两次输入的密码不一致,请重新输入!')
(6)调用了user_interface.register_interface,写一下user_interface.register_interface
1 def register_interface(username,password,banlance = 15000): 2 user_dic = db_handler.select(username) 3 if user_dic: 4 return False,'用户名已存在,请重新输入!' 5 else: 6 password = common.get_pwd_md5(password) 7 user_dic = { 8 'username': username, 9 'password': password, 10 'banlance': banlance, 11 'flow': [], 12 'shop_car': {}, 13 'locked': False 14 } 15 db_handler.save(user_dic) 16 msg = f'用户【{username}】注册成功' 17 user_logger.info(msg) 18 return True,msg
(7)调用了db_handler.select,写一下db_handler.select
import os import json from conf import settings # 查找数据 def select(username): user_path = os.path.join( settings.USER_DATA_PATH, f'{username}.json' ).replace('\\','/') if os.path.exists(user_path): with open(user_path,mode='rt',encoding='utf-8') as f: user_dic = json.load(f) return user_dic else: return None # 保存数据 def save(user_dic): username = user_dic.get('username') user_path = os.path.join( settings.USER_DATA_PATH, f'{username}.json' ).replace('\\', '/') with open(user_path,mode='wt',encoding='utf-8') as f: json.dump(user_dic,f,ensure_ascii=False)
(8)调用了settings.USER_DATA_PATH,写一下settings.USER_DATA_PATH
import os BASE_PATH = os.path.dirname( os.path.dirname(__file__) ) USER_DATA_PATH = os.path.join( BASE_PATH, 'db', 'user_data' ).replace('\\','/')
总结:以上注册功能的思路是:用户传入的用户名,密码传入到注册接口register_interface中,注册接口调用了
db_handler中的select去判断用户是否存在,若存在,则返回user_dic给接口层,若不存在,返回None,register_interface接收到db_handler中的数据,如果有user_dic,则返回:
用户已存在,重新输入,若不存在user_dic,则调用db_handler中的save方法,保存用户数据,返回注册成功,这两个返回给src中。src中用flag和msg解压赋值接收来自接口层的值
后面的登陆,查看余额等功能,依次类推,现在按照文件上代码,正式版:
一、start.py
1 from core import src 2 3 if __name__ == '__main__': 4 src.run()
二、src.py
1 from interface import user_interface 2 from interface import bank_interface 3 from interface import shop_interface 4 from lib import common 5 login_user = None 6 # 1.注册功能 7 def register(): 8 while True: 9 username = input('请输入用户名:').strip() 10 password = input('请输入密码:').strip() 11 re_password = input('请再次输入密码:').strip() 12 13 if password == re_password: 14 flag,msg = user_interface.register_interface( 15 username,password 16 ) 17 if flag: 18 print(msg) 19 break 20 else: 21 print(msg) 22 else: 23 print('两次输入的密码不一致,请重新输入!') 24 25 26 # 2.登录功能 27 def login(): 28 while True: 29 username = input('请输入用户名:').strip() 30 password = input('请输入密码:').strip() 31 flag,msg = user_interface.login_interface( 32 username,password 33 ) 34 if flag: 35 print(msg) 36 global login_user 37 login_user = username 38 break 39 else: 40 print(msg) 41 42 # 3.查看余额 43 @common.auth_login 44 def check_banlance(): 45 banlance = user_interface.check_banlance_interface( 46 login_user 47 ) 48 print(f'用户【{login_user}】的账户余额为:【{banlance}】') 49 50 # 4.提现功能 51 @common.auth_login 52 def withdraw(): 53 while True: 54 input_money = input('请输入你要提现的金额:').strip() 55 if not input_money.isdigit(): 56 print('请输入数字') 57 continue 58 else: 59 input_money = int(input_money) 60 # if input_money > 0: 61 flag,msg = bank_interface.withdraw_interface( 62 login_user,input_money 63 ) 64 if flag: 65 print(msg) 66 break 67 else: 68 print(msg) 69 # else: 70 # print('提现金额必须大于0') 71 72 # 5.还款功能 73 @common.auth_login 74 def repay(): 75 while True: 76 repay_money = input('请输入还款金额:').strip() 77 if not repay_money.isdigit(): 78 print('请输入数字') 79 continue 80 else: 81 repay_money = int(repay_money) 82 if repay_money > 0: 83 flag,msg = bank_interface.repay_interface( 84 login_user,repay_money 85 ) 86 if flag: 87 print(msg) 88 break 89 else: 90 print(msg) 91 else: 92 print('还款金额必须大于0') 93 94 # 6.转账功能 95 @common.auth_login 96 def transfer(): 97 while True: 98 to_user = input('请输入你要转账的用户:').strip() 99 to_money = input('请输入你要转账的金额:').strip() 100 if to_user != login_user: 101 if not to_money.isdigit(): 102 print('请输入数字') 103 continue 104 else: 105 to_money = int(to_money) 106 if to_money >0: 107 flag,msg = bank_interface.transfer_interface( 108 login_user,to_user,to_money 109 ) 110 if flag: 111 print(msg) 112 break 113 else: 114 print(msg) 115 else: 116 print('还款金额必须大于0') 117 else: 118 print('不能给自己转账!') 119 120 # 7.查看流水 121 @common.auth_login 122 def check_flow(): 123 flow_list = bank_interface.check_flow_interface( 124 login_user 125 ) 126 if flow_list: 127 for flow in flow_list: 128 print(flow) 129 else: 130 print('该用户没有产生流水!') 131 132 133 # 8.购物功能 134 @common.auth_login 135 def shopping(): 136 shop_list = [ 137 ['上海灌汤包', 30], 138 ['egon抱枕', 250], 139 ['广东凤爪', 28], 140 ['香港鱼丸', 15], 141 ['tank', 10000], 142 ['macbook', 10000] 143 ] 144 145 shopping_car = {} 146 while True: 147 print("==============商品信息===============") 148 for index,shop in enumerate(shop_list): 149 shop_name,shop_price = shop 150 print(f'商品编号为:【{index}】', 151 f'商品名称为:【{shop_name}】,' 152 f'商品价格为:【{shop_price}】') 153 print("================end=================") 154 choice = input('请输入商品编码:').strip() 155 156 if choice == 'y': 157 if not shopping_car: 158 print('购物车为空,不能进行结算,请添加商品!') 159 continue 160 else: 161 flag,msg = shop_interface.shopping_interface( 162 login_user,shopping_car 163 ) 164 if flag: 165 print(msg) 166 break 167 else: 168 print(msg) 169 170 elif choice == 'n': 171 if not shopping_car: 172 print('购物车为空,不能保存到文件中,请添加商品!') 173 continue 174 175 else: 176 flag,msg = shop_interface.add_shop_car_interface( 177 login_user,shopping_car 178 ) 179 if flag: 180 print(msg) 181 break 182 else: 183 print(msg) 184 185 if not choice.isdigit(): 186 print('请输入数字') 187 continue 188 else: 189 choice = int(choice) 190 if choice not in range(len(shop_list)): 191 print('商品编码不存在,请重新输入') 192 continue 193 else: 194 shop_name,shop_price = shop_list[choice] 195 if shop_name in shopping_car: 196 shopping_car[shop_name][1] += 1 197 else: 198 shopping_car[shop_name] = [shop_price,1] 199 200 print('当前购物车中的商品有:',shopping_car) 201 202 # 9.查看购物车 203 @common.auth_login 204 def check_shop_car(): 205 shop_car = shop_interface.check_shopcar_interface( 206 login_user 207 ) 208 print(shop_car) 209 210 # 10.管理员功能 211 @common.auth_login 212 def admin(): 213 from core import admin 214 admin.admin_run() 215 216 217 func_dic = { 218 '0': exit, 219 '1': register, 220 '2': login, 221 '3': check_banlance, 222 '4': withdraw, 223 '5': repay, 224 '6': transfer, 225 '7': check_flow, 226 '8': shopping, 227 '9': check_shop_car, 228 '10': admin, 229 } 230 231 232 def run(): 233 while True: 234 print(''' 235 ============ATM + 购物车============ 236 0.退出功能 237 1.注册功能 238 2.登录功能 239 3.查看余额 240 4.提现功能 241 5.还款功能 242 6.转账功能 243 7.查看流水 244 8.购物功能 245 9.查看购物车 246 10.管理员功能 247 ============ end ================== 248 ''') 249 choice = input('请输入指令编号:').strip() 250 if choice in func_dic: 251 func_dic.get(choice)() 252 continue 253 else: 254 print('输入的质量编号不正确,请重新输入!')
三、user_interface.py
import logging from db import db_handler from lib import common user_logger = common.get_logger('user') #注册接口 def register_interface(username,password,banlance = 15000): user_dic = db_handler.select(username) if user_dic: return False,'用户名已存在,请重新输入!' else: password = common.get_pwd_md5(password) user_dic = { 'username': username, 'password': password, 'banlance': banlance, 'flow': [], 'shop_car': {}, 'locked': False } db_handler.save(user_dic) msg = f'用户【{username}】注册成功' user_logger.info(msg) return True,msg #登陆接口 def login_interface(username,password): user_dic = db_handler.select(username) if user_dic: if not user_dic['locked']: password = common.get_pwd_md5(password) if password == user_dic.get('password'): msg = f'用户【{username}】登陆成功!' user_logger.info(msg) return True,msg else: msg = '密码错误,请重新输入!' user_logger.warn(msg) return False,msg else: msg = '用户被冻结,无法登陆!' user_logger.warn(msg) return False,msg else: msg = '用户名不存在,无法登陆,请重新输入!' user_logger.warn(msg) return False,msg #查看余额接口 def check_banlance_interface(username): user_dic = db_handler.select(username) return user_dic.get('banlance')
四、db_handler.py
1 import os 2 import json 3 from conf import settings 4 5 # 查找数据 6 def select(username): 7 user_path = os.path.join( 8 settings.USER_DATA_PATH, 9 f'{username}.json' 10 ).replace('\\','/') 11 12 if os.path.exists(user_path): 13 with open(user_path,mode='rt',encoding='utf-8') as f: 14 user_dic = json.load(f) 15 return user_dic 16 else: 17 return None 18 19 20 # 保存数据 21 def save(user_dic): 22 username = user_dic.get('username') 23 user_path = os.path.join( 24 settings.USER_DATA_PATH, 25 f'{username}.json' 26 ).replace('\\', '/') 27 with open(user_path,mode='wt',encoding='utf-8') as f: 28 json.dump(user_dic,f,ensure_ascii=False)
五、bank_interface.py
1 from db import db_handler 2 from lib import common 3 4 bank_logger = common.get_logger('bank') 5 6 #提现接口 7 def withdraw_interface(username,money): 8 user_dic = db_handler.select(username) 9 banlance = int(user_dic.get('banlance')) 10 money2 = int(money) * 1.03 11 service_charge = float('%.2f' %(int(money) * 0.03)) 12 13 if banlance >= money2: 14 banlance -= money2 15 user_dic['banlance'] = banlance 16 now_time = common.now_time() 17 flow = f'{now_time},用户【{username}】成功提现【{money}$】,' \ 18 f'手续费为:【{service_charge}$】,' \ 19 f'当前账户余额为:【{user_dic["banlance"]}】' 20 user_dic['flow'].append(flow) 21 bank_logger.info(flow) 22 db_handler.save(user_dic) 23 return True,flow 24 else: 25 return False,'余额不足,请去赚钱!' 26 27 28 #还款接口 29 def repay_interface(login_user,money): 30 user_dic = db_handler.select(login_user) 31 user_dic['banlance'] += money 32 now_time = common.now_time() 33 flow = f'{now_time},用户【{login_user}】还款【{money}$】成功,' \ 34 f'当前账户余额为:【{user_dic["banlance"]}】' 35 user_dic['flow'].append(flow) 36 db_handler.save(user_dic) 37 return True,flow 38 39 #转账接口 40 def transfer_interface(login_user,to_user,money): 41 login_user_dic = db_handler.select(login_user) 42 to_user_dic = db_handler.select(to_user) 43 44 if to_user_dic: 45 login_user_dic['banlance'] -= money 46 to_user_dic['banlance'] += money 47 48 now_time = common.now_time() 49 login_user_flow = f'{now_time},用户【{login_user}给用户【{to_user}】成功转账:' \ 50 f'【{money}$】' 51 login_user_dic['flow'].append(login_user_flow) 52 db_handler.save(login_user_dic) 53 54 now_time = common.now_time() 55 to_user_flow = f'{now_time},用户【{to_user}收到用户【{login_user}】成功转账:' \ 56 f'【{money}$】' 57 login_user_dic['flow'].append(to_user_flow) 58 db_handler.save(to_user_dic) 59 60 return True,login_user_flow 61 62 else: 63 return False,'你要转账的用户不存在,请重新输入!' 64 65 66 #查看流水接口 67 def check_flow_interface(login_user): 68 user_dic = db_handler.select(login_user) 69 return user_dic.get('flow') 70 71 #支付接口 72 def pay_interface(login_user,cost): 73 user_dic = db_handler.select(login_user) 74 if user_dic['banlance'] >= cost: 75 user_dic['banlance'] -= cost 76 flow = f'用户【{login_user}】消费金额为:【{cost}$】' 77 user_dic['flow'].append(flow) 78 db_handler.save(user_dic) 79 return True 80 else: 81 return False
六、shop_interface.py
1 from db import db_handler 2 from lib import common 3 shop_logger = common.get_logger('shop') 4 5 #商品准备结算接口 6 def shopping_interface(login_user,shopping_car): 7 cost = 0 8 for price_number in shopping_car.values(): 9 price,number = price_number 10 cost += price * number 11 12 from interface import bank_interface 13 flag = bank_interface.pay_interface( 14 login_user,cost 15 ) 16 if flag: 17 msg = '支付成功,准备发货!' 18 shop_logger.info(msg) 19 return True,msg 20 else: 21 msg = '支付失败,余额不足!' 22 shop_logger.warn(msg) 23 return False,msg 24 25 26 #保存购物车到文件接口 27 def add_shop_car_interface(login_user,shopping_car): 28 user_dic = db_handler.select(login_user) 29 shop_car = user_dic.get('shop_car') 30 for shop_name,price_number in shopping_car.items(): 31 number = price_number[1] 32 if shop_name in shop_car: 33 user_dic['shop_car'][shop_name][1] += number 34 else: 35 user_dic['shop_car'].update( 36 {shop_name:price_number} 37 ) 38 db_handler.save(user_dic) 39 return True,'用户购物车成功保存到文件中!' 40 41 #查看购物车接口 42 def check_shopcar_interface(login_user): 43 user_dic = db_handler.select(login_user) 44 return user_dic['shop_car']
七、admin_interface.py
1 from db import db_handler 2 from lib import common 3 4 admin_logger = common.get_logger('admin') 5 6 # 修改用户额度接口 7 def change_banlance_interface(username,money): 8 user_dic = db_handler.select(username) 9 if user_dic: 10 user_dic['banlance'] = money 11 db_handler.save(user_dic) 12 msg = f'用户【{username}】额度成功修改为:【{money}$】' 13 admin_logger.info(msg) 14 return True,msg 15 else: 16 msg = '用户名不存在,请重新输入!' 17 admin_logger.warn(msg) 18 return False,msg 19 20 21 #冻结用户接口 22 def lock_user_interface(username): 23 user_dic = db_handler.select(username) 24 if user_dic: 25 user_dic['locked'] = True 26 db_handler.save(user_dic) 27 msg = f'用户【{username}】冻结成功' 28 admin_logger.info(msg) 29 return True,msg 30 else: 31 msg = '用户名不存在,请重新输入!' 32 admin_logger.warn(msg) 33 return False,msg 34 35 #解冻账户接口 36 def unlock_user_interface(username): 37 user_dic = db_handler.select(username) 38 if user_dic: 39 if user_dic['locked']: 40 user_dic['locked'] = False 41 db_handler.save(user_dic) 42 return True,f'用户【{username}】解冻成功' 43 else: 44 return False, f'用户【{username}】未被冻结' 45 else: 46 return False, '用户名不存在,请重新输入!'
八、settings.py
import os BASE_PATH = os.path.dirname( os.path.dirname(__file__) ) USER_DATA_PATH = os.path.join( BASE_PATH, 'db', 'user_data' ).replace('\\','/') #日志配置字典 """ logging配置 """ import os # 1、定义三种日志输出格式,日志中可能用到的格式化串如下 # %(name)s Logger的名字 # %(levelno)s 数字形式的日志级别 # %(levelname)s 文本形式的日志级别 # %(pathname)s 调用日志输出函数的模块的完整路径名,可能没有 # %(filename)s 调用日志输出函数的模块的文件名 # %(module)s 调用日志输出函数的模块名 # %(funcName)s 调用日志输出函数的函数名 # %(lineno)d 调用日志输出函数的语句所在的代码行 # %(created)f 当前时间,用UNIX标准的表示时间的浮 点数表示 # %(relativeCreated)d 输出日志信息时的,自Logger创建以 来的毫秒数 # %(asctime)s 字符串形式的当前时间。默认格式是 “2003-07-08 16:49:45,896”。逗号后面的是毫秒 # %(thread)d 线程ID。可能没有 # %(threadName)s 线程名。可能没有 # %(process)d 进程ID。可能没有 # %(message)s用户输出的消息 # 2、强调:其中的%(name)s为getlogger时指定的名字 standard_format = '[%(asctime)s][%(threadName)s:%(thread)d][task_id:%(name)s][%(filename)s:%(lineno)d]' \ '[%(levelname)s][%(message)s]' simple_format = '[%(levelname)s][%(asctime)s][%(filename)s:%(lineno)d]%(message)s' test_format = '%(asctime)s] %(message)s' # 定义日志输出格式 结束 # ***********************注意1:log文件的目录 # 可以定制日志文件路径 BASE_PATH = os.path.dirname(os.path.dirname(__file__)) # log文件的目录 logfile_dir = os.path.join(BASE_PATH,'log').replace('\\','/') print(logfile_dir) # *************************注意2:log文件名 logfile_name = 'atm.log' # 如果不存在定义的日志目录,就创建一个 if not os.path.isdir(logfile_dir): os.mkdir(logfile_dir) # log文件的全路径 logfile_path = os.path.join(logfile_dir,logfile_name) # 3、日志配置字典 LOGGING_DIC = { 'version': 1, 'disable_existing_loggers': False, 'formatters': { 'standard': { 'format': standard_format }, 'simple': { 'format': simple_format }, 'test': { 'format': test_format }, }, 'filters': {}, 'handlers': { #打印到终端的日志 'console': { 'level': 'DEBUG', 'class': 'logging.StreamHandler', # 打印到屏幕 'formatter': 'simple' }, #打印到文件的日志,收集info及以上的日志 'default': { 'level': 'DEBUG', 'class': 'logging.handlers.RotatingFileHandler', # 保存到文件,日志轮转 'formatter': 'standard', 'filename': logfile_path, # 日志文件 'maxBytes': 1024*1024*5, # 日志大小 5M 'backupCount': 5, 'encoding': 'utf-8', # 日志文件的编码,再也不用担心中文log乱码了 }, # 'other': { # 'level': 'DEBUG', # 'class': 'logging.FileHandler', # 保存到文件 # 'formatter': 'test', # 'filename': 'a2.log', # 'encoding': 'utf-8', # }, }, 'loggers': { #logging.getLogger(__name__)拿到的logger配置 '': { 'handlers': ['default', 'console'], # 这里把上面定义的两个handler都加上,即log数据既写入文件又打印到屏幕 'level': 'DEBUG', # loggers(第一层日志级别关限制)--->handlers(第二层日志级别关卡限制) 'propagate': False, # 默认为True,向上(更高level的logger)传递,通常设置为False即可,否则会一份日志向上层层传递 }, # '专门的采集': { # 'handlers': ['other',], # 'level': 'DEBUG', # 'propagate': False, # }, }, }
九、common.py
1 import hashlib 2 import datetime 3 import logging.config 4 from conf import settings 5 6 7 # 密码加密 8 def get_pwd_md5(password): 9 md5_obj = hashlib.md5() 10 md5_obj.update(password.encode('utf-8')) 11 salt = '一二三四五上山打老虎' 12 md5_obj.update(salt.encode('utf-8')) 13 14 return md5_obj.hexdigest() 15 16 17 #登陆认证装饰器 18 def auth_login(func): 19 from core import src 20 def inner(*args,**kwargs): 21 if src.login_user: 22 res = func(*args,**kwargs) 23 return res 24 else: 25 print('需要登录才能使用此功能,请登录') 26 src.login() 27 return inner 28 29 #计算当前时间 30 def now_time(): 31 now_time = datetime.datetime.now() 32 return now_time 33 34 #添加日志功能 35 36 def get_logger(log_type): 37 ''' 38 :param log_type: 比如是user日志,bank日志,shop日志 39 :return: 40 ''' 41 42 # 1.加载日志配置字典 43 logging.config.dictConfig( 44 settings.LOGGING_DIC 45 ) 46 # 2.获取日志对象(日志功能在接口层使用) 47 logger = logging.getLogger(log_type) 48 return logger
十、admin.py
1 from core import src 2 from interface import admin_interface 3 4 # 1.添加账户 5 def add_user(): 6 src.register() 7 8 # 2.修改额度 9 def change_banlance(): 10 while True: 11 change_user = input('请输入你要修改额度的账户:').strip() 12 change_money = input('请输入你要修改的额度:').strip() 13 if change_user != src.login_user: 14 if not change_money.isdigit(): 15 print('请输入数字') 16 continue 17 else: 18 change_money = int(change_money) 19 flag,msg = admin_interface.change_banlance_interface( 20 change_user,change_money 21 ) 22 if flag: 23 print(msg) 24 break 25 else: 26 print(msg) 27 28 else: 29 print('不能修改管理员自己的账户额度!') 30 31 32 # 3.冻结账户 33 def lock_user(): 34 while True: 35 lock_user = input('请输入要冻结的账户:').strip() 36 if lock_user != src.login_user: 37 flag,msg = admin_interface.lock_user_interface( 38 lock_user 39 ) 40 if flag: 41 print(msg) 42 break 43 else: 44 print(msg) 45 else: 46 print('不能冻结管理员账户!') 47 48 # 4.解冻账户 49 def unlock_user(): 50 while True: 51 unlock_user = input('请输入要解冻的用户名:').strip() 52 flag,msg = admin_interface.unlock_user_interface( 53 unlock_user 54 ) 55 if flag: 56 print(msg) 57 break 58 else: 59 print(msg) 60 61 62 admin_func = { 63 '1':add_user, 64 '2':change_banlance, 65 '3':lock_user, 66 '4':unlock_user 67 } 68 69 70 def admin_run(): 71 while True: 72 print(''' 73 1.添加账户 74 2.修改额度 75 3.冻结账户 76 4.解冻账户 77 ''') 78 choice = input('请输入管理员功能编号:').strip() 79 if choice in admin_func: 80 admin_func.get(choice)() 81 continue 82 else: 83 print('你输入的编号不存在!')