python学生管理系统课程设计

1、导入相关的库
 

import pandas as pd
from datetime import datetime, timedelta

2、定义class Student

class Student:
    def __init__(self, name, age, gender, course_name, course_grade, attendance):
        self.name = name
        self.age = age
        self.gender = gender
        self.course_name = course_name
        self.course_grade = course_grade
        self.attendance = attendance

3、定义StudentManagementSystem
   添加学生功能、删除学生功能、更新学生信息、查询学生信息、显示所有学生信息、导出表格、
   获取学生出勤情况、计算统计数据、学生排序、出勤情况汇报、课程名册

class StudentManagementSystem:
    def init(self):
        self.students = []

    def add_student(self):
        # 添加学生
        name = input("请输入学生姓名:")
        age = int(input("请输入学生年龄:"))
        gender = input("请输入学生性别:")
        course_name = input("请输入学生课程名称:")
        course_grade = int(input("请输入学生成绩:"))
        attendance = self.get_attendance()
        student = Student(name, age, gender, course_name, course_grade, attendance)
        self.students.append(student)

    def remove_student(self):
        # 删除学生
        name = input("请输入要删除的学生姓名:")
        for student in self.students:
            if student.name == name:
                self.students.remove(student)

    def update_student(self):
        # 更新学生信息
        name = input("请输入要更新的学生姓名:")
        for student in self.students:
            if student.name == name:
                age = input("请输入新年龄(如不更改请留空):")
                if age != "":
                    student.age = int(age)
                gender = input("请输入新性别(如不更改请留空):")
                if gender != "":
                    student.gender = gender
                course_name = input("请输入新课程名称(如不更改请留空):")
                if course_name != "":
                    student.course_name = course_name
                course_grade = input("请输入新成绩(如不更改请留空):")
                if course_grade != "":
                    student.course_grade = int(course_grade)
                attendance = self.get_attendance()
                student.attendance = attendance

    def search_student(self):
        # 查询学生信息
        name = input("请输入要查询的学生姓名:")
        for student in self.students:
            if student.name == name:
                print(f"姓名:{student.name},年龄:{student.age},性别:{student.gender},课程名称:{student.course_name},成绩:{student.course_grade}")

    def display_students(self):
        # 显示所有学生信息
        for student in self.students:
            print(f"姓名:{student.name},年龄:{student.age},性别:{student.gender},课程名称:{student.course_name},成绩:{student.course_grade},出勤情况:{student.attendance}")

    def export_to_excel(self):
        # 导出至Excel
        file_name = input("请输入保存文件名(包括.xlsx扩展名):")
        data = []
        for student in self.students:
            data.append([student.name, student.age, student.gender, student.course_name, student.course_grade, student.attendance])
        df = pd.DataFrame(data, columns=["姓名", "年龄", "性别", "课程名称", "成绩", "出勤情况"])
        df.to_excel(file_name)

    def get_attendance(self):
        # 获取学生出勤情况
        attendance = input("请输入学生出勤情况(格式为yyyy-mm-dd,多个日期用逗号分隔):")
        attendance_list = attendance.split(",")
        attendance_date_list = []
        for date in attendance_list:
            try:
                attendance_date_list.append(datetime.strptime(date.strip(), '%Y-%m-%d'))
            except ValueError:
                print(f'错误:{date.strip()}不是有效日期,格式应为yyyy-mm-dd')
        return attendance_date_list

    def calculate_stats(self):
        # 计算统计数据
        grades = [s.course_grade for s in self.students]
        average_grade = sum(grades) / len(grades)
        pass_count = len([g for g in grades if g >= 60])
        pass_rate = pass_count / len(grades)
        print(f"平均成绩:{average_grade:.2f}")
        print(f"通过率:{pass_rate:.2%}")

    def sort_students(self):
        # 学生排序
        print("1. 按姓名排序")
        print("2. 按年龄排序")
        print("3. 按课程成绩排序")
        choice = int(input("请输入您的选择:"))
        if choice == 1:
            self.students.sort(key=lambda s: s.name)
        elif choice == 2:
            self.students.sort(key=lambda s: s.age)
        elif choice == 3:
            self.students.sort(key=lambda s: s.course_grade)
        self.display_students()

    def attendance_report(self):
        # 出勤情况汇报
        start_date_str = input("请输入开始日期(yyyy-mm-dd):")
        end_date_str = input("请输入结束日期(yyyy-mm-dd):")
        try:
            start_date = datetime.strptime(start_date_str, '%Y-%m-%d')
            end_date = datetime.strptime(end_date_str, '%Y-%m-%d')
        except ValueError:
            print("无效日期格式。")
            return
        for student in self.students:
            attendance_count = len([d for d in student.attendance if start_date <= d <= end_date])
            print(f"{student.name}:在{len(student.attendance)}节课中,出勤{attendance_count}次")

    def course_roster(self):
        # 课程花名册
        courses = {}
        for student in self.students:
            if student.course_name not in courses:
                courses[student.course_name] = []
            courses[student.course_name].append(student.name)
        for course, roster in courses.items():
            print(f"课程名称:{course}")
            for name in roster:
                print(f"\t{name}")



4、学生信息管理系统的主函数,通过用户输入选择不同的操作来管理学生信息

def main():
    sms = StudentManagementSystem()
    sms.init()
    while True:
        print("1. 添加学生")
        print("2. 删除学生")
        print("3. 更新学生信息")
        print("4. 查询学生信息")
        print("5. 显示所有学生信息")
        print("6. 导出至Excel")
        print("7. 计算统计数据")
        print("8. 学生排序")
        print("9. 出勤情况汇报")
        print("10. 课程花名册")
        print("11. 退出系统")
        choice = int(input("请输入您的选择:"))
        if choice == 1:
            sms.add_student()
        elif choice == 2:
            sms.remove_student()
        elif choice == 3:
            sms.update_student()
        elif choice == 4:
            sms.search_student()
        elif choice == 5:
            sms.display_students()
        elif choice == 6:
            sms.export_to_excel()
        elif choice == 7:
            sms.calculate_stats()
        elif choice == 8:
            sms.sort_students()
        elif choice == 9:
            sms.attendance_report()
        elif choice == 10:
            sms.course_roster()
        elif choice == 11:
            break

main()

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值