Python 学生管理系统开发:避免用户输入、操作确认及数据唯一性陷阱
```python # 学生管理系统 class Student: def __init__(self, student_id, name, age, gender): self.student_id = student_id self.name = name self.age = age self.gender = gender def __str__(self): return f"学号: {self.student_id}, 姓名: {self.name}, 年龄: {self.age}, 性别: {self.gender}" class StudentManager: def __init__(self): # 存储学生对象的列表 self.students = [] def add_student(self, student_id, name, age, gender): # 检查学号是否已存在 for s in self.students: if s.student_id == student_id: print("添加失败:学号已存在!") return new_student = Student(student_id, name, age, gender) self.students.append(new_student) print(f"学生 {name} 添加成功!") def remove_student(self, student_id): for s in self.students: if s.student_id == student_id: self.students.remove(s) print(f"学生 {s.name} 已删除!") return print("删除失败:未找到该学号的学生。") def search_student(self, student_id): for s in self.students: if s.student_id == student_id: print("找到学生:", s) return print("查询失败:未找到该学号的学生。") def list_all_students(self): if not self.students: print("当前无学生记录。") return print("\n=== 所有学生信息 ===") for s in self.students: print(s) def update_student(self, student_id, name=None, age=None, gender=None): for s in self.students: if s.student_id == student_id: if name: s.name = name if age: s.age = age if gender: s.gender = gender print(f"学生 {student_id} 信息已更新!") return print("更新失败:未找到该学号的学生。") # 主程序示例 def main(): manager = StudentManager() while True: print("\n--- 学生管理系统 ---") print("1. 添加学生") print("2. 删除学生") print("3. 查询学生") print("4. 修改学生") print("5. 列出所有学生") print("6. 退出系统") choice = input("请选择操作(1-6):").strip() if choice == '1': try: sid = input("学号: ").strip() name = input("姓名: ").strip() age = int(input("年龄: ")) gender = input("性别: ").strip() manager.add_student(sid, name, age, gender) except ValueError: print("输入错误:请确保年龄为整数。") elif choice == '2': sid = input("请输入要删除的学号: ").strip() manager.remove_student(sid) elif choice == '3': sid = input("请输入要查询的学号: ").strip() manager.search_student(sid) elif choice == '4': sid = input("请输入要修改的学生学号: ").strip() print("留空则不修改该项。") name = input("新姓名(可选): ").strip() or None age_input = input("新年龄(可选): ").strip() age = int(age_input) if age_input else None gender = input("新性别(可选): ").strip() or None manager.update_student(sid, name, age, gender) elif choice == '5': manager.list_all_students() elif choice == '6': print("感谢使用,系统已退出。") break else: print("无效选择,请重新输入。") if __name__ == "__main__": main() ``` 我在以往的开发过程中,碰到过以下几点需要格外小心处理的地方: - 用户输入未做充分校验可能导致程序崩溃或数据异常,例如年龄输入非数字字符。 - 删除或修改操作前未确认用户意图,容易造成误操作且无法恢复。 - 多个学生对象使用相同学号时未及时拦截,破坏了数据唯一性约束。 ######[AI写代码神器 | 955点数解答 | 2025-12-10 19:39:52]
- Linux 系统用户、组及文件操作全流程实践(字节豆包 | 1142点数解答 | 2026-03-20 17:29:38)28
- Python实现Q老师成绩管理任务:修改与查看学生成绩(字节豆包 | 191点数解答 | 2025-12-20 20:55:41)80
- Python 代码助力 Q 老师高效管理班级学生成绩:修改与查看一键搞定(字节豆包 | 326点数解答 | 2025-12-27 20:48:12)86
- Python 运行报错:urllib3 网络连接创建失败,原因及排查建议(字节豆包 | 161点数解答 | 2024-10-31 00:39:36)469
- C++ 实现:计算一排鹅与最高、最矮鹅的身高差及代码详解(字节豆包 | 549点数解答 | 2025-11-16 20:19:06)89
- 编程揭秘:计算 𝑛! 在 𝑃 进制下末尾零个数的方法与代码实现(DeepSeek | 549点数解答 | 2026-01-11 17:49:54)51
- Java代码实现从JSON数据中提取ID,涉及“数据”与“项目 - 知识库”结构(字节豆包 | 603点数解答 | 2025-04-15 22:48:51)245
- 工程师必备!10 种工程日常易用管理工具大揭秘(百度文心 | 346点数解答 | 2023-11-09 18:26:09)296
- Python 实战:学生信息列表转字典、遍历、深拷贝及数据修改全流程(GPT | 422点数解答 | 2024-10-29 15:43:54)425
- Python实战:学生成绩列表转字典,深拷贝与数据修改操作全解析(字节豆包 | 254点数解答 | 2024-10-29 16:01:39)417
- Java程序模拟教学选课:林老师开课,58 位学生选课男女比例大揭秘( | 2653点数解答 | 2024-04-02 11:00:16)475
- Java程序设计课程:模拟教学管理,统计58位选课学生男女比重( | 363点数解答 | 2024-04-05 18:31:39)479