#!/usr/bin/env python # -*- coding:utf-8 -*- # by wk # !/usr/bin/env python # -*- coding:utf-8 -*- # by wk import os import time ‘‘‘ 1.额度 15000或自定义 2.实现购物商城,买东西加入 购物车,调用信用卡接口结账 3.可以提现,手续费5% 4.支持多账户登录 5.支持账户间转账 6.记录每月日常消费流水 7.提供还款接口 8.TM记录操作日志 9.提供管理接口,包括添加账户、用户额度,冻结账户等。。。 10.用户认证用装饰器 ‘‘‘ # 用户信息文件转换为列表 def users_txt_to_list(): users_lists = [] with open(‘users.txt‘, ‘r‘, encoding=‘utf-8‘) as goods_r: for line in goods_r: user_list = line.split() user_dict = {‘name‘: user_list[0], ‘password‘: user_list[1],‘money‘: user_list[2], ‘grant‘: user_list[3],‘status‘:user_list[4]} users_lists.append(user_dict) return users_lists # 用户登录装饰器 def user_login(func): user_lists = users_txt_to_list() def wragger(*args, **kwargs): with open(‘user_session.txt‘,‘r‘,encoding=‘utf-8‘) as session_user_r: read_result = session_user_r.read() if read_result == ‘‘: username = input(‘登录名: ‘) passwords = input(‘密码: ‘) for user in user_lists: if username == user[‘name‘] and passwords == user[‘password‘] and user[‘status‘] == ‘open‘: with open (‘user_session.txt‘,‘w‘,encoding=‘utf-8‘) as user_session_w: user_session_w.write(user[‘name‘]) # print(‘写入成功‘) func(*args, **kwargs) elif user[‘status‘] == ‘lock‘: user_login_flag = ‘lock‘ break else: user_login_flag = ‘other‘ break if user_login_flag == ‘lock‘: print(‘您的账户被锁定‘) elif user_login_flag == ‘other‘: print(‘您登录的信息有误,请重新登录‘) else: func(*args, **kwargs) return wragger # 用户管理装饰器 def admin_user_login(func): user_lists = users_txt_to_list() def wragger(*args, **kwargs): with open(‘user_session.txt‘,‘r‘,encoding=‘utf-8‘) as session_user_r: read_result = session_user_r.read() # if read_result == ‘‘: # username = input(‘登录名: ‘) # passwords = input(‘密码: ‘) # print(‘ffff‘,read_result) for user in user_lists: if user[‘name‘] == read_result and user[‘grant‘] == ‘admin‘: # print(‘写入成功‘) func(*args, **kwargs) else: print(‘您不是管理员‘) # print(user[‘name‘],user[‘status‘]) break # else: # func(*args, **kwargs) return wragger # 购物中心模块 @user_login def goods_center(): with open(‘user_session.txt‘, ‘r‘, encoding=‘utf-8‘) as session_user_r: session_user = session_user_r.read() users = users_txt_to_list() for user in users: if session_user == user[‘name‘]: user_dict = user flag_list = True my_cart_id = -1 mycat_list = [] # goodslists = goods_txt_to_list() while flag_list: goodsid = goods_list(mygoodslist) # goodslist = goods_txt_to_list() car_list = cartlists(goodsid, my_cart_id, mycat_list) continue_flag = input(‘是否继续购买(y or n): ‘) if continue_flag == ‘Y‘ or continue_flag == ‘y‘: flag_list = True elif continue_flag == ‘N‘ or continue_flag == ‘n‘: flag_list = False print(‘cartlists‘, car_list) # print(‘aaaaaaaaa‘, mygoodslist) my_buy(car_list, user_dict) # while True: # my_choose = input(‘是否继续购物,确认请按(Y or y),退出请按(B or b): ‘) # if my_choose == ‘Y‘ or my_choose == ‘y‘: # flag = True # break # elif my_choose == ‘B‘ or my_choose == ‘b‘: # flag = False # break # else: # print(‘输入的信息不正确请重新输入‘) # continue # 商品文件转换为列表 def goods_txt_to_list(): good_lists = [] with open(‘goods.txt‘, ‘r‘, encoding=‘utf-8‘) as goods_r: for line in goods_r: good_list = line.split() good_dict = {‘name‘: good_list[0], ‘price‘: good_list[1], ‘nums‘: good_list[2]} good_lists.append(good_dict) return good_lists # 商品列表 def goods_list(goodslists): my_goods_list = goodslists print(‘请选择商品‘) for k, goods in enumerate(my_goods_list): print(‘产品编号:%s 名称: %s 价格: %s元, 剩余: %s‘ % (k, goods[‘name‘], goods[‘price‘], goods[‘nums‘])) while True: my_goods_id = input(‘请输入要买商品的编号: ‘) if my_goods_id.isdigit(): return my_goods_id print(‘输入的不是数字请重新输入\n‘) # 购物车模块 def cartlists(goodsid, cart_id, carlist): # goodslist = goods_txt_to_list() cart_id = cart_id + 1 # 为了给购物车里的商品编号,便于移除商品 goods_id = int(goodsid) print(‘您选择了 %s‘ % (mygoodslist[goods_id][‘name‘])) goods_num = input(‘请输入购买数量: ‘) if goods_num.isdigit(): print(‘您购买的数量是 %s 件‘ % (goods_num)) goods_name = mygoodslist[goods_id][‘name‘] goods_price = int(mygoodslist[goods_id][‘price‘]) oldnum = int(mygoodslist[goods_id][‘nums‘]) newnum = oldnum - int(goods_num) mygoodslist[goods_id][‘nums‘] = newnum if newnum > 0: # 判断产品数量够不够 car_dict = {} # 创建购物车字典 car_dict[‘id‘] = cart_id # 编号 car_dict[‘name‘] = goods_name # 商品名称 car_dict[‘nums‘] = goods_num # 购买数量 car_dict[‘price‘] = goods_price * int(goods_num) # 价格 carlist.append(car_dict) else: print(‘没那么多了,看看还有没有别的想买的\n‘) else: print(‘输入的不是数字请重新输入\n‘) return carlist # 购物车商品合并模块 def union_cart_list(cartlists): new_cart_list = [] for car in cartlists: if car not in new_cart_list: car[‘nums‘] new_cart_list.append(car) # 购买模块 def my_buy(cart_list, user_dict): goods_total_money = 0 if not cart_list: pass else: while True: print(‘购物车信息:‘) for buy_car in cart_list: print(‘购买编号: %s 产品名称: %s 价格: %s元 数量: %s个‘ % ( buy_car[‘id‘], buy_car[‘name‘], buy_car[‘price‘], buy_car[‘nums‘])) my_confirm = input(‘订单确认请按(Y or y),移除请输入编号(数字),取消订单请按(N or n): ‘) if my_confirm == ‘Y‘ or my_confirm == ‘y‘: for cart in cart_list: goods_total_money += cart[‘price‘] myoldmoney = int(user_dict[‘money‘]) # goodsmoney = carlist[goods_id][‘price‘] * int(goods_num) my_new_money = myoldmoney - goods_total_money if my_new_money >= 0: # 判断钱够不够 # user_dict[‘money‘] = my_new_money # goodslist[goods_id][‘nums‘] = goods_num change_money(user_dict, my_new_money) change_goods() print(‘提交成功!‘) print(‘当前您的订单信息:‘) for buy_car in cart_list: print(‘产品名称: %s 价格: %s元 数量: %s个‘ % ( buy_car[‘name‘], buy_car[‘price‘], buy_car[‘nums‘])) now_time = str(time.asctime(time.localtime(time.time()))) month_report(buy_car[‘name‘], buy_car[‘nums‘], buy_car[‘price‘], now_time) # print(‘当前您的账户信息:\n‘, users) # for buy_users in users: print(‘我的账户信息:\n账户名: %s 余额: %s元‘ % (user_dict[‘name‘], my_new_money)) break else: print(‘钱不够了请去充值,提交失败\n‘) break elif my_confirm == ‘N‘ or my_confirm == ‘n‘: print(‘您已取消\n‘) break else: no_this_id = 0 if my_confirm.isdigit(): # print(type(len(cart_list))) for my_cart in cart_list: if my_cart[‘id‘] == int(my_confirm): cart_list.remove(my_cart) print(‘移除成功!‘) no_this_id = 1 break elif no_this_id == 0: print(‘没有这个编号,请重新输入\n‘) else: print(‘输入有误,请重新输入\n‘) # 商品变化模块从列表保存到文件 def change_goods(): with open(‘goods_new.txt‘, ‘w‘, encoding=‘utf-8‘) as goods_new_w: for goods_dict in mygoodslist: goods_new_w.write(‘%s %s %s\n‘ % (goods_dict[‘name‘], goods_dict[‘price‘], goods_dict[‘nums‘])) os.remove(‘goods.txt‘) os.rename(‘goods_new.txt‘, ‘goods.txt‘) # ATM登录中心模块 @user_login def atm_center(): print(‘1.查看账户信息\n2.存钱\n3.提现\n4.转账\n5.消费单\n6.还款\n7.后台管理\n8.退出ATM‘) with open (‘user_session.txt‘,‘r‘,encoding=‘utf-8‘) as session_user_r: session_user = session_user_r.read() users = users_txt_to_list() for user in users: if session_user == user[‘name‘]: user_dict = user user_chose = input(‘请输入编号: ‘) if user_chose == ‘1‘: user_center(user_dict) elif user_chose == ‘2‘: recharge(user_dict) elif user_chose == ‘3‘: withdraw_cash(user_dict) elif user_chose == ‘4‘: transfer_money(user_dict) elif user_chose == ‘5‘: look_month_report(user_dict) elif user_chose == ‘6‘: repayment_money(user_dict) elif user_chose == ‘7‘: admin_center() elif user_chose == ‘8‘: exit_session(user_dict) else: print(‘输入信息有误,请重新输入‘) atm_center() # 账户金额变化模块从列表保存到文件 def change_money(user_dicts, new_money): users_list = users_txt_to_list() with open(‘users_new.txt‘, ‘w‘, encoding=‘utf-8‘) as users_new_w: for user_dict in users_list: if user_dict[‘name‘] == user_dicts[‘name‘]: user_dict[‘money‘] = new_money users_new_w.write(‘%s %s %s\n‘ % (user_dict[‘name‘], user_dict[‘password‘], user_dict[‘money‘])) else: users_new_w.write(‘%s %s %s\n‘ % (user_dict[‘name‘], user_dict[‘password‘], user_dict[‘money‘])) os.remove(‘users.txt‘) os.rename(‘users_new.txt‘, ‘users.txt‘) # 查看账户信息模块 def user_center(user_dicts): login_user = user_dicts print(‘=======用户中心=======\n 用户名: %s 余额: %s‘ % (login_user[‘name‘], login_user[‘money‘])) now_time = str(time.asctime(time.localtime(time.time()))) atm_operation_log(user_dicts, ‘see_user_center‘, now_time) user_chose = input(‘返回上一级请输入(R or r)‘) if user_chose == ‘R‘ or user_chose == ‘r‘: atm_center() # 充值模块 def recharge(user_dicts): flag1 = True # 循环标记 # while flag1: # flag2 = True # 循环标记 add_money = input(‘请输入充值金额(数字): ‘) if add_money.isdigit(): old_money = int(user_dicts[‘money‘]) new_money = old_money + int(add_money) user_dicts[‘money‘] = new_money print(‘您现在的余额是 %s元‘ % user_dicts[‘money‘]) change_money(user_dicts, new_money) print(‘充值成功!‘) now_time = str(time.asctime(time.localtime(time.time()))) atm_operation_log(user_dicts, ‘recharge‘, now_time) atm_center() else: print(‘输入的不是数字请重新输入\n‘) # 提现模块 def withdraw_cash(user_dicts): print(‘提现手续费5%‘) withdraw_money = input(‘请输入提现金额(按R或者r返回上一级): ‘) if withdraw_money.isdigit(): new_money = int(user_dicts[‘money‘]) - int(withdraw_money) - int(int(user_dicts[‘money‘]) * 0.05) change_money(user_dicts, new_money) print(‘提现成功!‘) now_time = str(time.asctime(time.localtime(time.time()))) atm_operation_log(user_dicts, ‘withdraw_cash‘, now_time) atm_center() else: print(‘输入的不是数字请重新输入\n‘) # 转账模块 def transfer_money(user_dicts): transfer_money_account = input(‘请输入转入账户: ‘) transfer_get_money = input(‘请输入转入金额: ‘) if transfer_get_money.isdigit(): new_money = int(user_dicts[‘money‘]) - int(transfer_get_money) users_list = users_txt_to_list() with open(‘users_new.txt‘, ‘w‘, encoding=‘utf-8‘) as users_new_w: for user_dict in users_list: if user_dict[‘name‘] == user_dicts[‘name‘]: user_dict[‘money‘] = new_money users_new_w.write(‘%s %s %s\n‘ % (user_dict[‘name‘], user_dict[‘password‘], user_dict[‘money‘])) elif user_dict[‘name‘] == transfer_money_account: user_dict[‘money‘] = int(user_dict[‘money‘]) + int(transfer_get_money) users_new_w.write(‘%s %s %s\n‘ % (user_dict[‘name‘], user_dict[‘password‘], user_dict[‘money‘])) else: users_new_w.write(‘%s %s %s\n‘ % (user_dict[‘name‘], user_dict[‘password‘], user_dict[‘money‘])) os.remove(‘users.txt‘) os.rename(‘users_new.txt‘, ‘users.txt‘) print(‘转账成功!‘) now_time = str(time.asctime(time.localtime(time.time()))) atm_operation_log(user_dicts, ‘repayment_money‘, now_time) atm_center() else: print(‘输入的不是数字请重新输入\n‘) # 每月消费模块 def month_report(goods,num,money,buy_time): with open(‘month_report.txt‘,‘a‘,encoding=‘utf-8‘) as month_report_w: month_report_w.write(‘商品名称: %s 商品数量: %s 价格: %s 购买时间: %s \n‘ %(goods,num,money,buy_time)) # 查看每月消费信息 def look_month_report(user_dicts): look_month_report_flag = False with open(‘month_report.txt‘, ‘r‘, encoding=‘utf-8‘) as look_month_report_r: for line in look_month_report_r: look_user_list = line.split() if look_user_list[0] == user_dicts[‘name‘]: look_month_report_flag = True print(line.strip(‘\n‘)) if look_month_report_flag == False: print(‘没有找到内容‘) atm_center() # 还款模块 def repayment_money(user_dicts): return_money = input(‘请输入还款金额: ‘) if return_money.isdigit(): if return_money.isdigit(): new_money = int(user_dicts[‘money‘]) + int(return_money) change_money(user_dicts, new_money) print(‘还款成功!‘) now_time = str(time.asctime(time.localtime(time.time()))) atm_operation_log(user_dicts,‘repayment_money‘, now_time) atm_center() else: print(‘输入的不是数字请重新输入\n‘) else: print(‘输入的不是数字请重新输入\n‘) # ATM操作日志模块 def atm_operation_log(user_dicts,operation_info, time): log_str = user_dicts[‘name‘] + ‘ ‘ + operation_info + ‘ ‘ + time + ‘\n‘ with open(‘atm_log.txt‘, ‘a‘, encoding=‘utf-8‘) as atm_operation_log_a: atm_operation_log_a.write(log_str) # 退出ATM会话模块 def exit_session(user_dicts): with open(‘user_session.txt‘,‘w‘,encoding=‘utf-8‘) as exit_session_w: pass print(‘账户: %s 已退出‘ %(user_dicts[‘name‘])) main() # ATM后台管理模块 @admin_user_login def admin_center(): print(‘1.查看账户信息\n2.添加账户\n3.修改账户额度\n4.冻结账户\n5.返回‘) with open (‘user_session.txt‘,‘r‘,encoding=‘utf-8‘) as session_user_r: session_user = session_user_r.read() users = users_txt_to_list() for user in users: if session_user == user[‘name‘]: user_dict = user user_chose = input(‘请输入编号: ‘) if user_chose == ‘1‘: user_center(user_dict) elif user_chose == ‘2‘: admin_add_user() elif user_chose == ‘3‘: admin_user_quota() elif user_chose == ‘4‘: admin_user_lock() elif user_chose == ‘5‘: exit_session(user_dict) else: print(‘输入信息有误‘) # 用户列表转换成文件 def change_user_to_file(user_list): with open(‘users_new.txt‘, ‘w‘, encoding=‘utf8‘) as add_user_w: for user_dict in user_list: add_user_w.write(‘%s %s %s %s %s\n‘ % (user_dict[‘name‘], user_dict[‘password‘], user_dict[‘money‘], user_dict[‘grant‘], user_dict[‘status‘])) os.remove(‘users.txt‘) os.rename(‘users_new.txt‘, ‘users.txt‘) # 添加账户模块 def admin_add_user(): add_new_user = input(‘新用户名: ‘) user_list = users_txt_to_list() while True: add_new_password = input(‘密码:‘) add_new_password2 = input(‘请再输入一遍密码: ‘) if add_new_password == add_new_password2: user_list.append({‘name‘:add_new_user,‘password‘:add_new_password,‘money‘: ‘15000‘, ‘grant‘: ‘ordinary‘,‘status‘:‘open‘}) change_user_to_file(user_list) print(‘账户创建成功‘) break else: print(‘两次密码输入的不一致,请重新输入‘) # 修改账户额度模块 def admin_user_quota(): user_name = input(‘请输入账户名: ‘) quota_money = input(‘请输入账户额度: ‘) user_list = users_txt_to_list() for user in user_list: if user[‘name‘] == user_name: user[‘money‘] = quota_money change_user_to_file(user_list) print(‘额度修改成功‘) # 冻结账户模块 def admin_user_lock(): lock_name = input(‘请输入冻结账户: ‘) user_list = users_txt_to_list() for user in user_list: if user[‘name‘] == lock_name: user[‘status‘] = ‘lock‘ change_user_to_file(user_list) print(‘账户冻结成功‘) # 主程序模块 def main(): flag = True # 最外层循环标记 while flag: # my_cart_id = -1 # flag_list = True mainlist = ‘========我的网上商城=======\n1.ATM机\n2.购物商城‘ print(mainlist) choose = input(‘请选择编号(1 or 2),退出请按(E or e): ‘) if choose == ‘E‘ or choose == ‘e‘: break else: if choose.isdigit() and choose == ‘2‘: goods_center() elif choose.isdigit() and choose == ‘1‘: atm_center() else: print(‘输入的选项错误,请重新输入\n‘) if __name__ == ‘__main__‘: mygoodslist = goods_txt_to_list() main()
时间: 2024-09-30 20:37:49