作业题目: 模拟实现一个ATM + 购物商城程序
1、额度 15000或自定义 2、实现购物商城,买东西加入 购物车,调用信用卡接口结账 3、可以提现,手续费5% 4、支持多账户登录 5、支持账户间转账 6、记录每月日常消费流水 7、提供还款接口 8、ATM记录操作日志 9、提供管理接口,包括添加账户、用户额度,冻结账户等。。。 10、用户认证用装饰器
流程图:
代码目录结构图:
atm
│ ATM.pdf
│ main_server.py -- 程序入口
│ README
│ __init__.py
│
│
├─config
│ │ setting.py ---- 配置文件
│ │ __init__.py
│ │
│ └─__pycache__
│ setting.cpython-36.pyc
│ __init__.cpython-36.pyc
│
├─core
│ │ admin.py -- 后台管理
│ │ ATM_operation.py --- ATM操作
│ │ auth.py --- 账户验证
│ │ db_handler.py --- 文件操作
│ │ loggers.py --- 日志
│ │ main.py ---主程序入口
│ │ make.py --- 交易中心
│ │ shopping.py --- 购物商城
│ │ __init__.py
│ │
│ └─__pycache__
│ admin.cpython-36.pyc
│ ATM_operation.cpython-36.pyc
│ auth.cpython-36.pyc
│ db_handler.cpython-36.pyc
│ loggers.cpython-36.pyc
│ main.cpython-36.pyc
│ make.cpython-36.pyc
│ shopping.cpython-36.pyc
│ __init__.cpython-36.pyc
│
│
│
├─db
│ │ __init__.py
│ │
│ └─accounts --- 账户文件
│ 12.json
│ 123.json
│ 1234.json
│ 14.json
│ admin.json
│ __init__.py
│
├─log
│ │ access.log --- 普通用户操作日志
│ │ admin.log --- 管理员操作日志
│ │ shopping.log ---- 消费日志
│ │ transaction.log ---- 交易日志
│ │ __init__.py
│ │
│ └─__pycache__
│ __init__.cpython-36.pyc
│
└─shopp
│ __init__.py
│
└─__pycache__
__init__.cpython-36.pyc
main_server.py -- 程序入口
1 import os,sys 2 BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 3 sys.path.append(BASE_DIR) 4 if __name__ == '__main__': 5 from core import main 6 main.entrance()
main.py ---主程序入口
1 from .auth import authentication 2 from .loggers import logger_log 3 from.ATM_operation import with_draw 4 from .ATM_operation import transfer 5 from .ATM_operation import pay_back 6 from .ATM_operation import view_account_info 7 from .shopping import shoppings 8 from .admin import admin_load 9 from .db_handler import load_account 10 from .db_handler import save_db 11 12 access_logger = logger_log('access') 13 transaction_logger = logger_log('transaction') 14 15 16 info = [ 17 ('查看账户信息',view_account_info), 18 ('转账',transfer), 19 ('还款',pay_back), 20 ('取现',with_draw), 21 ('购物商城',shoppings), 22 ('后台管理',admin_load) 23 ] 24 25 def conroller(use_boj): 26 '功能分发器' 27 while True: 28 for i,v in enumerate(info): 29 print(i,v[0]) 30 choice = input('请输入您的选择:').strip() 31 if not choice:continue 32 if choice.isdigit(): 33 choice = int(choice) 34 if choice < len(info) and choice >= 0: 35 info[choice][1](use_boj,transaction_logger=transaction_logger,access_logger=access_logger) 36 def entrance(): 37 '程序入口' 38 user_obj = { 39 'is_authentication':False, 40 'data':None 41 } 42 retry_count = 0 43 while user_obj['is_authentication'] is not True: 44 account = input('请输入账号:').strip() 45 password = input('请输入密码:').strip() 46 auth_data = authentication(account,password) 47 if auth_data: 48 user_obj['is_authentication'] = True 49 user_obj['data'] = auth_data 50 print('欢迎登陆'.center(50,'*')) 51 access_logger.info('%s已登陆'%user_obj['data']['id']) 52 conroller(user_obj) 53 else: 54 print('账号密码错误!') 55 retry_count += 1 56 if retry_count == 3: 57 msg = '用户%s已登陆3失败'%account 58 access_logger.error(msg) 59 60 break