python 面向对象编程实例练习:建立一个电影商店
要求:完成一个电影商店录像带租赁任务。
建立四个类:
- 录像带类:包括录像带的名字,买回来的价格,类别编号(电影类别),库存数量
- 被租借的录像带类:录像带的名称,录像带的id,租借人,租借时间,应归还时间,当天日期,逾期天数
- 用户类:包括用户名称,id号,该用户租借的录像带;完成的函数功能有:展示租借的录像带详细信息,判断是否超出了租借上限
- 商店类:存放库存的video,存放借出video的report,存放逾期video的overdue等;完成借书还书,进货下货,更新报告等函数,
局限性,在项目中使用数字代替日期,没有与真实日期相匹配,待改进...
class videotape:
def __init__(self,name,price,ind,number):
"""
录像带类:
包括录像带的名字,买回来的价格,类别编号(电影类别),库存数量
"""
self.name=name
self.price=price
self.number=number
self.ind=ind
def __str__(self):
return 'name:%s,price:%s,cate_id:%s,number:%s'%(self.name,self.price,self.ind,self.number)
class bor_videotape:
def __init__(self,video_name,video_id,user_id,time_bor,time_re,time_now,day):
self.video_name=video_name
self.video_id=video_id
self.user_id=user_id
self.time_bor=time_bor
self.time_re=time_re
self.time_now=time_now
self.day=day
def __str__(self):
return '录像带名称:%s|录像带id:%s|借录像带的人:%s|借阅时间:%s|应还时间:%s'%(self.video_name,self.video_id,self.user_id,self.time_bor,self.time_re)
class user:
def __init__(self,name,ind=0,bor_report=[]):
"""
借录像带的用户:
包括用户的名字,id号,
"""
self.name=name
self.ind=ind
self.bor_report=[]
def video_bor(self,bor_videotape,flag=1):
if(len(self.bor_report)<5 or flag==0):
if flag==1:
self.bor_report.append(bor_videotape)
return 1
else:
self.bor_report.remove(bor_videotape)
return 2
else:
print("超出可借电影带数目")
return 0
def n_video(self):
return len(self.bor_report)
def list_video(self):
for i in range(len(self.bor_report)):
print(self.bor_report[i])
class shop(object):
"""
电影商店类:
包括存放录像带的list
"""
def __init__(self):
self.video=[]
self.report=[]
self.overdue=[]
self.user=[]
self.day=30
def addVideo(self,videotape):
"""
添加库存:
如果有新进录像带,直接添加到原有库存中。
不是新录像带则添加数量。
"""
#有库存
if len(self.video)>0:
flag=0
for i in range(len(self.video)):
if(self.video[i].ind==videotape.ind and self.video[i].name==videotape.name):
self.video[i].number+=videotape.number
flag=1
if(flag!=1):
self.video.append(videotape)
#无库存
else:
self.video.append(videotape)
def delVideo(self,videotape):
"""
进行下货:
库存中有录像带:
录像带数量小于所需数量:
输出提示--库存不够,只有多少数量
录像带数大于或等于所需数量:
减少库存,并输出提示--剩余库存数量
若数量减为0,则清除该录像带的记录
库存中没有录像带:
输出提示--没有该录像带
"""
flag=0
for i in range(len(self.video)):
if(self.video[i].ind== videotape.ind and self.video[i].name==videotape.name):
flag=1
if(self.video[i].number>=videotape.number):
self.video[i].number-=videotape.number
print('录像带ID:%s | 录像带名称:%s | 录像带剩余数量:%s | 录像带价格:%s'%(self.video[i].ind,self.video[i].name,self.video[i].number,self.video[i].price))
if(self.video[i].number==0):
self.video.remove(self.video[i])
else:
print('录像带ID:%s | 录像带名称:%s | 录像带数量:%s | 录像带价格:%s'%(self.video[i].ind,self.video[i].name,self.video[i].number,self.video[i].price))
print("录像带库存数量不足!!请核对记录!!")
break
if(flag==0):
print("库存中没有该录像带!!请核对记录!!")
def findvideo(self,l):
"""
查找录像带:
库存中有录像带:
输出录像带详情以及借阅的相关信息
库存中没有录像带:
输出提示--没有录像带
"""
flag=0
if(isinstance(l,int)):
"""
以录像带***为查找
"""
for i in range(len(self.video)):
if(self.video[i].ind==l):
flag=1
print('录像带ID:%s | 录像带名称:%s | 录像带数量:%s | 录像带价格:%s'%(self.video[i].ind,self.video[i].name,self.video[i].number,self.video[i].price))
for i in range(len(self.report)):
if(self.report[i].video_id==l):
print('录像带名称:%s|录像带ID:%s|借录像带的人:%s|借阅时间:%s|应还时间:%s'%(self.report[i].video_name,self.report[i].video_id,self.report[i].user_name,self.report[i].user_id,self.report[i].time_bor,self.report[i].time_re))
if(flag==0):
print("库存中没有该录像带!!")
else:
for i in range(len(self.video)):
if(self.video[i].name==l):
flag=1
print('录像带ID:%s | 录像带名称:%s | 录像带数量:%s | 录像带价格:%s'%(self.video[i].ind,self.video[i].name,self.video[i].number,self.video[i].price))
for i in range(len(self.report)):
if(self.report[i].video_name==l):
print('录像带名称:%s|录像带id:%s|借录像带的人:%s|借阅时间:%s|应还时间:%s'%(self.report[i].video_name,self.report[i].video_id,self.report[i].user_name,self.report[i].user_id,self.report[i].time_bor,self.report[i].time_re))
if(flag==0):
print("库存中没有该产品!!")
def adduser(self,user_name):
u=user(user_name,len(self.user)+1)
self.user.append(u)
def finduser(self,l):
flag=0
if(isinstance(l,int)):
"""
以ID号为查找
"""
for i in range(len(self.user)):
if(self.user[i].ind==l):
flag=1
print('用户名称:%s | 用户ID:%s | 已借录像带数:%s'%(self.user[i].name,self.user[i].ind,self.user[i].n_video()))
if(flag==0):
print("用户中没有该用户!!")
else:
for i in range(len(self.user)):
if(self.user[i].name==l):
flag=1
print('用户名称:%s | 用户ID:%s | 已借录像带数:%s'%(self.user[i].name,self.user[i].ind,self.user[i].n_video()))
if(flag==0):
print("用户中没有该用户!!")
def List_video(self):
for i in range(len(self.video)):
print('录像带ID:%s | 录像带名称:%s | 录像带数量:%s | 录像带价格:%s'%(self.video[i].ind,self.video[i].name,self.video[i].number,self.video[i].price))
def List_user(self):
for i in range(len(self.user)):
print('用户名称:%s | 用户ID:%s | 已借录像带数:%s'%(self.user[i].name,self.user[i].ind,self.user[i].n_video()))
def borrowVideo(self,video_l,user_ID,day):
flag=0
if (isinstance(video_l,int) ):
for i in range(len(self.video)):
if(self.video[i].ind==video_l):
flag=1
if(self.video[i].number==0):
print('该录像带已全部借出!')
for i in range(len(self.report)):
print(i)
if(self.report[i].video_id==video_l):
print('录像带名称:%s|录像带id:%s|借阅人ID:%s|借阅时间:%s|应还时间:%s'%(self.report[i].video_name,self.report[i].video_id,self.report[i].user_id,self.report[i].time_bor,self.report[i].time_re))
else:
re=bor_videotape(self.video[i].name,self.video[i].ind,user_ID,day,self.day+day,day,0)
self.report.append(re)
flag1=self.user[user_ID-1].video_bor(re)
if(flag1==1):
self.video[i].number-=1
print('用户名称:%s | 用户ID:%s | 已借录像带数:%s'%(self.user[user_ID-1].name,self.user[user_ID-1].ind,self.user[user_ID-1].n_video()))
if(flag==0):
print("库存中没有该录像带!!")
else:
for i in range(len(self.video)):
if(self.video[i].name==video_l):
flag=1
if(self.video[i].number==0):
print('该录像带已全部借出!')
for i in range(len(self.report)):
if(self.report[i].video_name==video_l):
print('录像带名称:%s|录像带id:%s|借阅人ID:%s|借阅时间:%s|应还时间:%s'%(self.report[i].video_name,self.report[i].video_id,self.report[i].user_id,self.report[i].time_bor,self.report[i].time_re))
else:
re=bor_videotape(self.video[i].name,self.video[i].ind,user_ID,day,self.day+day,day,0)
self.report.append(re)
flag1=self.user[user_ID-1].video_bor(re)
if(flag1==1):
self.video[i].number-=1
print('用户名称:%s | 用户ID:%s | 已借录像带数:%s'%(self.user[user_ID-1].name,self.user[user_ID-1].ind,self.user[user_ID-1].n_video()))
if(flag==0):
print("库存中没有该录像带!!")
self.overduereport_update(day)
self.user[user_ID-1].list_video()
def returnVideo(self,video_l,user_l,day):
self.overduereport_update(day)
if (isinstance(video_l,int)):
for i in range(len(self.report)):
if(self.report[i].video_id==video_l and self.report[i].user_id==user_l):
self.report.remove(self.report[i])
re=self.report[i]
self.user[user_l-1].video_bor(re)
for i in range(len(self.overdue)):
if(self.overdue[i].video_id==video_l and self.overdue[i].user_id==user_l):
print('录像带名称:%s|录像带id:%s|借阅人ID:%s|借阅时间:%s|应还时间:%s|逾期时间:%s'%(self.overdue[i].video_name,self.overdue[i].video_id,self.overdue[i].user_id,self.overdue[i].time_bor,self.overdue[i].time_re,self.overdue[i].day))
self.overdue.remove(self.overdue[i])
self.video[i].number+=1
else:
for i in range(len(self.report)):
if(self.report[i].video_name==video_l and self.report[i].user_id==user_l):
self.report.remove(self.report[i])
for i in range(len(self.overdue)):
if(self.overdue[i].video_name==video_l and self.overdue[i].user_id==user_l):
self.overdue.remove(self.overdue[i])
self.video[i].number+=1
def list_report(self):
for i in range(len(self.report)):
print('录像带名称:%s|录像带id:%s|借阅人ID:%s|借阅时间:%s|应还时间:%s'%(self.report[i].video_name,self.report[i].video_id,self.report[i].user_id,self.report[i].time_bor,self.report[i].time_re))
def overduereport_update(self,day):
self.overdue=[]
for i in range(len(self.report)):
if((day-self.report[i].time_bor)>self.day):#逾期
self.overdue.append(self.report[i])
def overduereport(self,day):
self.overduereport_update(day)
for i in range(len(self.overdue)):
print('录像带名称:%s|录像带id:%s|借阅人ID:%s|借阅时间:%s|应还时间:%s|逾期时间:%s'%(self.overdue[i].video_name,self.overdue[i].video_id,self.overdue[i].user_id,self.overdue[i].time_bor,self.overdue[i].time_re,self.overdue[i].day))
测试:
可以撒花啦!!~
*★,°*:.☆( ̄▽ ̄)/$:*.°★* 。