#!/usr/bin/env python
#-*- coding:utf-8 -*-
# file:p6.py
# author:ytytyt
# datetime:2021/4/22 21:04
# software: PyCharm
'''
this is functiondescription
'''
# import module your need
#使用pickle模块实现对象的写入文件
import pickle
# 六
# 用面向对象, 实现一个学生Python成绩管理系统;
# 学生的信息存储在文件中;
# 学生信息的字段有(班级, 学号, 姓名, Python成绩)
# 实现对学生信息及成绩的增, 删, 改, 查方法;
class Student:
def __init__(self,cla,no,name,score):
self.cla=cla
self.no=no
self.name=name
self.score=score
# 测试用代码(将此代码运行可以快速创建一个studentinfo)
# s1=Student("软件1902","123","张三",89)
# s2=Student("计算机1901","421","李四",90)
# with open("studentinfo.txt","wb") as file1:
# pickle.dump(s1,file1)
# pickle.dump(s2,file1)
class frame:
# 读取文件内容并存入列表,用序列化读取文件中的Student对象
def __init__(self):
self.stu_list=[]
with open("studentinfo.txt","rb") as file1:
while True:
try:
stu_obj=pickle.load(file1)
self.stu_list.append(stu_obj)
except EOFError:
break
def displayallinfo(self):
print("班级".ljust(10),"学号".ljust(10),"姓名".ljust(10),"python_score")
for obj in self.stu_list:
print(obj.cla.ljust(10),obj.no.ljust(10),obj.name.ljust(10),obj.score)
def add(self):
stu_info=input("请按格式输入班级,学号,姓名,python分数(物联1902 743 王五 92)").split()
new_student=Student(stu_info[0],stu_info[1],stu_info[2],int(stu_info[3]))
#更新列表
self.stu_list.append(new_student)
with open("studentinfo.txt","ab") as file1:
pickle.dump(new_student,file1)
print("添加成功")
#按名字查找
def search(self,name):
# 记录索引值
i=0
for key in self.stu_list:
if key.name == name:
print("查询成功:\n",key.cla.ljust(10), key.no.ljust(10), key.name.ljust(10), key.score)
return i
else:
i+=1
print("不存在该名字的学生")
return -1
#按名字删除
def delstu(self,name):
index=self.search(name)
if index == -1:
print("无法删除,原因如上")
return
else:
self.stu_list.pop(index)
print("已删除")
#以可写的方式重置文件内容
with open("studentinfo.txt", "wb") as file1:
#把列表中的对象写到文件中去
for key in self.stu_list:
pickle.dump(key,file1)
#以名字为索引进行修改
def update(self,name):
index=self.search(name)
if index == -1:
return
else:
#要更新的学生信息
update_stu = input("请按格式输入新的学生信息(物联1902 743 王五 92)").split()
#创建学生对象
new_stu = Student(update_stu[0], update_stu[1], update_stu[2], str(update_stu[3]))
with open("studentinfo.txt","wb") as file1:
self.stu_list[index]=new_stu
for key in self.stu_list:
pickle.dump(key, file1)
print("修改成功!")
if __name__ == '__main__':
MAIN=frame()
while True:
print("*"*10,"学生成绩管理系统","*"*10)
print("1.增加学生信息")
print("2.查询学生信息")
print("3.修改学生信息")
print("4.删除学生信息")
print("5.显示所有学生信息")
print("6.退出系统")
k=int(input("请输入(1-6)"))
if k==1:
MAIN.add()
elif k==2:
stu_name=input("请输入要查询的学生姓名:")
MAIN.search(stu_name)
elif k==3:
#先前的名字
proname=input("请输入要修改的学生名")
MAIN.update(proname)
pass
elif k==4:
del_stu=input("请输入要删除的学生姓名")
MAIN.delstu(del_stu)
elif k==5:
MAIN.displayallinfo()
elif k==6:
exit(0)
else:
print("输入有误请重新输入")
基本实现的框架就这样了,可以自行拓展,记录一下小作业。