需求:

1、信用卡消费

2、信用卡提现

3、信用卡还款

4、查看信用卡可用余额

5、打印账单

 

实现源码:

# -*- coding: utf-8 -*-

import calendar, time, sys
import Login
reload(sys)
sys.setdefaultencoding('utf8')

def firstMenu():
    print "请选择:"
    print "1、信用卡消费"
    print "2、信用卡提现"
    print "3、信用卡还款"
    print "4、查看当余额"
    print "5、打印账单"

def listPrice():
    '''计算信用卡总额'''
    his_price = []
    f = file('buy_list.txt')
    for item in f.readlines():
        price = float(item.split()[-1])
        his_price.append(price)
        f.close()
    listPrice = sum(his_price)
    return  listPrice

def shopList():
    '''打印购物list'''
    shopList_dic = {}
    print_dic = {}
    #读取文件的内容写入字典
    f = file('shopList.txt')
    for item in f.readlines():
        num = item.split()[0]
        price = float(item.split()[2])
        shopList_dic[num] = price
        print_dic[num] = item
    #将字典排序,排序后的值为list
    list_sorted = sorted(print_dic.iteritems(), reverse = False)
    #打印字典的值
    for k,v in list_sorted:
        print v,
    f.close()
    #返回值为列表
    return list_sorted

def consumption( ):
    '''信用卡消费'''
    #将接收到的list转换为dict
    shopList_dic = dict(shopList())
    buy_list = []
    price_list = []
    while True:
        buy_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
        input = raw_input("请输入要购买的商品序号:").strip()
        if shopList_dic.has_key(input):
            buy_list.append(shopList_dic[input].split()[1])
            price_list.append(float(shopList_dic[input].split()[-1]))
            while True:
                input = raw_input( "加入购物车成功,是否继续购物?yes/no\n").strip()
                if input == 'yes':
                    break
                elif input == 'no':
                    print "您购买的商品列表为:"
                    for i in buy_list:
                        print i,price_list[buy_list.index(i)]
                    print "您一共选择了%s件商品,合计%s元!" % (len(buy_list),sum(price_list))
                    #读取之前购物列表清单总价
                    allPrice = listPrice()+ sum(price_list)
                    if quota < allPrice:
                        print "支付失败!您的信用卡额度为%s,您已经使用%s元!" % (quota,listPrice())
                    else:
                        print "购买成功,感谢本次购物!"
                        for i in buy_list:
                            list_str = buy_time + '\t' +  i + '\t' + '' + ' ' + str(price_list[buy_list.index(i)]) + '\n'
                            f = open("buy_list.txt", 'a')
                            f.write(list_str)
                            f.close()
                    turnBack()
                    sys.exit(1)
                else:
                    print "输入有误!"

        else:
            print "您购买的商品还没有哦,我们会尽快上架!"

def repayments():
    '''信用卡还款'''
    back_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
    while True:
        input = raw_input("请输入还款金额:").strip()
        if input.isdigit():
            input = 0 - float(input)
            back_str = back_time + '\t' +  '信用卡还款' + '\t' + '' + ' ' + str(input) + '\n'
            f = open("buy_list.txt", 'a')
            f.write(back_str)
            f.flush()
            f.close()
            print("还款成功,可用余额为:")
            listPrice()
            break
        else:
            print "请输入有效数字!"
    #返回上级
    turnBack()

def Cash():
    '''信用卡提现'''
    cash_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
    while True:
        input = raw_input("请输入提现金额:").strip()
        if input.isdigit():
            only = quota - listPrice()*(1+0.05)
            #print only
            if float(input)%100 == 0 and float(input) < only:
                cash = float(input)*(1+0.05)
                cash_str = cash_time + '\t' +  '提现%s元' % input + '\t' + '' + ' ' + str(cash).split('.')[0] + '\n'
                f = open("buy_list.txt", 'a')
                f.write(cash_str)
                f.flush()
                f.close()
                print "提现成功,请您注意查收!"
                break
            elif float(input)%100 != 0:
                print "亲,提现只能是整百的哦!"
            elif float(input) > only:
                print "亲,您的提现超出限额了哦!"
        else:
            print "亲,请输入有效数字!"
    #返回上级
    turnBack()

def TIME():
    '''获取当前月份月初日期和月末日期'''
    day_now = time.localtime()
    #day_begin = '%d-%02d-01' % (day_now.tm_year, day_now.tm_mon)  # 月初肯定是1号
    wday, monthRange = calendar.monthrange(day_now.tm_year, day_now.tm_mon)  # 得到本月的天数 第一返回为月第一日为星期几(0-6), 第二返回为此月天数
    day_end = '%d-%02d-%02d' % (day_now.tm_year, day_now.tm_mon, monthRange)
    #print '月初日期为:',day_begin, '月末日期为:',day_end
    return day_end

def printLitst():
    '''月底打印账单'''
    print "您的信用卡额度为%s,您已经使用%s元!" % (quota,listPrice())
    last_day=TIME().split('-')[-1]
    if now_day == last_day:
        f = file('buy_list.txt')
        buy_list = f.read()
        print "本月账单详情如下:"
        print buy_list
        #将本月账单另存为文件
        list_day = TIME()
        mon_list = '%s_list.txt' % list_day
        y = open(mon_list,'w')
        y.write(buy_list)
        y.close()
        #清空现有账单
        f = open('buy_list.txt' , 'w')
        f.truncate()
        f.close()
        #os.system('> buy_list.txt')
        #cp_cmd = 'cp -r buy_list.txt buy_list`date "+%Y%m%d"`.txt'
        #SystemHelper.run_command(cp_cmd)

    else:
        pass
        #print now_day,last_day

def overdue():
    '''逾期未还款'''
    if float(now_day) > 10 and listPrice() > 0:
        overdue_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time()))
        overdue = listPrice()*0.05
        overdue_str = overdue_time + '\t' +  '逾期扣息' + '\t' + '' + ' ' + str(overdue) + '\n'
        f = open("buy_list.txt", 'a')
        f.write(overdue_str)
        f.flush()
        f.close()
        print '逾期扣息:%s元' % overdue

#主菜单
def mainList():
    print "welcome!!!"
    firstMenu()
    while True:
        input = raw_input().strip()
        if input == '1':
            print "欢迎使用信用卡消费,以下是购物清单:"
            consumption()
            break
        elif input == '2':
            print "信用卡提现,手续费5%哦!"
            Cash()
            break
        elif input == '3':
            print "亲,终于要还款了!"
            repayments()
            break
        elif input == '4':
            print "您的信用卡额度为%s,您已经使用%s元!" % (quota,listPrice())
            #返回上级
            turnBack()
        elif input == '5':
            f = file('buy_list.txt')
            buy_list = f.read()
            print "本月账单详情如下:"
            print "合计:",listPrice()
            print buy_list

            #返回上级
            turnBack()
        else:
            print "输入有误,请重新输入!!"

#返回上级菜单
def turnBack():
    print "1、返回上级"
    print "2、退出"
    while True:
        input = raw_input("请选择:")
        if input == '1':
            mainList()
        elif input == '2':
            print "谢谢使用!"
            sys.exit(1)
        else:
            print "输入有误,请重新输入!"


if __name__ == '__main__':

    #信用卡额度为15000
    global quota
    quota = 15000
    now_day = time.strftime('%d',time.localtime(time.time()))
    #now_day = '30'

    # 登录验证,验证通过返回值为true
    if Login():
        print "您输入的用户名或密码错误已超3次,信用卡已锁定!!"
    else:
        #月底打印账单
        printLitst()
        #逾期扣款
        overdue()
        #主菜单
        mainList()

 代码执行效果如下:

 

posted on 2019-06-19 11:49  雨之夜&秋  阅读(240)  评论(0编辑  收藏  举报