Update add_student.py

master
ppuz2f57w 1 month ago
parent 1011aec494
commit ac76680fe0

@ -80,10 +80,50 @@ def display_students(students: List[Student]):
print(f"共找到 {len(students)} 名学生") print(f"共找到 {len(students)} 名学生")
class StudentTUI: class StudentTUI:
def __init__(self, bll: StudentBLL): def __init__(self, bll: StudentBLL):
self.bll = bll self.bll = bll
# 省份代码映射表
self.province_codes = {
'11': '北京市', '12': '天津市', '13': '河北省', '14': '山西省', '15': '内蒙古自治区',
'21': '辽宁省', '22': '吉林省', '23': '黑龙江省', '31': '上海市', '32': '江苏省',
'33': '浙江省', '34': '安徽省', '35': '福建省', '36': '江西省', '37': '山东省',
'41': '河南省', '42': '湖北省', '43': '湖南省', '44': '广东省', '45': '广西壮族自治区',
'46': '海南省', '50': '重庆市', '51': '四川省', '52': '贵州省', '53': '云南省',
'54': '西藏自治区', '61': '陕西省', '62': '甘肃省', '63': '青海省', '64': '宁夏回族自治区',
'65': '新疆维吾尔自治区'
}
def validate_id_card(self, id_card: str) -> bool:
"""验证身份证号是否合法"""
if len(id_card) != 18:
return False
# 校验前17位是否为数字
if not id_card[:-1].isdigit():
return False
# 校验最后一位是否为数字或X
if not (id_card[-1].isdigit() or id_card[-1].upper() == 'X'):
return False
return True
def get_gender_from_id_card(self, id_card: str) -> bool:
"""从身份证号获取性别(男True/女False)"""
if len(id_card) != 18:
raise ValueError("身份证号长度不正确")
gender_code = int(id_card[16])
return gender_code % 2 == 1 # 奇数表示男性,偶数表示女性
def get_hometown_from_id_card(self, id_card: str) -> str:
"""从身份证号获取籍贯"""
if len(id_card) != 18:
raise ValueError("身份证号长度不正确")
province_code = id_card[:2]
return self.province_codes.get(province_code, "未知地区")
def run(self): def run(self):
while True: while True:
@ -115,8 +155,21 @@ class StudentTUI:
try: try:
name = input("姓名: ").strip() name = input("姓名: ").strip()
id_card = input("身份证号: ").strip() id_card = input("身份证号: ").strip()
# 验证身份证号
if not self.validate_id_card(id_card):
print("身份证号不合法!")
return
# 自动获取性别
gender = self.get_gender_from_id_card(id_card)
print(f"自动识别性别: {'' if gender else ''}")
# 自动获取籍贯
hometown = self.get_hometown_from_id_card(id_card)
print(f"籍贯: {hometown}")
stu_id = input("学号: ").strip() stu_id = input("学号: ").strip()
gender = input("性别(男/女): ").strip().lower() == ''
height = int(input("身高(cm): ").strip()) height = int(input("身高(cm): ").strip())
weight = float(input("体重(kg): ").strip()) weight = float(input("体重(kg): ").strip())
enrollment_date = input("入学日期(YYYY-MM-DD): ").strip() enrollment_date = input("入学日期(YYYY-MM-DD): ").strip()
@ -191,8 +244,6 @@ class StudentTUI:
print("\n请输入要更新的字段 (留空表示不更新):") print("\n请输入要更新的字段 (留空表示不更新):")
name = input(f"姓名({student.name}): ").strip() or student.name name = input(f"姓名({student.name}): ").strip() or student.name
stu_id = input(f"学号({student.stu_id}): ").strip() or student.stu_id stu_id = input(f"学号({student.stu_id}): ").strip() or student.stu_id
gender = input(f"性别(男/女)({'' if student.gender else ''}): ").strip()
gender = gender.lower() == '' if gender else student.gender
height = input(f"身高({student.height}): ").strip() height = input(f"身高({student.height}): ").strip()
height = int(height) if height else student.height height = int(height) if height else student.height
weight = input(f"体重({student.weight}): ").strip() weight = input(f"体重({student.weight}): ").strip()
@ -208,7 +259,7 @@ class StudentTUI:
name=name, name=name,
id_card=id_card, # 身份证号不可更改 id_card=id_card, # 身份证号不可更改
stu_id=stu_id, stu_id=stu_id,
gender=gender, gender=student.gender, # 性别从身份证号自动获取,不可更改
height=height, height=height,
weight=weight, weight=weight,
enrollment_date=enrollment_date, enrollment_date=enrollment_date,
@ -239,6 +290,9 @@ class StudentTUI:
id_card = input("请输入身份证号: ").strip() id_card = input("请输入身份证号: ").strip()
student = self.bll.get_student_by_id_card(id_card) student = self.bll.get_student_by_id_card(id_card)
if student: if student:
# 显示籍贯信息
hometown = self.get_hometown_from_id_card(student.id_card)
print(f"\n籍贯: {hometown}")
display_students([student]) display_students([student])
else: else:
print("未找到匹配的学生") print("未找到匹配的学生")
@ -457,32 +511,7 @@ def main():
# 创建用户界面 # 创建用户界面
tui = StudentTUI(bll) tui = StudentTUI(bll)
tui.run() tui.run()
def fun(self):
"""运行UI"""
while True:
self.display_menu()
choice = input("请选择操作: ").strip()
if choice == '1':
self.add_student()
elif choice == '2':
self.delete_student()
elif choice == '3':
self.update_student()
elif choice == '5':
self.show_stats()
elif choice == '6':
self.import_export_data()
elif choice == '7':
self.clear_students()
elif choice == '8':
self.query_student()
elif choice == '4':
print("感谢使用学生信息管理系统!")
break
else:
print("无效的选择,请重新输入!")
if __name__ == "__main__": if __name__ == "__main__":
main() main()
Loading…
Cancel
Save