python定义一个类savingaccount表示银行账户_python 实现网上商城,转账,存取款等功能的信用卡系统...

#!/usr/bin/env python# -*- coding: utf-8 -*- import sys,osimport hashlibimport pickleimport timeimport socketserversys.path.append(os.path.dirname(os.path.dirname(__file__)))from config import settingsfrom lib import modulesfrom lib.modules import * class Myserver(socketserver.BaseRequestHandler): def md5(self,pwd): ''' 对密码进行加密 :param pwd: 密码 :return: ''' hash=hashlib.md5(bytes('xx7',encoding='utf-8')) hash.update(bytes(pwd,encoding='utf-8')) return hash.hexdigest() def login(self,usrname,pwd,x): ''' 登陆 :param usrname: 用户名 :param pwd: 密码 :return:是否登陆成功 ''' conn=self.request if x=='1': path_name_pwd=os.path.join(settings.ADMIN,usrname) else: mulu=os.path.join(settings.ALL_USERS,usrname) path_name_pwd=os.path.join(mulu,usrname+'name_pwd') s=pickle.load(open(path_name_pwd,'rb')) if usrname in s: if s[usrname]==self.md5(pwd): #和加密后的密码进行比较 return True else: return False else: return False def regist(self,usrname,pwd,x): ''' 注册 :param usrname: 用户名 :param pwd: 密码 :return:是否注册成功 ''' conn=self.request if x=='1': mulu=os.path.join(settings.ADMIN,usrname) else: mulu=os.path.join(settings.ALL_USERS,usrname) if os.path.exists(mulu): return False else: os.mkdir(mulu) s={} s[usrname]=self.md5(pwd) path_name_pwd=os.path.join(mulu,usrname+'name_pwd') pickle.dump(s,open(path_name_pwd,'wb')) path_name_base=os.path.join(mulu,usrname+'name_base') pickle.dump([15000,{},0,0,0],open(path_name_base,'wb')) path_name_liushui=os.path.join(mulu,usrname+'name_liushui') os.mkdir(path_name_liushui) return True def user_identity_authentication(self,usrname,pwd,ret,x): ''' 判断注册和登陆,并展示用户的详细目录信息,支持cd和ls命令 :return: ''' conn=self.request if ret=='1': r=self.login(usrname,pwd,x) if r: conn.sendall(bytes('y',encoding='utf-8')) else: conn.sendall(bytes('n',encoding='utf-8')) elif ret=='2': # print(usrname,pwd) if x=='1': r=self.regist(usrname,pwd,x) else: #用户注册 s=[0,1] pickle.dump(s,open(settings.A,'wb')) while True: ret=pickle.load(open(settings.A,'rb')) if ret[0]==0: time.sleep(30) continue elif ret[0]==1 or ret[0]==2: break #默认值已更改,银行管理员已操作 if ret[0]==1: #如果管理员同意 r=self.regist(usrname,pwd,x) else: r=0 s=[0,0] pickle.dump(s,open(settings.A,'wb')) if r: conn.sendall(bytes('y',encoding='utf-8')) else: conn.sendall(bytes('n',encoding='utf-8')) def interactive(self,usrname): #进行交互 conn=self.request while True: c=conn.recv(1024) #接收用户交互选项 r=str(c,encoding='utf-8') mulu=os.path.join(settings.ALL_USERS,usrname) path_name_base=os.path.join(mulu,usrname+'name_base') s=pickle.load(open(path_name_base,'rb')) #打印账户信息 obj=modules.Atm(s[0],s[1],s[2],s[3],s[4],usrname) #Atm对象 a=obj.account_info() #接收账户信息 conn.sendall(bytes(a,encoding='utf-8')) b=obj.ret_account_info() if r== '4': buy_obj=modules.buy(b[2],0,{}) amount=buy_obj.main() elif r=='q': break else: s=conn.recv(1024) amount=str(s,encoding='utf-8') obj.transaction(r,amount) pass def handle(self): conn=self.request x=conn.recv(1024) x=str(x,encoding='utf-8') conn.sendall(bytes('收到用户类别',encoding='utf-8')) while True: if x=='1' or x=='2': b=conn.recv(1024) ret=str(b,encoding='utf-8') conn.sendall(bytes('b ok',encoding='utf-8')) c=conn.recv(1024) r=str(c,encoding='utf-8') usrname,pwd=r.split(',') print(usrname,pwd) self.user_identity_authentication(usrname,pwd,ret,x) #登陆或注册验证 if x=='2':#普通用户身份验证成功后 self.interactive(usrname) pass break elif x=='q': break if __name__=='__main__': sever=socketserver.ThreadingTCPServer(('127.0.0.1',9999),Myserver) sever.serve_forever()

3.4 用户端

#!/usr/bin/env python# -*- coding: utf-8 -*-'''本程序作为用户或银行管理员的入口,其中c=1代表银行管理员,c=2代表普通用户'''import pickleimport sysimport timeimport osimport socketsys.path.append(os.path.dirname(os.path.dirname(__file__)))from config import settingsfrom lib import *from lib.modules import * def login(usrname,pwd): ''' 登陆 :param usrname:用户名 :param pwd:密码 :return:是否登陆成功 ''' obj.sendall(bytes(usrname+','+pwd,encoding='utf-8')) ret=obj.recv(1024) r=str(ret,encoding='utf-8') if r=='y': return 1 else: return 0 def regist(usrname,pwd,x): ''' 注册 :param usrname:用户名 :param pwd:密码 :return:是否注册成功 ''' obj.sendall(bytes(usrname+','+pwd,encoding='utf-8')) ret=obj.recv(1024) r=str(ret,encoding='utf-8') if r=='y': return 1 else: return 0def user_identity_authentication(usrname,pwd,x): ''' 选择登陆或注册,展示用户的详细目录信息,支持cd和ls命令 :return: ''' a=input('请选择1.登陆 2.注册') obj.sendall(bytes(a,encoding='utf-8')) obj.recv(1024) if a=='1': ret=login(usrname,pwd) if ret: print('登陆成功') return 1 else: print('用户名或密码错误') return 0 elif a=='2': ret=regist(usrname,pwd,x) if ret: print('注册成功') return 1 else: print('用户名已存在或银行管理员拒绝') return 0def main(x): usrname=input('请输入用户名') pwd=input('请输入密码') if user_identity_authentication(usrname,pwd,x): #如果验证身份成功 if x=='1': #处理用户注册信息 while True: s=pickle.load(open(settings.A,'rb')) if s[1]==0: time.sleep(30) continue elif s[1]==1: while True: a=input('用户请求注册,输入1同意,2拒绝') if a=='1': s=[1,0] pickle.dump(s,open(settings.A,'wb')) break elif a=='2': s=[2,0] pickle.dump(s,open(settings.A,'wb')) break else: print('输入有误') break else: #普通用户登陆后 interactive() #进行交互 def interactive(): while True: a=input('请选择 1.还款 2.取现 3.转账 4.消费 5.存钱 q退出') obj.sendall(bytes(a,encoding='utf-8')) r=obj.recv(1024) #接收账户信息 ret=str(r,encoding='utf-8') print(ret) if a !='4'and a !='q': b=input('请输入金额') obj.sendall(bytes(b,encoding='utf-8')) elif a=='q': break obj=socket.socket() #创建客户端socket对象obj.connect(('127.0.0.1',9999))while True: x=input('请选择1.银行管理员 2.用户 q、退出') obj.sendall(bytes(x,encoding='utf-8')) obj.recv(1024) #确认收到用户类别 if x=='1' or x=='2': main(x) break elif x=='q': break else: print('输入有误请重新输入') obj.close()

3.5定时任务

#!/usr/bin/env python# -*- coding:utf-8 -*-import os,sysimport json,pickleimport timesys.path.append(os.path.dirname(os.path.dirname(__file__)))from config import settings def main(): card_list = os.listdir(settings.ALL_USERS) for card in card_list: basic_info = pickle.load(open(os.path.join(settings.ALL_USERS, card, card+'name_base'))) struct_time = time.localtime() # 循环账单列表,为每月的欠款计息。并写入到当月账单中 for item in basic_info['debt']: interest = item['total_debt'] * 0.0005 if basic_info[4] >= interest: basic_info[4] -= interest else: temp = interest - basic_info[4] basic_info[4]=0 basic_info[0] -= temp pickle.dump( basic_info, open(os.path.join(settings.ALL_USERS, card, card+'name_base'),'w') ) # 如果当前等于10号(9号之前) # 当前余额为负值,则将值添加到账单列表中,开始计息,同时,本月可用额度恢复。 date = time.strftime("%Y-%m-%d") if struct_time.tm_mday == 11 and basic_info[2]>0: dic = {'date': date, "total_debt": basic_info[2], "balance_debt": basic_info[2], } basic_info[1].append(dic) # 恢复可用额度 basic_info[0] = 15000 pickle.dump( basic_info, open(os.path.join(settings.ALL_USERS, card, card+'name_base'),'w') ) def run(): main()

以上就是用python开发网上商城信用卡系统,需要的同学可以参考下。

郑重声明:本文版权包含图片归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们(delete@yzlfxy.com)修改或删除,多谢。

郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。

留言与评论(共有 0 条评论)

昵称:

匿名发表

验证码:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值