(python学生管理系统)增删查改排序计算总分功能齐全


前言

坐标:广油电信19某L姓氏男子
自己做的比较满意的python学生信息管理系统,拿出来跟大家分享交流一下


提示:以下是本篇文章正文内容,下面案例可供参考

一、各模块功能展示

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

二、源码如下

1.student_main

# -*- coding = utf-8 -*-
# @Time : 2021/3/14 16:04
# @Author : gydxljj
# @File : student_main.py
# @Software : PyCharm

# 导入学生方法模块
import student_methods
# 无限循环,由用户决定循环是否退出
while True:
    # TODO 显示功能菜单
    student_methods.show_menu()
    function = input("->输入功能键(0-5):")
    print("你选择的操作是:" + function)
    # 成员运算符,判断用户输入是否在指定列表内
    choice_list = ["0", "1", "2", "3", "4", "5"]
    if function in choice_list:
        # TODO 新增学生
        if function == "1":
            student_methods.add_student()
        # TODO 查询学生
        elif function == "2":
            student_methods.search_info()
        # TODO 修改学生
        elif function == "3":
            student_methods.student_revise()
        # TODO 删除学生
        elif function == "4":
            student_methods.student_del()
        # TODO 遍历/排序学生
        elif function == "5":
            student_methods.show_student()
        elif function == "0":
            print("欢迎再来哦~")
            break

    else:
        print("输入错误,请重新输入:")

2.student_methods

# -*- coding = utf-8 -*-
# @Time : 2021/3/14 16:04
# @Author : gydxljj
# @File : student_methods.py
# @Software : PyCharm

# 记录所有学生列表
student_list = []
# 记录分数列表
total_list = []
# 记录添加学生人数
num = 0


def show_menu():
    """ 显示菜单 """
    menu = [
        "-学生信息-",
        "*管理系统*",
        "•1.新增学生",
        "•2.查询学生",
        "•3.修改学生",
        "•4.删除学生",
        "•5.遍历排序",
        "•0.退出系统"

    ]

    print_1()
    for i in menu:
        print("┃┉┄%s┄┉.┃" % i.strip().center(10))
    print_2()


def print_1():
    """打印函数"""
    print("┏" + "━" * 20 + "┓")


def print_2():
    print("┗" + "━" * 20 + "┛")


def add_student():
    """新增学生"""
    # 记录已添加的学生个数
    global num
    print("*建议*()內提示信息是为了字段对齐")
    print("-" * 50)
    while True:
        # 1.提示用户输入学生信息
        classroom_str = input("->请输入班级(几班?):")
        name_str = input("->请输入姓名(中文三字):")
        num_str = input("->请输入学号(三位):")
        sex_str = input("->请输入性别(男女?):")
        print("输入三门成绩:")
        # 2.使用用户输入的信息建立一个学生字典
        student_dict = {"name": name_str,
                        "classroom": classroom_str,
                        "num": num_str,
                        "sex": sex_str}
        math = float(input("->请输入数学成绩:"))
        english = float(input("->请输入英语成绩:"))
        chinese = float(input("->请输入语文成绩:"))
        total = math + english + chinese
        average = (math + english + chinese)/3
        student_dict['math'] = math
        student_dict['english'] = english
        student_dict['chinese'] = chinese
        student_dict['total'] = total
        student_dict['average'] = average
        total_list.append(student_dict['total'])
        # 3.将学生字典添加到列表中
        student_list.append(student_dict)
        num += 1
        answer = input("是否继续添加?yes/no\n")
        # 判断是否一次输入多个学生记录
        if answer == "yes":
            continue
        else:
            break
    print("-" * 50)
    # 4.提示用户添加成功
    print("%d位学生信息添加成功" % num)


def show_student():
    """遍历列表"""
    print("-" * 60)
    # 打印表头
    # 判断列表是否为空
    if not student_list:
        print("没有任何记录,请新增一个学生记录")
    else:
        print("遍历的学生列表如下↓")
        print("=" * 88)
        for name in ["班级", "姓名", "学号", "性别", "数学成绩", "英语成绩", "语文成绩", "总成绩", "平均分"]:
            print("|%s" % name.center(7), end="")
        print(" ")
        print("-" * 88)
        # 打印分割线
        # 遍历学生列表以此输出字典信息
        student_new = []
        for student_dict in student_list:
            # 将遍历出来的字典重新加入新的列表中
            student_new.append(student_dict)
            print("|%s|%s|%s|%s|%s|%s|%s|%s|%.2f|" % (str(student_dict["classroom"]).center(7),
                                                      str(student_dict["name"]).center(6),
                                                      str(student_dict["num"]).center(10),
                                                      str(student_dict["sex"]).center(8),
                                                      str(student_dict["math"]).center(8),
                                                      str(student_dict["english"]).center(10),
                                                      str(student_dict["chinese"]).center(10),
                                                      str(student_dict["total"]).center(10),
                                                      student_dict["average"]))
            print("-" * 88)
            # 学生个数大于等于2则进行排序询问
        if len(student_list) == 1:
            print("(alert____:)大于等于2个学生才能排序喔~")
        if len(student_list) >= 2:
            answer = input("是否进行排序?yes/no\n")
            if answer == "yes":
                # 在新的列表对总分进行重新排序,目的保留原来列表的顺序
                switch = input("->对一下哪项排序(1.总分 2.平均分 3.数学成绩 4.语文成绩 5.英语成绩)\n")
                if switch == "1":
                    choose = input("1.升序 2.降序\n")
                    if choose == "1":
                        # 匿名函数:lambda关键字来定义
                        # 根据参数key制定根据哪个字段对列表元素进行排序
                        student_new.sort(key=lambda x: x['total'], reverse=False)
                    else:
                        student_new.sort(key=lambda x: x['total'], reverse=True)
                elif switch == "2":
                    choose = input("1.升序 2.降序\n")
                    if choose == "1":
                        student_new.sort(key=lambda x: x['average'], reverse=False)
                    else:
                        student_new.sort(key=lambda x: x['average'], reverse=True)

                elif switch == "3":
                    choose = input("1.升序 2.降序\n")
                    if choose == "1":
                        student_new.sort(key=lambda x: x['math'], reverse=False)
                    else:
                        student_new.sort(key=lambda x: x['math'], reverse=True)
                elif switch == "4":
                    choose = input("1.升序 2.降序\n")
                    if choose == "1":
                        student_new.sort(key=lambda x: x['chinese'], reverse=False)
                    else:
                        student_new.sort(key=lambda x: x['chinese'], reverse=True)
                else:
                    choose = input("1.升序 2.降序\n")
                    if choose == "1":
                        student_new.sort(key=lambda x: x['english'], reverse=False)
                    else:
                        student_new.sort(key=lambda x: x['english'], reverse=True)
                print("->排序后的学生列表")
                print("=" * 88)
                for name in ["班级", "姓名", "学号", "性别", "数学成绩", "英语成绩", "语文成绩", "总成绩", "平均分"]:
                    print("|%s" % name.center(7), end="")
                print(" ")
                print("-" * 88)
                for student_dict in student_new:
                    print("|%s|%s|%s|%s|%s|%s|%s|%s|%.2f|" % (str(student_dict["classroom"]).center(7),
                                                              str(student_dict["name"]).center(6),
                                                              str(student_dict["num"]).center(10),
                                                              str(student_dict["sex"]).center(8),
                                                              str(student_dict["math"]).center(8),
                                                              str(student_dict["english"]).center(10),
                                                              str(student_dict["chinese"]).center(10),
                                                              str(student_dict["total"]).center(10),
                                                              student_dict["average"]))
                    print("-" * 88)
            else:
                return
        else:
            return


def search_info():
    """查询信息"""
    print("-" * 60)
    # 1.提示用户输入要搜索的姓名
    name_match = input("请输入要查找信息的姓名:")
    # 2.遍历学生列表,查询要搜索的姓名,如果没有找到应该提示用户
    for student_dict in student_list:
        if student_dict["name"] == name_match:
            print("=" * 88)
            for name in ["班级", "姓名", "学号", "性别", "数学成绩", "英语成绩", "语文成绩", "总成绩", "平均分"]:
                print("|%s" % name.center(7), end="")
            print(" ")
            print("-" * 88)
            print("|%s|%s|%s|%s|%s|%s|%s|%s|%.2f|" % (str(student_dict["classroom"]).center(7),
                                                      str(student_dict["name"]).center(6),
                                                      str(student_dict["num"]).center(10),
                                                      str(student_dict["sex"]).center(8),
                                                      str(student_dict["math"]).center(8),
                                                      str(student_dict["english"]).center(10),
                                                      str(student_dict["chinese"]).center(10),
                                                      str(student_dict["total"]).center(10),
                                                      student_dict["average"]))
            print("-" * 88)
            break

    else:
        print("输入错误或没有该学生哦~")


def input_info(dict_value, tips_message):
    """
    输入判断
    :param dict_value: 原字典值
    :param tips_message: 用户输入信息
    :return:用户输入内容返回内容,否则返回原内容
    """
    result = input(tips_message)
    # 针对用户输入进行判断,若用户输入内容,直接返回结果,
    if len(result) > 0:
        return result
    # 如果用户没有输入内容,返回字典中原有的值
    else:
        return dict_value


def student_revise():
    """修改学生"""
    print("-" * 60)
    # 1.提示用户输入要修改的姓名
    name_match = input("请输入要修改信息的姓名:")
    # 2.遍历学生列表,查询要搜索的姓名,如果没有找到应该提示用户
    for student_dict in student_list:
        if student_dict["name"] == name_match:
            print("=" * 88)
            for name in ["班级", "姓名", "学号", "性别", "数学成绩", "英语成绩", "语文成绩", "总成绩", "平均分"]:
                print("|%s" % name.center(7), end="")
            print(" ")
            print("-" * 88)
            print("|%s|%s|%s|%s|%s|%s|%s|%s|%.2f|" % (str(student_dict["classroom"]).center(7),
                                                      str(student_dict["name"]).center(6),
                                                      str(student_dict["num"]).center(10),
                                                      str(student_dict["sex"]).center(8),
                                                      str(student_dict["math"]).center(8),
                                                      str(student_dict["english"]).center(10),
                                                      str(student_dict["chinese"]).center(10),
                                                      str(student_dict["total"]).center(10),
                                                      student_dict["average"]))
            print("-" * 88)

            student_dict['classroom'] = input_info(student_dict['classroom'], "->请输入新的班级:[回车不输入]")
            student_dict['name'] = input_info(student_dict['name'], "->请输入新的名字:[回车不输入]")
            student_dict['num'] = input_info(student_dict['num'], "->请输入新的学号:[回车不输入]")
            student_dict['sex'] = input_info(student_dict['sex'], "->请输入新的性别:[回车不输入]")
            student_dict['math'] = float(input_info(student_dict['math'], "->请输入新的数学成绩:[回车不输入]"))
            student_dict['english'] = float(input_info(student_dict['english'], "->请输入新的英语成绩:[回车不输入]"))
            student_dict['chinese'] = float(input_info(student_dict['chinese'], "->请输入新的语文成绩:[回车不输入]"))
            student_dict['total'] = count_score(student_dict)
            student_dict['average'] = average_score(student_dict)
            print("学生%s信息修改成功" % student_dict['name'])
            break
    else:
        print("输入错误或没有该学生哦~")


def student_del():
    """删除学生"""
    print("-" * 60)
    # 1.提示用户输入要搜索的姓名
    name_match = input("请输入要删除信息的姓名:")
    # 2.遍历学生列表,查询要搜索的姓名,如果没有找到应该提示用户
    for student_dict in student_list:
        if student_dict["name"] == name_match:
            print("=" * 88)
            for name in ["班级", "姓名", "学号", "性别", "数学成绩", "英语成绩", "语文成绩", "总成绩", "平均分"]:
                print("|%s" % name.center(7), end="")
            print(" ")
            print("-" * 88)
            print("|%s|%s|%s|%s|%s|%s|%s|%s|%.2f|" % (str(student_dict["classroom"]).center(7),
                                                      str(student_dict["name"]).center(6),
                                                      str(student_dict["num"]).center(10),
                                                      str(student_dict["sex"]).center(8),
                                                      str(student_dict["math"]).center(8),
                                                      str(student_dict["english"]).center(10),
                                                      str(student_dict["chinese"]).center(10),
                                                      str(student_dict["total"]).center(10),
                                                      student_dict["average"]))
            print("-" * 88)

            question = input("确定要删除该学生信息吗?yes/no\n")
            if question == "yes":
                print(" ")
                student_list.remove(student_dict)
                print("删除成功了哦~")
            break

    else:
        print("输入错误或没有该学生哦~")


def count_score(find_score):
    """
    计算总分
    :param find_score:修改后的学生字典
    :return:返回重新计算后的total
    """
    total = find_score['math'] + find_score['english'] + find_score['chinese']
    return total


def average_score(find_average):
    """
    计算平均分
    :param find_average:修改后的学生字典
    :return:返回重新计算后的average
    """
    average = (find_average['math'] + find_average['english'] + find_average['chinese'])/3
    return average

总结

使用该代码最好用pycharm新建两个文件夹,一个是student_main导入上面student_main的代码,另一个你懂得~~
本人也是菜鸟一枚,欢迎大家吐槽。

  • 2
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值