Update csv_student_dal.py

master
ptuaqkmj6 2 months ago
parent 192ffddf0e
commit 79e4523b51

@ -50,20 +50,20 @@ class CsvStudentDAL(IStudentDAL):
def _row_to_student(self, row: dict) -> Student:
"""将CSV行数据转换为Student对象"""
# 处理日期类型
# 处理日期类型将字符串转换为datetime.date对象
enrollment_date = row['enrollment_date']
if enrollment_date:
enrollment_date = datetime.strptime(enrollment_date, '%Y-%m-%d').date()
# 处理布尔类型
# 处理布尔类型,将字符串转换为布尔值
gender = row['gender']
if gender:
gender = gender.lower() == 'true'
# 处理数值类型
# 处理数值类型,将字符串转换为数值
height = int(row['height']) if row['height'] else None
weight = float(row['weight']) if row['weight'] else None
# 创建并返回学生对象
return Student(
name=row['name'],
id_card=row['id_card'],
@ -110,64 +110,75 @@ class CsvStudentDAL(IStudentDAL):
# 检查学号和身份证号是否已存在
if self.get_by_id(student.id_card) or self.get_by_stu_id(student.stu_id):
return False
# 将学生信息追加到CSV文件
with open(self.file_path, 'a', encoding='utf-8', newline='') as file:
writer = csv.DictWriter(file, fieldnames=self.headers)
writer.writerow(self._student_to_row(student))
return True
def update(self, student: Student) -> bool:
"""更新学生信息"""
students = self.get_all()
"""
更新学生信息
通过身份证号匹配要更新的记录
"""
students = self.get_all() # 获取所有学生信息
updated = False
# 重写整个CSV文件替换匹配的学生记录
with open(self.file_path, 'w', encoding='utf-8', newline='') as file:
writer = csv.DictWriter(file, fieldnames=self.headers)
writer.writeheader()
writer.writeheader()# 写入表头
for s in students:
if s.id_card == student.id_card:
if s.id_card == student.id_card: # 找到匹配的学生记录
writer.writerow(self._student_to_row(student))
updated = True
else:
writer.writerow(self._student_to_row(s))
writer.writerow(self._student_to_row(s)) # 保持原有记录不变
return updated
def delete_by_id(self, id_card: str) -> bool:
"""根据身份证号删除学生信息"""
students = self.get_all()
"""
根据身份证号删除学生信息
通过重写整个文件排除要删除的记录
"""
students = self.get_all() # 获取所有学生信息
deleted = False
# 重写整个CSV文件排除要删除的学生记录
with open(self.file_path, 'w', encoding='utf-8', newline='') as file:
writer = csv.DictWriter(file, fieldnames=self.headers)
writer.writeheader()
writer.writeheader() # 写入表头
for s in students:
if s.id_card == id_card:
deleted = True
if s.id_card == id_card: # 找到匹配的学生记录
deleted = True # 标记已删除
else:
writer.writerow(self._student_to_row(s))
writer.writerow(self._student_to_row(s)) # 保留其他记录
return deleted
def delete_by_stu_id(self, stu_id: str) -> bool:
"""根据学号删除学生信息"""
students = self.get_all()
"""
根据学号删除学生信息
通过重写整个文件排除要删除的记录
"""
students = self.get_all() # 获取所有学生信息
deleted = False
# 重写整个CSV文件排除要删除的学生记录
with open(self.file_path, 'w', encoding='utf-8', newline='') as file:
writer = csv.DictWriter(file, fieldnames=self.headers)
writer.writeheader()
writer.writeheader() # 写入表头
for s in students:
if s.stu_id == stu_id:
deleted = True
if s.stu_id == stu_id: # 找到匹配的学生记录
deleted = True # 标记已删除
else:
writer.writerow(self._student_to_row(s))
writer.writerow(self._student_to_row(s)) # 保留其他记录
return deleted
def search_by_name(self, name: str) -> List[Student]:
"""根据姓名模糊查询学生信息"""
return [s for s in self.get_all() if name in s.name]

Loading…
Cancel
Save