28 实例练习-学生成绩管理系统

以下是以一个简单的学生成绩管理系统项目开发为例,融合 Python 基础知识

代码下载见文末

一、项目初始化与数据结构定义

新建一个student.py文件,定义学生类,用于存储学生的基本信息和成绩,并采用main的方式对学生类进行测试。

# 定义学生类,用于存储学生的基本信息和成绩
class Student:
    def __init__(self, student_id, name):
        self.student_id = student_id
        self.name = name
        self.scores = {}

    def add_score(self, course, score):
        self.scores[course] = score

    def get_average_score(self):
        if not self.scores:
            return 0
        return sum(self.scores.values()) / len(self.scores)

def mian():
    # 初始化一个空的学生列表,用于存储所有学生信息
    students = []

    # 创建一个学生对象并添加到学生列表中
    student1 = Student(1, "张三")
    student1.add_score("数学", 85)
    student1.add_score("语文", 90)
    students.append(student1)
    print(students[0].get_average_score())

if __name__ == '__main__':
    mian()

知识点:类的定义与使用、对象的创建、字典和列表数据结构的操作。

二、数据输入与验证

新建一个stu_manager.py文件,对学生类进行管理和操作

from student import Student

def input_student_info():
    while True:
        try:
            student_id = int(input("请输入学生的学号:"))
            name = input("请输入学生的姓名:")
            break
        except ValueError:
            print("输入的学号必须是整数,请重新输入。")

    student = Student(student_id, name)
    while True:
        course = input("请输入课程名称(输入 '结束' 停止添加课程):")
        if course == "结束":
            break
        try:
            score = float(input(f"请输入 {student.name} 在 {course} 课程的成绩:"))
            if score < 0 or score > 100:
                print("成绩必须在 0 到 100 之间,请重新输入。")
            else:
                student.add_score(course, score)
        except ValueError:
            print("输入的成绩必须是数字,请重新输入。")

    return student

def main():
    # 初始化一个空的学生列表
    students = []
    new_student = input_student_info()
    students.append(new_student)
    print(students[0].get_average_score())

if __name__ == '__main__':
    main()

知识点:用户输入处理、异常处理、数据验证。

三、数据查询与展示

def display_student_info(student):
    print(f"学号:{student.student_id}")
    print(f"姓名:{student.name}")
    print("成绩信息:")
    for course, score in student.scores.items():
        print(f"{course}: {score}")
    print(f"平均成绩:{student.get_average_score():.2f}")

# 根据学号查询学生信息
def find_student_by_id(student_id, students):
    for student in students:
        if student.student_id == student_id:
            return student
    return None

知识点:条件判断、循环遍历、函数的定义与调用。

四、数据修改

def modify_student_score(student):
    course = input("请输入要修改成绩的课程名称:")
    if course in student.scores:
        try:
            new_score = float(input(f"请输入 {student.name} 在 {course} 课程的新成绩:"))
            if new_score < 0 or new_score > 100:
                print("成绩必须在 0 到 100 之间,修改失败。")
            else:
                student.scores[course] = new_score
                print("成绩修改成功。")
        except ValueError:
            print("输入的成绩必须是数字,修改失败。")
    else:
        print("该学生没有该课程的成绩记录。")

知识点:字典的修改操作、用户输入处理、异常处理。

五、数据删除

def delete_student(student_id, students):
    for student in students:
        if student.student_id == student_id:
            students.remove(student)
            print("学生信息删除成功。")
            return
    print("未找到该学号对应的学生信息,删除失败。")

知识点:列表的删除操作、条件判断、循环遍历。

六、数据排序与统计

def sort_students_by_average_score(students):
    if not students:
        print("学生列表为空,无法进行排序。")
        return
    # 按平均成绩对学生进行排序
    sorted_students = sorted(students, key=lambda x: x.get_average_score(), reverse=True)

    print("按平均成绩排序后的学生信息:")
    for student in sorted_students:
        display_student_info(student)
        print("-" * 20)

    # 统计所有学生的平均成绩
    total_average_score = sum([student.get_average_score() for student in students]) / len(students)
    print(f"所有学生的平均成绩:{total_average_score:.2f}")

知识点:列表排序、lambda 函数、统计计算。

七、文件读写

def save_students_to_file(file_path, students):
    with open(file_path, "w", encoding="utf-8") as file:
        for student in students:
            file.write(f"{student.student_id},{student.name}\n")
            for course, score in student.scores.items():
                file.write(f"{course},{score}\n")
            file.write("-\n")

def load_students_from_file(file_path):
    global students
    students = []
    try:
        with open(file_path, "r", encoding="utf-8") as file:
            lines = file.readlines()
            i = 0
            while i < len(lines):
                student_info = lines[i].strip().split(",")
                student_id = int(student_info[0])
                name = student_info[1]
                student = Student(student_id, name)
                i += 1
                while i < len(lines) and lines[i].strip() != "-":
                    course, score = lines[i].strip().split(",")
                    student.add_score(course, float(score))
                    i += 1
                students.append(student)
                i += 1
            return True
    except FileNotFoundError:
        print("文件未找到,加载失败。")
        return False

知识点:文件的读写操作、异常处理。

八、菜单系统

from stu_manager import *

def menu():
    students = []
    while True:
        print("\n学生成绩管理系统菜单:")
        print("1. 添加学生信息")
        print("2. 查询学生信息")
        print("3. 修改学生成绩")
        print("4. 删除学生信息")
        print("5. 按平均成绩排序并展示")
        print("6. 保存数据到文件")
        print("7. 从文件加载数据")
        print("8. 退出系统")
        choice = input("请输入你的选择:")

        if choice == "1":
            new_student = input_student_info()
            students.append(new_student)
        elif choice == "2":
            query_id = int(input("请输入要查询的学生学号:"))
            target_student = find_student_by_id(query_id, students)
            if target_student:
                display_student_info(target_student)
            else:
                print("未找到该学号对应的学生信息。")
        elif choice == "3":
            modify_id = int(input("请输入要修改成绩的学生学号:"))
            student_to_modify = find_student_by_id(modify_id, students)
            if student_to_modify:
                modify_student_score(student_to_modify)
            else:
                print("未找到该学号对应的学生信息。")
        elif choice == "4":
            delete_id = int(input("请输入要删除的学生学号:"))
            delete_student(delete_id, students)
        elif choice == "5":
            sort_students_by_average_score(students)
        elif choice == "6":
            save_students_to_file("students.txt", students)
            print("数据保存成功。")
        elif choice == "7":
            load_students_from_file("students.txt", students)
            print("数据加载成功。")
        elif choice == "8":
            print("退出系统,再见!")
            break
        else:
            print("无效的选择,请重新输入。")

menu()

知识点:循环结构、条件判断、函数的组合调用。

代码下载点这里

你可能感兴趣的:(python零基础到入门,python,开发语言,实例练习)