|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
import hashlib
from time import strftime, localtime
# 3. 创建一个 Mixin 类(PasswdMixin),用于实现密码相关的功能组件(密码长度检测和将明文密码转换为 MD5 的操作)
class PasswdMixin:
def GetMD5(self, password):
while len(password) < 6:
password= input('密码不能小于6位,请重新输入:')
result = hashlib.md5(bytes(password, "utf-8"))
self.res = result.hexdigest()
print(self.res)
return self.res
def GetMD5toPassword(self, res):
self.d = {}
for i in range(99999999):
bstr = bytes(str(i), "utf-8")
s = hashlib.md5(bstr).hexdigest()
self.d[s] = i
return self.d[res]
# 4. 创建一个 Mixin 类(LoggerMixin),用于实现日志记录相关的功能组件
class LoggerMixin:
print()
# 0. 这次要求大家编写一个鱼C超市会员管理系统。
# 程序功能要求如下:
# 1. 会员开卡
# 会员开卡自动赋予一个新的卡号(默认从 10000 开始递增)
# 要求输入用户名和密码
# 密码要求长度不低于 6 位
# 2. 修改密码
# 先确认输入卡号是否存在
# 再判断旧密码是否正确
# 新密码长度同样不能低于 6 位
# 3. 商品支付
# 先确认输入卡号是否存在
# 再判断密码是否正确
# 根据输入的消费金额增加会员卡积分(比如输入 250 消费金额,那么积分增加 250)
# 4. 积分查询
# 先确认输入卡号是否存在
# 再判断密码是否正确
#
#
# 代码要求:
# 1. 创建一个会员类(Member),包含信息:卡号、用户名、密码(要求密码需要以 MD5 哈希值的形式存储)、
# 积分、注册日期
class Member:
cardid =None
name =None
password =None
score =None
datatime =None
# 2. 创建一个管理类(Manage),用于实现上方要求的主要程序功能
class Manage(PasswdMixin):
def __init__(self):
self.m = Member()
self.Mumbers = {}
self.id = 10000
def GetMD5(self, password):
super(Manage, self).GetMD5(password)
def GetMD5toPassword(self, res):
super(Manage, self).GetMD5toPassword(res)
# 1. 会员开卡
# 会员开卡自动赋予一个新的卡号(默认从 10000 开始递增)
# 要求输入用户名和密码
# 密码要求长度不低于 6 位
def printMum(self):
print(self.Mumbers)
def createMum(self):
self.m.cardid= self.id+1
print(self.m.cardid in self.Mumbers)
while self.m.cardid in self.Mumbers:
self.m.cardid = self.m.cardid + 1
#self.m.name=input('输入用户名')
self.m.name = 'hcm'
#self.m.password=input('请输入密码')
self.m.password = '1234567'
self.m.password= self.GetMD5(self.m.password)
print('self.res=111111111111111111111',self.res)
self.m.score= 0
self.m.datatime=strftime("%Y-%m-%d %H:%M:%S")
self.Mumbers[self.m.cardid]=[self.m.name,self.res,self.m.score,self.m.datatime]
print('注册成功',self.m.cardid,'->',self.m.datatime)
# 2. 修改密码
# 先确认输入卡号是否存在
# 再判断旧密码是否正确
# 新密码长度同样不能低于 6 位
def changeP(self):
print(self.Mumbers)
#self.uid =input('请输入UID')
self.uid = '10001'
if int(self.uid) in self.Mumbers:
#self.psaaword = input('请输入现在的密码')
self.psaaword='1234567'
self.res= self.GetMD5(self.psaaword)
print('self.res========', self.res)
print('self.Mumbers[int(self.uid)][1]', self.Mumbers[int(self.uid)][1])
if self.res == self.Mumbers[int(self.uid)][1]:
ps = input('请输入新密码')
psaaw = self.GetMD5(ps)
self.Mumbers[self.uid][1]= psaaw
print('密码修改成功!')
else:
print('UID不存在')
# 3. 商品支付
# 先确认输入卡号是否存在
# 再判断密码是否正确
# 根据输入的消费金额增加会员卡积分(比如输入 250 消费金额,那么积分增加 250)
def pay(self):
print(self.Mumbers)
# self.uid =input('请输入UID')
self.uid = '10001'
if int(self.uid) in self.Mumbers:
# self.psaaword = input('请输入现在的密码')
self.psaaword = '1234567'
self.res = self.GetMD5(self.psaaword)
print('self.res=',self.res)
print('self.Mumbers[int(self.uid)][1]',self.Mumbers[int(self.uid)][1])
if self.res == self.Mumbers[int(self.uid)][1]:
# self.money =input('请输入消费金额')
self.money = int('666')
print('self.money',self.money)
self.Mumbers[int(self.uid)][2] = self.money
print('商品支付完成!')
else:
print('UID不存在')
# 4. 积分查询
# 先确认输入卡号是否存在
# 再判断密码是否正确
def findsr(self):
print(self.Mumbers)
# self.uid =input('请输入UID')
self.uid = '10001'
if int(self.uid) in self.Mumbers:
# self.psaaword = input('请输入现在的密码')
self.psaaword = '1234567'
self.res = self.GetMD5(self.psaaword)
print('self.res=', self.res)
print('self.Mumbers[int(self.uid)][1]', self.Mumbers[int(self.uid)][1])
if self.res == self.Mumbers[int(self.uid)][1]:
print(f'您的积分余额:{self.Mumbers[int(self.uid)][2]}')
else:
print('UID不存在')
# 3. 创建一个 Mixin 类(PasswdMixin),用于实现密码相关的功能组件(密码长度检测和将明文密码转换为 MD5 的操作)
# 4. 创建一个 Mixin 类(LoggerMixin),用于实现日志记录相关的功能组件
class LoggerMixin:
print()
m = Manage()
m.printMum()
m.createMum()
m.printMum()
m.changeP()
m.printMum()
m.pay()
m.printMum()
m.findsr()
`Manage` 类中的 `GetMD5` 方法似乎有问题,因为它返回了 None。
问题可能在于 `GetMD5` 调用了 `super()` 方法,该方法应该调用 `PasswdMixin` 类中的 `GetMD5` 方法,但实际上它并没有返回任何值。
要解决这个问题,可以修改 `PasswdMixin` 类中的 `GetMD5` 方法,将存储哈希密码值的 `result` 变量返回。然后,在 `Manage` 类中,将此结果值存储在一个变量中,并从 `Manage` 类的 `GetMD5` 方法中返回它。这样应该确保正确返回哈希密码值。
总之,您可以更改 `PasswdMixin` 中的 `GetMD5` 方法:
def GetMD5(self, password):
while len(password) < 6:
password = input('密码不能小于6位,请重新输入:')
result = hashlib.md5(bytes(password, "utf-8"))
hashed_password = result.hexdigest()
print(hashed_password)
return hashed_password
然后,在 `Manage` 类中,将 `GetMD5` 方法更新如下:
def GetMD5(self, password):
hashed_password = super().GetMD5(password)
return hashed_password
有用请设置最佳答案
|
|