ATM
----bin
----start.py
----conf
----settings.py
----core
----src.py
----db
----db_handler.py
----interface
----bank_interface
----shop_interface
----user_interface
----lib
----common.py
----log
----log.log
----Reanme.txt
start.py
import sys
import os
from core import src
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
sys.path.append(BASE_DIR)
src.run()
settings.py
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
BASE_DB = os.path.join(BASE_DIR,'db')
src.py
'''
1、注册 register
2、登录 login
3、查询余额 check_balance
4、转账 transfer
5、提现 withdraw
6、查流水 check_records
7、还款 repay
8、加入购物车 shopping
9、查看购物车 check_shopping_cart
'''
from interface import user_interface
from interface import bank_interface
from interface import shop_interface
from lib import common
login_user = None
def register():
print('注册'.center(20, '❄'))
while True:
username = input('请输入用户名(按q退出):').strip()
if username == 'q':
break
password = input('请输入密码:').strip()
flag, msg = user_interface.register_interface(username, password)
if flag:
print(msg)
break
else:
print(msg)
def login():
print('登录'.center(20, '❄'))
while True:
username = input('请输入用户名(按q退出):').strip()
if username == 'q':
break
password = input('请输入密码:').strip()
flag, msg = user_interface.login_interface(username, password)
if flag:
print(msg)
global login_user
login_user = username
break
else:
print(msg)
@common.login_auth
def check_balance():
print('查余额'.center(20, '❄'))
balance = bank_interface.check_balance_interface(login_user)
print('用户余额为%s' % balance)
@common.login_auth
def transfer():
print('转账'.center(20, '❄'))
while True:
to_user = input('请输入被转账用户(按q退出):').strip()
if to_user == 'q':
break
money = input('请输入转账金额:').strip()
if not money.isdigit():
print('输入金额不合法!')
else:
money = int(money)
flag, msg = bank_interface.transfer_interface(login_user, to_user, money)
if flag:
print(msg)
break
else:
print(msg)
@common.login_auth
def withdraw():
print('提现'.center(20, '❄'))
while True:
money = input('请输入需要提现的金额(按q退出):').strip()
if money == 'q':
break
elif not money.isdigit():
print('输入不合法!')
continue
money = int(money)
flag, msg = bank_interface.withdraw_interface(login_user, money)
if flag:
print(msg)
break
else:
print(msg)
@common.login_auth
def check_records():
print('查流水'.center(20, '❄'))
bank_flow = bank_interface.check_records_interface(login_user)
for i in bank_flow:
print(i)
@common.login_auth
def repay():
print('还款'.center(20, '❄'))
while True:
money = input('请输入还款金额(按q退出):').strip()
if money == 'q':
break
elif not money.isdigit():
print('输入不合法!')
else:
money = int(money)
flag, msg = bank_interface.repay_interface(login_user, money)
if flag:
print(msg)
break
@common.login_auth
def shopping():
print('购物'.center(20, '❄'))
shop_list = [
['商品1',1000],
['商品2',1000],
['商品3',1000],
['商品4',1000]
]
shop_car = {}
while True:
for i,j in enumerate(shop_list):
print('%s:【%s %s元】'%(i,j[0],j[1]))
choice = input('请输入商品编号(输入q退出):').strip()
if choice == 'q':
break
if not choice.isdigit():
print('输入不合法')
continue
choice = int(choice)
if choice not in range(len(shop_list)):
print('输入编号不存在')
continue
shop_name = shop_list[choice][0]
shop_price = shop_list[choice][1]
if shop_name in shop_car:
shop_car[shop_name]['number'] += 1
else:
shop_car[shop_name] = {'shop_price':shop_price, 'number': 1}
if shop_car:
shop_interface.shopping_interface(login_user,shop_car)
print('购物车加入成功!')
else:
print('购物车是空的!')
@common.login_auth
def check_shopping_cart():
print('查看购物车'.center(20, '❄'))
shop_car = shop_interface.check_shopping_cart_interface(login_user)
if shop_car:
print(shop_car)
else:
print('用户购物车为空!')
func_dic = {
'1': register,
'2': login,
'3': check_balance,
'4': transfer,
'5': withdraw,
'6': check_records,
'7': repay,
'8': shopping,
'9': check_shopping_cart,
}
def run():
while True:
print('''
1、注册
2、登录
3、查询余额
4、转账
5、提现
6、查流水
7、还款
8、加入购物车
9、查看购物车
''')
choice = input('请输入命令编号(按q退出):').strip()
if choice == 'q':
break
elif choice.isdigit():
if choice in func_dic:
func_dic[choice]()
else:
print('输入命令不存在!')
else:
print('请输入命令不合法!')
db_handler.py
'''
数据处理
'''
from conf import settings
import os
import json
def select(username):
user_path = os.path.join(settings.BASE_DB, '%s.json' % username)
if os.path.exists(user_path):
with open(user_path, 'rt', encoding='utf_8') as f:
user_dic = json.load(f)
return user_dic
def update(user_dic):
username = user_dic['username']
user_path = os.path.join(settings.BASE_DB, '%s.json' % username)
with open(user_path, 'wt', encoding='utf_8') as f:
json.dump(user_dic,f,ensure_ascii=False)
bank_interface.py
from db import db_handler
from lib import common
def check_balance_interface(username):
user_dic = db_handler.select(username)
common.write_logger("用户%s查询了余额" % username)
return user_dic['balance']
def transfer_interface(login_user, to_user, money):
login_user_dic = db_handler.select(login_user)
to_user_dic = db_handler.select(to_user)
if not to_user_dic:
return False, '转账用户不存在'
elif login_user_dic['balance'] < money:
return False, '当前用户余额不足'
else:
login_user_dic['balance'] -= money
to_user_dic['balance'] += money
flow1 = "用户%s向%s转账了%s元" % (login_user, to_user, money)
flow2 = "用户%s收到%s转账的%s元" % (to_user, login_user, money)
login_user_dic['bank_flow'].append(flow1)
to_user_dic['bank_flow'].append(flow2)
db_handler.update(login_user_dic)
db_handler.update(to_user_dic)
common.write_logger(flow1)
common.write_logger(flow2)
return True, flow1
def withdraw_interface(username, money):
user_dic = db_handler.select(username)
if user_dic['balance'] >= money * 1.05:
user_dic['balance'] -= money * 1.05
flow = "用户%s提现了%s元" % (username, money)
user_dic['bank_flow'].append(flow)
db_handler.update(user_dic)
common.write_logger(flow)
return True, flow
else:
return False, '用户余额不足'
def check_records_interface(username):
user_dic = db_handler.select(username)
common.write_logger("用户%s查询了账户流水" % username)
return user_dic['bank_flow']
def repay_interface(username, money):
user_dic = db_handler.select(username)
user_dic['balance'] += money
flow = "用户%s还款了%s元" % (username, money)
user_dic['bank_flow'].append(flow)
db_handler.update(user_dic)
common.write_logger(flow)
return True, flow
shop_interface.py
from db import db_handler
from lib import common
def shopping_interface(username, shop_car):
user_dic = db_handler.select(username)
user_dic['shopping_car'] = shop_car
db_handler.update(user_dic)
common.write_logger("用户%s添加了购物车%s" % (username, shop_car))
def check_shopping_cart_interface(username):
user_dic = db_handler.select(username)
common.write_logger("用户%s查看了购物车" % username)
return user_dic['shopping_car']
user_interface.py
from db import db_handler
from lib import common
def register_interface(username, password):
user_dic = db_handler.select(username)
if user_dic:
return False, '用户已存在'
else:
user_dic = {
'username': username,
'password': password,
'balance': 15000,
'bank_flow': [],
'shopping_car': {}
}
db_handler.update(user_dic)
common.write_logger("用户%s注册成功"%username)
return True, '注册成功'
def login_interface(username, password):
user_dic = db_handler.select(username)
if not user_dic:
return False, '用户不存在'
elif user_dic['password'] == password:
common.write_logger("用户%s登录成功" % username)
return True, '用户登陆成功'
else:
return False, '用户密码不正确'
common.py
def login_auth(func):
def warpper(*args,**kwargs):
from core import src
if src.login_user:
res = func(*args,**kwargs)
return res
else:
print('未登录无法享受该服务')
src.login()
return warpper
import logging, os
from conf import settings
logging.basicConfig(
filename=os.path.join(settings.BASE_DIR, 'log', 'log.log'),
format='%(asctime)s - %(name)s - %(levelname)s -%(module)s: %(message)s',
datefmt='%Y-%m-%d %H:%M:%S %p',
level=10,
)
def write_logger(name):
return logging.info(name)