python 基于控制台的学生管理系统

最近在学校python的时候想到以前学习的时候用java实现过类似的控制台的管理系统,现在学习python,我认为这也是认识语言的第一步。所以基于dict和list对学生信息管理做了一个简单的展示。

数据结构

学生数据 ={} 字典类型

json结构为

导入模块也使用此json结构,需要在文件目录自建data.txt

{
        "665000": {
            "name": "lisi",
            "gender": "女",
            "class": "aute",
            "graders": {
                "chinese": "12",
                "math": "44",
                "english": "54"
            }
        }
    }

这是主界面

python control库中文文档 python controller_python

对应了五个功能模块
下面展示部分功能

信息展示

python control库中文文档 python controller_python control库中文文档_02

导入展示

python control库中文文档 python controller_json_03


以下是代码:

import time
import sys
import json


# 学生信息管理系统
class StudentMangerSystem:
    # 学号
    NUMBER = "NUMBER"
    # 姓名
    NAME = "name"
    # 性别
    GENDER = "gender"
    # 班级
    CLASS_ = "class"
    # 成绩
    GRADERS = "graders"
    # 语文
    CHINESE = "chinese"
    # 数学
    MATH = "math"
    # 英语
    ENGLISH = "english"
    # 学生数据
    studentInfo = {}

    """
        account:学号
        name:姓名
        gender:性别
        class_:班级
        graders:成绩
    """

    # 添加学生信息
    def addStudentMsg(self, account, name, gender, class_, graders):
        # 将数据加入新的字典中
        newStudentMsg = {self.NAME: name, self.GENDER: gender, self.CLASS_: class_, self.GRADERS: graders}
        # 合并学号和学生数据
        msg = {account: newStudentMsg}
        # 添加
        self.studentInfo.update(msg)

    # 输入学生信息
    def inputStudentMsg(self):
        name = input("请输入学生姓名:")
        gender = input("请输入学生性别:")
        class_ = input("请输入学生班级:")
        chinese = input("请输入学生语文成绩:")
        math = input("请输入学生数学成绩:")
        english = input("请输入学生英语成绩:")
        # 字典存学生成绩信息
        studentScore = {self.CHINESE: chinese, self.MATH: math, self.ENGLISH: english}
        # 返回数据列表
        stuArr = [name, gender, class_, studentScore]
        return stuArr

    # 程序主页面
    @staticmethod
    def functionInterface():
        print("ε=(´ο`*)))———————欢迎使用学生管理系统❥———————(^_-)")
        print("请选择功能:")
        print("输入Q——添加学生")
        print("输入E——查询学生")
        print("输入D——删除学生")
        print("输入R——修改学生信息")
        print("输入F——查询单条学生信息")
        print("输入C——导入数据")
        print("————————————————关闭系统请输入WQ————————————————")
        function = input("请输入所需操作:")
        if function == "Q":
            stu.addStudent()
        elif function == "E":
            stu.selectStudent()
        elif function == "D":
            stu.delStudent()
        elif function == "R":
            stu.updateStudent()
        elif function == "F":
            stu.selectByNumber(None)
        elif function == "C":
            stu.importStudentMsg()
        elif function == "WQ":
            sys.exit(0)
        else:
            print("请输入正确的操作:")
            isExit = input("请按任意键继续:")
            if isExit == "Q":
                stu.functionInterface()
            else:
                stu.functionInterface()

    # 添加学生
    @staticmethod
    def addStudent():
        flag = True
        while flag:
            num = input("请输入学号:")
            # 获取学生信息list
            studentArr = stu.inputStudentMsg()
            stu.addStudentMsg(num, studentArr[0], studentArr[1], studentArr[2], studentArr[3])
            isAdd = input("是继续否添加 Q——是 其它——否:")
            if isAdd != "Q":
                flag = False
        stu.functionInterface()

    # 查询所有学生信息
    @staticmethod
    def selectStudent():
        try:
            for k, v in stu.studentInfo.items():
                print("===============================学生信息===============================")
                # 防止程序出现学号为空的情况
                if k is None:
                    continue
                else:
                    print("学号:", k)
                print("姓名:", v[stu.NAME])
                print("性别:", v[stu.GENDER])
                print("班级:", v[stu.CLASS_])
                grader = v[stu.GRADERS]
                print("语文:", grader[stu.CHINESE])
                print("数学:", grader[stu.MATH])
                print("英语:", grader[stu.ENGLISH])
        except Exception:
            print("===============================学生信息===============================")
        finally:
            text = input("按任意键回到主菜单:")
            if text == "Q":
                stu.functionInterface()
            else:
                stu.functionInterface()

    # 按学号删除
    @staticmethod
    def delStudent():
        number = input("请输入学号:")
        try:
            del stu.studentInfo[number]
            print("学号:" + number + "删除成功")
        except KeyError:
            print("删除失败,请重试")
            print("==================================")
        print("Q——继续,其它——退出")
        isExit = input("请输入操作:")
        if isExit == "Q":
            stu.delStudent()
        else:
            stu.functionInterface()

    # 按学号进行修改
    @staticmethod
    def updateStudent():
        try:
            number = input("请输入学号继续:")
            info = stu.studentInfo.get(number)
            stu.msgPrint(info, number)
            print("===============================输入Q退出===============================")
            num = input("请输入序号:")
            grader = info[stu.GRADERS]
            if num == "0":
                data = input("学号修改为:")
                msg = {data: info}
                stu.studentInfo.pop(number)
                stu.studentInfo.update(msg)
            if num == "1":
                data = input("姓名修改为:")
                info[stu.NAME] = data
            if num == "2":
                data = input("性别修改为:")
                info[stu.GENDER] = data
            if num == "3":
                data = input("班级修改为:")
                info[stu.CLASS_] = data
            if num == "4":
                data = input("语文成绩修改为:")
                grader[stu.CHINESE] = data
            if num == "5":
                data = input("数学成绩修改为:")
                grader[stu.MATH] = data
            if num == "6":
                data = input("英语成绩修改为:")
                grader[stu.ENGLISH] = data
            if num == "Q":
                stu.functionInterface()
            # 获取成绩字典更新数据
            info[stu.GRADERS] = grader
            # 更新
            stu.studentInfo.update(info)
            print("修改成功!!!")
            print("如需继续修改")
            stu.updateStudent()
        except Exception:
            print("没有查询到学生信息!正在返回主界面!")
            time.sleep(3)
            stu.functionInterface()

    # 单个查询
    @staticmethod
    def selectByNumber(number):
        if number is None:
            number = input("请输入学号:")
        try:
            info = stu.studentInfo.get(number)
            stu.msgPrint(info, number)
            text = input("按任意键回到主菜单:")
            if text == "Q":
                stu.functionInterface()
            else:
                stu.functionInterface()
        except Exception:
            print("没有查询到学生信息!正在返回主界面!")
            time.sleep(3)
            stu.functionInterface()

    # 信息打印
    @staticmethod
    def msgPrint(info, number):
        print("===============================学生信息===============================")
        print("0.学号:", number)
        print("1.姓名:", info[stu.NAME])
        print("2.性别:", info[stu.GENDER])
        print("3.班级:", info[stu.CLASS_])
        grader = info[stu.GRADERS]
        print("4.语文:", grader[stu.CHINESE])
        print("5.数学:", grader[stu.MATH])
        print("6.英语:", grader[stu.ENGLISH])
        print("====================================================================")

    """
        导入格式为json格式,自行参照
    {
        "665000": {
            "name": "去织达政",
            "gender": "女",
            "class": "aute",
            "graders": {
                "chinese": "reprehenderit pariatur",
                "math": "sed aute nisi consectetur",
                "english": "ullamco enim culpa sint"
            }
        }
    }
    """

    # 导入模块
    @staticmethod
    def importStudentMsg():
        with open(r"week-three\data.txt", "r", encoding="utf-8") as f:  # 打开文件
            data = f.read()  # 读取文件
            # json转字典
            msg = json.loads(data)
            stu.studentInfo.update(msg)
            print("导入成功")
            text = input("按任意键回到主菜单:")
            if text == "Q":
                stu.functionInterface()
            else:
                stu.functionInterface()


if __name__ == '__main__':
    stu = StudentMangerSystem()
    # 执行主页面函数
    stu.functionInterface()

data.txt

{
    "665000": {
        "name": "\u5f20\u4e09",
        "gender": "\u7537",
        "class": "\u8ba1\u7b97\u673a\u79d1\u5b66\u4e0e\u6280\u672f\u4e00\u73ed",
        "graders": {
            "chinese": "90",
            "math": "80",
            "english": "99"
        }
    },
    "990999": {
        "name": "\u674e\u56db",
        "gender": "\u5973",
        "class": "\u5927\u6570\u636e\u4e00\u73ed",
        "graders": {
            "chinese": "24",
            "math": "42",
            "english": "55"
        }
    },
    "879500": {
        "name": "\u738b\u4e94",
        "gender": "\u7537",
        "class": "\u8f6f\u4ef6\u4e00\u73ed",
        "graders": {
            "chinese": "100",
            "math": "89",
            "english": "90"
        }
    },
    "667666": {
        "name": "\u8d75\u516d",
        "gender": "\u5973",
        "class": "\u79fb\u52a8\u5e94\u7528\u4e00\u73ed",
        "graders": {
            "chinese": "79",
            "math": "67",
            "english": "87"
        }
    }
}

导入数据请自行修改路劲

python control库中文文档 python controller_数据_04