python 学生成绩管理系统(文件)

#!/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("输入有误请重新输入")








基本实现的框架就这样了,可以自行拓展,记录一下小作业。

  • 2
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
你好!要实现一个Python学生成绩管理系统并读取文件,你可以按照以下步骤操作: 1. 首先,创建一个名为`students.txt`的文本文件,用于存储学生的成绩信息。每行表示一个学生的信息,格式可以是`学号,姓名,成绩`。 2. 使用Python文件操作相关函数,如`open()`来打开`students.txt`文件,并读取其中的内容。 3. 使用循环遍历每一行的内容,可以使用`readlines()`函数将文件内容按行读取到一个列表中。 4. 对于每一行的内容,可以使用字符串的`split()`方法将其分割为学号、姓名和成绩。 5. 将分割后的学生信息存储到一个字典或者自定义的学生对象中,可以使用字典的键值对来存储学号、姓名和成绩,或者使用自定义对象的属性来存储。 6. 将每个学生的信息添加到一个列表中,以便后续的操作和管理。 下面是一个简单的示例代码: ```python class Student: def __init__(self, student_id, name, score): self.student_id = student_id self.name = name self.score = score # 读取文件并解析学生信息 students = [] with open('students.txt', 'r') as file: lines = file.readlines() for line in lines: data = line.strip().split(',') student_id = data[0] name = data[1] score = float(data[2]) student = Student(student_id, name, score) students.append(student) # 打印学生信息 for student in students: print(f"学号: {student.student_id}, 姓名: {student.name}, 成绩: {student.score}") ``` 请注意,以上代码仅为示例,你可以根据实际需求进行适当的修改和扩展。同时,还需要确保`students.txt`文件中的数据格式正确,每行的数据按照指定的格式进行填写。希望对你有所帮助!如有其他问题,请随时提问。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值