zoukankan      html  css  js  c++  java
  • 【Python基础编程253 ● 项目 ● 学生管理系统SMS】


     ---------Python基础编程---------

    Author : AI菌


    【一、项目开发步骤】

    1.学生管理系统-项目演示
    2.学生管理系统-项目分析
    3.学生管理系统-搭建主体框架
    4.学生管理系统-添加学生
    5.学生管理系统-显示全部
    6.学生管理系统-查询一个学生
    7.学生管理系统-修改一个学生
    8.学生管理系统-删除一个学生
    9.学生管理系统-把字典数据写到文件中
    10.学生管理系统-从文件中读取数据存储到字典中

    【1、项目演示】

    输入对应数字,调用系统对应功能

    【2、项目分析】

    【3、搭建主体框架】

    主要函数:

    1、main.py      #编写启动学生管理系统的代码
    2、student.py  # 定义学生类
    3、student_manager.py  # 实现学生管理系统的主要功能
    4、student.txt # 存储内存中学生信息到txt文件,防止断电后信息丢失

    student_manager.py框架:

    # 1.显示菜单
           # print("调用 显示菜单 的功能")
    # 2.提示录入菜单编号
    # 3.判断菜单编号
             # 4.根据判断的结果调用对应的功能
                    # print("调用 1.添加的学生 的功能")
             # 4.根据判断的结果调用对应的功能
                   # print("调用 2.显示全部 的功能")
             # 4.根据判断的结果调用对应的功能
                    # print("调用 3.查询学生 的功能")
             # 4.根据判断的结果调用对应的功能
                    # print("调用 4.修改学生 的功能")
              # 4.根据判断的结果调用对应的功能
                    # print("调用 5.删除学生 的功能")
              # 4.根据判断的结果调用对应的功能
                    # print("调用 0.退出系统 的功能")
              # 4.根据判断的结果调用对应的功能
                    # print("录入的菜单编号有误,请重新录入!!!")     
    
    # 显示菜单 show_menu 函数     
    # 添加学生 add_student 函数   
    # 显示全部学生信息 show_all 函数   
    # 查询学生信息 find_student 函数   
    #修改学生信息 update_student 函数
    # 删除学生信息 delete_student 函数   
    # 把字典中的学生的数据覆盖写到文件中 dict_to_file  函数
    # 把文件中的学生的数据覆盖写到字典中 file_to_dict  函数
      

    【4、添加学生】

        def add_student(self):
            """
            添加学生
            """
            # 这段代码 控制不能录入重复的学号的
            while True:
                # 1.提示录入一个学号
                id = input("请输入学号:")
                # 2.判断学号是否重复,如果重复,需要重新录入
                if id in self.student_dict:
                    print("学号已经被占用,请使用一个不同的学号!!!")
                    continue
                else:
                    break
    
            # 3.提示录入姓名和分数
            name = input("请输入姓名:")
            score = input("请输入分数:")
            # 4.使用录入的学号,姓名,分数创建一个学生对象
            s = Student(id, name, score)
            # 5.把学号作为key,对象作为value,添加到字典
            self.student_dict[id] = s
            # 6.提示添加成功
            print(f"添加{id}成功!!!")
    View Code

    【5、显示全部学生信息】

        def show_all(self):
            """
             #显示全部学生信息
            """
            # 先判断系统中是否有学生信息,如果有:
            if len(self.student_dict) > 0:
                # 1.打印表头,和上面的那条线
                print("学号".ljust(15) + "姓名".ljust(15) + "分数".ljust(15))
                print("-" * 45)
                # 2.得到字典中所有的value组成的列表
                student_list = self.student_dict.values()
                # 3.遍历列表,每个元素都是一个学生对象
                for student in student_list:
                    id = student.id
                    name = student.name
                    score = student.score
                    # 4.在循环里面,得到学号,姓名,分数,打印成一行
                    print(id.ljust(15) + name.ljust(15) + score.ljust(15))
                # 5.在循环结束后,打印下面那条线
                print("-" * 45)
            else:
                # 如果系统中没有学生信息,就提示"系统中还没有学生信息!!!"
                print("系统中还没有学生信息!!!")
    View Code

    【6、查询一个学生】

        def find_student(self):
            """
            根据学号查询一个学生
            """
            # 1.提示录入学号
            id = input("请输入学号:")
            # 2.查找学号在系统是否存在
            if id not in self.student_dict:
                # 3.如果不存在,就提示系统中没有此学生
                print(f"系统中没有学号为{id}的学生!!!")
            else:
                # 4.如果存在:
                # 4.1 打印表头和那条线
                print("学号".ljust(15) + "姓名".ljust(15) + "分数".ljust(15))
                print("-" * 45)
                # 4.2 得到这个学号对应的学生对象
                s = self.student_dict.get(id)
                id = s.id
                name = s.name
                score = s.score
                # 4.3 得到学号,姓名,分数,打印成一行
                print(id.ljust(15) + name.ljust(15) + score.ljust(15))
                # 4.4 打印出下面那条线
                print("-" * 45)
    View Code

    【7、修改一个学生】

        def update_student(self):
            """
            根据学号修改一个学生信息
            """
            # 1.提示录入学号
            id = input("请录入要修改学生的学号:")
            # 2.查找学号在系统是否存在
            if id not in self.student_dict:
                # 3.如果不存在,就提示系统中没有此学生
                print(f"系统中没有学号为{id}的学生")
            else:
                # 4.如果有,提示录入新的姓名和分数
                name = input("请录入新的姓名:")
                score = input("请录入新的分数:")
                # 5.根据学号从字典中得到学生对象
                s = self.student_dict[id]
                # 6.使用新录入的姓名和分数,修改学生对象中的姓名和分数
                s.name = name
                s.score = score
                # 7.提示修改成功
                print("修改学生信息成功!!!")
    View Code

    【8、删除一个学生】

        def delete_student(self):
            """
            根据学号删除一个学生信息
            """
            # 1.提示录入学号
            id = input("请录入要修改学生的学号:")
            # 2.查找学号在系统是否存在
            if id not in self.student_dict:
                # 3.如果不存在,就提示系统中没有此学生
                print(f"系统中没有学号为{id}的学生")
            else:
                # 4.如果有,从字典中把该学号对应的键值对删除
                self.student_dict.pop(id)
                # 5.提示删除成功
                print(f"删除学生{id}成功!!!")
    View Code

    【9、把字典数据写到文件中】

        def dict_to_file(self):
            """
            把字典中的学生的数据覆盖写到文件中
            """
            # 1.得到所有value对应的列表
            student_list = self.student_dict.values()
            # 2.打开文件,以只写的方法打开文件,编码设置为UTF-8
            f = open("student.txt", "w", encoding="UTF-8")
            # 3.遍历列表,每个元素都是一个对象
            for student in student_list:
                # 4.在循环中,得到学生对象的学号,姓名,分数,组成一个字符串
                id = student.id
                name = student.name
                score = student.score
                line = id + "," + name + "," + score
                # 5.把这个字符串写入到文件中
                f.write(line + "
    ")
            # 6.循环结束后,关闭文件
            f.close()
    View Code

    【10、从文件中读取数据存储到字典中】

        def file_to_dict(self):
            """
            读取文件中的数据,一行一行的读取.
            从读到的一行数据中解析出学号,姓名,分数, 创建一个学生对象.
            把对象作为value,把学号作为key,添加到字典中
            """
            # 1.以只读的方式打开文件
            f = open("student.txt", "r", encoding="UTF-8")
            while True:
                # 2.循环着读取文件,一次读一行
                line = f.readline()
                if line != "":
                    # 如果数据不为空,去掉最后的换行符
                    line = line[0:len(line) - 1]
                    # 3.在循环里面,从读到的一行数据中解析出学号,姓名,分数
                    infos = line.split(",")
                    id = infos[0]
                    name = infos[1]
                    score = infos[2]
                    # 4.使用学号,姓名,分数创建一个学生对象
                    s = Student(id, name, score)
                    # 5.把对象作为value,把学号作为key,添加到字典中
                    self.student_dict[id] = s
                else:
                    # 如果本次没有读到数据,表示数据已经读完了,应该终止循环
                    break
    View Code

    【二、完整代码】

    main.py

    from student_manager import *
    
    # 编写启动学生管理系统的代码
    sm = StudentManager()
    sm.start()
    View Code

    student.py

    # 定义学生类
    class Student:
        def __init__(self, id, name, score):
            self.id = id
            self.name = name
            self.score = score
    
        def __str__(self):
            return f"{self.id}, {self.name}, {self.score}"
    View Code

    student_manager.py

    from student import *
    
    
    # 学生管理系统的主要功能
    class StudentManager:
        def __init__(self):
            #  添加一个字典,用来存储所有的学生
            #  学号作为key, 学生对象作为value
            self.student_dict = {}
    
        def start(self):
            """
            启动学生管理系统
            """
            # 在系统一启动的时候 ,就应该从文件中读取数据,存到字典中
            self.file_to_dict()
    
            # 5.把以上4个步骤循环起来
            while True:
                # 1.显示菜单
                # print("调用 显示菜单 的功能")
                self.show_menu()
                # 2.提示录入菜单编号
                menu_code = input("请录入菜单编号:")
                # 3.判断菜单编号
                if menu_code == "1":
                    # 4.根据判断的结果调用对应的功能
                    # print("调用 1.添加的学生 的功能")
                    self.add_student()
                elif menu_code == "2":
                    # 4.根据判断的结果调用对应的功能
                    # print("调用 2.显示全部 的功能")
                    self.show_all()
                elif menu_code == "3":
                    # 4.根据判断的结果调用对应的功能
                    # print("调用 3.查询学生 的功能")
                    self.find_student()
                elif menu_code == "4":
                    # 4.根据判断的结果调用对应的功能
                    # print("调用 4.修改学生 的功能")
                    self.update_student()
                elif menu_code == "5":
                    # 4.根据判断的结果调用对应的功能
                    # print("调用 5.删除学生 的功能")
                    self.delete_student()
                elif menu_code == "0":
                    # 4.根据判断的结果调用对应的功能
                    # print("调用 0.退出系统 的功能")
                    # 退出系统之前把内存中的数据存入文件中
                    self.dict_to_file()
                    break
                else:
                    # 4.根据判断的结果调用对应的功能
                    print("录入的菜单编号有误,请重新录入!!!")
    
        def show_menu(self):
            """
            显示菜单
            """
            print("*" * 40)
            print("欢迎使用【学生管理系统】 V1.0")
            print("1.添加学生")
            print("2.显示全部")
            print("3.查询学生")
            print("4.修改学生")
            print("5.删除学生")
            print()
            print("0.退出系统")
            print("*" * 40)
    
        def add_student(self):
            """
            添加学生
            """
            # 这段代码 控制不能录入重复的学号的
            while True:
                # 1.提示录入一个学号
                id = input("请输入学号:")
                # 2.判断学号是否重复,如果重复,需要重新录入
                if id in self.student_dict:
                    print("学号已经被占用,请使用一个不同的学号!!!")
                    continue
                else:
                    break
    
            # 3.提示录入姓名和分数
            name = input("请输入姓名:")
            score = input("请输入分数:")
            # 4.使用录入的学号,姓名,分数创建一个学生对象
            s = Student(id, name, score)
            # 5.把学号作为key,对象作为value,添加到字典
            self.student_dict[id] = s
            # 6.提示添加成功
            print(f"添加{id}成功!!!")
    
        def show_all(self):
            """
             #显示全部学生信息
            """
            # 先判断系统中是否有学生信息,如果有:
            if len(self.student_dict) > 0:
                # 1.打印表头,和上面的那条线
                print("学号".ljust(15) + "姓名".ljust(15) + "分数".ljust(15))
                print("-" * 45)
                # 2.得到字典中所有的value组成的列表
                student_list = self.student_dict.values()
                # 3.遍历列表,每个元素都是一个学生对象
                for student in student_list:
                    id = student.id
                    name = student.name
                    score = student.score
                    # 4.在循环里面,得到学号,姓名,分数,打印成一行
                    print(id.ljust(15) + name.ljust(15) + score.ljust(15))
                # 5.在循环结束后,打印下面那条线
                print("-" * 45)
            else:
                # 如果系统中没有学生信息,就提示"系统中还没有学生信息!!!"
                print("系统中还没有学生信息!!!")
    
        def find_student(self):
            """
            根据学号查询一个学生
            """
            # 1.提示录入学号
            id = input("请输入学号:")
            # 2.查找学号在系统是否存在
            if id not in self.student_dict:
                # 3.如果不存在,就提示系统中没有此学生
                print(f"系统中没有学号为{id}的学生!!!")
            else:
                # 4.如果存在:
                # 4.1 打印表头和那条线
                print("学号".ljust(15) + "姓名".ljust(15) + "分数".ljust(15))
                print("-" * 45)
                # 4.2 得到这个学号对应的学生对象
                s = self.student_dict.get(id)
                id = s.id
                name = s.name
                score = s.score
                # 4.3 得到学号,姓名,分数,打印成一行
                print(id.ljust(15) + name.ljust(15) + score.ljust(15))
                # 4.4 打印出下面那条线
                print("-" * 45)
    
        def update_student(self):
            """
            根据学号修改一个学生信息
            """
            # 1.提示录入学号
            id = input("请录入要修改学生的学号:")
            # 2.查找学号在系统是否存在
            if id not in self.student_dict:
                # 3.如果不存在,就提示系统中没有此学生
                print(f"系统中没有学号为{id}的学生")
            else:
                # 4.如果有,提示录入新的姓名和分数
                name = input("请录入新的姓名:")
                score = input("请录入新的分数:")
                # 5.根据学号从字典中得到学生对象
                s = self.student_dict[id]
                # 6.使用新录入的姓名和分数,修改学生对象中的姓名和分数
                s.name = name
                s.score = score
                # 7.提示修改成功
                print("修改学生信息成功!!!")
    
        def delete_student(self):
            """
            根据学号删除一个学生信息
            """
            # 1.提示录入学号
            id = input("请录入要修改学生的学号:")
            # 2.查找学号在系统是否存在
            if id not in self.student_dict:
                # 3.如果不存在,就提示系统中没有此学生
                print(f"系统中没有学号为{id}的学生")
            else:
                # 4.如果有,从字典中把该学号对应的键值对删除
                self.student_dict.pop(id)
                # 5.提示删除成功
                print(f"删除学生{id}成功!!!")
    
        def dict_to_file(self):
            """
            把字典中的学生的数据覆盖写到文件中
            """
            # 1.得到所有value对应的列表
            student_list = self.student_dict.values()
            # 2.打开文件,以只写的方法打开文件,编码设置为UTF-8
            f = open("student.txt", "w", encoding="UTF-8")
            # 3.遍历列表,每个元素都是一个对象
            for student in student_list:
                # 4.在循环中,得到学生对象的学号,姓名,分数,组成一个字符串
                id = student.id
                name = student.name
                score = student.score
                line = id + "," + name + "," + score
                # 5.把这个字符串写入到文件中
                f.write(line + "
    ")
            # 6.循环结束后,关闭文件
            f.close()
    
        def file_to_dict(self):
            """
            读取文件中的数据,一行一行的读取.
            从读到的一行数据中解析出学号,姓名,分数, 创建一个学生对象.
            把对象作为value,把学号作为key,添加到字典中
            """
            # 1.以只读的方式打开文件
            f = open("student.txt", "r", encoding="UTF-8")
            while True:
                # 2.循环着读取文件,一次读一行
                line = f.readline()
                if line != "":
                    # 如果数据不为空,去掉最后的换行符
                    line = line[0:len(line) - 1]
                    # 3.在循环里面,从读到的一行数据中解析出学号,姓名,分数
                    infos = line.split(",")
                    id = infos[0]
                    name = infos[1]
                    score = infos[2]
                    # 4.使用学号,姓名,分数创建一个学生对象
                    s = Student(id, name, score)
                    # 5.把对象作为value,把学号作为key,添加到字典中
                    self.student_dict[id] = s
                else:
                    # 如果本次没有读到数据,表示数据已经读完了,应该终止循环
                    break
    View Code

    student.txt

    1,小樱,100
    2,千寻,100
    3,小野,100
    View Code

    【往期精彩】

    ▷【Python基础编程196 ● 读取文件的4种方式】
    ▷【Python基础编程197 ● 读取文件的4种方式】
    ▷【Python基础编程198 ● 读取文件的4种方式】
    ▷【Python基础编程199 ● Python怎么读/写很大的文件】
    ▷【Python基础编程200 ● 读取文件的4种方式】
    ▷【Python基础编程201 ● 读取文件的4种方式】
    ▷【Python基础编程202 ● 读取文件的4种方式】
    ▷【Python基础编程203 ● 读取文件的4种方式】

    【加群交流】



  • 相关阅读:
    nodejs
    socket.io
    how to develop mobile web
    nodejs
    GitHub
    angularJS vs backbone
    AngularJS
    oracle 数据库中数据导出到excel
    cocos2d-x中的二段构造模式
    HDOJ 4975 A simple Gaussian elimination problem.
  • 原文地址:https://www.cnblogs.com/hezhiyao/p/13503497.html
Copyright © 2011-2022 走看看