python简易学生信息管理系统

简易学生信息管理系统主要功能有

1 录入学生信息
2 查找学生信息
3 删除学生信息
4 修改学生信息
5 排序
6 统计学生总人数
7 显示所有学生信息
0 退出系统

系统运行效果
在这里插入图片描述
主菜单的代码方法:

# Author: dry
# 开发时间:2019/9/11
# 开发工具:PyCharm
import re  # 导入正则表达式模块
import os  # 导入操作系统模块
filename = "student.txt" # 学生信息保存文件
def menu():
    # 输出菜单
    print('''
     ---------------学生信息管理系统------------
     ==================功能菜单================
                    1 录入学生信息
                    2 查找学生信息
                    3 删除学生信息
                    4 修改学生信息
                    5 排序
                    6 统计学生总人数
                    7 显示所有学生信息
                    0 退出系统
     =======================================    
                  说明:通过数字选择菜单
     =======================================
    ''')

系统主方法:

def main():
    ctrl = True  # 标记是否退出系统
    while (ctrl):
        menu()  # 显示菜单
        option = input("请选择:")  # 选择菜单项
        option_str = re.sub("\D", "", option)  # 提取数字
        if option_str in ['0', '1', '2', '3', '4', '5', '6', '7']:
            option_int = int(option_str)
            if option_int == 0:  # 退出系统
                print('您已退出学生成绩管理系统!')
                ctrl = False
            elif option_int == 1:  # 录入学生成绩信息
                insert()
            elif option_int == 2:  # 查找学生成绩信息
                search()
            elif option_int == 3:  # 删除学生成绩信息
                delete()
            elif option_int == 4:  # 修改学生成绩信息
                modify()
            elif option_int == 5:  # 排序
                sort()
            elif option_int == 6:  # 统计学生总数
                total()
            elif option_int == 7:  # 显示所有学生信息
                show()

录入学生信息方法:

'''录入学生信息'''
def insert():
    studentList = []  # 保存学生信息的列表
    mark = True  # 是否继续添加
    while mark:
        id = input("请输入学生ID(如1001):")
        if not id:
            break
        name = input("请输入名字:")
        if not name:
            break
        try:
            english = int(input("请输入英语成绩:"))
            python = int(input("请输入python成绩:"))
            c = int(input("请输入C语言成绩:"))
        except:
            print("输入无效,不是整型数值,请重新输入信息")
            continue
            # 将输入的学生信息保存到字典
        student = {"id": id, "name": name, "english": english, "python": python, "c": c}
        studentList.append(student)  # 将学生字典添加到列表中
        inputList = input("是否继续添加?(y/n):")
        if inputList == 'y':  # 继续添加
            mark = True
        else:
            mark = False
        save(studentList)  # 将学生信息保存到文件
        print("学生信息录入完毕!!!")

保存学生信息方法:

'''将学生信息保存到文件'''
def save(student):
    try:
        student_txt = open(filename, 'a')  # 以追加模式打开
    except Exception as e:
        student_txt = open(filename, 'w')  # 文件不存在,创建文件并打开
    for info in student:
        student_txt.write(str(info) + "\n")  # 执行存储,添加换行符
    student_txt.close()  # 关闭文件

查询学生信息方法:

'''查询学生信息'''
def search():
    mark = True
    student_query = []
    while mark:
        id = ""
        name = ""
        if os.path.exists(filename):
            mode = input("按ID查询输入1:按姓名查询输入2:")
            if mode == "1":
                id = input("请输入学生ID:")
            elif mode == "2":
                name = input("请输入学生姓名:")
            else:
                print("您输入有误,请重新输入!")
                search()
            with open(filename, "r") as file:
                student = file.readlines()
                for list in student:
                    d = dict(eval(list))
                    if id is not "":
                        if d['id'] == id:
                            student_query.append(d)
                    elif name is not "":
                        if d['name'] == name:
                            student_query.append(d)
                show_student(student_query)
                student_query.clear()
                inputMark = input("是否继续查询?(y/n):")
                if inputMark == "y":
                    mark = True
                else:
                    mark = False
        else:
            print("暂未保存数据信息...")
            return

显示学生信息方法

'''将保存在列表中的学生信息显示出来'''
def show_student(studentList):
    if not studentList:
        print("无效的数据")
        return
    format_title = "{:^6}{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:10}"
    print(format_title.format("ID", "名字", "英语成绩", "python成绩", "C语言成绩", "总成绩"))
    format_data = "{:^6}{:^12}\t{:^10}\t{:^10}\t{:^10}\t{:10}"
    for info in studentList:
        print(format_data.format(info.get("id"), info.get("name"), str(info.get("english")), str(info.get("python")),
                                 str(info.get("c")),
                                 str(info.get("english") + info.get("python") + info.get("c")).center(12)))

删除学生信息方法:

'''删除学生信息'''
def delete():
    mark = True  # 标记是否循环
    while mark:
        studentId = input("请输入要删除的学生ID:")
        if studentId is not "":  # 判断要删除的学生ID是否存在
            if os.path.exists(filename):
                with open(filename, 'r') as rfile:
                    student_old = rfile.readlines()
            else:
                student_old = []
            ifdel = False  # 标记是否删除
            if student_old:  # 如果存在学生信息
                with open(filename, 'w') as wfile:
                    d = {}  # 定义空字典
                    for list in student_old:
                        d = dict(eval(list))  # 字符串转字典
                        if d['id'] != studentId:
                            wfile.write(str(d) + "\n")  # 将一条信息写入文件
                        else:
                            ifdel = True  # 标记已经删除
                    if ifdel:
                        print("ID为%s的学生信息已经被删除..." % studentId)
                    else:
                        print("没有找到ID为%s的学生信息..." % studentId)
            else:
                print("不存在学生信息")
                break
            show()  # 显示全部学生信息
            inputMark = input("是否继续删除?(y/n):")
            if inputMark == "y":
                mark = True  # 继续删除
            else:
                mark = False  # 退出删除学生信息操作

修改学生信息方法:

'''修改学生信息'''
def modify():
    show()  # 显示全部学生信息
    if os.path.exists(filename):
        with open(filename, 'r') as rfile:
            student_old = rfile.readlines()
    else:
        return
    studentid = input("请输入要修改的学生ID:")
    with open(filename, 'w') as wfile:
        for student in student_old:
            d = dict(eval(student))
            if d['id'] == studentid:
                print("找到了这名学生,可以修改他的信息")
                while True:  # 输入要修改的信息
                    try:
                        d["name"] = input("请输入姓名:")
                        d["english"] = int(input("请输入英语成绩:"))
                        d["python"] = int(input("请输入python成绩:"))
                        d['c'] = int(input("请输入C语言成绩:"))
                    except:
                        print("您输入有误,请重新输入!")
                    else:
                        break
                student = str(d)  # 将字典转为字符串
                wfile.write(student + "\n")  # 将修改信息写入到文件
                print("修改成功")
            else:
                wfile.write(student)  # 将未修改的信息写入文件
    mark = input("是否继续修改其他学生信息?(y/n):")
    if mark == "y":
        modify()

学生信息排序方法:

'''排序'''
def sort():
    show()
    if os.path.exists(filename):
        with open(filename, 'r') as file:
            student_old = file.readlines()
            student_new = []
        for list in student_old:
            d = dict(eval(list))
            student_new.append(d)
    else:
        return
    ascORdesc = input("请选择(0升序;1降序)")
    if ascORdesc == "0":
        ascORdescBool = False  # 标记变量,为False时表示升序,为True时表示降序
    elif ascORdesc == "1":
        ascORdescBool = True
    else:
        print("您输入的信息有误,请重新输入!")
        sort()
    mode = input("请选择排序方式(1按英语成绩排序;2按python成绩排序;3按C语言成绩排序;0按总成绩排序):")
    if mode == "1":  # 按英语成绩排序
        student_new.sort(key=lambda x: x["english"], reverse=ascORdescBool)
    elif mode == "2":  # 按python成绩排序
        student_new.sort(key=lambda x: x["python"], reverse=ascORdescBool)
    elif mode == "3":  # 按C语言成绩排序
        student_new.sort(key=lambda x: x["c"], reverse=ascORdescBool)
    elif mode == "0":  # 按总成绩排序
        student_new.sort(key=lambda x: x["english"] + x["python"] + x["c"], reverse=ascORdescBool)
    else:
        print("您的输入有误,请重新输入!")
        sort()
    show_student(student_new)  # 显示排序结果

统计学生总数方法:

'''统计学生总数'''
def total():
    if os.path.exists(filename):
        with open(filename, 'r') as rfile:
            student_old = rfile.readlines()
            if student_old:
                print("一共有%d名学生!" % len(student_old))
            else:
                print("还没有录入学生信息")
    else:
        print("暂未保存数据信息")

显示所有学生信息方法:

'''显示所有学生信息'''
def show():
    student_new = []
    if os.path.exists(filename):
        with open(filename, 'r') as rfile:
            student_old = rfile.readlines()
        for list in student_old:
            student_new.append(eval(list))
        if student_new:
            show_student(student_new)
        else:
            print("暂未保存数据信息")

开始函数:

if __name__ == '__main__':
    main()

完整代码如下:

# Author: dry
# 开发时间:2019/9/11
# 开发工具:PyCharm
import re  # 导入正则表达式模块
import os  # 导入操作系统模块

filename = "student.txt" # 学生信息保存文件


def menu():
    # 输出菜单
    print('''
     ---------------学生信息管理系统------------
     ==================功能菜单================
                    1 录入学生信息
                    2 查找学生信息
                    3 删除学生信息
                    4 修改学生信息
                    5 排序
                    6 统计学生总人数
                    7 显示所有学生信息
                    0 退出系统
     =======================================    
                  说明:通过数字选择菜单
     =======================================
    ''')


def main():
    ctrl = True  # 标记是否退出系统
    while (ctrl):
        menu()  # 显示菜单
        option = input("请选择:")  # 选择菜单项
        option_str = re.sub("\D", "", option)  # 提取数字
        if option_str in ['0', '1', '2', '3', '4', '5', '6', '7']:
            option_int = int(option_str)
            if option_int == 0:  # 退出系统
                print('您已退出学生成绩管理系统!')
                ctrl = False
            elif option_int == 1:  # 录入学生成绩信息
                insert()
            elif option_int == 2:  # 查找学生成绩信息
                search()
            elif option_int == 3:  # 删除学生成绩信息
                delete()
            elif option_int == 4:  # 修改学生成绩信息
                modify()
            elif option_int == 5:  # 排序
                sort()
            elif option_int == 6:  # 统计学生总数
                total()
            elif option_int == 7:  # 显示所有学生信息
                show()


'''录入学生信息'''


def insert():
    studentList = []  # 保存学生信息的列表
    mark = True  # 是否继续添加
    while mark:
        id = input("请输入学生ID(如1001):")
        if not id:
            break
        name = input("请输入名字:")
        if not name:
            break
        try:
            english = int(input("请输入英语成绩:"))
            python = int(input("请输入python成绩:"))
            c = int(input("请输入C语言成绩:"))
        except:
            print("输入无效,不是整形数值,请重新输入信息")
            continue
            # 将输入的学生信息保存到字典
        student = {"id": id, "name": name, "english": english, "python": python, "c": c}
        studentList.append(student)  # 将学生字典添加到列表中
        inputList = input("是否继续添加?(y/n):")
        if inputList == 'y':  # 继续添加
            mark = True
        else:
            mark = False
        save(studentList)  # 将学生信息保存到文件
        print("学生信息录入完毕!!!")


'''将学生信息保存到文件'''


def save(student):
    try:
        student_txt = open(filename, 'a')  # 以追加模式打开
    except Exception as e:
        student_txt = open(filename, 'w')  # 文件不存在,创建文件并打开
    for info in student:
        student_txt.write(str(info) + "\n")  # 执行存储,添加换行符
    student_txt.close()  # 关闭文件


'''查询学生信息'''


def search():
    mark = True
    student_query = []
    while mark:
        id = ""
        name = ""
        if os.path.exists(filename):
            mode = input("按ID查询输入1:按姓名查询输入2:")
            if mode == "1":
                id = input("请输入学生ID:")
            elif mode == "2":
                name = input("请输入学生姓名:")
            else:
                print("您输入有误,请重新输入!")
                search()
            with open(filename, "r") as file:
                student = file.readlines()
                for list in student:
                    d = dict(eval(list))
                    if id is not "":
                        if d['id'] == id:
                            student_query.append(d)
                    elif name is not "":
                        if d['name'] == name:
                            student_query.append(d)
                show_student(student_query)
                student_query.clear()
                inputMark = input("是否继续查询?(y/n):")
                if inputMark == "y":
                    mark = True
                else:
                    mark = False
        else:
            print("暂未保存数据信息...")
            return


'''将保存在列表中的学生信息显示出来'''


def show_student(studentList):
    if not studentList:
        print("无效的数据")
        return
    format_title = "{:^6}{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:10}"
    print(format_title.format("ID", "名字", "英语成绩", "python成绩", "C语言成绩", "总成绩"))
    format_data = "{:^6}{:^12}\t{:^10}\t{:^10}\t{:^10}\t{:10}"
    for info in studentList:
        print(format_data.format(info.get("id"), info.get("name"), str(info.get("english")), str(info.get("python")),
                                 str(info.get("c")),
                                 str(info.get("english") + info.get("python") + info.get("c")).center(12)))


'''删除学生信息'''


def delete():
    mark = True  # 标记是否循环
    while mark:
        studentId = input("请输入要删除的学生ID:")
        if studentId is not "":  # 判断要删除的学生ID是否存在
            if os.path.exists(filename):
                with open(filename, 'r') as rfile:
                    student_old = rfile.readlines()
            else:
                student_old = []
            ifdel = False  # 标记是否删除
            if student_old:  # 如果存在学生信息
                with open(filename, 'w') as wfile:
                    d = {}  # 定义空字典
                    for list in student_old:
                        d = dict(eval(list))  # 字符串转字典
                        if d['id'] != studentId:
                            wfile.write(str(d) + "\n")  # 将一条信息写入文件
                        else:
                            ifdel = True  # 标记已经删除
                    if ifdel:
                        print("ID为%s的学生信息已经被删除..." % studentId)
                    else:
                        print("没有找到ID为%s的学生信息..." % studentId)
            else:
                print("不存在学生信息")
                break
            show()  # 显示全部学生信息
            inputMark = input("是否继续删除?(y/n):")
            if inputMark == "y":
                mark = True  # 继续删除
            else:
                mark = False  # 退出删除学生信息操作


'''修改学生信息'''


def modify():
    show()  # 显示全部学生信息
    if os.path.exists(filename):
        with open(filename, 'r') as rfile:
            student_old = rfile.readlines()
    else:
        return
    studentid = input("请输入要修改的学生ID:")
    with open(filename, 'w') as wfile:
        for student in student_old:
            d = dict(eval(student))
            if d['id'] == studentid:
                print("找到了这名学生,可以修改他的信息")
                while True:  # 输入要修改的信息
                    try:
                        d["name"] = input("请输入姓名:")
                        d["english"] = int(input("请输入英语成绩:"))
                        d["python"] = int(input("请输入python成绩:"))
                        d['c'] = int(input("请输入C语言成绩:"))
                    except:
                        print("您输入有误,请重新输入!")
                    else:
                        break
                student = str(d)  # 将字典转为字符串
                wfile.write(student + "\n")  # 将修改信息写入到文件
                print("修改成功")
            else:
                wfile.write(student)  # 将未修改的信息写入文件
    mark = input("是否继续修改其他学生信息?(y/n):")
    if mark == "y":
        modify()


'''排序'''


def sort():
    show()
    if os.path.exists(filename):
        with open(filename, 'r') as file:
            student_old = file.readlines()
            student_new = []
        for list in student_old:
            d = dict(eval(list))
            student_new.append(d)
    else:
        return
    ascORdesc = input("请选择(0升序;1降序)")
    if ascORdesc == "0":
        ascORdescBool = False  # 标记变量,为False时表示升序,为True时表示降序
    elif ascORdesc == "1":
        ascORdescBool = True
    else:
        print("您输入的信息有误,请重新输入!")
        sort()
    mode = input("请选择排序方式(1按英语成绩排序;2按python成绩排序;3按C语言成绩排序;0按总成绩排序):")
    if mode == "1":  # 按英语成绩排序
        student_new.sort(key=lambda x: x["english"], reverse=ascORdescBool)
    elif mode == "2":  # 按python成绩排序
        student_new.sort(key=lambda x: x["python"], reverse=ascORdescBool)
    elif mode == "3":  # 按C语言成绩排序
        student_new.sort(key=lambda x: x["c"], reverse=ascORdescBool)
    elif mode == "0":  # 按总成绩排序
        student_new.sort(key=lambda x: x["english"] + x["python"] + x["c"], reverse=ascORdescBool)
    else:
        print("您的输入有误,请重新输入!")
        sort()
    show_student(student_new)  # 显示排序结果


'''统计学生总数'''


def total():
    if os.path.exists(filename):
        with open(filename, 'r') as rfile:
            student_old = rfile.readlines()
            if student_old:
                print("一共有%d名学生!" % len(student_old))
            else:
                print("还没有录入学生信息")
    else:
        print("暂未保存数据信息")


'''显示所有学生信息'''


def show():
    student_new = []
    if os.path.exists(filename):
        with open(filename, 'r') as rfile:
            student_old = rfile.readlines()
        for list in student_old:
            student_new.append(eval(list))
        if student_new:
            show_student(student_new)
        else:
            print("暂未保存数据信息")


if __name__ == '__main__':
    main()

发布了56 篇原创文章 · 获赞 50 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_43883625/article/details/100826289