**学生成绩管理系统加强版**

        使用代码之前,需要提前在次代码同级目录下新建四个表格。分别是:学生成绩.xlsx,学生信息.xlsx,课程信息.xlsx,账号信息.xlsx。主要是利用pandas将信息存入excel表格中的技术,以及函数知识。

        路径一定要改成自己的。

import pandas as pd

df = pd.read_excel('D:\python202307\chy\有趣的代码\学生成绩.xlsx')
df1 = pd.read_excel('D:\python202307\chy\有趣的代码\学生信息.xlsx')
df2 = pd.read_excel('D:\python202307\chy\有趣的代码\课程信息.xlsx')
df3 = pd.read_excel('D:\python202307\chy\有趣的代码\账号信息.xlsx')
datas = {'students': df1.to_dict(orient='records'), 'courses': df2.to_dict(orient='records'),
         'scores': df.to_dict(orient='records')}

usr_pwd = df3.to_dict(orient='list')


def add_name():
    while True:
        name = input("请输入姓名:")
        if 2 <= len(name) <= 6:
            break
        else:
            print("输入不合法,重新输入")
    return name


def add_age():
    while True:
        age = int(input("请输入年龄:"))
        if 18 <= age <= 30:
            break
        else:
            print("输入不合法,重新输入")
    return age


def add_sex():
    while True:
        sex = input("请输入性别:")
        if sex in ["男", "女"]:
            break
        else:
            print("输入不合法,重新输入")
    return sex


def add_score():
    while True:
        score = input("请输入分数:")
        if 0 <= int(score) <= 100:
            break
        else:
            print("输入不合法,重新输入")
    return score


def is_student_id(a):
    for s in datas["students"]:
        if a == s["Id"]:
            return True
    else:
        return False


def is_course_id(b):
    for s in datas["courses"]:
        if b == s["Id"]:
            return True
    else:
        return False


def display_add_student_menu():
    print("0.返回主菜单")
    print("1.添加学生")


def add_student():
    while True:
        display_add_student_menu()
        n = input("请输入数字进行操作:")
        if n == "0":
            break
        elif n == "1":
            name = add_name()
            age = add_age()
            sex = add_sex()

            current_id = 101 if not len(datas["students"]) else datas["students"][-1]["Id"] + 1
            datas["students"].append({"Id": current_id, "Name": name, "Age": age, "Sex": sex})
            print("添加学生成功")
            print()
        else:
            print("输入不合法,重新输入")


def display_add_course_menu():
    print("0.返回主菜单")
    print("1.添加课程")


def add_course():
    while True:
        display_add_course_menu()
        n = input("请输入数字进行操作:")
        if n == "0":
            break
        elif n == "1":
            c = input("请输入课程名:")
            current_id = 1001 if not len(datas["courses"]) else datas["courses"][-1]["Id"] + 1
            datas["courses"].append({"Id": current_id, "Name": c})
            print("添加课程成功")
            print()
        else:
            print("输入不合法,重新输入")


def display_add_score_menu():
    print("0.返回主菜单")
    print("1.添加分数")


def add_student_score():
    while True:
        display_add_score_menu()
        n = input("请输入数字进行操作:")
        if n == "0":
            break
        elif n == "1":
            a = int(input("请输入学生id:"))
            if is_student_id(int(a)):
                b = int(input("请输入课程id:"))
                if is_course_id(int(b)):
                    c = add_score()
                    current_id = 1001 if not len(datas["scores"]) else datas["scores"][-1]["Id"] + 1
                    datas["scores"].append({"Id": current_id, "Sid": a, "Cid": b, "Score": int(c)})
                    print("添加分数成功")
                    print()
                    print(datas["scores"])
                else:
                    print("课程id不存在")
            else:
                print("学生id不存在")
        else:
            print("输入不合法,重新输入")


def update_student_menu():
    print("0.返回主菜单")
    print("1.修改信息")


def update_student():
    while True:
        update_student_menu()
        n = input("请输入数字进行操作:")
        if n == "0":
            break
        elif n == "1":
            a = input("请输入学生id:")
            if is_student_id(int(a)):
                d = add_name()
                b = add_age()
                c = add_sex()
                for e in datas["students"]:
                    if int(a) == e["Id"]:
                        e.update({"Name": d, "Age": b, "Sex": c})
                        print("修改成功")
                        print(datas["students"])
                        print()
                        break
            else:
                print("学生id不存在")
        else:
            print("输入不合法,重新输入")


def update_score_menu():
    print("0.返回主菜单")
    print("1.修改分数")


def update_score():
    while True:
        update_score_menu()
        n = input("请输入数字进行操作:")
        if n == "0":
            break
        elif n == "1":
            a = int(input("请输入学生id:"))
            b = int(input("请输入课程id:"))
            for s in datas["scores"]:
                if a == s["Sid"]:
                    if b == s["Cid"]:
                        c = add_score()
                        s.update({"Score": int(c)})
                        print("修改成功")
                        print(datas["scores"])
                        break
            else:
                print("该学生没有录入成绩")
        else:
            print("输入不合法,重新输入")


def update_course_menu():
    print("0.返回主菜单")
    print("1.修改课程名")


def update_course():
    while True:
        update_course_menu()
        n = input("请输入数字进行操作:")
        if n == "0":
            break
        elif n == "1":
            a = int(input("请输入课程id:"))
            for s in datas["courses"]:
                if a == s["Id"]:
                    b = input("请输入课程名:")
                    s.update({"Name": b})
                    print("修改课程成功")
                    print()
                    print(datas["courses"])
                    break
            else:
                print("没有该id")
        else:
            print("输入不合法,重新输入")


def find_student_menu():
    print("0.返回主菜单")
    print("1.查询学生")


def find_student():
    while True:
        find_student_menu()
        n = input("请输入数字进行操作:")
        if n == "0":
            break
        elif n == "1":
            l = []
            a = int(input("请输入学生id:"))
            for e in datas["students"]:
                if a == e["Id"]:
                    print(f'ID:{e["Id"]}\nName:{e["Name"]}\nAge:{e["Age"]}\nSex:{e["Sex"]}')
                    for s in datas["scores"]:
                        if a == s["Sid"]:
                            l.append({s["Cid"]: s["Score"]})

                    print(l)
            else:
                print("没有该学生id")
        else:
            print("输入不合法,重新输入")


def find_show_student():
    if len(datas["students"]) == 0:
        print("暂无学生,请添加")
        print()
    else:
        for i in range(len(datas["students"])):
            l = []
            for k, v in datas["students"][i].items():
                print(f'{k} : {v}')
                for s in datas["scores"]:
                    if v == s["Sid"]:
                        l.append({s["Cid"]: s["Score"]})
            if len(l) == 0:
                print("暂无成绩,请添加")
                print()
            else:
                print(f'全部成绩为:{l}')
                print()


def delta_course_score_menu():
    print("0.返回主菜单")
    print("1.删除课程")


def delta_course_score():
    while True:
        delta_course_score_menu()
        n = input("请输入数字进行操作:")
        if n == "0":
            break
        elif n == "1":
            a = int(input("请输入课程id:"))
            if is_course_id(a):
                courses_to_remove = []
                scores_to_remove = []
                for s in datas["courses"]:
                    if a == s["Id"]:
                        courses_to_remove.append(s)
                for e in datas["scores"]:
                    if a == e["Cid"]:
                        scores_to_remove.append(e)

                for course in courses_to_remove:
                    datas["courses"].remove(course)
                for score in scores_to_remove:
                    datas["scores"].remove(score)

                print("删除成功")
            else:
                print("该课程id不存在,成功新输入")
        else:
            print("输入不合法,重新输入")


def delta_student_score_menu():
    print("0.返回主菜单")
    print("1.删除学生")


def delta_student_score():
    while True:
        delta_student_score_menu()
        n = input("请输入数字进行操作:")
        if n == "0":
            break
        elif n == "1":
            a = int(input("请输入学生id:"))
            if is_student_id(a):
                students_to_remove = []
                scores_to_remove = []
                for s in datas["students"]:
                    if a == s["Id"]:
                        students_to_remove.append(s)
                for e in datas["scores"]:
                    if a == e["Sid"]:
                        scores_to_remove.append(e)

                for student in students_to_remove:
                    datas["students"].remove(student)
                for score in scores_to_remove:
                    datas["scores"].remove(score)

                print("删除成功")
            else:
                print("该学生id不存在,成功新输入")
        else:
            print("输入不合法,重新输入")


def save_student():
    df = pd.DataFrame(datas["students"])
    df.to_excel("学生信息.xlsx", index=False)
    print("保存成功")
    print()


def save_course():
    df = pd.DataFrame(datas["courses"])
    df.to_excel("课程信息.xlsx", index=False)
    print("保存成功")
    print()


def save_score():
    df = pd.DataFrame(datas["scores"])
    df.to_excel("学生成绩.xlsx", index=False)
    print("保存成功")
    print()


def display_require_menu():
    print("0.退出程序")
    print("1.登录")
    print("2.注册")


def input_pwd(info):
    while True:
        pwd = input(info)
        if pwd.isdigit() and 6 <= len(pwd) <= 10:
            break
        else:
            print("输入不合法,重新输入")
    return pwd


def show_all_course():
    if len(datas["courses"]) == 0:
        print("暂无课程,请添加")
        print()
    else:
        for i in range(len(datas["courses"])):
            for k, v in datas["courses"][i].items():
                print(f'{k} : {v}')
            print()


def display_main_menu():
    print("请选择操作".center(30, "*"))
    print("1.添加学生个人信息\n2.添加课程\n3.添加学生分数\n4.修改学生个人信息\n5.修改学生分数\n6.修改课程名\n"
          "7.查询学生信息及分数\n8.查看所有学生个人信息与成绩\n9.删除课程以及对应的成绩\n10.删除学生以及对应的分数\n"
          "11.保存学生信息\n12.保存课程\n13.保存成绩\n14.查看所有课程\n0.退出程序")


def login_require(f):
    print("欢迎来到学生成绩管理系统".center(40, "*"))

    def verify():
        while True:
            display_require_menu()
            n = input("请进行操作:")
            if n == "0":
                break
            elif n == "1":
                name = input("请输入用户名:")
                for s in usr_pwd["usr_name"]:
                    if name == s:
                        pwd = input_pwd("请输入密码:")
                        for e in usr_pwd["pwd"]:
                            if e == int(pwd):
                                f()
                                break
                        else:
                            print("密码错误")
                        break
                else:
                    print("没有该用户名")
            elif n == "2":
                while True:
                    a = add_name()
                    for s in usr_pwd["usr_name"]:
                        if a == s:
                            print("用户名已经存在")
                            break
                    else:
                        while True:
                            b = input_pwd("请输入密码:")
                            b2 = input_pwd("请再次输入密码:")
                            if b != b2:
                                print("密码不一致,请再次输入!")
                            else:
                                usr_pwd["usr_name"].append(a)
                                usr_pwd["pwd"].append(int(b))
                                df = pd.DataFrame(usr_pwd)
                                df.to_excel("账号信息.xlsx", index=False)
                                print("请重新登录")
                                break
                    break

            else:
                print("输入不合法")

    return verify


@login_require
def main():
    while True:
        display_main_menu()
        n = input("请输入数字进行操作:")
        if n not in ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12', '13', '14']:
            print("输入不合法")
        else:
            if n == "0":
                break
            elif n == "1":
                add_student()
            elif n == "2":
                add_course()
            elif n == "3":
                add_student_score()
            elif n == "4":
                update_student()
            elif n == "5":
                update_score()
            elif n == "6":
                update_course()
            elif n == "7":
                find_student()
            elif n == "8":
                find_show_student()
            elif n == "9":
                delta_course_score()
            elif n == "10":
                delta_student_score()
            elif n == "11":
                save_student()
            elif n == "12":
                save_course()
            elif n == "13":
                save_score()
            elif n == "14":
                show_all_course()


main()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

C&&Q

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值