"""
编写学员实体类,对应属性包含:学号、姓名、性别。
编写学员名单管理类,实现添加学员方法、查询学员方法。
学员实体类添加一个属性成绩,要求实现对应的 getter 和 setter。
添加学员时,把学员信息写入文件中;
查看学员时,通过工厂设计的方式实现两种查看方式,从文件中或者从维护的列表中读取成员信息。
自定义异常类:添加学员传入参数不合理时抛出自定义异常。
"""
from dataclasses import dataclass, field
@dataclass
class Student:
"""
自己根据题目要求实现
"""
number : int
name : str
gender : str
grades : float
def grades_get(self):
print(f"学号为{self.number}的学生成绩为{self.grades}分")
def grades_set(self, new_grade:float):
self.grades = new_grade
class Myexception(Exception):
def __init__(self, msg):
print(msg)
class StudentList:
s_list = []
def get(self, data):
if type(data) == str:
self.getfromfile(data)
elif type(data) == int:
self.getfromlist(data)
else:
raise Myexception
def getfromfile(self, student_id: str):
"""
根据 student_id 查询信息
"""
f = open("student.demo", "r", encoding="UTF-8")
for line in f:
list = line.split("\t")
if list[0] == student_id:
print(f"学号为{student_id}的学生的学生信息为:{line}")
f.close()
break
def getfromlist(self, student_id: int):
for i in self.s_list:
if i.number == student_id:
print(i)
break
def save(self, student: Student):
"""
添加新学生
"""
try:
self.s_list.append(student)
f = open("student.demo", "a", encoding="UTF-8")
f.write(f"{student.number}\t{student.name}\t{student.gender}\t{student.grades}\n")
except:
raise Myexception("出现了参数异常")
finally:
f.close()
if __name__ == '__main__':
s1 = Student(1, "张三", "男", 50)
s2 = Student(2, "李四", "男", 60)
s3 = Student(3, "李四", "男", 60)
slist = StudentList()
slist.save(s1)
slist.save(s2)
slist.save(s3)
slist.get(2)
slist.get("2")