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

news2024/11/25 12:53:07

引言:(假装不是一个大学生课设)在现代教育管理中,学生管理系统显得尤为重要。这种系统能够帮助教育机构有效地管理学生资料、成绩、出勤以及其他教育相关活动,从而提高管理效率并减少人为错误。通过使用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.coloradmin.cn/o/1893004.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ESP32S SENSOR与VDET引脚 无法输出问题 注意PWM输出的任意引脚并不包括所有引脚

问题记录: 注意PWM输出的任意引脚并不包括所有引脚,需要排除无法作为输出的引脚。数据手册中并没有在管脚表格中标明,如下表: 我在做esp32智能手环的时候,将GPIO39引脚(SENSOR_VN)作为蜂鸣器的P…

h5 video 播放视频

纯属娱乐,非技术之谈 https://andi.cn/page/621497.html

latex 报错解决①aligned ②begin document

1. 是aligned,不是align!! 网上写的公式大多是这样的 \begin{equation}\label{eq:2} \begin{align} Q\left( {s,t} \right) a{s^2} 2bst c{t^2} 2ds 2et f \end{align} \end{equation}但是报错: ! Package amsmath Erro…

顶顶通呼叫中心中间件(mod_cti基于FreeSWITCH)-http话术接口测试流程

文章目录 前言联系我们部署http话术PHP例子Java例子 登录ccadmin-web配置拨号方案创建与注册分机创建分机注册分机 测试 前言 用户一直想体验机器人话术的效果,但却找不到门路。本文提供了配置机器人话术接口的配置流程,供用户体验。用户可以根据本文的…

深度学习简介-AI(三)

深度学习简介 深度学习简介深度学习例子深度学习训练优化1.随机初始化2.优化损失函数3.优化器选择4.选择/调整模型结构 深度学习常见概念隐含层/中间层随机初始化损失函数导数与梯度优化器Mini Batch/epoch 深度学习训练逻辑图 深度学习简介 深度学习例子 猜数字 A: 我现在心…

Python特征工程 — 1.3 对数与指数变换

目录 1 对数变换 1.1 对数变换的概念 1.2 对数变换实战 2 指数变换 2.1 指数变换的概念 2.2 指数变换实战 3 Box-Cox变换 3.1 Box-Cox变换概念 3.2 Box-Cox变换实战 1 对数变换 1.1 对数变换的概念 特征对数变换和指数变换是数据预处理中的两种常用技术,…

基于Hadoop平台的电信客服数据的处理与分析④项目实现:任务15:数据生产

任务描述 电信数据生产是一个完整且严密的体系,这样可以保证数据的鲁棒性。在本项目的数据生产模块中,我们来模拟生产一些电信数据。同时,我们必须清楚电信数据的格式和数据结构,这样才能在后续的数据产生、存储、分析和展示环节…

前端基础:CSS(篇一)

目录 css概述 CSS与HTML的关系 基本语法 行内样式表 代码 运行 内嵌样式表 代码 运行 外部样式表 代码 运行 选择器 标签选择器 代码 运行 id选择器 代码 运行 类选择器 代码 运行 选择器优先问题 通配选择器 选中所有的标签 代码 运行 选择器组…

网安小贴士(6)TCP/IP分层

一、前言 1983年,美国国防部决定将TCP/IP作为所有计算机网络的标准协议,这标志着TCP/IP正式成为互联网的基础协议。随着个人计算机的普及和网络技术的发展,TCP/IP模型被广泛应用于各种网络环境中,包括局域网(LAN&#…

MySQL单表千万级数据查询优化大家怎么说(评论有亮点)

题图来自APOD 上次写了一篇MySQL优化实战的文章“MySQL千万级数据从190秒优化到1秒全过程”。 这篇文章主要还是在实战MySQL优化,所以从造数据到查询SQL优化SQL都没有业务或者其它依赖,优化的技巧也不涉及软件架构就是纯SQL优化。 由于笔者经验有限和…

AGI 之 【Hugging Face】 的【Transformer】的 [ Transformer 架构 ] / [ 编码器 ]的简单整理

AGI 之 【Hugging Face】 的【Transformer】的 [ Transformer 架构 ] / [ 编码器 ]的简单整理 目录 AGI 之 【Hugging Face】 的【Transformer】的 [ Transformer 架构 ] / [ 编码器 ]的简单整理 一、简单介绍 二、Transformer 三、Transformer架构 四、编码器 1、自注意…

【flutter问题记录】 无效的源发行版:17

问题描述 在看开源项目的时候,clone下来后一直编译失败,提示:无效的源发行版:17,看描述大概是jdk的版本问题,但是在Android studio各种指定都无用,网上资料也没有flutter项目的解决方案,最后在…

智源十大行业高质量数据集开放申请,经验证可显著提升模型行业能力!

近日,智源研究院非开源、高质量行业预训练数据集开放申请。该数据集覆盖医疗、教育、文学、金融、旅游、法律、体育、汽车、新闻、农业十大行业,总量达597GB。 智源研究院对较难获取的非开源高质量数据、合作伙伴贡献的数据、有行业特征的开源数据进行了…

深度分析和对比本地大语言模型Ollama和LocalAI

前言 在充满活力的人工智能(AI)世界中,开源工具已成为开发人员和组织利用LLM(大型语言模型)力量的重要资源。这些工具通过提供对高级LLM模型的访问权限,使各种用户能够构建创新和前沿的解决方案。在众多可…

【Python】变量与基本数据类型

个人主页:【😊个人主页】 系列专栏:【❤️Python】 文章目录 前言变量声明变量变量的命名规则 变量赋值多个变量赋值 标准数据类型变量的使用方式存储和访问数据:参与逻辑运算和数学运算在函数间传递数据构建复杂的数据结构 NameE…

【博客21】缤果Qt5仿小米耳机APP布局_PC端软件(高级篇)

小米耳机 提示:此软件只是实现简单的布局和界面跳转逻辑,并未加入小米协议相关内容 因需要鉴权方式等也无法进行通讯处理开发工具::qt-opensource-windows-x86-5.14.2 (编程语言C) 反编译工具: apktool 小米小爱开放平台 - 语音服务平台 - 文档中心 …

聚焦大模型应用落地,2024全球数字经济大会人工智能专题论坛在京举办

7月1日下午,2024全球数字经济大会人工智能专题论坛在中关村国家自主创新示范区会议中心举办。论坛紧扣大模型应用落地这一热点,以“应用即未来——大模型赋能千行百业,新生态拥抱产业未来”为主题,备受社会各界关注。 一、北京已…

Docker镜像加速配置

由于当前运营商网络问题,可能会导致您拉取 Docker Hub 镜像变慢,索引可以配置阿里云镜像加速器。阿里云登录 - 欢迎登录阿里云,安全稳定的云计算服务平台 每个人镜像地址都不一样,需要登陆阿里云自行查看,地址在上面&a…

底层软件 | Linux设备驱动模型和sysfs文件系统

Linux设备驱动模型和sysfs文件系统 Linux内核在2.6版本中引入设备驱动模型,简化了驱动程序的编写。Linux设备驱动模型包含设备(device)、总线(bus)、类(class)和驱动(driver),它们之间相互关联。其中**设备(device)和驱动(driver)通过总线(bus)**绑定在…

检测水管缺水的好帮手-管道光电液位传感器

管道光电液位传感器是现代清水管道管理中的重要技术创新,不仅提高了检测液位的精确度,还解决了传统机械式和电容式传感器存在的诸多问题,成为检测管道缺水的可靠利器。 该传感器采用先进的光学感应原理,利用红外光学组件通过精密…