3. 定义一个学生类, 包含学生的学号、 姓名和年龄等基本信息, 将学生信息写入二进 制文件 student. dat 中, 实现对学生信息的显示、 查询和删除等基本功能。
时间: 2024-02-13 16:00:54 浏览: 69
使用txt设计的学生信息查询系统
好的,这是一个比较具体的编程问题。下面给出一个简单的 Python 代码实现:
```python
import struct
# 学生类
class Student:
def __init__(self, id, name, age):
self.id = id
self.name = name
self.age = age
# 学生管理类
class StudentManager:
# 添加学生信息到文件
def add_student(self, student):
with open("student.dat", "ab") as f:
pack_data = struct.pack("i10si", student.id, student.name.encode("utf-8"), student.age)
f.write(pack_data)
# 显示学生信息
def show_students(self):
with open("student.dat", "rb") as f:
while True:
data = f.read(16)
if not data:
break
unpack_data = struct.unpack("i10si", data)
id, name, age = unpack_data
print("ID: {}, Name: {}, Age: {}".format(id, name.decode("utf-8"), age))
# 查询学生信息
def query_student(self, id):
with open("student.dat", "rb") as f:
while True:
data = f.read(16)
if not data:
break
unpack_data = struct.unpack("i10si", data)
student_id, name, age = unpack_data
if student_id == id:
print("ID: {}, Name: {}, Age: {}".format(student_id, name.decode("utf-8"), age))
return
print("Student not found!")
# 删除学生信息
def delete_student(self, id):
with open("student.dat", "rb") as f:
with open("temp.dat", "wb") as temp_f:
while True:
data = f.read(16)
if not data:
break
unpack_data = struct.unpack("i10si", data)
student_id, name, age = unpack_data
if student_id != id:
pack_data = struct.pack("i10si", student_id, name, age)
temp_f.write(pack_data)
import os
os.remove("student.dat")
os.rename("temp.dat", "student.dat")
print("Student deleted!")
if __name__ == "__main__":
sm = StudentManager()
sm.add_student(Student(1, "Tom", 18))
sm.add_student(Student(2, "Jerry", 20))
sm.show_students()
sm.query_student(2)
sm.delete_student(1)
sm.show_students()
```
上述代码中,`Student` 类表示一个学生对象,包含学生的学号、姓名和年龄等基本信息。`StudentManager` 类表示学生管理器,其中的 `add_student` 方法可以将一个学生对象写入二进制文件中,`show_students` 方法可以显示所有学生信息,`query_student` 方法可以根据学号查询学生信息,`delete_student` 方法可以根据学号删除学生信息。在 `main` 函数中,我们创建一个 `StudentManager` 对象,添加两个学生信息,然后显示所有学生信息,查询学号为 2 的学生信息,最后删除学号为 1 的学生信息。
阅读全文