zoukankan      html  css  js  c++  java
  • 使用socket实现信用卡程序和迷你购物商城

    #-*- coding:utf-8 -*-
    from moudle import *
    import socketserver
    import json
    import os
    import time
    import datetime
    carddict={}
    def main(request):
        conn=request
        conn.sendall(by('欢迎光临大龙FTP!'))
        return conn
    
    def login(conn):
        card=int(st(conn.recv(1024)))
        global carddict
        if not os.path.isfile('DB\cardinfo\%s'%card):
           conn.sendall(by('33[031m该用户不存在33[0m'))
        else:
            conn.sendall(by('33[032m存在!33[0m'))
            password=st(conn.recv(1024))
            print(password)
            print()
            carddict=json.load(open('DB\cardinfo\%s'%card))
            if password==carddict['password']:
                conn.sendall(by('33[032m登陆成功!33[0m'))
                return True
            else:
                conn.sendall(by('33[031m密码错误,登陆失败!33[0m'))
                return False
    
    def register(conn):
            user=st(conn.recv(1024))
        # if  os.path.isfile('DB\cardinfo\%s'%card):
        #    conn.sendall(by('33[031m注册失败,该用户已存在33[0m'))
        # else:
            conn.sendall(by('33[032m注册成功!33[0m'))
            password=st(conn.recv(1024))
            card=creat[-1]+1
            creat[0]=creat[0]+1
            json.dump(creat,open('DB\creat_card.json','w'))
            conn.sendall(by(str(card)))
            print(card)
            carddict={'user':user,'password':password,'card':card,'credit':15000,'balance':15000,
                       'saving':0,'status':0,'debt':[[],[],[]]}
            cardinfo(carddict)
            os.mkdir('log\%s'%card)
    def giro(conn):
        conn.sendall(by('粘包'))
        tocard=int(st(conn.recv(1024)))
        tocarddict=json.load(open('DB\cardinfo\%s' % tocard, 'r'))
        conn.sendall(by(tocarddict['user']))
        num= int(st(conn.recv(1024)))
        result=pay(num)
        if int(result):
            userlog(carddict, '转账 -%s 到: %s' %(num,tocard))
            repay(tocarddict, num,conn)
            userlog(tocarddict, '转账 +%s 源: %s' % (num, carddict['card']))
            conn.sendall(by(result))
    
    def atm(conn):
        num = int(st(conn.recv(1024)))
        print('atm')
        result = pay(num,1.05)
        conn.sendall(by(result))
        print(result)
        if int(result):
            userlog(carddict, '提现 -%s' %(num))
        query(conn)
    
    def repayment(conn):
        num = float(st(conn.recv(1024)))
        repay(carddict,num,conn)
        userlog(carddict, '还款 +%s' % (num))
    
    def yue(debt,num):
        if len(debt[0])==0:  # 没有欠款直接返回还款金额
            print('len ',num,debt)
            return num,debt
        # result=num-debt[0][0]
        else: # 如果有欠款
            result = num - debt[2][0]  # 还款后 计算第一个月欠款
            if not result<0:  # 如果还款金额大于第一个月的欠款
                num -= debt[2][0]
                del debt[0][0]
                del debt[1][0]
                del debt[2][0]
                print('result>>0 ', num,debt)
                return yue(debt,num)
            else:
                debt[2][0]=debt[2][0]-num
                print('result<<0 ', num,debt)
                return 0,debt
    
    def repay(carddict,num,conn):
        debt=carddict['debt']
        now_owe=carddict['credit']-carddict['balance']
        # if len(debt[0]) !=0:
        num,debt=yue(debt,num)
        print('num',num,debt)
        carddict['debt']=debt
        if num >0:
            if now_owe > 0:
                left = num - now_owe
                if left > 0:
                    print(111)
                    carddict['balance'] = carddict['credit']
                    carddict['saving'] += left
                else:
                    print(222)
                    carddict['balance'] += num
            else:
                print(333)
                carddict['saving'] += num
        # else:
        #     debt[4] -=num
        print(carddict)
        cardinfo(carddict)
        query(conn)
    
    def query(conn):
        conn.sendall(by('%d|%d'%(carddict['saving'],carddict['balance'])))
    
    def pay(num,add=1):
        if carddict['saving']>= num:
            carddict['saving']-=num
            cardinfo(carddict)
            print('pay success')
            return '1'
        else:
            left=(num-carddict['saving'])*add
            if left <= carddict['balance']:
                carddict['saving']=0
                carddict['balance']-=left
                cardinfo(carddict)
                print('pay success')
                return '1'
            else:
                print('pay fail')
                return '0'
    
    def cardinfo(carddict):
        card=carddict['card']
        json.dump(carddict,open('DB\cardinfo\%s'%card,'w'))
    # def owed(carddict):
    #     debt=carddict['debt']
    
    class Myserver(socketserver.BaseRequestHandler):
        def handle(self):
            conn=main(self.request)
            choose={'1':login,'2':register,}
            choose2 = {'1': query, '2': giro, '3': atm, '4': repayment,}
            # logchoose={'2': 'zhuanzhang', '3': 'tixian', '4': 'huankuan'}
            while True:
                # opt = st(conn.recv(1024))
                # login(self.request)
                opt=st(conn.recv(1024))
                if opt in choose.keys():
                    result = choose[opt](self.request)
                    if result:
                        while True:
                            opt2 = st(conn.recv(1024))
                            print(opt2)
                            if opt2 in choose2.keys():
                                choose2[opt2](self.request)
                            elif opt2=='5':
                                break
                            else:pr('输入无效!','r')
                elif opt=='3':break
    
                elif opt in choose.keys():
                    result=choose[opt]()
    
    
    if __name__=='__main__':
        Server=socketserver.ThreadingTCPServer(('127.0.0.1',8889),Myserver)
        Server.serve_forever()
    银行程序
    #-*- coding:utf-8 -*-
    import socket
    from moudle import *
    def main(address,port):
        obj=socket.socket()
        obj.connect((address,port))
        print(st(obj.recv(1024)))
        return obj
    
    def login():
        user=input('请输入卡号:')
        password=input('请输入密码:')
        obj.sendall(by(str(user)))
        have=st(obj.recv(1024))
        if '' in have:
            print(have)
            return False
        else:
            obj.sendall(by(password))
            result=st(obj.recv(1024))
            print(result)
            if '成功' in result:return True
            else:return False
    
    def register():
        user = input('请输入姓名:')
        password = input('请输入密码:')
        obj.sendall(by(user))
        result=st(obj.recv(1024))
        print(result)
        # if '成功' in result:
        obj.sendall(by(password))
        card=st(obj.recv(1024))
        print('您的卡号为%s,请牢记!'%card)
    def shopgiro(tocard):
        obj.sendall(by('1'))
        result = login()
        if result:
            obj.sendall(by('2'))
            giro(tocard)
    def giro(tocard=None):
        if tocard==None:
            tocard=input('输入对方卡号:')
        # else:
        #     result=login()
        #     if result:
        obj.recv(1024)#'粘包'
        obj.sendall(by(str(tocard)))
        toname = st(obj.recv(1024))
        print('请核对信息:   卡号:%s   姓名:%s' % (tocard,toname))
        num = input('转账金额:')
        obj.sendall(by(num))
        query()
        result=int(st(obj.recv(1024)))
        if result:pr('支付成功!%s'%num)
        else:pr('支付失败!','r')
    
    def atm():
        num = input('取款金额:')
        obj.sendall(by(num))
        result = int(st(obj.recv(1024)))
        if result:
            pr('提现成功!%s' % num)
        else:
            pr('提现失败!', 'r')
        query()
    
    def repay():
        num = input('还款金额:')
        obj.sendall(by(num))
        pr('还款成功!%s' % num)
        query()
    
    def query():
        result=st(obj.recv(1024)).split('|')
        print('您的存款:%s      信用款:%s'%(result[0],result[1]))
    obj = main('127.0.0.1', 8889)
    if __name__ == '__main__':
        choose = {'1': login, '2': register, '3': exit}
        choose2 = {'1': query, '2': giro, '3': atm, '4': repay,}
        while True:
            opt = input('请选择: 1、登陆    2、注册    3、退出
    >>>')
            obj.sendall(by(opt))
            if opt in choose.keys():
                result = choose[opt]()
                if result:
                    while True:
                        opt2 = input('请选择: 1、查询    2、转账    3、提现   4、还款    5、退出
    >>>')
                        obj.sendall(by(opt2))
                        if opt2 in choose2.keys():
                            result = choose2[opt2]()
                        if opt2=='5':break
            elif opt=='3':break
            else:pr('输入无效','r')
    客户端程序
    import os
    import json
    import time
    import datetime
    from moudle import userlog
    
    t = time.strftime("%Y-%m-%d %H:%I:%S", time.localtime(time.time()))
    # month = t[:7]
    # print(month)
    card_list=os.listdir('DB\cardinfo')
    debt_sum=0
    now = int(time.time())
    for cardfile in card_list:
        carddict=json.load(open('DB\cardinfo\%s'%cardfile,'r'))
        for i in zip(carddict['debt'][0], carddict['debt'][1]):
            print(i)
            print(i[1][:4], i[1][5:])
            s = datetime.datetime(int(i[1][:4]), int(i[1][5:]), 11)
            ss = time.mktime(s.timetuple())
            owe_time = int((now - ss) / (60 * 60 * 24)) + 1
            owe_debt=i[0]*owe_time*0.0005
            debt_sum+=owe_debt
        print(carddict)
        if carddict['saving']==0:
            carddict['balance']-=debt_sum
        else:
            debt_owe=debt_sum-carddict['saving']
            carddict['saving']=0
            carddict['balance'] -= debt_sum
        print(cardfile)
        json.dump(carddict, open('DB\cardinfo\%s'%cardfile, 'w'))
        userlog(carddict,'欠款金额:%d 利息:%d'%(sum(carddict['debt'][0]),debt_sum))
    每天计算每个用户的利息
    #-*- coding:utf-8 -*-
    import os
    import json
    import time
    
    
    t = time.strftime("%Y-%m-%d %H:%I:%S", time.localtime(time.time()))
    month = t[:7]
    print(month)
    card_list=os.listdir('DB\cardinfo')
    for i in card_list:
        print(i)
        carddict=json.load(open('DB\cardinfo\%s'%i,'r'))
        # print(carddict)
        # carddict={"card": 8003, "debt": [[5000,5000], ["2016-04","2016-05"], 5000], "status": 0, "credit": 15000, "user": "dalong", "saving": 950.0, "password": "123", "balance": 15000}
        owe=carddict['credit']-carddict['balance']
        if owe>0:
            carddict['balance']=carddict['credit']
            card = carddict['card']
            carddict['debt'][0].append(owe)
            carddict['debt'][1].append(month)
            print(carddict)
            json.dump(carddict,open('DB\cardinfo\%s'%i,'w'))
    每个月计算是否有欠款
    #-*- coding:utf-8 -*-
    import time
    t = time.strftime("%Y-%m-%d %H:%I:%S", time.localtime(time.time()))
    month = t[:10]
    # month='2016-06-23'
    y,m,d=month.split('-')
    y,m,d=int(y),int(m),int(d)
    filename=''
    def pr(word,color='g'):
        if color =='r':
            print('33[031m%s33[0m'%word)
        else:
            print('33[032m%s33[0m'%word)
    def by(word):
        a=bytes(word,encoding = 'utf-8')
        return a
    def st(word):
        b=str(word,encoding = 'utf-8')
        return b
    import os,json
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    
    USER_DIR = os.path.join(BASE_DIR, 'db', 'user')
    creat=json.load(open('DB\creat_card.json','r'))
    import logging
    def userlog(carddict,word):
        filename=log_file()
        file2 = logging.FileHandler('log\%s\%s.log' %(carddict['card'],filename), 'a',encoding='utf-8')
        fmt = logging.Formatter(fmt='%(asctime)s - %(name)s - %(levelname)s - %(module)s:  %(message)s')
        file2.setFormatter(fmt)
        logger2 = logging.Logger('s2', level=logging.DEBUG)
        logger2.addHandler(file2)
        logger2.info(word)
    def log_file():
        if d>22:
            filename='%d-%d'%(y,m)
        else:
            if m-1 <1:
                filename = '%d-%d' % (y-1, 12)
            else:
                filename = '%d-%d' % (y, m-1)
        return filename
    模板程序
    #-*- coding:utf-8 -*-
    from moudle import *
    from client import *
    class mall:
        def shop(self):
            while True:
                for k,v in goods.items():
                    print('商品:%s		价格:%d¥'%(k,v))
                opt2=input('选择商品  q退出  
    请选择:').strip()
                if opt2 == 'q':
                    break
                else:
                    if opt2 in goods.keys():
                        num=input('请输入数量:')
                        shop_list[opt2]=int(num)
                        pr('商品已添加到购物车')
                    else:
                        pr('输入无效!','r')
                        continue
        def pay(self,):
            num=0
            for i in shop_list.keys():
                # print(shop_list[i],goods[i])
                num+=shop_list[i]*goods[i]
            pr(num)
            shopgiro(8888)
    pr('Welcome to the shopping mall')
    shop_list={}
    goods={'iphone':5000,'bike':500,'apple':15,'qb':1,}
    shop=mall()
    choose={'1':shop.shop,'2':shop.pay,'3':exit}
    while True:
        # obj = main('127.0.0.1', 8889)
        opt=input('1、选择商品    2、结算    3、退出  
    请选择:').strip()
        if opt in choose.keys():choose[opt]()
        else:pr('输入无效!','r')
    print(shop_list)
    购物车程序
  • 相关阅读:
    理解Linq和lambda
    (转)Fidder教程
    (转)Fiddler Composer创建和发送HTTP Request
    (转)http协议详解
    C# sealed & internal
    javascript中的封装,多态,继承
    Fiddler Script 用法
    强烈推荐:240多个jQuery插件
    用C#编写ActiveX控件(1)
    用C#编写ActiveX控件(二)
  • 原文地址:https://www.cnblogs.com/shenwenlong/p/5607625.html
Copyright © 2011-2022 走看看