''' 4.持久化json写入磁盘,添加读与写json函数 5.日志记录:添加与修改是info(消息通知),delete用warning ''' import json import os.path class NotArgError(Exception): def __init__(self,message): self.message = message class MissPathError(Exception): def __init__(self,message): self.message = message class FormatError(Exception): def __init__(self,message): self.message = message class StudentInfo(object): def __init__(self,students_path): self.students_path = students_path self.__init_path() self.__read() print(self.students,'++++++') def __init_path(self): if not os.path.exists(self.students_path): raise MissPathError('路径错误,文件不存在 %s'%self.students_path) if not os.path.isfile(self.students_path): raise TypeError('当前的%s不是一个文件'%self.students_path) if not self.students_path.endswith('.json'): raise FormatError('当前不是一个json文件') # 定义内部私有读函数,从文件读取 def __read(self): with open(self.students_path,'r') as f: try: data = f.read() except Exception as e: raise e self.students = json.loads(data) # 定义内部私有写函数,写入磁盘json文件 def __save(self): with open(self.students_path,'w') as f: json_data = json.dumps(self.students) f.write(json_data) # 获得所有学生信息 def get_all_students(self): for stu_id, stu_valuse in self.students.items(): #print(stu_valuse) print('学号:{}\t姓名:{}\t年龄:{}\t班级:{}\t性别:{}'.format(stu_id, stu_valuse['name'], stu_valuse['age'],stu_valuse['class_num'], stu_valuse['sex'])) # 根据id获取学生信息 def get_by_id(self,stu_id): return self.students.get(stu_id) # 获取所有学生id def get_all_id(self): return self.students.keys() # 添加学生信息 def add(self,**kwargs): try: check = self.check_user_info(**kwargs) except Exception as e: print(e) self.__add(**kwargs) self.__save() self.__read() # 批量添加学生信息 def adds(self,new_stus): for user in new_stus: try: check = self.check_user_info(**user) except Exception as e: print(e,user.get('name')) self.__add(**user) print('学生信息添加完毕。') self.__save() self.__read() def __add(self,**student): if len(self.students)==0: new_id = 1 else: new_id = max(self.students.keys()) + 1 self.students[new_id] = student #self.__save() # 删除学生信息 def delete(self,stu_id): if stu_id not in self.students: print(f'需要删除的学号{stu_id}不存在.') else: del_user = self.students.pop(stu_id) print('学号{}的{}同学已经被删除。'.format(stu_id, del_user['name'])) self.__save() #self.__read() # 批量删除学生信息 def deletes(self,*stu_ids): #ids =list(stu_ids) keys = self.get_all_id() for id_ in stu_ids: if id_ not in keys: print(f'需要删除的学号{id_}不存在.') else: del_user = self.students.pop(id_) print('学号{}的{}同学已经被删除。'.format(id_, del_user['name'])) self.__save() #self.__read() # 根据ID更新学生信息 def update(self,stu_id, **kwargs): if stu_id not in self.students: print('需要修改的学号{}不存在。'.format(stu_id)) try: check = self.check_user_info(**kwargs) except Exception as e: print(e) self.students[stu_id] = kwargs new_stu = self.students[stu_id] print('修改后信息为:\n 学号:{} 姓名:{} 年龄:{} 班级:{} 性别:{}'.format(stu_id, new_stu['name'], new_stu['age'], new_stu['class_num'],new_stu['sex'])) self.__save() #self.__read() # 根据ID批量更新学生信息 def updates(self,update_users): all_id = self.get_all_id() for id_,value in update_users.items(): if id_ not in all_id: print('需要修改的学号{}同学不存在。'.format(id_)) continue try: self.check_user_info(**value) except Exception as e: print(e) self.students[id_] = value print('学生信息修改完毕。') return self.students self.__save() #self.__read() # 通过关键字查询 def select_user(self,**kwargs): assert len(kwargs)==1,'参数数量传递错误' values = self.students.values() key = None value = None result = [] if 'name' in kwargs: key = 'name' value = kwargs['name'] elif 'age' in kwargs: key = 'age' value = kwargs['age'] for user in values: if user[key] == value: result.append(user) return result elif 'class_num' in kwargs: key = 'class_num' value = kwargs['class_num'] elif 'sex' in kwargs: key = 'sex' value = kwargs['sex'] else: raise NotArgError('没有发现搜索的关键字') for user in values: if value in user[key]: result.append(user) return result # 检查学生信息是否完整 def check_user_info(self,**kwargs): assert len(kwargs)==4,'参数必须是4个' if 'name' not in kwargs: raise NotArgError('缺少学生姓名') if 'age' not in kwargs: raise NotArgError('缺少学生年龄') if 'class_num' not in kwargs: raise NotArgError('缺少学生班级') if 'sex' not in kwargs: raise NotArgError('缺少学生性别') name_value = kwargs['name'] age_value = kwargs['age'] class_value = kwargs['class_num'] sex_value = kwargs['sex'] if not isinstance(name_value,str): raise TypeError('name应该是字符串类型') if not isinstance(age_value,int): raise TypeError('age应该是整型') if not isinstance(class_value,str): raise TypeError('class_num应该是字符串类型') if not isinstance(sex_value,str): raise TypeError('sex应该是字符串类型') students = {1: {'name': 'mark', 'age': 20, 'class_num': 'A', 'sex': 'boy'}, 2: {'name': 'nancy', 'age': 19, 'class_num': 'B', 'sex': 'girl'}, 3: {'name': 'xiaoming', 'age': 18, 'class_num': 'B', 'sex': 'boy'}, 4: {'name': 'milk', 'age': 19, 'class_num': 'A', 'sex': 'boy'}} if __name__ == '__main__': stu = StudentInfo('students.json') #print(stu.students) stu.get_all_students() print('------添加,更改,删除单条数据-------------') # stu.add(name='xiaoluo',age=18,class_num='B',sex='girl') stu.update(4,name='MilkZhang',class_num='A',sex='boy',age=19) stu.delete(2) stu.get_all_students() print('========添加多个记录=========') stus = [{'name': 'xiaowang', 'age': 20, 'class_num': 'A', 'sex': 'boy'}, {'name': 'xiaoli', 'age': 19, 'class_num': 'B', 'sex': 'girl'}, {'name': 'xiaozhang', 'age': 18, 'class_num': 'B', 'sex': 'boy'}] # stu.adds(stus) stu.get_all_students() print('++++++删除多条记录+++++++++') stu.deletes(1,10) stu.get_all_students() print('-----更新多个记录-------') update_users= {6:{'name': 'xiaowang', 'age': 18, 'class_num': 'B', 'sex': 'boy'}, 10:{'name': 'xiaozhang', 'age': 18, 'class_num': 'B', 'sex': 'boy'}, 8: {'name': '小张', 'age': 20, 'class_num': 'B', 'sex': 'boy'}} stu.updates(update_users) stu.get_all_students() print('+++++++模糊查找++++++++') result = stu.select_user(name='li') print(result) # students = {1:{'name':'mark','age':20,'class_num':'A','sex':'boy'}, # 2:{'name':'nancy','age':19,'class_num':'B','sex':'girl'}, # 3:{'name':'xiaoming','age':18,'class_num':'B','sex':'boy'}, # 4:{'name':'milk','age':19,'class_num':'A','sex':'boy'}} # stu_id = students.keys() # stu_valuse = students.values() # return students # users = select_user(name='mark') # print(users) # print('++++++++++++++') # add_user(name='xiaoluo',class_num='B' ,age=17,sex='girl') # delete_user(2) # update_user(4,name='milk',class_num='B',sex='boy',age=20) #ser = select_user(name='mile') # get_all_students()
final-student-system
最新推荐文章于 2023-06-14 00:06:10 发布