学生成绩管理系统python,能够从xlsx文件中读取课程类别为必修课的数据:序号、课程名称、成绩,然后实现以下几个功能:根据课程名称显示对应的序号和成绩,然后对成绩进行排序显示并生成xlsx文件,也可以根据序号输出学生的课程以及对应的成绩并生成xlsx文件
时间: 2023-06-25 10:02:45 浏览: 192
好的,这是一个比较复杂的项目,需要用到一些 Python 库来读写 Excel 文件和进行数据排序。以下是一个简单的实现:
```python
import openpyxl
from openpyxl.utils import column_index_from_string
class Student:
def __init__(self, number, name, grade):
self.number = number
self.name = name
self.grade = grade
class Course:
def __init__(self, name, students):
self.name = name
self.students = students
class GradeSystem:
def __init__(self, filename):
self.filename = filename
self.courses = []
# 读取 Excel 文件
workbook = openpyxl.load_workbook(filename=filename)
sheet = workbook.active
# 获取列的编号
column_dict = {}
for column in sheet.iter_cols(min_row=1, max_row=1):
for cell in column:
column_dict[cell.value] = column_index_from_string(cell.column)
# 解析数据
for row in sheet.iter_rows(min_row=2):
number = row[column_dict['序号']].value
name = row[column_dict['课程名称']].value
grade = row[column_dict['成绩']].value
if name.endswith('必修'):
student = Student(number, name, grade)
course = next((c for c in self.courses if c.name == name), None)
if course is None:
course = Course(name, [])
self.courses.append(course)
course.students.append(student)
def display_course(self, course_name):
# 根据课程名称显示对应的序号和成绩
course = next((c for c in self.courses if c.name == course_name), None)
if course is None:
print('没有找到课程:', course_name)
else:
for student in course.students:
print('序号:', student.number, '成绩:', student.grade)
def sort_grades(self):
# 对成绩进行排序显示并生成 Excel 文件
for course in self.courses:
course.students.sort(key=lambda s: s.grade, reverse=True)
workbook = openpyxl.Workbook()
sheet = workbook.active
sheet.title = course.name
sheet.cell(row=1, column=1, value='序号')
sheet.cell(row=1, column=2, value='成绩')
for i, student in enumerate(course.students):
sheet.cell(row=i+2, column=1, value=student.number)
sheet.cell(row=i+2, column=2, value=student.grade)
workbook.save(filename=course.name + '.xlsx')
def display_student(self, student_number):
# 根据序号输出学生的课程以及对应的成绩并生成 Excel 文件
workbook = openpyxl.Workbook()
sheet = workbook.active
sheet.title = '学生信息'
sheet.cell(row=1, column=1, value='课程名称')
sheet.cell(row=1, column=2, value='成绩')
for course in self.courses:
student = next((s for s in course.students if s.number == student_number), None)
if student is not None:
sheet.cell(row=sheet.max_row+1, column=1, value=course.name)
sheet.cell(row=sheet.max_row, column=2, value=student.grade)
workbook.save(filename='学生信息.xlsx')
# 使用示例
grade_system = GradeSystem('成绩.xlsx')
grade_system.display_course('数学必修')
grade_system.sort_grades()
grade_system.display_student('001')
```
这里我们定义了三个类:`Student` 表示学生,包括序号、课程名称和成绩;`Course` 表示课程,包括名称和学生列表;`GradeSystem` 表示成绩管理系统,包括读取 Excel 文件、显示课程、排序成绩和显示学生信息等功能。
首先,在构造函数中,我们使用 `openpyxl` 库读取 Excel 文件,然后解析数据并存储在 `self.courses` 中。我们只保存必修课程的数据。
接下来,实现了三个方法:
- `display_course`:根据课程名称显示对应的序号和成绩。
- `sort_grades`:对成绩进行排序显示并生成 Excel 文件。
- `display_student`:根据序号输出学生的课程以及对应的成绩并生成 Excel 文件。
最后,我们使用 `GradeSystem` 类创建了一个实例,并调用它的方法来演示系统的功能。
阅读全文