8-1 成绩文件处理 分数 20 作者 wenyan 单位 山东科技大学 设计学生类Student,属性:学号(整型);姓名(字符串),选修课程(名称)及课程成绩(整型)。编写一个控制台程序,能够实现Student信息的保存、读取。具体要求:(1)提供Student信息的保存功能:通过控制台输入若干个学生的学号、姓名以及每个学生所修课程的课程名和成绩,将其信息保存到data.dat中;(2)数据读取显示:能够从data.dat文件中读取学生及其课程成绩并显示于控制台。(要求,学号和课程成绩按照整数形式(而非字符串形式)存储)
时间: 2024-01-21 10:04:41 浏览: 187
优化的相空间重构,可实现准确的乐器信号分类
好的,我已经了解您的问题。这是一个关于学生信息的保存和读取的程序,下面是一个简单的示例代码,实现了您的要求:
```python
import pickle
class Student:
def __init__(self, id, name):
self.id = id
self.name = name
self.courses = []
def add_course(self, course, score):
self.courses.append((course, score))
def __str__(self):
ret = f"学号:{self.id} 姓名:{self.name}\n"
for course, score in self.courses:
ret += f"{course}:{score}\n"
return ret
def save_students(students):
with open('data.dat', 'wb') as f:
pickle.dump(students, f)
def load_students():
try:
with open('data.dat', 'rb') as f:
return pickle.load(f)
except FileNotFoundError:
return []
def input_students():
students = []
while True:
id = input("请输入学号(输入q退出):")
if id == 'q':
break
name = input("请输入姓名:")
student = Student(int(id), name)
while True:
course = input("请输入课程名(输入q退出):")
if course == 'q':
break
score = int(input("请输入成绩:"))
student.add_course(course, score)
students.append(student)
return students
def output_students(students):
for student in students:
print(student)
if __name__ == '__main__':
students = load_students()
if not students:
students = input_students()
save_students(students)
output_students(students)
```
代码解释:
1. 定义了一个名为 `Student` 的类,用于存储学生信息。其中包含了学号、姓名和修读的课程及成绩。
2. `save_students` 函数用于将学生信息保存到文件中,使用 Python 内置的 `pickle` 模块进行序列化。
3. `load_students` 函数用于从文件中读取学生信息,使用 `pickle` 模块进行反序列化。
4. `input_students` 函数用于从控制台输入学生信息,并将其保存到一个列表中。
5. `output_students` 函数用于将学生信息输出到控制台。
6. 在程序运行时,首先尝试从文件中读取学生信息,如果文件不存在或读取失败,则要求用户输入学生信息,并将其保存到文件中。最后将学生信息输出到控制台。
请注意,这只是一个简单的示例代码,实际应用中还需要进行更多的错误处理和异常处理。
阅读全文