当前位置: 首页 > news >正文

学生管理系统2.0(面向对象)

 一、第一步:设计“学生数据模型”(Student 类)


核心目标:定义“学生”这一数据的结构,方便后续存储和操作。  

1. 属性封装:用 `__init__` 方法定义学生的核心属性(`id`/`name`/`age`/`gender`/`etc`),将每个学生的信息“打包”成一个对象,避免零散数据难以管理。  
2. 字典格式适配:主动创建 `self.information` 字典,将对象属性转为 `key-value` 格式——这是为了后续能直接用 `json.dump` 存储(JSON 本质是键值对,字典可直接序列化)。  
3. 打印友好化:用 `__str__` 方法自定义对象的打印格式,避免直接打印对象时显示晦涩的内存地址,方便用户查看学生信息。  

简单说:`Student` 类是“学生数据的模板”,每个学生都是这个模板的实例,实例的 `information` 字典则是“能被 JSON 存储的通用格式”


二、第二步:设计“系统核心逻辑”(StudentManagement类)


核心目标:围绕“学生数据”,实现“载入-操作-保存”的完整闭环,这是系统的“大脑”。  
思路流程可拆解为 “启动 → 核心循环 → 功能执行 → 退出” 四大阶段:


阶段1:系统启动(cycle方法 + load_student_information方法)

1. 欢迎与加载:启动后先打印欢迎语,再调用 `load_student_information` 加载 JSON 文件。  
2. 文件加载逻辑:
- 让用户输入文件名 → 自动拼接 `.json` 后缀(简化用户操作);  
- 用 `for line in rf` 逐行读取文件(因为保存时是“一行一个学生字典”的 JSON Lines 格式);  
- 跳过空行 → 用 `json.loads` 解析每行字典 → 存入 `student_list`(系统运行时的“内存数据库”);  
- 异常处理:若文件不存在/格式错误,返回 `None` 并退出程序(避免错误数据导致系统崩溃)。  
3. 启动校验:若加载失败(`student_list == None`),直接退出;若加载成功,进入后续核心循环。  


阶段2:进入“核心操作循环”(cycle 方法 + display_interface + choices方法)

核心目标:让系统持续运行,接受用户操作,直到用户选择退出。  

1.界面展示:每次循环先调用 `display_interface` 打印操作菜单(1-添加/2-删除/…/0-退出),让用户明确可执行的操作。  
2. 操作分发:调用 `choices` 方法接收用户输入的序号,根据序号“分发”到对应的功能方法(如输入 `1` 就调用 `add_student`)。  
3. 循环保持:每次操作结束后,打印“返回主界面”并等待 2 秒,再重新展示菜单——实现“操作→返回→再操作”的循环,直到用户输入 `0` 退出。  


阶段3:执行“核心功能”(5个操作方法)

每个功能都围绕“内存中的 `student_list`”展开,操作的是“加载到内存的学生数据”,最后通过“保存”同步到文件。  

1. add_student(添加学生)

核心思路是 “先防重复,再存数据”:
第一步:让用户输入学生 id,遍历 student_list 检查这个 id 是否已经存在(避免同一 id 对应多个学生);
第二步:如果 id 未重复,继续输入学生的姓名、年龄、性别、其他信息;
第三步:用这些信息创建 Student 实例,把实例的 information 字典(可直接被 JSON 处理的格式)添加到 student_list;
第四步:调用 display_all_students 显示更新后的所有学生,让用户确认添加结果。


2. delete_student(删除学生)

核心思路是 “精准定位,删除后反馈”:
第一步:让用户输入要删除的学生 id;
第二步:遍历 student_list,找到 id 匹配的学生字典;
第三步:如果找到,用 remove 方法从列表中删除该字典,打印 “已删除” 并显示更新后的列表;
第四步:如果遍历完列表都没找到匹配的 id,打印 “id 不存在或有误” 的提示,避免用户误操作。


3. modify_student(修改学生)

核心思路是 “定位后细改,改完即时确认”:
第一步:让用户输入要修改的学生 id,遍历列表找到对应字典;
第二步:进入子循环,提供 “修改姓名 / 年龄 / 性别 / 其他信息” 的选项,让用户选择要改的内容;
第三步:根据用户选择,直接修改字典中对应键的值(比如改姓名就赋值 student['name'] = 新姓名);
第四步:每次修改后打印当前学生的完整信息,让用户确认修改结果;
第五步:用户输入 5 时退出子循环,结束修改操作;若没找到 id,则提示错误。


4. display_all_students(显示所有学生)

核心思路是 “直观展示全部数据”:
先打印 “目前所有学生的信息” 作为标题,让用户明确内容;
遍历 student_list,逐个打印每个学生的字典(包含 id、姓名、年龄等所有信息),确保用户能看到完整的当前数据状态。


5. query_individual_student(查询单个学生)

核心思路是 “精准查询,快速反馈”:
第一步:让用户输入要查询的学生 id;
第二步:遍历 student_list 找到 id 匹配的字典,找到后直接打印该学生信息;
第三步:如果没找到匹配的 id,打印 “id 不存在或有误” 的提示,避免用户等待无反馈。

阶段4:保存与退出(save_student_information方法 + exit_system 方法)

核心目标:将内存中修改后的 `student_list` 同步到文件,避免数据丢失;退出时友好提示。  

1. 保存逻辑:
- 若 `student_list` 非空 → 逐行写入文件(每行一个学生字典,与加载格式对应);  
- 若 `student_list` 为空 → 询问用户是否继续保存(避免误删空文件),确认后写入空列表 `[]`(保证文件格式合法)。  
2. 退出逻辑:用户输入 `0` 时,调用 `exit_system` 打印告别语并退出,结束循环。


三、第三步:系统运行入口(`if __name__ == '__main__'`)


核心目标:让系统能独立运行,而不是作为模块被导入时执行。  

创建 `StudentManagement` 实例 → 调用 `cycle` 方法启动系统——这是“触发系统运行的开关”,符合 Python 程序的标准入口写法。


四、整体思路总结:“数据-流程-功能”的闭环

本质是围绕 **“学生数据”** 构建了一个完整的“生命周期管理”:
1. **数据从哪来**:从 JSON 文件加载(`load`)→ 存入内存 `student_list`;  
2. **数据怎么用**:通过“增删改查”方法操作 `student_list`(内存中的数据);  
3. **数据到哪去**:通过 `save` 方法将 `student_list` 写回 JSON 文件(持久化);  
4. **系统怎么转**:用 `cycle` 方法实现“加载→菜单→操作→返回”的循环,直到退出。  

http://www.dtcms.com/a/462552.html

相关文章:

  • 桐庐建设局网站网络营销方案500字
  • 线段树上二分模板
  • Origin绘制3D坐标下边际直方图
  • 二叉树OJ(三)543. 二叉树的直径 124. 二叉树中的最大路径和 困难
  • 濮阳做公司网站重庆物流最新消息
  • IDEA Maven 仓库配置优先级
  • 手机网站建设网站wordpress 后台登陆 修改
  • 做网站分什么软件wordpress epanel
  • 微信生活门户网站源码局网站建设申请
  • 做的网站没流量吗什么叫门户类网站
  • 互动网站如何做h5邀请函制作软件app
  • ImageNet数据集
  • 做传销网站后果严重吗个人公司如何注册
  • 火箭升空检测识别数据集:近3w图像,3类,yolo标注
  • 【密码学】对称加密与非对称加密在JS逆向与爆破测试中的应用
  • Qt 自定义无标题栏窗口:FramelessWidget 实现与解析
  • 海林建设局网站济南百度推广排名优化
  • 扩充ec2硬盘对应的lvm
  • 哪些公司的网站做的漂亮上海优化排名推广
  • 做素材类的网站赚钱吗改进网站建设
  • 中山好的网站建设西安公关公司
  • 网页网站的制作过程dedecms建设慕课网站
  • K8S(二)—— K8S 1.28 集群部署指南(kubeadm 方式)
  • Eclipse Mosquitto 在小内存下怎么修改配置文件
  • 猫眼浏览器(Chrome内核增强版浏览器)官方便携版
  • 福建省住房和建设厅网站合同 制作 网站
  • 构建可信数据体系——解读数据治理指南-构建可信数据路线图【附全文阅读】
  • qemu调试edk2
  • 正规网站做菠菜广告焦作网站建设哪家正规
  • 有什么网站可以发布个人信息网站优化计划书