python编写学生成绩管理系统的逻辑结构及功能实现
来源:脚本之家    时间:2022-04-25 17:45:10
目录
学生信息系统一、功能界面二 、主函数三 、学生信息录入功能四 、学生信息查找功能五 、删除学生信息六 、学生信息修改功能七 、学生成绩排序八 、 学生人数统计九 、显示所有学生信息程序打包

学生信息系统

提示:python编写的学生成绩管理系统,包括8个功能和打包教程

一、功能界面

def menum():
    print("==================student_manger=================")
    print("---------------------功能界面---------------------")
    print("\t\t1.录入学生信息")
    print("\t\t2.查找学生信息")
    print("\t\t3.删除学生信息")
    print("\t\t4.修改学生成绩")
    print("\t\t5.排序")
    print("\t\t6.统计学生总人数")
    print("\t\t7.显示所有学生信息")
    print("\t\t8.显示功能介绍按钮")
    print("\t\t0.退出")
    print("================================================")

二 、主函数

def main():
    menum()
    while True:
        try:
            choice = int(input("请选择你想进行的操作: "))
        except ValueError:
            print("输入的数据存在错误,只能输入0到7的整数!")
            try:
                choice = int(input("请重新输入: "))
            except ValueError:
                print("重复输入错误,退出系统!")
                break
        if choice in [0, 1, 2, 3, 4, 5, 6, 7, 8]:
            if choice == 0:
                answer = input("你确定要退出系统吗?(Y/N): ")
                if answer == "Y" or answer == "y":
                    print("谢谢使用!")
                    break
                elif answer == "N" or answer == "n":
                    print("即将返回上一步操作!")
                    continue
                else:
                    input("输入错误,即将返回主界面!")
                    continue
            elif choice == 1:
                insert()
            elif choice == 2:
                search()
            elif choice == 3:
                delete()
            elif choice == 4:
                modify()
            elif choice == 5:
                sort()
            elif choice == 6:
                total()
            elif choice == 7:
                show()
            else:
                menum()
        else:
            print("你选择的操作无效,请重新输入!:")

三 、学生信息录入功能

逻辑结构图

def insert():
    student_list = []
    id_list = []
    while True:
        id = input("请输入ID: ")
        if not id:
            break
        name = input("请输入姓名:")
        if not name:
            break
        try:
            english = float(input("请输入英语成绩:"))
            math = float(input("请输入数学成绩:"))
            python = float(input("请输入Python成绩:"))
        except ValueError:
            print("数据输入错误!")
            continue
        # 将录入的学生信息存放到字典中
        student = {"id": id, "name": name, "english": english, "math": math, "Python": python}
        # 将每个学生的信息存放在列表中
        if student["id"] in id_list:                    # student["id"] = value(id)
            print("已存在相同ID:")
            for i in range(len(student_list)):
                if student_list[i][id] == student[id]:  # 输出重复id元素
                    print(student_list[i].items())
                    break
            print("请重新录入!")
        else:
            id_list.append(str(student["id"]))
            student_list.append(student)
        # 是否继续添加学生信息
        answer = input("是否继续添加学生信息?(Y/N): ")
        if answer == "Y" or answer == "y":
            continue
        elif answer == "N" or answer == "n":
            # 存储学生信息
            save(student_list, filename)
            print("学生信息录入完毕!")
            break
        else:
            print("输入错误,即将返回主界面!")
            break

四 、学生信息查找功能

逻辑结构图

代码

def search():
    while True:
        if os.path.exists(filename):
            with open(filename, "r", encoding = "utf-8") as s_file:
                student_qurey = s_file.readlines()              # 将学生信息全部取出
                id_list = []
                name_list = []
                for i in student_qurey:
                    d = dict(eval(i))
                    id_list.append(d["id"])                    # 将所有学生的id存放在id_list中
                    name_list.append(d["name"])                # 将所有学生的name存放在id_list中
            try:
                mode = int(input("请选择查询模式: 1.按照ID查询 / 2.按照姓名查询 "))
            except ValueError:
                print("数据类型输入错误!请重新输入!")
            else:
                if mode == 1:                                  # 按照ID查询
                    id = input("请输入学生id: ")
                    if id in id_list:
                        print("已经查找到该名学生:")
                        print("ID\t\t\t姓名:\t\t英语成绩:\t\t数学成绩:\t\tPython成绩:\t\t总成绩:")
                        for item in student_qurey:
                            if dict(eval(item))["id"] == id:
                                p = dict(eval(item))
                                print("{0}\t\t{1}\t\t {2}\t\t {3}\t\t   {4}\t\t   {5}".format(
                                                 p["id"], p["name"], p["english"], p["math"], p["Python"],
                                                 float(p["english"])+float(p["math"])+float(p["Python"])))
                    else:
                        print("查无此人!")
                elif mode == 2:                               # 按照姓名查询
                    name = input("请输入学生姓名: ")
                    if name in name_list:
                        print("已经查找到该名学生:")
                        print("ID\t\t\t姓名:\t\t英语成绩:\t\t数学成绩:\t\tPython成绩:\t\t总成绩:")
                        for item in student_qurey:
                            if dict(eval(item))["name"] == name:
                                p = dict(eval(item))
                                print("{0}\t\t{1}\t\t {2}\t\t {3}\t\t   {4}\t\t   {5}".format(
                                    p["id"], p["name"], p["english"], p["math"], p["Python"],
                                    float(p["english"]) + float(p["math"]) + float(p["Python"])))
                    else:
                        print("查无此人!")
                else:
                    print("输入错误,只能选择1/2两种模式!")
                answer = input("是否继续查询? (Y/N)")
                if answer == "Y" or answer == "y":
                    continue
                elif answer == "N" or answer == "n":
                    print("正在退出查询..")
                    break
                else:
                    print("输入错误,即将返回主界面!")
                    break
        else:
            print("无学生信息文件!")
            return

五 、删除学生信息

逻辑结构图

代码

def delete():
    while True:
        student_id = input("请输入想要删除的学生的ID: ")
        if student_id != "":
            if os.path.exists(filename):
                with open(filename, "r", encoding = "utf-8") as file:
                    student_old = file.readlines()
            else:
                student_old = []
            flag = False                            # 标记是否删除
            if student_old:
                with open(filename, "w", encoding = "utf-8") as wfile:
                    for item in student_old:
                        d = dict(eval(item))        # 转化为字典类型
                        if d["id"] != student_id:
                            wfile.write(str(d)+"\n")
                        else:
                            flag = True
                    if flag:
                        print(f"id为{student_id}的学生信息已被删除!")
                    else:
                        print(f"没有找到id为{student_id}的学生信息!")
            else:
                print("无学生信息")
                break
            show()                  # 显示更新后的文件信息
            answer = input("是否继续删除学生信息?(Y/N): ")
            if answer == "Y" or answer == "y":
                continue
            elif answer == "N" or answer == "n":
                break
            else:
                print("输入错误,即将返回主界面!")
                break

六 、学生信息修改功能

逻辑结构图

代码

def modify():
    show()
    if os.path.exists(filename):
        with open(filename, "r", encoding = "utf-8") as rfile:
            student_old = rfile.readlines()             # 直接将文本文件的内容整行读取到列表中
    else:
        print("学生文件信息不存在!")
    student_id = input("请输入想要修改的学生的ID: ")
    with open(filename, "w", encoding = "utf-8") as just_file:  # 判断学生是否在该系统中
        id_list = []
        for i in student_old:
            d = dict(eval(i))
            id_list.append(d["id"])                             # 将所有学生的id存放在id_list中
        if student_id in id_list:                               # 要修改的学生存在时
            for item in student_old:
                e = dict(eval(item))
                if e["id"] == student_id:
                    print("已找到该名学生!")
                    while True:
                        try:
                            e["name"] = input("请输入姓名: ")
                            e["english"] = input("请输入英语成绩: ")
                            e["math"] = input("请输入数学成绩: ")
                            e["Python"] = input("请输入Python成绩: ")
                        except ValueError:
                            print("数据类型输入错误!请重新输入!")
                        else:
                            break  # try...except..else: 输入为出错时,执行else语句
                    just_file.write(str(e) + "\n")
                    print("修改成功!")
                else:
                    just_file.write(str(e) + "\n")
        else:
            answer1 = input("查无此人!,是否执行插入操作?  (Y/N)")
            if answer1 == "Y" or answer1 == "y":
                insert()
            else:
                print("结束当前操作")
        answer = input("是否继续修改其余学生信息?(Y/N): ")
        if answer == "Y" or answer == "y":
            modify()
        elif answer == "N" or answer == "n":
            print("结束修改,即将返回主界面..")
        else:
            print("输入错误,即将返回主界面!")

七 、学生成绩排序

逻辑结构图

代码

def sort():
    student_new = []
    if os.path.exists(filename):
        with open(filename, "r", encoding = "utf-8") as sort_file:
            student_list = sort_file.readlines()                    # 无序的学生信息列表
        for item in student_list:
            d = dict(eval(item))
            student_new.append(d)                                   # 列表元素转化为字典
        while True:
            try:
                sort_choice = int(input("请选择排序方式: 0:升序 / 1:降序\t"))
            except ValueError:
                print("输入的数据类型错误,请重新输入")
            else:
                if sort_choice == 0:
                    Flag = False
                    break
                elif sort_choice == 1:
                    Flag = True
                    break
                else:
                    print("输入错误,只能在0/1中选择!")
                    continue
        while True:
            try:
                asc_choice = int(input("请选择按照哪一门成绩进行排序: 英语:0  / 数学:1  / python:2\t\t"))
            except ValueError:
                print("输入的数据类型错误,请重新输入")
            else:
                if asc_choice == 0:
                    student_new.sort(key = lambda x: int(x["english"]), reverse = Flag)     # 根据列表中的元素进行排序
                    show()
                    break
                elif asc_choice == 1:
                    student_new.sort(key = lambda x: int(x["math"]), reverse = Flag)
                    show()
                    break
                elif asc_choice == 2:
                    student_new.sort(key = lambda x: int(x["Python"]), reverse = Flag)
                    show()
                    break
                elif asc_choice == 3:
                    student_new.sort(key = lambda x: int(x["Python"])+int(x["english"])+int(x["math"]), reverse = Flag)
                    show()
                    break
                else:
                    print("输入错误,只能在0/1/2中选择!")
                    continue
    else:
        print("学生信息文件不存在!")

八 、 学生人数统计

逻辑结构图

代码

def total():
    nums = 0
    if os.path.exists(filename):
        with open(filename, "r", encoding = "utf-8") as t_file:
            len_list = t_file.readlines()
        for i in range(len(len_list)):
            if len_list[i] != "":
                nums += 1
        print("当前学生总人数为: ", nums)
        print("请选择你想进行的下一步操作: ")
    else:
        print("暂无学生信息文件")

九 、显示所有学生信息

逻辑结构图

代码

def show():
    if os.path.exists(filename):
        with open(filename, "r", encoding = "utf-8") as show_file:
            student_list = show_file.readlines()
            if student_list:
                print("----全部学生信息如下----")
                print("ID\t\t\t姓名:\t\t英语成绩:\t\t数学成绩:\t\tPython成绩:\t\t总成绩:")
                for item in student_list:
                    p = dict(eval(item))
                    print("{0}\t\t{1}\t\t {2}\t\t {3}\t\t   {4}\t\t   {5}".format(
                        p["id"], p["name"], p["english"], p["math"], p["Python"],
                        float(p["english"]) + float(p["math"]) + float(p["Python"])))
            else:
                print("暂无学生信息!")
    else:
        print("暂无学生信息!")

程序打包

在 pycharm 终端 或者 python命令界面, 使用:

pip install PyInstaller

下载python打包程序,下载完成后, 执行以下操作:

pyinstaller —F F:\xxxx\xxx\xx\x.py

其中:

-F 代表将程序打包为单个exe文件,F:\xxx\xxx\xx.py 为你的学生成绩管理系统文件的绝对地址

打包完成后,提示信息倒数第二行:Appending语句后面即为exe文件位置,若无特殊显示,则在当前目录父文件下

以上就是python编写学生成绩管理系统实现八个功能示例的详细内容,更多关于python编写学生成绩管理系统的资料请关注脚本之家其它相关文章!

关键词: 成绩管理系统 数据类型 信息系统 退出系统

上一篇:

下一篇: