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()