![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#-*- 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('\033[031m该用户不存在\033[0m')) else: conn.sendall(by('\033[032m存在!\033[0m')) password=st(conn.recv(1024)) print(password) print() carddict=json.load(open('DB\\cardinfo\\%s'%card)) if password==carddict['password']: conn.sendall(by('\033[032m登陆成功!\033[0m')) return True else: conn.sendall(by('\033[031m密码错误,登陆失败!\033[0m')) return False def register(conn): user=st(conn.recv(1024)) # if os.path.isfile('DB\\cardinfo\\%s'%card): # conn.sendall(by('\033[031m注册失败,该用户已存在\033[0m')) # else: conn.sendall(by('\033[032m注册成功!\033[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()
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#-*- 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、退出\n>>>') obj.sendall(by(opt)) if opt in choose.keys(): result = choose[opt]() if result: while True: opt2 = input('请选择: 1、查询 2、转账 3、提现 4、还款 5、退出\n>>>') obj.sendall(by(opt2)) if opt2 in choose2.keys(): result = choose2[opt2]() if opt2=='5':break elif opt=='3':break else:pr('输入无效','r')
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
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))
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#-*- 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'))
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#-*- 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('\033[031m%s\033[0m'%word) else: print('\033[032m%s\033[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
![](https://i-blog.csdnimg.cn/blog_migrate/8f900a89c6347c561fdf2122f13be562.gif)
![](https://i-blog.csdnimg.cn/blog_migrate/961ddebeb323a10fe0623af514929fc1.gif)
#-*- coding:utf-8 -*- from moudle import * from client import * class mall: def shop(self): while True: for k,v in goods.items(): print('商品:%s\t\t价格:%d¥'%(k,v)) opt2=input('选择商品 q退出 \n请选择:').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、退出 \n请选择:').strip() if opt in choose.keys():choose[opt]() else:pr('输入无效!','r') print(shop_list)