Python学生信息管理系统(完整代码)

引言:(假装不是一个大学生课设)在现代教育管理中,学生管理系统显得尤为重要。这种系统能够帮助教育机构有效地管理学生资料、成绩、出勤以及其他教育相关活动,从而提高管理效率并减少人为错误。通过使用Python,我们可以快速开发出灵活且功能强大的管理系统。

目录

分析

系统设计

数据模型设计

功能模块划分

于是我们有了:

完整项目

使用效果


分析

一个基本的学生管理系统应该具备以下几个核心功能:

  • 学生信息管理:允许管理员添加、编辑和删除学生的基本信息如姓名、年龄、性别和班级。
  • 成绩管理:管理学生的成绩数据,包括成绩录入、修改和查询。
  • 课程管理:添加和管理课程信息,以及课程与学生的关联。
  • 查询功能:能够按条件查询学生信息和成绩,如按姓名、班级等。
  • 报表生成:生成学生的成绩单、出勤记录等报表。

系统设计

数据模型设计

        数据模型主要包括三个对象:学生、课程和成绩。学生对象包含姓名、年龄等属性;课程对象包括课程名称和课程描述;成绩对象则关联学生和课程,并记录具体的分数。

功能模块划分
  • 信息管理模块:处理学生、教师和课程的基本信息录入和修改。
  • 成绩管理模块:实现成绩的添加、更新和查询。
  • 用户界面模块:通过图形界面与用户交互,实现数据的输入和显示。
于是我们有了:
class Student:
    def __init__(self, student_id, name, age):
        self.student_id = student_id
        self.name = name
        self.age = age

    def __str__(self):
        return f"Student ID: {self.student_id}, Name: {self.name}, Age: {self.age}"

class StudentManager:
    def __init__(self):
        self.students = {}

    def add_student(self, student):
        self.students[student.student_id] = student
        print(f"Added: {student}")

    def remove_student(self, student_id):
        if student_id in self.students:
            del self.students[student_id]
            print(f"Removed student ID {student_id}")
        else:
            print(f"Student ID {student_id} not found")

    def show_all_students(self):
        for student_id, student in self.students.items():
            print(student)

# 示例
manager = StudentManager()
manager.add_student(Student(1, "Alice", 20))
manager.add_student(Student(2, "Bob", 22))
manager.show_all_students()
manager.remove_student(1)
manager.show_all_students()

我们继续完善学生管理系统的代码。首先是学生、课程和成绩管理的基本类和方法的实现

添加功能以编辑学生信息

class Student:
    def __init__(self, student_id, name, age):
        self.student_id = student_id
        self.name = name
        self.age = age

    def update_info(self, name=None, age=None):
        if name is not None:
            self.name = name
        if age is not None:
            self.age = age

    def __str__(self):
        return f"Student ID: {self.student_id}, Name: {self.name}, Age: {self.age}"

class StudentManager:
    def __init__(self):
        self.students = {}

    def add_student(self, student):
        if student.student_id in self.students:
            print("Error: Student already exists.")
        else:
            self.students[student.student_id] = student
            print(f"Added: {student}")

    def remove_student(self, student_id):
        if student_id in self.students:
            del self.students[student_id]
            print(f"Removed student ID {student_id}")
        else:
            print(f"Student ID {student_id} not found")

    def update_student(self, student_id, name=None, age=None):
        if student_id in self.students:
            self.students[student_id].update_info(name, age)
            print(f"Updated: {self.students[student_id]}")
        else:
            print(f"Student ID {student_id} not found")

    def show_all_students(self):
        for student in self.students.values():
            print(student)

# 示例用法
manager = StudentManager()
manager.add_student(Student(1, "Alice", 20))
manager.add_student(Student(2, "Bob", 22))
manager.update_student(1, name="Alice Smith")
manager.show_all_students()
manager.remove_student(1)
manager.show_all_students()

同理,设计课程管理

class Course:
    def __init__(self, course_id, name, description):
        self.course_id = course_id
        self.name = name
        self.description = description

    def __str__(self):
        return f"Course ID: {self.course_id}, Name: {self.name}, Description: {self.description}"

class CourseManager:
    def __init__(self):
        self.courses = {}

    def add_course(self, course):
        if course.course_id in self.courses:
            print("Error: Course already exists.")
        else:
            self.courses[course.course_id] = course
            print(f"Added: {course}")

    def remove_course(self, course_id):
        if course_id in self.courses:
            del self.courses[course_id]
            print(f"Removed course ID {course_id}")
        else:
            print("Course ID not found")

    def show_all_courses(self):
        for course in self.courses.values():
            print(course)

# 示例用法
course_manager = CourseManager()
course_manager.add_course(Course(101, "Mathematics", "Introduction to Algebra"))
course_manager.add_course(Course(102, "English", "Literature and Composition"))
course_manager.show_all_courses()
course_manager.remove_course(101)
course_manager.show_all_courses()

完整项目

        接下来,我们将整合学生、课程和成绩管理功能,并添加一个简单的命令行交互界面,以便用户可以通过终端操作这个学生管理系统。

        这个程序允许用户通过命令行添加和查看学生、课程和成绩信息。用户可以通过输入选择来操作系统,如添加学生、课程、成绩,或者查看已录入的信息。这为用户提供了一个基本但完整的界面来与学生管理系统进行交互。

class Student:
    def __init__(self, student_id, name, age):
        self.student_id = student_id
        self.name = name
        self.age = age

    def update_info(self, name=None, age=None):
        if name is not None:
            self.name = name
        if age is not None:
            self.age = age

    def __str__(self):
        return f"学生ID: {self.student_id}, 姓名: {self.name}, 年龄: {self.age}"

class Course:
    def __init__(self, course_id, name, description):
        self.course_id = course_id
        self.name = name
        self.description = description

    def __str__(self):
        return f"课程ID: {self.course_id}, 课程名称: {self.name}, 描述: {self.description}"

class Grade:
    def __init__(self, student_id, course_id, score):
        self.student_id = student_id
        self.course_id = course_id
        self.score = score

    def __str__(self):
        return f"学生ID: {self.student_id}, 课程ID: {self.course_id}, 成绩: {self.score}"

class Manager:
    def __init__(self):
        self.students = {}
        self.courses = {}
        self.grades = []

    def add_student(self, student):
        self.students[student.student_id] = student

    def add_course(self, course):
        self.courses[course.course_id] = course

    def add_grade(self, grade):
        self.grades.append(grade)

    def show_students(self):
        for student in self.students.values():
            print(student)

    def show_courses(self):
        for course in self.courses.values():
            print(course)

    def show_grades(self):
        for grade in self.grades:
            print(grade)

def main():
    manager = Manager()

    while True:
        print("\n菜单:")
        print("1. 添加学生")
        print("2. 添加课程")
        print("3. 添加成绩")
        print("4. 显示所有学生")
        print("5. 显示所有课程")
        print("6. 显示所有成绩")
        print("7. 退出")
        choice = input("请输入选项: ")

        if choice == '1':
            student_id = input("请输入学生ID: ")
            name = input("请输入姓名: ")
            age = input("请输入年龄: ")
            manager.add_student(Student(student_id, name, age))
        elif choice == '2':
            course_id = input("请输入课程ID: ")
            name = input("请输入课程名称: ")
            description = input("请输入课程描述: ")
            manager.add_course(Course(course_id, name, description))
        elif choice == '3':
            student_id = input("请输入学生ID以添加成绩: ")
            course_id = input("请输入课程ID以添加成绩: ")
            score = input("请输入成绩: ")
            manager.add_grade(Grade(student_id, course_id, score))
        elif choice == '4':
            manager.show_students()
        elif choice == '5':
            manager.show_courses()
        elif choice == '6':
            manager.show_grades()
        elif choice == '7':
            print("正在退出...")
            break
        else:
            print("无效选项,请输入1至7之间的数字。")

if __name__ == "__main__":
    main()
使用效果

试用一下:

        可能发的有点晚,能救一个算一个吧

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/770755.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

IDEA版本推荐

推荐版本: IDEA 2024.1.4 下载链接:IDEA下载 (下载时可以往下拖,选到自己想要的版本哦) 本人由于项目开发需要,陆续用过几个版本的IDEA,包括: IDEA 2020.2.4 。这是在看韩顺平老师…

昇思25天学习打卡营第9天|CycleGAN图像风格迁移互换

文章目录 昇思MindSpore应用实践基于MindSpore的CycleGAN图像风格迁移互换1、CycleGAN 概述2、生成器部分3、判别器部分4、优化器和损失函数5、模型训练6、模型推理 Reference 昇思MindSpore应用实践 本系列文章主要用于记录昇思25天学习打卡营的学习心得。 基于MindSpore的C…

打造商贸物流“产-供-销”、“仓-运-配”全流程供应链

在当今全球化的商业环境中,商贸物流平台的搭建成为企业提升效率、降低成本并增强市场竞争力的关键因素。在现代商业环境中,商贸与物流之间的紧密协作是业务成功的关键因素。然而,许多组织面临着信息不对称、资源配套不足、以及系统间隔离等痛…

Windows的管理工具

任务计划程序:这是一个用来安排任务自动运行的工具。你可以在这里创建新的任务,设定触发条件,并指定任务的操作。 事件查看器:这是一套日志记录和分析工具,,你可以了解到系统的工作状况,帮助诊…

Spark大数据处理:技术、应用与性能优化(全)PDF书籍推荐分享

本书从一个系统化的视角,秉承大道至简的主导思想,介绍Spark中最值得关注的内 容,讲解Spark部署、开发实战,并结合Spark的运行机制及拓展,帮读者开启Spark技术之旅。 Spark大数据处理:技术、应用与性能优化…

阿里云邮件推送邮件发送失败的问题排查解决

阿里云邮件推送为何失败?解决邮件推送失败的步骤指南! 即便是功能强大的阿里云邮件推送服务,也可能在实际使用中遇到邮件发送失败的问题。AokSend将详细介绍如何排查和解决阿里云邮件推送邮件发送失败的问题。 阿里云邮件推送:验…

深入浅出 LangChain 与智能 Agent:构建下一代 AI 助手

我们小时候都玩过乐高积木。通过堆砌各种颜色和形状的积木,我们可以构建出城堡、飞机、甚至整个城市。现在,想象一下如果有一个数字世界的乐高,我们可以用这样的“积木”来构建智能程序,这些程序能够阅读、理解和撰写文本&#xf…

6.26.3 基于Transformer的深度神经网络在数字乳腺断层合成图像上的乳腺癌分类

开发一种有效的深度神经网络模型,该模型结合了相邻图像部分的上下文,以检测数字乳腺断层合成(DBT)图像上的乳腺癌。 数字乳房断层合成(DBT)是一种医学成像技术,其中检测器围绕患者以有限角度旋转并记录多幅图像。然后将这些图像重建为二维(2D…

盛元广通打造智慧校园实验室安全管理系统

盛元广通智慧校园实验室安全管理系统以安全为重点,构建由学校、二级单位、实验室组成的三级联动的实验室安全多级管理体系、多类用户角色,内置教育部标准检查表,支撑实验室相关业务过程的智慧管理。实现通过PC端/手机移动端开展检查工作、手机…

一个opencv实现检测程序

引言 图像处理是计算机视觉中的一个重要领域,它在许多应用中扮演着关键角色,如自动驾驶、医疗图像分析和人脸识别等。边缘检测是图像处理中的基本任务之一,它用于识别图像中的显著边界。本文将通过一个基于 Python 和 OpenCV 的示例程序&…

Vue86-Vuex中的getters属性

一、getters的使用 1-1、index.js中getters的书写 计算属性computed靠return获得返回值! 1-2、组件中getters的调用 state是数据源,getters是拿着数据源里的东西进行一番加工。像极了:data和computed 二、小结

Map Set(Java篇详解)

🍁 个人主页:爱编程的Tom💫 本篇博文收录专栏:Java专栏👉 目前其它专栏:c系列小游戏 c语言系列--万物的开始_ 等 🎉 欢迎 👍点赞✍评论⭐收藏💖三连支持…

设备的智能决策AI大模型与ESP32-S3芯片应用,启明云端乐鑫代理商

在数字化浪潮的推动下,智能家居、智能安防、智能设备等领域对AI技术的需求日益增长,人工智能(AI)正迅速成为推动各行各业创新的核心力量。 AI大模型技术以其强大的数据处理能力和深度学习能力,正在成为智能时代的新动…

图书电商引入实在Agent:自动化运营提效80%,节省人天1000+

某知名教辅图书品牌深耕中小学教辅图书领域,是中国最具影响力的教育出版策划与发行集团之一,以丰富的图书品类,满足了小学、初中、高中各年龄段读者多元化的阅读需求。 2023年,该品牌在运营、客服等多部门超60个场景中部署实在Ag…

维护el-table列,循环生成el-table

1、lib/setting.js(维护table列) const columns[{ label: 类型, prop: energyName, width: 150, isText: true },{ label: 消耗量(t或10⁴m), prop: inputNum, isInput: true },{label: CO₂,children: [// { label: 核算因子, prop: co2FactorValue, w…

IC烧录员-带着工程师的梦想远航!

如果说软件工程师是代码程序的创造者,那么IC烧录员就是把工程师们辛苦敲代码,日夜辛劳的成果烧录到芯片里面的实践者,是他们,让工程师们的梦想运用到实践中,是他们带着工程师的梦想远航,他们的薪酬或许没有…

SprongBoot3整合Knife4j实现在线接口文档

大家好,我是晓凡。 写在前面 在上一篇文章,我们详细介绍了SpringBoot3 怎么整合SpringDoc实现在线接口文档。但是,有不少小伙伴 都觉得接口界面太丑了。有没有什么更美观一点的UI界面呢? 当然是有的了,毕竟这是一个…

temu a4接口 逆向

声明(lianxi a15018601872) 本文章中所有内容仅供学习交流使用,不用于其他任何目的,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关! 前言(lianxi …

c++习题09-分离整数的各个数

目录 一,题目 二,思路 三,代码 一,题目 二,思路 一开始我想到的是将简单容易输出的1000以内的数先进行相应的运算,再输出之后再对1000以上的数字进行判断(主要还是想先将很大的数变小&#x…

每日一题——Python实现PAT乙级1026 程序运行时间(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码结构和逻辑 时间复杂度 空间复杂度 代码优化建议 总结 我要更强 …