代码改变世界

day5 ATM+CreditCard+Shopping

2016-02-29 09:26  dribs  阅读(258)  评论(0)    收藏  举报

直接调用了一次信用卡模块然后根据信用卡的额度做金钱的判断

看了alex的写法,感觉自己的瞬间low了不少,、

  

 

#!/usr/bin/env python
# -*- encoding:utf-8 -*-

import json
import sys
import os
base_dir = os.path.dirname(os.path.abspath(__file__))
sys.path.append(base_dir)
from clog import card_log
#定义的绝对路径,不然在shopping执行时无法找到一下两个文件,涉及到大王讲的不同目录下的模块调用
basedir1 = os.path.dirname(os.path.abspath(__file__)) + "\\user.txt"
basedir2 = os.path.dirname(os.path.abspath(__file__)) + "\\lock.txt"
#print(basedir1)
def card_API(cardnum,shopmoney=0):
    shopmoney = float(shopmoney)
    f3 = open(basedir1,'r+')
    data = json.loads(f3.read())
    cardmoney =float(data[cardnum][1])
    if shopmoney > cardmoney:
        print("账户余额不足")
        sys.exit()
    else:
        cardwritemoney = cardmoney - shopmoney
        cardwritemoney = float(cardwritemoney)
        data[cardnum][1] = cardwritemoney
        f3.seek(0)
        f3.truncate(0)
        f3.write(json.dumps(data))
        f3.flush()
        f3.close()
        card_log(cardnum1=cardnum,caozuo="购物",qian=shopmoney)


def cardlogin(shop):
    f = open(basedir1,'r+')
    f2 = open(basedir2,"r+")
    lockname = f2.readlines()
    data = json.loads(f.read())
    count = 0
    klist = []
    locklist = []
    for i in lockname:
        kk = i.strip('\n')
        locklist.append(kk)
    while count < 3:
        InputNum = input("输入卡号(00001):")
        InputPasswd = input("输入卡密码(123):")
        if InputNum in locklist:
            print("卡号已被锁定,请勾搭柜台小妹妹")
            sys.exit(0)
        datapasswd = data[InputNum][0]
        for k,v in data.items():
            klist.append(k)
        if  InputNum in klist and InputPasswd == datapasswd:
            card_API(InputNum,shop)
            break
        else:
            print("passwd error")
            count +=1

    else:
        print("账户被锁定,请及时勾搭柜台MM")
        f2.write(InputNum + '\n')
    f.close()
    f2.close()
cardAPI
#!/usr/bin/env python
# -*- encoding:utf-8 -*-
import json

def card_chaxun(cardnum):
    from  clog import card_log
    f1 = open('user.txt','r')
    data = json.loads(f1.read())
    datali = []
    c = data[cardnum][1]
    print("账户总额为:",c)
    f1.close()
    card_log(cardnum1=cardnum,caozuo="查询",qian=None)
chaxun
#!/usr/bin/env python

import time
import os
basedir1 = os.path.dirname(os.path.abspath(__file__)) + "\\cardlog.txt"
def card_log(cardnum1,caozuo,qian=None,shijian=time.strftime("%Y-%m-%d %H:%M:%S")):
    f = open(basedir1,'a')
    logdata = ("%s|%s|%s|%s"%(cardnum1,caozuo,qian,shijian))
    f.write(logdata + "\n")
    f.flush()
    f.close()
clog
#!/usr/bin/env python
# -*- encoding:utf-8 -*-

import json
import sys

def card_huankuan(cardnum):
    from clog import card_log
    f3 = open('user.txt','r+')
    data = json.loads(f3.read())
    hk = input("还款金额:")
    hk = float(hk)
    toaljine = float(data[cardnum][1]) + hk
    data[cardnum][1] = float(toaljine)
    f3.seek(0)
    f3.truncate(0)
    f3.write(json.dumps(data))
#    time.sleep(1)
    f3.flush()
    f3.close()
    card_log(cardnum1=cardnum,caozuo="还款",qian=hk)
huankuan
#!/usr/bin/env python

import json
import re
f = open("cardlog.txt","r")

def log_CX(cardnum):
    data = f.readlines()
    for i in data:
        a =  re.search("^"+cardnum+".*",i)
        if a:
            print(a.group())
    f.close()
logChaXun
#!/usr/bin/env python
# -*- encoding:utf-8 -*-


import json
import sys
from chaxun import card_chaxun
from  quxian import card_quxian
from  zhuanzhang import card_zhuanzhang
from  huankuan import card_huankuan
from logChaXun import log_CX
f = open('user.txt','r+')
f2 = open("lock.txt","r+")
lockname = f2.readlines()
data = json.loads(f.read())
count = 0
klist = []
locklist = []
for i in lockname:
    kk = i.strip('\n')
    locklist.append(kk)
while count < 3:
    InputNum = input("输入卡号(00001):")
    InputPasswd = input("输入卡密码(123):")
    if InputNum in locklist:
        print("卡号已被锁定,请勾搭柜台小妹妹")
        sys.exit(0)
    datapasswd = data[InputNum][0]
    for k,v in data.items():
        klist.append(k)
    if  InputNum in klist and InputPasswd == datapasswd:
        flag = True
        while flag:
            print("======欢迎 %s 登录中国银行ATM系统======="%InputNum)
            print("输入 1 ----------->查询")
            print("输入 2 ----------->取现")
            print("输入 3 ----------->转账")
            print("输入 4 ----------->还款")
            print("输入 5 ----------->操作日志查询")
            print("输入 q ----------->退出")
            print("=======================================")
            bb = input("输入您的操作:")
            if bb == "1":
                card_chaxun(InputNum)
            elif bb == "2":
                card_quxian(InputNum)
            elif bb == "3":
                card_zhuanzhang(InputNum)
            elif bb == "4":
                card_huankuan(InputNum)
            elif bb == "5":
                log_CX(InputNum)
            elif bb == "q":
                flag = False
            else:
                print("输入错误")
        break
    else:
        print("passwd error")
        count +=1

else:
    print("账户被锁定,请及时勾搭柜台MM")
    f2.write(InputNum + '\n')

f.close()
f2.close()
mainpro
#!/usr/bin/env python
# -*- encoding:utf-8 -*-

import json
f = open('user.txt','r+')
ff = open("lock.txt","a")
fdata = json.loads(f.read())
userlist = []
for k in fdata.keys():
    userlist.append(k)
def add_user(edu=15000):
    while True:
        addname = input("输入添加的卡号(q)uit:")
        if addname in userlist:
            print("账户已存在,请重新输入!")
        elif addname =="q":
            break
        else:
            addpasswd = input("输入密码:")
            fdata[addname] = [addpasswd,edu]
            f.seek(0)
            f.truncate(0)
            f.write(json.dumps(fdata))

def freeze_user():
    print("友情提示你可以冻结",userlist)
    fname = input("输入冻结的账户卡号:")
    if fname not in userlist:
        print("帐号不存在")
    else:
        ff.write(fname + '\n')
        print("以成功冻结",fname)


if __name__ == "__main__":
    while True:
        print("============================")
        print("欢迎登录ATM管理系统")
        print("1-------->增加用户")
        print("2-------->冻结用户")
        print("q-------->退出")
        print("=============================")
        atm_choice = input("输入您的选择:")
        if atm_choice == "1":
            add_user(edu=15000)
        elif atm_choice == "2":
            freeze_user()
        elif atm_choice == "q":
            break
        else:
            print("输入错误请重新输入")
f.close()
ff.close()
manageratm
#!/usr/bin/env python
# -*- encoding:utf-8 -*-


import json
def card_quxian(cardnum):
    from clog import card_log
    f4 = open('user.txt','r+')
    data = json.loads(f4.read())
    jine1 = input("输入取现金额:")
    jine1 = float(jine1)
    jine = float(jine1)
    edu = float(data[cardnum][1])
    jine = float(jine1) + float((jine1*0.05))
    if jine > edu/2:
        print("没有足够的金额,剩余额为",edu)
    else:
        money = float(edu) - float(jine)
        data[cardnum][1] = float(money)
        f4.seek(0)
        f4.truncate(0)
        f4.write(json.dumps(data))
        print("已取出现金",jine1,"剩余金额",money,"手续费为",jine1*0.05)
        f4.close()
        card_log(cardnum1=cardnum,caozuo="取现",qian=jine1)
quxian
#!/usr/bin/env python
import  json

f = open("user.txt",'w')

info = {
    "00001":['123',150000],
    "00002":['123',150000]
}

f.write(json.dumps(info))

f.close()
userinfo
#!/usr/bin/env python
# -*- encoding:utf-8 -*-


import json

def card_zhuanzhang(cardnum):
    from clog import card_log
    f5 = open('user.txt','r+')
    data = json.loads(f5.read())
    kahao = input("输入转存到的信用卡卡号(00002):")
    jine1 = input("输入转存到的信用卡的金额:")
    jine1 = float(jine1)
    c = float(data[cardnum][1])
    if jine1 > c:
        print("没有足够的余额可转入,请查询余额后在转")
    else:
        cc = float(data[kahao][1]) + jine1
        ccc = c - jine1
        data[cardnum][1] = ccc
        data[kahao][1] = cc
        f5.seek(0)
        f5.truncate(0)
        f5.write(json.dumps(data))
        print("转账成功,已转入",jine1)
        f5.close()
        card_log(cardnum1=cardnum,caozuo="转账",qian=jine1)
zhuanzhang
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#author:lihonging



#定义用户名密码

name = input("Please Input your name:")
passwd = "123"
count = 0

#已读写方式打开lock文件

lock = open('lock.txt','r+')
lockname = lock.readlines()

#循环lock内文件去除回车行,判断输入名字是否在lock文件内

for locknamelines in lockname:
    locknamelines = locknamelines.strip('\n')
    if name == locknamelines:
        print("Account Be Locked!!Please Change User!")
        quit()
lock.close()

#三次登录尝试,如果密码符合登录进入欢迎界面,三次尝试失败把用户追加到lock文件内锁定
while count <3:
    userpasswd = input("Please Input your passwd:")
    if userpasswd == passwd:
        print("Welcome Login!")
        break

    else:
        print("Login failed,Please again ,Try", 3-count, 'times')
        count += 1

else:
    lockinput = open('lock.txt','a')
    lockinputlist = lockinput.write(name + '\n')
    print("Name Be Locked,Please Change User")
    lockinput.close()
onelogin
#!/usr/bin/env python

import time
import os
def shop_log(shopl,amoney,shijian=time.ctime()):
    f = open('shop.log','a')
    logdata = ("%s|%s|%s"%(shopl,amoney,shijian))
    f.write(logdata + "\n")
    f.flush()
    f.close()
shoplog
#!/usr/bin/env  python
#author:lihongxing
#功能:在Python3中对购物车的实现,购买商品,结账金额大于帐户余额则提示充值或者减少商品,最后结算
#日期:2016/1/26

import sys
import onelogin
import os
from shoplog import shop_log

base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.append(base_dir)
from card.cardAPI import cardlogin

goods = {'IPhone7':6000,'Mate8':5000,'Thinkpad':3000,'Mac':'8000'}
hea = {'商品信息':'价格'}
msg = ' Welcome to JD '
msg_we = msg.center(60,'#')
#money = 10000
loop = True

shoplist = []
buyshoplist = []
buyremovlist = []
shopmoneylist = []

print(msg_we)
#print("您账户余额为:%s" %money)
for k1,v1 in hea.items():
    print(k1,v1)

for k,v in goods.items():
    print(k,v)
    shoplist.append(k)
print("购物车内的商品为",buyshoplist)
print(msg_we)

while loop:
    shoplist1 = input("输入要买的商品(按Q退出)按任意键结账:")
    if shoplist1 in shoplist:
        print('您已成功购买商品',shoplist1)
        buyshoplist.append(shoplist1)
        print("购物车内商品为",buyshoplist)
        shopmoney = int(goods[shoplist1])
        shopmoneylist.append(shopmoney)
        allmoney = sum(shopmoneylist)
        print("价格1总额为:",allmoney)
    elif shoplist1.capitalize() == 'Q':
        sys.exit()
    else:
        choise = input("是否结账退出(Y)es 结账退出,(N)o返回继续购买,R移除商品")
        if choise.capitalize() =='Y':
            cardlogin(shop = allmoney)
            print("已成功买入",buyshoplist)
            shop_log(buyshoplist,allmoney)
#            if allmoney > money:
#                c = input("余额不足,充值(Y)es,减少商品(R)emove")
#                if c.capitalize() == 'Y':
#                    m = int(input("输入充值金额:"))
#                    money += m
#                    print(money)
        if choise.capitalize() == "R":
                allmoney = 0
                shopmoney = 0
                shopmoneylist = []
                print('购物车2内的商品为:' , buyshoplist)
                removeshop = input("请输入要减掉的商品名称:")
                buyshoplist.remove(removeshop)
                print(buyshoplist)
                for i in buyshoplist:
                    shopmoney = int(goods[i])
                    shopmoneylist.append(shopmoney)
                    allmoney = sum(shopmoneylist)
                    print("价格2总额为:",allmoney)
                cardlogin(shop = allmoney)
                shop_log(buyshoplist,allmoney)
        else:
            print("您已消费",allmoney)
shopping

 

 

readme

环境windows Py3 注:只可在Windows环境运行,linux不支持

一):ATM系统
测试用户:00001   密码123
          00002   密码123
实现功能:
①:ATM系统的登录、查询、转账、还款、取现、查询操作日志等操作。
mainpro.py为ATM系统主程序,运行此程序即可
user_info.py为生成并初始化用户信息使用生成的用户信息存储到user.txt内
ATM mainpro主程序调用4个模块,分别为chaxun.py/huankuan.py/quxian.py/zhuanzhang.py/logChaXun.模块功能分别为查询、还款、取现、转账、日志查询
其中取现另收手续费

②:ATM mainpro主程序调用4个模块又调用clog模块,clog模块为操作日志模块,当用户执行查询、还款、取现、转账、消费购物等操作时,会记录用户的行为,并保存到cardlog.txt内

③:manageratm为ATM管理后台程序,功能为增加用户,冻结用户。冻结的用户放入到lock.txt内

④:cardAPI为供购物系统调用的接口

二):购物系统
测试用户:haha  密码123
onelogin.py为购物系统验证
shopping.py为主程序,结账时调用card内的cardAPI模块,使用信用卡结账