以下是以一个简单的学生成绩管理系统项目开发为例,融合 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()
知识点:循环结构、条件判断、函数的组合调用。
代码下载点这里