From 79e4523b51c7dc7239d6c332141870137cac8742 Mon Sep 17 00:00:00 2001 From: ptuaqkmj6 Date: Wed, 25 Jun 2025 11:54:32 +0800 Subject: [PATCH] Update csv_student_dal.py --- student/dal/csv_student_dal.py | 57 ++++++++++++++++++++-------------- 1 file changed, 34 insertions(+), 23 deletions(-) diff --git a/student/dal/csv_student_dal.py b/student/dal/csv_student_dal.py index 60655ec..8844664 100644 --- a/student/dal/csv_student_dal.py +++ b/student/dal/csv_student_dal.py @@ -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]