Python 学生信息管理系统

import os
filename = "student.txt"


def main():
    while 1:
        menu()
        try:
            choice = int(input("请选择:"))
            if choice in [0, 1, 2, 3, 4, 5, 6, 7]:
                if choice == 0:
                    answer = input("您确定要退出系统吗?(y/n):")
                    if answer == 'y' or answer == 'Y':
                        print("谢谢您的使用!!!")
                        break
                    else:
                        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()
        except ValueError:
            print("请输入数字!")


def menu():
    print("===================学生信息管理系统===================")
    print("----------------------功能菜单-----------------------")
    print("\t\t\t\t\t\t1.录入学生信息")
    print("\t\t\t\t\t\t2.查找学生信息")
    print("\t\t\t\t\t\t3.删除学生信息")
    print("\t\t\t\t\t\t4.修改学生信息")
    print("\t\t\t\t\t\t5.排序")
    print("\t\t\t\t\t\t6.统计学生总人数")
    print("\t\t\t\t\t\t7.显示所有学生信息")
    print("\t\t\t\t\t\t0.退出")
    print("----------------------------------------------------")


def insert():
    student_list = []
    while 1:
        id = input("请输入ID(如1001):")
        if not id:
            break
        name = input("请输入姓名:")
        if not name:
            break
        try:
            English = int(input("请输入英语成绩:"))
            python = int(input("请输入python成绩:"))
            java = int(input("请输入java成绩:"))
        except ValueError:
            print("输入无效,不是整数,请重新输入:")
            continue
        student = {"id": id, "name": name, "English": English, "python": python, "java": java}
        student_list.append(student)
        answer = input("是否继续添加?(y/n):")
        if answer == "y" or answer == "Y":
            continue
        else:
            break
    save(student_list)


def save(lst):
    stu_txt = open(filename, 'a', encoding='UTF-8')  # notepad默认ANSI编码
    for item in lst:
        stu_txt.write(str(item)+'\n')
    stu_txt.close()


def search():
    student_query = []
    while 1:
        id = ""
        name = ""
        if os.path.exists(filename):
            mode = input("请选择:1.按ID查找 2.按姓名查找:")
            if mode == "1":
                id = input("请输入学生ID:")
            elif mode == "2":
                name = input("请输入学生姓名")
            else:
                print("您输入有误,请重新输入!")
                search()
            with open(filename, 'r', encoding='UTF-8') as rfile:
                student = rfile.readlines()
                for item in student:
                    d = eval(item)
                    if id != "":
                        if d["id"] == id:
                            student_query.append(d)
                    if name != "":
                        if d["name"] == name:
                            student_query.append(d)
            show_student(student_query)
            student_query.clear()
            answer = input("是否要继续查询?(y/n):")
            if answer == "y" or answer == "Y":
                continue
            else:
                break
        else:
            print("无学生信息!")


def show_student(lst):
    if len(lst) == 0:
        print("没有查询到学生信息")
        return
    format_title = "{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}"
    print(format_title.format("ID", "姓名", "英语成绩", "python成绩", "java成绩", "总成绩"))
    format_data = "{:^6}\t{:^12}\t{:^8}\t{:^8}\t{:^8}\t{:^8}"
    for item in lst:
        print(format_data.format(item.get("id"),
                                 item.get("name"),
                                 item.get("English"),
                                 item.get("python"),
                                 item.get("java"),
                                 item.get("English")+item.get("python")+item.get("java")))


def delete():
    while 1:
        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()  # readlines返回列表
            else:
                student_old = []
            flag = False
            if student_old:
                with open(filename, 'w', encoding='UTF-8') as wfile:
                    for item in student_old:
                        d = eval(item)  # eval()执行字符串表达式
                        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
            else:
                break


def modify():
    show()
    if os.path.exists(filename):
        with open(filename, 'r', encoding='UTF-8') as rfile:
            student_old = rfile.readlines()
    else:
        print("无学生信息!")
        return
    student_id = input("请输入要修改的学生ID:")
    with open(filename, 'w', encoding='UTF-8')as wfile:
        for item in student_old:
            d = eval(item)
            if d["id"] == student_id:
                print("ID存在,请输入要修改的学生的信息!")
                while 1:
                    try:
                        d["id"] = input("请输入ID:")
                        d["name"] = input("请输入姓名:")
                        d["English"] = int(input("请输入英语成绩:"))
                        d["python"] = int(input("请输入python成绩:"))
                        d["java"] = int(input("请输入java成绩:"))
                    except ValueError:
                        print("输入有误,成绩输入须为整数。请重新输入!")
                    else:
                        break
                wfile.write(str(d)+"\n")
                print("修改成功!!!")
            else:
                wfile.write(str(d)+"\n")
    answer = input("是否继续修改其他学生信息?(y/n):")
    if answer == "y" or answer == "Y":  # 输入n 则该功能函数结束
        modify()


def sort():
    show()
    if os.path.exists(filename):
        with open(filename, 'r', encoding='UTF-8') as rfile:
            student_list = rfile.readlines()
        student_new = []
        for item in student_list:
            d = eval(item)
            student_new.append(d)
    else:
        return
    asc_or_desc = input("请选择(0.升序;1.降序):")
    if asc_or_desc == "0":
        asc_or_desc_bool = False
    elif asc_or_desc == "1":
        asc_or_desc_bool = True
    else:
        print("错误!请输入0或1!")
        sort()
    mode = input("请选择排序方式(1.英语成绩2.python成绩3.java成绩0.总成绩)")
    if mode == "1":
        student_new.sort(key=lambda x: int(x["English"]), reverse=asc_or_desc_bool)
    elif mode == "2":
        student_new.sort(key=lambda x: int(x["python"]), reverse=asc_or_desc_bool)
    elif mode == "3":
        student_new.sort(key=lambda x: int(x["java"]), reverse=asc_or_desc_bool)
    elif mode == "0":
        student_new.sort(key=lambda x: int(x["English"]+int(x["python"])+int(x["java"])), reverse=asc_or_desc_bool)
    else:
        print("错误!请输入1、2、3或0:")
        sort()
    show_student(student_new)


def total():
    if os.path.exists(filename):
        with open(filename, 'r', encoding='UTF-8') as rfile:
            students = rfile.readlines()
            if students:
                print(f"一共有{len(students)}")
            else:
                print("未录入信息!")
    else:
        print("无学生信息!")


def show():
    student_list = []
    if os.path.exists(filename):
        with open(filename, 'r', encoding='UTF-8') as rfile:
            student = rfile.readlines()
            for item in student:
                student_list.append(eval(item))
            if student_list:
                show_student(student_list)
            else:
                print("未录入信息!")
    else:
        print("无学生信息!")


if __name__ == '__main__':
    main()
    
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值