Python简易学生成绩管理系统(文件版)

# encoding utf=8
# 定义一个函数,显示可以使用的功能列表给用户
import os

storage = []


def showInfo() -> None:
    print("\t\t\tφ(゜▽゜*)?       欢迎来到南工学生系统!       φ(゜▽゜*)?")
    print("\t\t\t***********************菜单**********************\n")
    print("\t\t\t*                  1.添加学生的信息               *\n")
    print("\t\t\t*                  2.删除学生的信息               *\n")
    print("\t\t\t*                  3.修改学生的信息               *\n")
    print("\t\t\t*                  4.查询学生的信息               *\n")
    print("\t\t\t*                  5.遍历所有学生的信息            *\n")
    print("\t\t\t*                  6.按总成绩排序                 *\n")
    print("\t\t\t*                  0.退出系统                    *\n")
    print("\t\t\t*************************************************\n")


# 定义一个列表,用来存储多个学生的信息
def jianbiao():
    while True:
        # 把功能列表进行显示给用户
        # 提示用户选择功能
        # 获取用户选择的功能
        key = int(input("请选择功能(序号):"))

        # 根据用户选择,完成相应功能
        if key == 1:
            print("您选择了添加学生信息功能")
            name = input("请输入学生姓名:")
            stuid = input("请输入学生学号(学号不可重复):")
            age = input("请输入学生年龄:")
            English = int(input("请输入学生英语成绩:"))
            python = int(input("请输入学生python成绩:"))
            sum1 = English + python
            # 验证学号是否唯一
            i = panduan(stuid)
            if i != len(storage):
                print("输入学生学号重复,添加失败!")
            else:
                # 定义一部字典,存放单个学生信息
                stuinfo = {'name': name, 'id': stuid, 'age': age, 'English': English, 'python': python, 'sum': sum1}

                # 单个学生信息放入列表
                storage.append(stuinfo)
                print("添加成功!")

        elif key == 2:
            print("您选择了删除学生功能")
            stuid = input("请输入要删除的学生学号:")
            # i记录要删除的下标,leap为标志位,如果找到leap=1,否则为0
            i = panduan(stuid)
            print(len(storage))
            if i == len(storage):
                print("没有此学生学号,删除失败!")
            else:
                del storage[i]
                print("删除成功!")

        elif key == 3:
            print("您选择了修改学生信息功能")
            stuid = input("请输入你要修改学生的学号:")
            # 检测是否有此学号,然后进行修改信息
            i = panduan(stuid)
            if i != len(storage):
                while True:
                    alternum = int(input(" 1.修改学号\n 2.修改姓名 \n 3.修改年龄 \n 4.退出修改\n"))
                    if alternum == 1:
                        newid = input("输入更改后的学号:")
                        # 修改后的学号要验证是否唯一
                        i = panduan(stuid)
                        if i == len(storage):
                            print("输入学号不可重复,修改失败!")
                        else:
                            storage[i]['id'] = newid
                            print("学号修改成功")
                    elif alternum == 2:
                        newname = input("输入更改后的姓名:")
                        storage[i]['name'] = newname
                        print("姓名修改成功")
                    elif alternum == 3:
                        newage = input("输入更改后的年龄:")
                        storage[i]['age'] = newage
                        print("年龄修改成功")
                    elif alternum == 4:
                        break
                    else:
                        print("输入错误请重新输入")
            else:
                print("没有此学号,修改失败!")
        elif key == 4:
            print("您选择了查询学生信息功能")
            stuid = input("请输入你要查询学生的学号:")
            # 验证是否有此学号
            i = panduan(stuid)
            if i != len(storage):
                print("没有此学生学号,查询失败!")
            else:
                print("找到此学生,信息如下:")
                print("学号:%s\n姓名:%s\n年龄:%s\n" % (storage[i]['id'], storage[i]['name'], storage[i]['age']))
        elif key == 5:
            # 遍历并输出所有学生的信息
            print('*' * 20)
            print("接下来进行遍历所有的学生信息...")
            printf()
        elif key == 6:
            # 排序并输出排序后学生信息
            paixu()
        elif key == 0:
            # 退出功能,尽量往不退出的方向引
            quitconfirm = input("亲,真的要退出么 (yes或者no)??~~(>_<)~~??")
            if quitconfirm == 'yes':
                print("欢迎使用本系统,谢谢")
            break
        else:
            print("您输入有误,请重新输入")
        print('按Enter键返回菜单!')
        os.system("pause")  # 暂停运行,便于上一个选项的显示
        showInfo()
    return storage


def txthas():
    # 判断是否有文件数据,若没有就新建一个
    if not os.path.isfile("学生信息.txt"):
        f1 = open("学生信息.txt", 'w')
        print("暂无任何数据,需要添加学生信息!")
        num = int(input("请输入添加学生个数:"))
        for i in range(num):
            name = input("请输入学生姓名:")
            stuid = input("请输入学生学号(学号不可重复):")
            age = input("请输入学生年龄:")
            English = int(input("请输入学生英语成绩:"))
            python = int(input("请输入学生python成绩:"))
            sum1 = English + python
            # 验证学号是否唯一
            i = panduan(stuid)
            if i != len(storage):
                print("输入学生学号重复,添加失败!")
            else:
                # 定义一部字典,存放单个学生信息
                stuinfo = {'name': name, 'id': stuid, 'age': age, 'English': English, 'python': python, 'sum': sum1}

                # 单个学生信息放入列表
                storage.append(stuinfo)
        print("添加成功!")
        settxt()
        f1.flush()
        f1.close()
    else:
        readtxt()
        # 若有文件就提取出来


def panduan(stuid):
    # 判断是否学号重复,并返回该学号在列表中的索引
    i = 0
    for temp in storage:
        if temp['id'] == stuid:
            break
        else:
            i += 1
    return i


def printf():
    # 打印列表中的全部数据
    id1 = "学号"
    name1 = "姓名"
    age1 = "年龄"
    English = "英语"
    python = "python"
    sum1 = "总分"
    print(f"{id1:^15}" + f"{name1:^15}" + f"{age1:^17}" + f"{English:^10}" + f"{python:^19}" + f"{sum1:^10}")
    for temp in storage:
        print(
            f"{temp['id']:^15}" + f"{temp['name']:^17}" + f"{temp['age']:^15}" + f"{temp['English']:^15}" + f"{temp['python']:^15}" + f"{temp['sum']:^15}")
    print("*" * 20)


def settxt():
    # 将列表中的数据存入文件
    f1 = open("学生信息.txt", 'w')
    for i in range(len(storage)):
        for s, v in storage[i].items():
            f1.write(str(v) + ' ')
    f1.flush()
    f1.close()


def readtxt():
    # 将文件中的数据存入列表
    duct = {}
    with open('学生信息.txt', 'r') as f1:
        linelen = f1.readlines()
        if linelen:
            for i in linelen:
                n = i.split(' ')
            n2 = n
            for j in range(len(n) // 6):
                n1 = n2[:6]
                for v, i in zip(['name', 'id', 'age', 'English', 'python', 'sum'], n1):
                    duct[v] = i
                    if len(duct) == 3:
                        storage.append(duct)
                duct = {}
                n2 = n2[6:]


def paixu():
    # 根据总分将列表中的数据从大到小排列
    for i in range(len(storage)):
        for j in range(len(storage) - i - 1):

            if int(storage[j]['sum']) < int(storage[j + 1]['sum']):
                storage[j], storage[j + 1] = storage[j + 1], storage[j]
            else:
                pass
    print("排序完毕!")
    print('*' * 20)
    print("下列为排名:")
    printf()


if __name__ == "__main__":
    txthas()
    showInfo()
    jianbiao()
    settxt()

欢迎大家学习交流,也感谢博主楼下丶小黑,给予了我初始代码,十分感谢!也同样希望大家学习交流!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值