一、系统功能概述

  1. 实现学生信息管理系统完整功能(当前仅支持用stu_info字典保存一条学生信息,字典中各元素分别对应学生学号、姓名、性别、语文成绩、数学成绩、英语成绩, stu_info列表在系统初始为空);
  2. 控制台界面显示学生信息管理系统主界面菜单;
  3. 支持用户控制台输入选择菜单功能选项对应值
  4. 依据用户输入的选择值显示对应功能选项详细文字信息,同时执行以下操作:
  1. 当用户输入为“1”时,控制台输入待添加学生学号;
  2. 当用户输入为“2”时,控制台输入待删除学生学号;
  3. 当用户输入为“3”时,控制台输入待更新学生学号;
  4. 当用户输入为“4”时,控制台输入待查询学生学号;
  5. 当用户输入为“5”时,控制台输入待统计学生学号;
  6. 当用户输入为“6”时,输出所有学生的平均成绩;
  7. 当用户输入为“7”时,退出系统
  1. 将存储的学生信息放入学生成绩统计表.xlsx中;

二、流程图

python查成绩 python学生成绩查询系统_python

 三、源代码

import openpyxl
import os


def menu():
    print("=" * 50)
    print('欢迎使用学生管理系统')
    print('1.添加学生信息')
    print('2.删除学生信息')
    print('3.修改学生信息')
    print('4.查询学生信息')
    print('5.学生成绩统计')
    print('6.查看所有学生平均成绩')
    print('7.退出系统')
    print("=" * 50)
    try:
        return int(input('请输入选择的功能:\n'))
    except ValueError:
        print("您未输入想要进行的功能")


# 进行添加操作将学生添加进入字典
def add(stu_list):
    stu_info = {}
    t = 1
    while t:
        stu_info["学号"] = input('请输入学号')
        for i in stu_list:
            if i["学号"] == stu_info["学号"]:
                print("学号信息重复")
                break
        else:
            t = 0

    stu_info["姓名"] = input('请输入姓名')
    stu_info["性别"] = input("请输入性别")
    stu_info["语文成绩"] = float(input('请输入语文成绩'))
    stu_info["数学成绩"] = float(input('请输入数学成绩'))
    stu_info["英语成绩"] = float(input('请输入英语成绩'))
    return stu_info


# 将添加的学生信息从字典添加进入表格
def addxlsx(stu_list, id, workbook):
    # 激活worksheet
    worksheet = workbook.active
    stu_info = add(stu_list)
    worksheet['A1'] = '学号'
    worksheet['B1'] = '姓名'
    worksheet['C1'] = '性别'
    worksheet['D1'] = '语文成绩'
    worksheet['E1'] = '数学成绩'
    worksheet['F1'] = '英语成绩'
    worksheet['A' + str(id)] = stu_info['学号']
    worksheet['B' + str(id)] = stu_info['姓名']
    worksheet['C' + str(id)] = stu_info['性别']
    worksheet['D' + str(id)] = stu_info['语文成绩']
    worksheet['E' + str(id)] = stu_info['数学成绩']
    worksheet['F' + str(id)] = stu_info['英语成绩']
    workbook.save("学生成绩统计表.xlsx")
    return stu_info


# 删除集合中的学生信息
def delent(stu_list):
    test = input('请输入需要删除的学号')
    for stu_info in stu_list:
        if stu_info["学号"] == test:
            stu_list.remove(stu_info)
            return stu_list
    print("学号不存在")
    return stu_list


# 将删除后的信息同步到表格文件中
def delentxlsx(stu_list):
    stu_list = delent(stu_list)
    update(stu_list)
    return stu_list


# 传入一个集合将集合中存储学生信息的字典转存进入表格文件
def update(stu_list):
    # 创建一个含有表头的集合
    stu_set = [['学号', '姓名', '性别', '语文成绩', '数学成绩', '英语成绩']]
    # 遍历集合中的字典
    for stu_inof in stu_list:
        # 将字典中的values内容传入集合
        stu_set.append(list(stu_inof.values()))
    # 创建一个新的实例
    wb = openpyxl.Workbook()
    sheet = wb.active
    # 将刚存于集合中的学生信息存入新的实例中
    for i in stu_set:
        sheet.append(i)
    # 更新’学生成绩统计表.xlsx‘文件
    wb.save("学生成绩统计表.xlsx")


# 更新学生信息
def seta(stu_list):
    test = input('请输入需要更改的学号')
    if len(stu_list):
        for stu_info in stu_list:
            if stu_info["学号"] == test:
                i = stu_list.index(stu_info)
                stu_info["姓名"] = input('请输入姓名')
                stu_info["性别"] = input("请输入性别")
                stu_info["语文成绩"] = float(input('请输入语文成绩'))
                stu_info["数学成绩"] = float(input('请输入数学成绩'))
                stu_info["英语成绩"] = float(input('请输入英语成绩'))
                stu_list[i] = stu_info
                update(stu_list)
                print("学生信息已更改")
                return stu_list

    print("%s学生信息不存在" % test)
    return stu_list


def get(stu_list):
    test = input('请输入需要查找的学号')
    if len(stu_list):
        for stu_info in stu_list:
            if stu_info["学号"] == test:
                # 格式化输出学生信息
                print("学号:" + str(stu_info["学号"]) + "\n姓名:" + str(stu_info["姓名"]) + "\n性别:" + str(stu_info["性别"]) +
                      "\n语文成绩:" + float(stu_info["语文成绩"]) + "\n数学成绩:" + float(stu_info["数学成绩"]) + "\n英语成绩:" +
                      float(stu_info["英语成绩"]))
                return

    print("学号%s的学生信息不存在" % test)


def StatisticalResults(stu_list):
    test = input('请输入需要统计的学号')
    if len(stu_list):
        for stu_info in stu_list:
            if stu_info["学号"] == test:
                print('学生成绩总和为%.2f' % (stu_info["语文成绩"] + stu_info["数学成绩"] + stu_info["英语成绩"]))
                print('学生平均成绩为%.2f' % ((stu_info["语文成绩"] + stu_info["数学成绩"] + stu_info["英语成绩"]) / 3))
                return

    print("学号为%s学生信息不存在" % test)


def AverageScore(stu_list):
    languages = float()
    mathematicss = float()
    englishs = float()
    for stu_info in stu_list:
        languages += float(stu_info['语文成绩'])
        mathematicss += float(stu_info['数学成绩'])
        englishs += float(stu_info['英语成绩'])
    print('语文平均成绩为%.2f' % (languages/len(stu_list)))
    print('数学平均成绩为%.2f' % (mathematicss/len(stu_list)))
    print('英语平均成绩为%.2f' % (englishs/len(stu_list)))


# 读取"学生成绩统计表.xlsx"中的信息并同步到系统中
def read(workbook):
    # 激活 worksheet
    ws = workbook.active
    # 将表格中的数据转化为字典
    stu_list = []
    # 获取"学生成绩统计表.xlsx"的长度
    for i in range(workbook.active.max_row):
        # 跳过第一行的表头
        if i == 0:
            continue
        stu_info = {"学号": ws['A' + str(i + 1)].value, "姓名": ws['B' + str(i + 1)].value,
                    "性别": ws['C' + str(i + 1)].value,
                    "语文成绩": ws['D' + str(i + 1)].value, "数学成绩": ws['E' + str(i + 1)].value,
                    "英语成绩": ws['F' + str(i + 1)].value}
        stu_list.append(stu_info)

    return stu_list


if __name__ == '__main__':
    # 判断"学生成绩统计表.xlsx"是否存在
    if not os.path.exists("学生成绩统计表.xlsx"):
        # 不存在创建"学生成绩统计表.xlsx"
        workbook = openpyxl.Workbook()
        worksheet = workbook.active
        workbook.save("学生成绩统计表.xlsx")
    # 创建锚点以确定新的学生信息放于第几行
    id = 1
    book = openpyxl.load_workbook('学生成绩统计表.xlsx', data_only=True)
    id += book.active.max_row
    stu_list = read(book)
    while 1:
        function = menu()
        if function == 1:
            stu_list.append(addxlsx(stu_list, id, book))
            id += 1
        elif function == 2:
            stu_list = delentxlsx(stu_list)
        elif function == 3:
            stu_list = seta(stu_list)
        elif function == 4:
            get(stu_list)
        elif function == 5:
            StatisticalResults(stu_list)
        elif function == 6:
            AverageScore(stu_list)
        elif function == 7:
            break