基于Python的学生信息管理系统

(跟随Python项目开发案例集锦的一次学习,故记录)

import os

import requests
import re
import json

# -------------------------------------全局变量--------------------------------------------------------------------------
filename = "student.txt"


# ------------------------------------------------我想骚一点不好意思---------------------------------------------------
class colors:
    PINK = '\033[95m'
    BLUE = '\033[94m'
    GREEN = '\033[92m'
    YELLOW = '\033[93m'
    RED = '\033[91m'
    END = '\033[0m'


# -----------------------------------登录界面获取cookie------------------------------------------
def menu():
    # 菜单
    print("""
    ————————————————————学生信息管理系统——————————————————————
                ===========功能菜单===========
                1.录入信息
                2.查找信息
                3.删除信息
                4.修改信息
                5.排序
                6.统计总人数
                7.显示所有学生信息
                =============================
    ————————————————————没有感情的分界线————————————————————————
    """)


# 将学生信息保存
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 insert():
    studentList = []
    mark = True
    while mark:
        id = input("请输入ID:")
        if not id:  # 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)
        inputMark = input("是否继续添加?(y/n):")
        if inputMark == "y":
            mark = True
        else:
            mark = False
        save(studentList)
        print("本次信息录入完毕")


def delete():
    mark = True
    while mark:
        studentId = input("请输入要删除的学生ID:")
        if studentId is not "":
            if os.path.exists(filename):
                with open(filename, "r") as f:
                    student_old = f.readlines()
            else:
                student_old = []
        ifdel = False  # 标记是否删除
        if student_old:
            with open(filename, 'w') as f:
                d = {}
                for list in student_old:
                    d = dict(eval(list))
                    if d['id'] != studentId:
                        f.write(str(d) + "\n")
                    else:
                        ifdel = True
                    if ifdel:
                        print(f'ID为{studentId}的学生信息已被删除')
                    else:
                        print(f'没有找到ID为{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 f:
            student_old = f.readlines()
    else:
        return
    studentid = input("请输入要修改的学生ID:")
    with open(filename, 'w') as f:
        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)
                f.write(student + '\n')
                print("修改成功")
            else:
                f.write(student)
            inputMark = input("是否继续修改其他人信息?(y/n):")
            if inputMark == "y":
                modify()


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 f:
                student = f.readlines()
                for i in student:
                    d = dict(eval(i))
                    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("(o@.@o) 无数据信息 (o@.@o) \n")
        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{:^12}\t{:^12}\t{:^12}\t{:^12}"
    for i in studentList:
        print(format_data.format(i.get('id'),str(i.get('name')) ,str(i.get('english')), str(i.get('python'))
                                 , str(i.get('c')), str(i.get('english') + i.get('python') + i.get('c')).center(12)))


def total():
    if os.path.exists(filename):
        with open(filename, 'r') as f:
            student_old = f.readlines()
            if student_old:
                print(f'一共有{len(student_old)}名学生')  # 因为文件读取返回一个列表
            else:
                print("暂未保存数据信息")


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


def sort():
    show()
    if os.path.exists(filename):
        with open(filename, 'r') as f:
            student_old = f.readlines()
            student_new = []
            for i in student_old:
                d = dict(eval(i))
                student_new.append(d)
    else:
        return
    order = input("请选择(0升序;1降序):")
    if order == '0':
        orderBool = False
    elif order == '1':
        orderBool = True
    else:
        print("无效数据,请重新输入")
        sort()
    mode = input("请选择排序方式(1按英语成绩;2按Python成绩;3按C语言成绩;4按总成绩)")
    if mode == '1':
        student_new.sort(key=lambda x: x['english'], reverse=orderBool)
    elif mode == '2':
        student_new.sort(key=lambda x: x['python'], reverse=orderBool)
    elif mode == '3':
        student_new.sort(key=lambda x: x['c'], reverse=orderBool)
    elif mode == '4':
        student_new.sort(key=lambda x: x['english'] + x['python'] + x['c'], reverse=orderBool)


def main():
    condition = True
    while condition:
        menu()
        option = input("请选择功能:")
        option_str = re.sub(r'\D', "", option)  # \D代表非数字,防止键盘错误输入
        if option_str in ['0', '1', '2', '3', '4', '5', '6', '7']:
            option_int = int(option_str)
            if option_int == 0:
                print("您已经退出学生信息管理系统")
                condition = 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()


if __name__ == '__main__':
    main()

发布了82 篇原创文章 · 获赞 235 · 访问量 108万+

猜你喜欢

转载自blog.csdn.net/solitudi/article/details/105261272