构建简易的Python学生管理系统

student.py用来格式化字符串

class Student(object):
    # 定义一个初始化方法,定义学生信息属性
    def __init__(self,stu_id,stu_name,stu_age):
        self.stu_id = stu_id
        self.stu_name = stu_name
        self.stu_age = stu_age

    # 格式化对象
    def __str__(self):
        return '|'+'学号:'+ self.stu_id.ljust(5) + '姓名:' + self.stu_name.ljust(5) + '年龄:' + self.stu_age.ljust(3)+'|'

if __name__ == '__main__':
    tom = Student('1','tom','20')
    print(tom)
    print(str(tom))

student_manager.py

from student import Student

class StudentManagerSystem():
    def __init__(self):
        # 定义一个容器属性,荣来保存所有被管理的学生
        # 容器是一个字典类型
        # 容器的元素值  学生ID:学生对象
        self.students = {}

# start()方法是用来启动该管理系统的公有接口方法
    def start(self):
        print("系统使用成功")
        # 循环执行
        while True:
            # 打印菜单
            self.__Print_menu()
            # 输入要执行功能的ID
            select_id = input("请输入要执行功能的功能编号:")
            if select_id.isdigit():
                # 判断输入的是否是数字字符串
                # 如果是数字字符串,转换成数字,方便后面的操作
                n = int(select_id)
                if n >=0 and n<=7:
                    self.__operator(select_id)
                else:
                    print("超出功能ID范围,重新输入!!")
            else:
                print("输入了非法功能ID请重新输入!!")

 # 打印菜单的方法
    def __Print_menu(self):
        print('^'*20)
        print("学生管理系统V1.0")
        print("1.添加学生")
        print("2.查询学生")
        print("3.修改学生")
        print("4.删除学生")
        print("5.显示所有学生")
        print("6.保存输入的学生信息到本地")
        print("7.加载数据")
        print("0.退出系统")
        print('^'*20)

    # 用来执行操作的方法
    # 实现管理的代码逻辑
    def __operator(self,select_id):
        print("选择了功能:",select_id)
        # 在这个功能里,需要根据接受的功能ID选择对应功能
        # 将功能ID和功能做一个映射,封存到字典中,通过键ID能访问对应功能函数
        method_dist = {'1':self.__add_student,
                       '2':self.__query_stu_with_id,
                       '3':self.__modify_stu_with_id,
                       '4':self.__remove_stu_with_id,
                       '5':self.__show_all_info,
                       '6':self.__save_data,
                       '7':self.__laod_data,
                       '0':exit}
        method = method_dist[select_id]
        if select_id == '2' or select_id == '3' or select_id == '4':
            stu_id = input("请输入要操作的学生ID:")
            method(stu_id)
        elif select_id == '0':
            # 退出方法传入的固定参数是0所以单独判断
            method(0)
        else:
            # 所以无参都在这里执行
            method()

# 键盘输入函数:
    # 获取学生信息方法
    # 返回一个学生信息(列表形式)
    def __input_stu_info(self):
        stu_id = input("请输入学生ID:")
        stu_name = input("请输入学生姓名:")
        stu_age = input("请输入学生年龄:")
        return stu_id,stu_name,stu_age

# 显示单个学生信息
    def __show_stu_info(self,stu):
        print(stu)

# 显示所有学生信息
    def __show_all_info(self):
        print("准备显示所有学生。。。")
        # 遍历打印
        for stu in self.students.values():
            self.__show_stu_info(stu)

#功能1、添加学生函数
    def __add_student(self):
        print("准备添加学生。。。")
        # 通过input函数获取学生信息
        stu_info = self.__input_stu_info()
        # 创建一个学生对象,保存学生信息
        stu = Student(stu_info[0],stu_info[1],stu_info[2])
        self.students[stu.stu_id] = stu
        # self.students[stu_info[0]] = stu
        # 显示添加信息
        print('添加的信息为:',stu_info)

#功能2、 查找学生函数
    # 方法有个返回值,返回查找的学生
    def __query_stu_with_id(self,query_id):
        print(f"准备查找学号为{query_id}的学生。。。")
        stu = None
        # 通过参数id在字典中共进行判断,如果id存在,通过id找到该学生
        if query_id in self.students:
            stu = self.students[query_id]
            # 显示学生信息
            self.__show_stu_info(stu)
        else:
            print(f"输入的学号为{query_id}的学生不存在,请检查学号重新输入!")
        # 将找到的学生信息返回
        return stu

# 功能3、修改学生函数    
    def __modify_stu_with_id(self,modify_id):
        print(f"准备修改id为{modify_id}的学生信息")
        # 查找需要修改的学生信息
        stu = self.__query_stu_with_id(modify_id)
        # 找到学生就修改,找不到就不修改
        if stu != None:
            # 获取新数据
            new_stu_info = self.__input_stu_info()
            # 修改
            stu.stu_id = new_stu_info[0]
            stu.stu_name = new_stu_info[1]
            stu.stu_age = new_stu_info[2]
            print("修改完成!")
            self.__show_stu_info(stu)
        else:
            print(f"学号为{modify_id}的学生不存在!")

# 功能4、删除学生函数
    def __remove_stu_with_id(self,remove_id):
        print("准备删除学生。。。")
        # 调用查找方法查询学生
        stu = self.__query_stu_with_id(remove_id)
        if stu != None:
            self.students.pop(remove_id)
        else:
            print(f"学号为{remove_id}的学生不存在!")

#功能5、保存到本地文件
    def __save_data(self):
        print("保存数据!")
        # 以行的心事来保存每一个学生信息
        # 以写的形式打开一个文件
        file_w = open("D:\\桌面\\测试.txt",'w')
        # 遍历所有学生信息
        for stu in self.students.values():
            # 将学生转换成一个字符串对象
            # stu_s = str(stu)
            stu_s = stu.stu_id + '' + stu.stu_name + '' + stu.stu_age + '\n'
            print(stu_s)
            # 将学生信息组织成一个固定格式的字符串,按行写入到文件中
            file_w.write(stu_s)
        # 关闭文件
        file_w.close()
        print("保存完成!")
#功能6、从本地文件中加载数据
    def __laod_data(self):
        print("加载数据!")
        # 打开文件,并要处理文件不存在的异常
        file_r = None
        file_r = input("请输入文件完整路径 目录\\目录\\目录 形式:")
        try:
            file_data = open(file_r,'r')
        except Exception as e:
            print(e,'文件不存在')
        else:
            # 读取文件内容
            content = file_data.readlines()
            # 遍历每一行数据
            for stu_s in content:
                split_info = stu_s.split()
                # 创建一个学生对象,然后保存到字典里
                stu = Student(split_info[0],split_info[1],split_info[2])
                # 加到字典里
                self.students[stu.stu_id] = stu
        finally:
            if file_r != None:
                file_data.close()

# 调用函数
StudentManagerSystem().start()

  • 8
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值