需求描述:
学员管理系统需求如下:
1、学员信息,每个学员都有姓名、电话、wx、qq、性别、分数,其中必须具备姓名和电话
2、需要能够完成这些学员的管理,管理功能主要包括增加学员、查询学员、修改学员、删除学员、计算所有学员的平均分、查看已有学员信息
student:
class Student: #每个学员都有姓名、电话、wx、qq、性别,其中必须具备姓名和电话 #由于微信、qq、性别不是必填项,所以在创建类的时候可以给个空默认值,调用方在调用的时候可以不传对应的参数 def __init__(self,stu_id,name,phone,wx='',qq='',sex='',store=0): self.stu_id=stu_id self.name=name self.phone=phone self.wx=wx self.qq=qq self.sex=sex self.store=store #增加一个行为,每个学员都能说出自己的全部信息 def show_info(self): return f'{self.stu_id},{self.name},{self.phone},{self.wx},{self.qq},{self.sex},{self.store}' if __name__=='__main__': stu1=Student('1','张三','5846313') print(stu1.show_info(),stu1.name) stu2=Student('2','李四','43656','Devin') print(stu2.show_info())
stu_db
from student import Student class StuDB: stu_dict = {} #由于学员信息和对学员进行增删改查的这些方法都和实例没有太大关系,所以采用类变量和类方法定义 #定义一个字典来存储全班学员信息,信息格式如下所示 #{'id1':学员1,'id2':学员2,'id3':学员3,'id4':学员4} #由于这些变量是和实例没有关系,所有实例共有的,所以定义成类变量 #添加学员的方法,这个方法将会新增一个学员到stu_dict这个字典中去 @classmethod def add_stu(cls,stu_id,name,phone,wx='',qq='',sex='',store=0): if stu_id in cls.stu_dict: return f'{stu_id}已经存在,不能添加' else: #这里stu1是一个学员对象,所以字典里是索引:学员对象的形式存在 stu1= Student(stu_id,name,phone,wx,qq,sex) cls.stu_dict[stu_id]=stu1 return '添加成功' #查询学员,通过学员id查询 @classmethod def select_stu(cls,stu_id): if stu_id in cls.stu_dict: stu = cls.stu_dict[stu_id] return stu.show_info() else: return f'{stu_id}不存在' #删除学员,通过学员id删除 @classmethod def del_stu(cls,stu_id): if stu_id in cls.stu_dict: del cls.stu_dict[stu_id] return '删除成功' else: return f'{stu_id}不存在' #修改学员,注意学员id是不能修改的 #首先要确定要修改的是谁,通过stu_id来确定 #修改数据可能是多个也可能是一个,所以使用可变数量参数 @classmethod def change_stu(cls,stu_id,**kwargs): if stu_id in cls.stu_dict: #先找到这个学员,再对学员进行修改 stu = cls.stu_dict[stu_id] #kwargs是一个字典,他的样子是{"name":"李四","phone":"234567","wx":'wx002',"qq":"qq118","sex":"女"} if 'name' in kwargs: #这里判断不能用elif,因为是并列关系,不是或者关系 可能几个同时存在 #如果穿进来的有name,说明他要改姓名 stu.name=kwargs['name'] if 'phone' in kwargs: #如果穿进来的有phone,说明他要改电话 stu.phone=kwargs['phone'] if 'wx' in kwargs: #如果穿进来的有wx,说明他要改微信 stu.name=kwargs['wx'] if 'qq' in kwargs: #如果穿进来的有qq,说明他要改qq stu.name=kwargs['qq'] if 'sex' in kwargs: # 如果穿进来的有name,说明他要改性别 stu.name = kwargs['sex'] if 'store' in kwargs: # 如果穿进来的有tore,说明他要改分数 stu.store = kwargs['store'] return '修改成功' else: return f'{stu_id}不存在' @classmethod def avg(cls): # {"id1":学员1,"id2":学员2,"id3":学员3,"id4":学员4} # cls.stus_dict # 思路:把全班所有学员成绩加起来,除以全班总人数 sum1 = 0 #遍历所有的value,因为每个value就是每个学员对象 for stu in cls.stu_dict.values(): score=stu.store sum1+=score # 全班总人数 count = len(cls.stu_dict) return sum1/count @classmethod def show_all(cls): for stu in cls.stu_dict.values(): print(stu.show_info) if __name__== '__main__': print(StuDB.add_stu('1','张三','5454346')) #返回 添加成功 print(StuDB.add_stu('2','李四','43547554',wx='wx001',sex='男')) #返回 添加成功 print(StuDB.add_stu('1', '王五', '5454346')) #返回 1已经存在在,不能添加 print(StuDB.stu_dict) #返回一个学员对象、 print(StuDB.select_stu('1')) #返回 编号为1的学员 print(StuDB.select_stu('3')) #返回 不存在 print(StuDB.del_stu('2')) #返回 删除成功 print(StuDB.del_stu('3')) #返回 3不存在 print(StuDB.select_stu('2')) #返回 2不存在,因为上面已经将id为2的学员删除了 print(StuDB.change_stu(stu_id="1", name="李四", phone="234567", wx='wx002', qq="qq118", sex="女")) #返回 修改成功 print(StuDB.select_stu('1')) #返回 学员1的信息,
manager:
from stu_db import StuDB def run(): print("=========================欢迎进入学员管理系统===================================") while True: op = int(input('请输入你的指令(1:新增 2:查询 3:修改 4:删除,100:退出):')) if op==1: print("新增学员") stu_id= input("请输入学员id:") name = input("请输入学员姓名:") phone= input("请输入学员电话:") qq= input("请输入学员qq:") sex= input("请输入学员性别:") wx= input("请输入学员微信:") score = input("请输入你的成绩:") if score =='': score = 0 else: score = int(score) res=StuDB.add_stu(stu_id,name,phone,wx,qq,sex,score) print(res) elif op==2: print("查询学员") stu_id=input("请输入要查询学员的id") res=StuDB.select_stu(stu_id) print(res) elif op==3: print("修改学员") stu_id=input("请输入要修改学员id") #输入信息的规则必须是 name:张三 ,phone:678676,wx:wx888 info=input("请输入要修改的学员信息") #把输入的信息转换成字典格式 info_list=info.split(',') info_dict={} for data in info_list: #data = name:张三 key=data.split(':')[0] value=data.split(':')[1] info_dict[key]=value res= StuDB.change_stu(stu_id,**info_dict) print(res) elif op==4: print("删除学员") stu_id=input("请输入要删除学员的id") res=StuDB.del_stu(stu_id) print(res) elif op==100: print('退出系统') break else: print("输入错误") if __name__=='__main__': run()