模拟实现一个ATM + 购物商城程序1.额度 15000或自定义2.实现购物商城,买东西加入 购物车,调用信用卡接口结账3.可以提现,手续费5%4.每月22号出账单,每月10号为还款日,过期未还,按欠款总额 万分之5 每日计息5.支持多账户登录6.支持账户间转账7.记录每月日常消费流水8.提供还款接口9.ATM记录操作日志10.提供管理接口,包括添加账户、用户额度,冻结账户等。。。
 sys_msg = '''
 欢迎使用ATM简单系统,请选择:
 1.注册 | 2.登录 | 3.查看余额 | 4.充值 | 5.转账 | 6.还款 |7.取款 | 8.查看流水 | 9.购物 |
 10.查看购买商品 | 11.支付 | 12.注销 | 0.退出 | 001.管理员
 '''
 users_dic = {}
 user = {}
 user_transfername = {}
 user_black = []

 import os
 import time

 def get_users():
     '''获取文件内的用户名信息'''
     if users_dic:
         return users_dic
     with open(r'users.txt', 'r', encoding='utf-8')as f:
         data = f.read()
         if not data:
             return users_dic
         data_list = data.split(',')
         for user_info in data_list:
             res = user_info.split('|')
             user = res[0]
             pwd = res[1]
             money = res[2]
             money = int(money)
             users_dic[user] = {'pwd': pwd, 'money': money}
         return users_dic

 def add():
     '''管理员用户添加功能'''
     users_dic = get_users()
     temp = '请'
     while True:
         name = input(temp + '输入添加用户名>>>:').strip()
         pwd = input(temp + '输入添加用户初始密码>>>:').strip()
         if not name:
             print('添加的用户名不能为空')
             temp = '请重新'
             continue
         if not pwd:
             print('添加的用户密码不能为空')
             temp = '请重新'
             continue
         break
     if not os.path.exists('users.txt'):
         with open(r'users.txt', 'w'): pass
     with open(r'users.txt', 'a', encoding='utf-8')as f:
         if not users_dic:
             user_info = '%s|%s|%s' % (name, pwd, 0)
         else:
             user_info = ',%s|%s|%s' % (name, pwd, 0)
         f.write(user_info)
     print('用户添加成功')

 def check():
     '''管理员查看余额功能'''
     users_dic = get_users()
     temp = '请'
     count = 0
     while count < 3:
         name = input(temp + '输入查看用户名>>>:').strip()
         if not name:
             print('查看的用户名不能为空')
             temp = '请重新'
             count += 1
             continue
         for d, v in users_dic.items():
             if name == d:
                 print('账户:%s | 余额:%s ' % (name, v['money']))
                 return
         else:
             print('你要查看的用户名不存在')
             count += 1
         break

 def get_black():
     '''获取冻结用户名'''
     global user_black
     if user_black:
         return user_black
     with open(r'black.txt', 'r', encoding='utf-8')as f:
         for b in f:
             if not b:
                 print('没有冻结用户名')
                 return
             res = b.strip('\n')
             user_black.append(res)
         return user_black

 def freeze():
     '''管理员冻结账户功能'''
     users_dic = get_users()
     print(users_dic)
     temp = '请'
     user_black = get_users()
     count = 0
     while count < 3:
         name = input(temp + '输入要冻结的用户名>>>:').strip()
         if name in user_black:
             print('此用户名已经冻结')
             temp = '请重新'
             count += 1
             continue
         if not name:
             print('用户名不能为空')
             temp = '请重新'
             count += 1
             continue
         if name in users_dic:
             if not os.path.exists('black.txt'):
                 with open(r'black.txt', 'w'): pass
             with open(r'black.txt', 'a', encoding='utf-8')as f:
                 f.write('%s\n' % name)
                 print('已把用户名:%s 冻结' % name)
                 return
         else:
             print('你输入用户名错误')
             count += 1

 ad = {': freeze}

 def administrator():
     temp = '请'
     count = 0
     while count < 3:
         name = input(temp + '输入管理员账号>>>:').strip()
         pwd = input(temp + '输入管理员密码>>>:').strip()
         ':
             print('登入成功,已进入管理员控制')
         else:
             print('用户名或密码错误')
             temp = '请重新'
             count += 1
             continue
         while True:
             print('''
             0.退出
             1.添加账户
             2.用户额度
             3.冻结账户
             ''')
             serial_number = input('登入权限选择>>>:').strip()
             ':
                 print('退出管理员系统')
                 return
             if not serial_number in ad:
                 print('功能选择错误')
                 count += 1
                 continue
             ad[serial_number]()

 def register():
     '''注册功能'''
     users_dic = get_users()
     temp = '请'
     count = 0
     while count < 3:
         username = input(temp + '输入用户名>>>:').strip()
         password = input(temp + '输入用户密码>>>:').strip()
         if username in users_dic:
             print('此用户名已注册过')
             temp = '请重新'
             count += 1
             continue
         elif not username:
             print('用户名不能为空')
             temp = '请重新'
             count += 1
             continue
         if len(password) < 3:
             print('用户密码过短或不能为空')
             temp = '请重新'
             count += 1
             continue
         break
     if not os.path.exists('users.txt'):
         with open(r'users.txt', 'w'): pass
     with open(r'users.txt', 'a', encoding='utf-8')as f:
         if not users_dic:
             user_info = '%s|%s|%s' % (username, password, 0)
         else:
             user_info = ',%s|%s|%s' % (username, password, 0)
         f.write(user_info)
     print('注册成功')

 def login():
     '''登入功能'''
     global user
     user_black = get_black()
     users_dic = get_users()
     temp = '请'
     count = 0
     while count < 3:
         username = input(temp + '输入用户名>>>:').strip()
         password = input(temp + '输入用户密码>>>:').strip()
         if username in user_black:
             print('对不起,你的用户名已冻结')
             temp = '请重新'
             count += 1
             continue
         for k, v in users_dic.items():
             if username == k and password == v['pwd']:
                 print('登入成功')
                 user = {'user': username, 'pwd': password, 'money': v['money']}
                 return user
         else:
             print('用户名或密码错误!')
             temp = '请重新'
             count += 1
             continue

 def auth(logfile='user.log'):
     def log_info(func):
         '''日志功能,写入文件,包括:充值、转账、还款、取款'''

         def wrapper(*args, **kwargs):
             if not os.path.exists(logfile):
                 with open(logfile, 'w'): pass
             res = func(*args, **kwargs)
             if not res:
                 return
             with open(r'%s' % logfile, 'a', encoding='utf-8')as f:
                 f.write('%s:%s\n' % (time.strftime('%Y-%m-%d %X'), res))

         return wrapper

     return log_info

 @auth(logfile='user.log')
 def top_up():
     '''充值功能'''
     if not user:
         print('未登入状态')
         return
     temp = '请'
     count = 0
     while count < 3:
         money = input(temp + '输入充值金额>>>:').strip()
         if not money:
             print('金额不能为空')
             temp = '请重新'
             count += 1
             continue
         if not money.isdigit():
             print('请正确输入数字')
             temp = '请重新'
             count += 1
             continue
         money = int(money)

         update_info('money', money)
         print('充值成功')
         return '账户:|%s| 充值金额:%s' % (user['user'], money)

 def update_info(k, v):
     '''登入用户信息更新'''
     if k == 'money':
         user[k] += v
     else:
         user[k] = v
     users_dic = get_users()
     users_dic[user['user']][k] = user[k]
     user_info = ''
     for k, value in users_dic.items():
         use = k
         pwd = value['pwd']
         money = str(value['money'])
         if not user_info:
             user_info += '|'.join((use, pwd, money))
         else:
             user_info += ',' + '|'.join((use, pwd, money))
     with open(r'users.txt', 'w', encoding='utf-8')as f:
         f.write(user_info)

 def remaining_sum():
     '''查看余额'''
     if not user:
         print('未登入状态')
         return
     print('用户名:%s | 密码:%s | 余额:%s |' % (user['user'], user['pwd'], user['money']))

 def update_transfer(k, v):
     '''转账目标用户信息更新'''
     if k == 'money':
         user_transfername[k] += v
     else:
         user_transfername[k] = v
     users_dic = get_users()
     users_dic[user_transfername['user']]['money'] = user_transfername['money']
     user_info = ''
     for k, value in users_dic.items():
         use = k
         pwd = value['pwd']
         money = str(value['money'])
         if not user_info:
             user_info += '|'.join((use, pwd, money))
         else:
             user_info += ',' + '|'.join((use, pwd, money))
     with open(r'users.txt', 'w', encoding='utf-8')as f:
         f.write(user_info)

 @auth(logfile='user.log')
 def transfer_accounts():
     '''转账功能'''
     global user_transfername
     if not user:
         print('未登入状态')
         return
     temp = '请'
     count = 0
     while count < 3:
         money = 1000 + user['money']
         print('你可转账的金额为%s' % money)
         if money <= 0:
             print('你的账户不能再透支')
             return
         user_transfer = input(temp + '输入转账用户名>>>:').strip()
         money_transfer = input(temp + '输入转账金额>>>:').strip()
         if not money_transfer:
             print('金额不能为空')
             temp = '请重新'
             count += 1
             continue
         if not money_transfer.isdigit():
             print('金额必须为数字')
             temp = '请重新'
             count += 1
             continue
         money_transfer = int(money_transfer)
         if money_transfer > money:
             print('转账金额超过透支范围')
             temp = '请重新'
             count += 1
             continue
         if not user_transfer:
             print('用户名不能为空')
             temp = '请重新'
             count += 1
             continue
         if user_transfer not in users_dic:
             print('转账用户名不存在')
             temp = '请重新'
             count += 1
             continue
         for k, v in users_dic.items():
             pass
             user_transfername = {'user': user_transfer, 'money': v['money']}

         money_user = 0 - money_transfer
         update_info('money', money_user)
         update_transfer('money', money_transfer)
         print('转账成功,转账账户:%s | 金额:%s' % (user_transfer, money_transfer))
         return '账户:|%s|>>> %s转账金额:%s' % (user['user'], user_transfer, money_transfer)

 @auth(logfile='user.log')
 def reapayment():
     '''还款功能'''
     if not user:
         print('未登入状态')
         return
     temp = '请'
     count = 0
     while count < 3:
         if user['money'] > 0:
             print('你还没有透支,无需还款')
             return
         money = -user['money']
         print('你需要还款的金额是:%s' % money)
         reapay = input(temp + '输入还款金额>>>:').strip()
         if not reapay:
             print('输入金额不能为空')
             temp = '请重新'
             count += 1
             continue
         if not reapay.isdigit():
             print('金额必须输入数字')
             temp = '请重新'
             count += 1
             continue

         reapay = int(reapay)
         update_info('money', reapay)
         print('还款成功')
         return '账户:|%s| 还款金额:%s' % (user['user'], reapay)

 @auth(logfile='user.log')
 def withdrawl():
     '''取款功能'''
     if not user:
         print('未登入状态')
         return
     temp = '请'
     count = 0
     while count < 3:
         money = user['money']
         money1 = 1000 + money
         print('你的透支额度为:1000,你可以取款%s' % money1)
         money2 = input(temp + '输入取款金额>>>:').strip()
         if not money2:
             print('输入金额不能为空')
             temp = '请重新'
             count += 1
             continue
         if not money2.isdigit():
             print('金额必须输入数字')
             temp = '请重新'
             count += 1
             continue
         money2 = int(money2)
         if money2 > money1:
             print('你的取款数额超过限制了')
             temp = '请重新'
             count += 1
             continue

         draw_money = 0 - money2
         update_info('money', draw_money)
         print('取款成功')
         return '账户:|%s| 取款金额:%s' % (user['user'], money2)

 def check_statement():
     '''查看流水'''
     if not user:
         print('未登入状态')
         return
     with open(r'user.log', 'r', encoding='utf-8')as f:
         for data in f:
             if not data:
                 print('没有流水数据')
                 return
             if len(data) < 30:
                 continue
             res = data.split('|')
             if user['user'] == res[1]:
                 print(data)
         return

 goods_dic = {': 'iPad'}
 price_dic = {'iPhone': 100, 'Mac': 200, 'iPad': 50}
 # 购物车
 shop_car = {}
 # {'iPhone': 3, 'iPad': 1}
 goods_msg = '''
 请添加商品到购物车:
 1.iPhone | 2.Mac | 3.iPad | 0.退出购买'''

 def shopping():
     '''购物商城选购'''
     global shop_car
     if not user:
         print('未登入状态')
         return
     temp = '请'
     count = 0
     while count < 3:
         print(goods_msg)
         good_num = input(temp + '输入商品编码>>>:').strip()
         ':
             print('退出购买')
             break
         if good_num not in goods_dic:
             print('你选择的商品编码不存在')
             temp = '请重新'
             count += 1
             continue
         while True:
             print(goods_msg)
             good_count = input(temp + '输入商品数量>>>:').strip()
             if not good_count.isdigit():
                 print('输入错误!')
                 temp = '请重新'
                 continue
             if goods_dic[good_num] not in shop_car:
                 good_count = int(good_count)
                 shop_car[goods_dic[good_num]] = good_count
             else:
                 good_count = int(good_count)
                 shop_car[goods_dic[good_num]] += good_count
             print(shop_car)
             break
     return shop_car

 def check_goods():
     '''购物车功能'''
     if not shop_car:
         print('你还没添加商品,请前往购物')
         return
     print('购物车:%s' % shop_car)

 @auth(logfile='user.log')
 def pay_money():
     '''商品支付功能'''
     if not user:
         print('未登入状态')
         return
     if not shop_car:
         print('没有可支付商品')
         return
     total = 0
     for good in shop_car:
         total += price_dic[good] * shop_car[good]
     if user['money'] >= total:
         print('余额充足,购买成功!')
         reduce = 0 - total
         update_info('money', reduce)
         shop_car.clear()
     else:
         print('余额不足,请充值!')
         top_up()
     return '账户:|%s| 购物金额:%s' % (user['user'], total)

 def logout():
     '''注销功能'''
     if not user:
         print('未登入状态')
         return
     else:
         user.clear()
         print('注销成功')

 # 功能字典
 method_dic = {
     ': register,
     ': login,
     ': remaining_sum,
     ': top_up,
     ': transfer_accounts,
     ': reapayment,
     ': withdrawl,
     ': check_statement,
     ': shopping,
     ': check_goods,
     ': pay_money,
     ': logout,
     ': administrator,
 }

 def system():
     while True:
         print(sys_msg)
         choise = input('>>>>:').strip()
         ':
             print('退出系统')
             return
         if choise not in method_dic:
             print('功能选择错误,请重新选择功能')
             continue
         method_dic[choise]()

 system()

最新文章

  1. 如何利用mount命令将另外一个linux服务器上的目录挂在到本机?
  2. eclipse报错“Undefined variable from import: ...”解决方案
  3. Lock VS Monitor
  4. C#复习⑤
  5. 二进制日志BINARY LOG清理
  6. Union all的用法实例sql
  7. 推荐可以代替Visio的HTML开发的作图工具:ProcessOn
  8. vmware虚拟机挂起后无法再恢复(转)
  9. session超时和cookie过期
  10. Linux 命令 - jobs: 显示后台作业的状态信息
  11. mybatis关联查询
  12. Java 数组倒序
  13. android 38 Abdroid客户端和服务端交互
  14. 用soaplib的django webserver
  15. 七天学会NodeJS
  16. 对象的使用处理,作用域的和ajax中this的理解
  17. mysql合并表
  18. Python学习笔记【第十二篇】:Python异常处理
  19. 一招制敌 - 玩转 AngularJS 指令的 Scope (作用域),讲得特别好
  20. Scrum冲刺阶段2

热门文章

  1. 关于wordpress更新提示无法创建目录问题
  2. shit iview docs &amp; i-radio bug
  3. qtp 自动货测试桌面程序-笔记(使用函数)
  4. WinForm中在非UI线程更改控件值的办法
  5. Java调用.NET 的Web Service服务故障排除
  6. 【python练习题】程序7
  7. 本科理工男如何学习Linux
  8. python----函数初识
  9. CodeCraft-19 and Codeforces Round #537 Div. 2
  10. 洛谷P1038神经网络题解