dong 10 months ago
parent f6d0cc408e
commit 5d40319cd9

@ -2,8 +2,6 @@ from datetime import date
from typing import Optional, List
from dal.student_dal_json import StudentDAL
from model import Student
class StudentBLL:
def __init__(self, dal: StudentDAL):
self.dal = dal

@ -167,6 +167,7 @@ class StudentDAL:
self.save_students(students)
return True
return False
def update_student_partial(self, sid:str, name:Optional[str]=None, height:Optional[float]=None, birth_date:Optional[date]=None, enrollment_date:Optional[date]=None, class_name:Optional[str]=None) ->bool:
students = self.load_students()
for i, student in enumerate(students):

@ -1,10 +1,7 @@
[
{
[{
"sid": "110309230907041",
"name": "cgt",
"height": 180,
"birth_date": "2023-09-01",
"enrollment_date": "2023-09-01",
"class_name": "cls2"
}
]
"class_name": "cls2" }]

@ -109,7 +109,6 @@ def main():
elif stats_choice == '0':
continue
elif choice == '6':
print(6666666666666666666666666)
ui.display_import_export_menu()
import_export_choice = ui.get_input("请输入你的导入导出选择: ")
if import_export_choice != '0':

@ -22,6 +22,7 @@ class Student:
self._validation_errors.append("姓名长度需在2-20个字符之间且为可打印字符")
if not self.name.isprintable():
self._validation_errors.append("姓名长度需在2-20个字符之间")
def _validate_date(self) -> None:
today = date.today()
if self.birth_date > today:
@ -30,11 +31,14 @@ class Student:
self._validation_errors.append('入学日期不能在未来')
if self.birth_date > self.enrollment_date:
self._validation_errors.append('入学日期不能早于出生日期')
@property
def is_valid(self) -> bool:
return len(self._validation_errors) == 0
def get_errors(self) -> list[str]:
return self._validation_errors.copy()
def __eq__(self, other) -> bool:
if not isinstance(other, Student):
return NotImplemented

@ -1,4 +1,5 @@
import os,re
import os
import re
from datetime import date
from bll.student_bll import StudentBLL
from dal.student_dal_json import StudentDAL
@ -15,6 +16,7 @@ class StudentUI:
self.file_path = file_path
def display_menu(self):
"""显示主菜单"""
os.system('cls' if os.name == 'nt' else 'clear')
@ -87,8 +89,6 @@ class StudentUI:
print("*" * 50)
name = self.get_input("请输入姓名: ")
id_number = self.get_input("请输入身份证号: ")
# 验证学号格式(新增)
id_number = self.get_input("请输入身份证号: ")
while not re.match(r'^\d{17}[\dXx]$', id_number):
print("身份证号格式不正确,请输入 18 位身份证号。")
@ -96,9 +96,9 @@ class StudentUI:
while True:
student_id = self.get_input("请输入学号: ")
if re.match(r'^\d{10,15}$', student_id): # 假设学号是8-12位数字
if re.match(r'^\d{10,15}$', student_id): # 假设学号是10 - 15位数字
break
print("学号格式不正确,请输入8-12位数字")
print("学号格式不正确,请输入10到15位数字")
gender = self.get_input("请输入性别(男/女): ")
@ -120,11 +120,15 @@ class StudentUI:
except ValueError:
print("体重必须为0到500之间的有效数值请重新输入")
# 从身份证号中提取出生日期
birth_date_str = id_number[6:14]
birth_date = date(int(birth_date_str[:4]), int(birth_date_str[4:6]), int(birth_date_str[6:]))
# 修改后的日期输入验证
while True:
enrollment_date = self.get_input("请输入入学日期(YYYY-MM-DD): ")
try:
date_obj = date.fromisoformat(enrollment_date)
enrollment_date_obj = date.fromisoformat(enrollment_date)
break
except ValueError:
print("日期格式错误,请使用 YYYY-MM-DD 格式例如2023-09-01")
@ -138,8 +142,8 @@ class StudentUI:
sid=student_id,
name=name,
height=height,
birth_date=date_obj, # 使用验证后的日期对象
enrollment_date=date_obj, # 使用验证后的日期对象
birth_date=birth_date, # 使用从身份证提取的出生日期
enrollment_date=enrollment_date_obj,
class_name=class_name
)
if self.bll.add_student(student):

Loading…
Cancel
Save