学生成绩管理系统——python

一个简单的学生成绩管理系统可以包含以下功能:

  • 添加学生信息
  • 删除学生信息
  • 更新学生信息
  • 查看所有学生信息
  • 按成绩排序
  • 退出时能够保留学生信息

在这个版本里面:

  • 学生成绩被存储为一个包含学科名称和成绩的字典。
  • 用户可以输入多个学科的成绩。
  • 可以按特定学科的成绩对学生进行排序。

学生信息在添加、删除或更新后会自动保存到students.json文件中。

程序启动时会从students.json文件中加载学生信息。

学生类包含to_dictfrom_dict方法,用于将学生对象转换为字典格式和从字典格式创建学生对象。

当用户选择按学科成绩排序后,系统会立即显示按所选学科排序后的学生信息。这样用户可以清楚地看到排序结果。

import json

class Student:
    def __init__(self, student_id, name, grades):
        self.student_id = student_id
        self.name = name
        self.grades = grades  # A dictionary to hold subject: grade pairs

    def to_dict(self):
        return {
            "student_id": self.student_id,
            "name": self.name,
            "grades": self.grades
        }

    @classmethod
    def from_dict(cls, data):
        return cls(data['student_id'], data['name'], data['grades'])

class StudentManagementSystem:
    def __init__(self, filename='students.json'):
        self.filename = filename
        self.students = self.load_students()

    def add_student(self, student):
        self.students.append(student)
        self.save_students()

    def delete_student(self, student_id):
        self.students = [s for s in self.students if s.student_id != student_id]
        self.save_students()

    def update_student(self, student_id, name=None, grades=None):
        for student in self.students:
            if student.student_id == student_id:
                if name:
                    student.name = name
                if grades:
                    student.grades.update(grades)
        self.save_students()

    def view_students(self):
        return self.students

    def sort_students_by_subject_grade(self, subject):
        self.students.sort(key=lambda x: x.grades.get(subject, 0), reverse=True)

    def save_students(self):
        with open(self.filename, 'w') as f:
            json.dump([s.to_dict() for s in self.students], f, indent=4)

    def load_students(self):
        try:
            with open(self.filename, 'r') as f:
                return [Student.from_dict(data) for data in json.load(f)]
        except FileNotFoundError:
            return []

def main():
    sms = StudentManagementSystem()
    print('--------------------------------')
    print('        欢迎来到学生成绩管理系统       ')
    print('-------------------------------')
    
    while True:
        print("\n1. 添加学生")
        print("2. 删除学生")
        print("3. 更新学生")
        print("4. 查看学生")
        print("5. 按学科成绩排序学生")
        print("6. 退出")
        
        choice = input("请输入你的选择: ")
        
        if choice == '1':
            student_id = int(input("请输入学生ID: "))
            name = input("请输入学生姓名: ")
            grades = {}
            while True:
                subject = input("请输入学科名 (输入 'done' 完成): ")
                if subject.lower() == 'done':
                    break
                grade = float(input(f"请输入 {subject} 的成绩: "))
                grades[subject] = grade
            sms.add_student(Student(student_id, name, grades))
        elif choice == '2':
            student_id = int(input("请输入要删除的学生ID: "))
            sms.delete_student(student_id)
        elif choice == '3':
            student_id = int(input("请输入要更新的学生ID: "))
            name = input("请输入新的学生姓名 (留空则不更新): ")
            grades = {}
            while True:
                subject = input("请输入要更新的学科名 (输入 'done' 完成): ")
                if subject.lower() == 'done':
                    break
                grade = input(f"请输入 {subject} 的新成绩 (留空则不更新): ")
                if grade:
                    grades[subject] = float(grade)
            sms.update_student(student_id, name if name else None, grades)
        elif choice == '4':
            students = sms.view_students()
            for student in students:
                grades_str = ", ".join([f"{subject}: {grade}" for subject, grade in student.grades.items()])
                print(f"ID: {student.student_id}, Name: {student.name}, Grades: {grades_str}")
        elif choice == '5':
            subject = input("请输入要按成绩排序的学科: ")
            sms.sort_students_by_subject_grade(subject)
            print(f"学生已按 {subject} 成绩排序。")
            students = sms.view_students()
            for student in students:
                grades_str = ", ".join([f"{subject}: {grade}" for subject, grade in student.grades.items()])
                print(f"ID: {student.student_id}, Name: {student.name}, Grades: {grades_str}")
        elif choice == '6':
            break
        else:
            print("无效的选择,请重新输入。")

if __name__ == "__main__":
    main()

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值