学生管理系统(Python面向对象版)

python版学生管理系统

简单介绍一下这个文件版的系统,代码里面基本上每行都有注释,解释的很清楚,这个系统分为三个类:CotrolPanel(控制面板类)、DataMananger(数据管理类)、Students(学生类)

流程就是通过控制面板,输入相应的操作指令,然后在数据管理类里面,查询学生类,并回应相应的操作

增加学生信息:

在CotrolPanel(控制面板类)内输入相应的操作指令,并在控制面板类中调取add_student()方法,并在方法内创建当前输入数据的对象,并获得其引用(实例对象),然后把实例对象和Uid传入DataMananger(数据管理类)中的add_one_student(self,uid)方法,并在方法内将uid作为键,数据对象的引用作为值存入字典内

删、改、查流程与上面类似

类图

在这里插入图片描述

代码部分

class ControlPanel(object):
    """控制面板类"""
    def __init__(self):
        """初始化属性方法"""
        # 初始化数据管理类
        self.dm = DataManager()

    def start_up(self):
        """系统运行的方法"""
        while True:
            # 调用信息展示页面
            self.show_menu()
            # 获取相应操作的信息
            ipt = input("请输入执行的信息:")
            # 获取到的值,如果为零则退出循环,及退出系统
            if ipt == '0':
                break
            # 获取到的值如果不为零,则调用相应的方法
            self.handle_command(ipt)
        # 在退出系统前,保存数据到相应的文件内
        self.dm.save_to_file()

    def show_menu(self):
        """展示详情信息页面"""
        print("*" * 30)
        print("1、添加学生信息")
        print("2、删除学生信息")
        print("3、查找学生信息")
        print("4、更改学生信息")
        print("5、显示所有学生信息")
        print("0、退出系统")
        print("*" * 30)

    def handle_command(self, ipt):
        """根据用户输入的信息进行相应的操作"""
        if ipt == '1':
            # 添加学生信息
            self.add_student()
        elif ipt == '2':
            # 删除学生信息
            self.remove_student()
        elif ipt == '3':
            # 查找学生信息
            self.find_student()
        elif ipt == '4':
            # 更改学生信息
            self.modify_student()
        elif ipt == '5':
            # 显示所有学生信息
            self.show_all_student()
        else:
            print("输入有误请重新输入")

    def add_student(self):
        """添加学生信息的方法"""
        # 获取需要存储的信息
        ipt_uid = input("请输入学号:")
        ipt_name = input("请输入姓名:")
        ipt_age = input("请输入年龄:")
        # 创建学生类的对象
        stu = Student(ipt_uid, ipt_name, ipt_age)
        # 将学生对象对位键值对的值存入字典中
        result = self.dm.add_one_student(stu)
        if result == 0:
            print("添加失败")
        elif result == 1:
            print("添加成功")

    def show_all_student(self):
        """显示全部学生信息的方法"""
        # 调用数据管理类里面的方法,并得到返回值(返回值为数据对象的引用)
        stus = self.dm.get_all_student()
        # 遍历数据对象的引用,打印的时候制动调用Student类里面的__str__方法
        for item in stus:
            print(item)

    def find_student(self):
        """查找指定学生信息的方法"""
        # 获取需要查找信息的学号
        ipt_uid = input("请输入查找学生的学号:")
        # 获取返回对象的引用
        stus = self.dm.find_stu_by_uid(ipt_uid)
        print(stus)

    def remove_student(self):
        """删除指定学生信息的方法"""
        # 获取需要删除信息的学号
        ipt_uid = input("请输入需要删除信息的学号:")
        # 调用数据管理类的删除方法
        result = self.dm.remove_stu_by_uid(ipt_uid)
        # 判断返回值来确认信息是否删除
        if result == 0:
            print("删除失败")
        elif result == 1:
            print("删除成功")

    def modify_student(self):
        """修改指定学生信息的方法"""
        # 获取需要修改信息的学号
        ipt_uid = input("请输需要修改信息的学号")
        # 调用数据操作里面修改方法
        stu = self.dm.modify_stu(ipt_uid)
        if stu == 0:
            print("修改失败")
        # 获取需要修改的信息
        stu.uid = input("请输入新的学号:")
        stu.name = input("请输入新的姓名:")
        stu.age = input("请输入新的年龄:")
        print("修改成功")


class DataManager(object):
    """数据管理类"""
    def __init__(self):
        """初始化属性方法"""
        self.students = {}
        self.load_from_file()

    def add_one_student(self, stu):
        """接收控制面板端传来的信息,并添加学生信息到字典里"""
        # 判断请求添加的数据是否已经存在
        if stu.uid in self.students:
            return 0
        # 如果未存在,则添加到字典里
        self.students[stu.uid] = stu
        return 1

    def get_all_student(self):
        """当控制面板调用此方法时,返回数据对象的引用"""
        return self.students.values()

    def find_stu_by_uid(self, uid):
        """遍历学生字典信息,匹配到相应的引用对象返回"""
        for key, value in self.students.items():
            if uid == key:
                return value
        return 0

    def remove_stu_by_uid(self, uid):
        # 判断请求删除信息是否存在字典里
        if uid in self.students:
            # 如果存在则删除
            del self.students[uid]
            return 1
        # 如果走到这一步,说明请求信息不存在字典里
        return 0

    def modify_stu(self, uid):
        # 查找请求信息是否在字典里
        for key,value in self.students.items():
            # 如果有相应的信息则返回对应引用
            if key == uid:
                return value
        # 如果走到这一步则说明请求信息不存在字典里
        return 0

    def load_from_file(self):
        """在控制面板里初始化数据管理类时,开始加载文件内的数据"""
        with open("./data.ini","r") as f:
            # 循环取值
            while True:
                data = f.readline()
                # 每次取到的值,都进行相应的处理,将数据的对象引用存入字典里
                if data:
                    # 将得到的数据用","分隔开
                    data_split = data.split(",")
                    # 建立学生信息对象(最后的rstrip("\n")作用是,去除字符串最右边的"\n")
                    stu = Student(data_split[0], data_split[1], data_split[2].rstrip("\n"))
                    # 将数据对象的引用存入字典内
                    self.students[data_split[0]] = stu
                else:
                    break


    def save_to_file(self):
        """将数据保存到指定文件内"""
        # 获取文件操作对象W
        with open("./data.ini","w") as w:
            # 遍历学生信息字典内的值
            for value in self.students.values():
                # 如果有值,就写入文件内
                if value:
                    # 使用字符串拼接将数据存入文件内
                    w.write(value.uid+","+value.name+","+value.age+"\n")
                else:
                    break


class Student(object):
    """创建学生类"""
    def __init__(self, uid, name, age):
        """初始化属性对象"""
        self.uid = uid
        self.name = name
        self.age = age

    def __str__(self):
        """调用学生的实例对象时自动调用此方法"""
        return "学号:%s,姓名:%s,年龄:%s" % (self.uid, self.name, self.age)


def main():
    """学生管理系统的主函数"""
    # 创建实例对象
    con = ControlPanel()
    # 调用实例方法开始运行程序
    con.start_up()


if __name__ == '__main__':
    main()

猜你喜欢

转载自blog.csdn.net/weixin_38644677/article/details/87877708