学习python3,只学不练可不行啊,忘的快,所以来个xxx管理系统练练。哈哈哈

本人博客:

一、介绍

主题:学生信息管理系统

功能模块:

1.录入学生信息

2.查找学生信息

3.删除学生信息

4.修改学生信息

5.排序

6.统计学生人数

7.显示所有学生信息

0.退出系统

二、源码

# **************

# @Descripttion:

# @Vrsion: 1.0.0

# @Author: FENG

# @Date: 2022-02-27 17:04:50

# @LastEditors: FENG

# @LastEditTime: 2022-02-27 17:35:28

# **************



import os



filename = './student_manager/student.txt'



# -------------

# @description: 程序入口

# @author: feng

# @param {*}

# @return {*}

# -------------

def main():

    while True:

        menu()

        choice = int(input('请您选择需要的功能:'))

        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:

            update()

        elif choice == 5:

            sort()

        elif choice == 6:

            total()

        elif choice == 7:

            showall()

        else:

            print('选择错误,请重新选择!')

            main()



# -------------

# @description: 程序主菜单

# @author: feng

# @param {*} st

# @return {*}

# -------------

def menu():

    print('=' * 40)

    print('-' * 10, '功能菜单', '-' * 10)

    print('\t' * 1 + '1.录入学生信息')

    print('\t' * 1 + '2.查找学生信息')

    print('\t' * 1 + '3.删除学生信息')

    print('\t' * 1 + '4.修改学生信息')

    print('\t' * 1 + '5.排序')

    print('\t' * 1 + '6.统计学生人数')

    print('\t' * 1 + '7.显示所有学生信息')

    print('\t' * 1 + '0.退出系统')



l = []



# -------------

# @description: 新增一个学生的信息

# @author: feng

# @param {*}

# @return {*}

# -------------

def insert():

    stu_list = []

    while True:

        id = input('请输入学生的id(如1001):')

        # 如果id为空,退出

        if not id:

            print('学生id不能为空,请重新输入学生信息!')

            continue

        name = input('请输入学生的姓名:')

        if not name:

            print('学生姓名不能为空,请重新输入信息!')

            continue

        try:

            engscore = int(input('请输入英语成绩:'))

            pytscore = int(input('请输入python成绩:'))

            javscore = int(input('请输入java成绩:'))

        except:

            print('输入无效,不是整数数字,请重新输入信息!')

            continue

        stu = {

            'id': id,

            'name': name,

            'engscore': engscore,

            'pytscore': pytscore,

            'javscore': javscore

        }

        stu_list.append(stu)



        answer = input('您还继续添加学生信息吗?(y/n):')

        if answer == 'y' or answer == 'Y':

            continue

        else:

            break



    # 调用保存函数,存储学生信息到文件中

    save(stu_list)

    print('》〉》〉》学生信息下录入完毕!')



# -------------

# @description: 查询学生信息

# @author: feng

# @param {*}

# @return {*}

# -------------

def search():

    stu_lst = []

    lst = reload()



    while True:

        id = ''

        name = ''

        if not lst:

            print('暂无学生信息!')

            return

        else:

            model = input('按照ID查询请输入1,按照姓名查询请输入2:')

            if model == '1':

                id = input('请输入学生id:')

            elif model == '2':

                name = input('请输入学生姓名:')

            else:

                print('输入有误,请重新输入!')

                search()



            for item in lst:

                if id != '':

                    if item['id'] == id:

                        stu_lst.append(item)

                elif name != '':

                    if item['name'] == name:

                        stu_lst.append(item)



            show_result(stu_lst)

            stu_lst.clear()



            answer = input('是否继续查询?(y/n):')

            if answer == 'y' or answer == 'Y':

                continue

            else:

                break



# -------------

# @description: 对传入的列表进行带格式渲染

# @author: feng

# @param {*} lst

# @return {*}

# -------------

def show_result(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成绩', '总成绩'))

    for item in lst:

        print(

            format_title.format(

                item['id'], item['name'], item['engscore'], item['pytscore'],

                item['javscore'],

                int(item['engscore']) + int(item['pytscore']) +

                int(item['javscore'])))



# -------------

# @description: 删除一个学生信息

# @author: feng

# @param {*}

# @return {*}

# -------------

def delete():

    lst = reload()

    while True:

        stu_id = input('请输入要删除的学生的id:')

        if not stu_id:

            print('输入为空,请重新输入!')

            continue

        # 如果读取到学生列表

        flag = False

        if lst:

            with open(filename, 'w', encoding='utf-8') as originFile:

                d = {}

                for item in lst:

                    if item['id'] == stu_id:

                        # flag = True

                        lst.remove(item)

                if flag:

                    print('id为' + stu_id + '的学生已经删除!')

                    save(lst)

                else:

                    print('没有找到符合条件的学生!')

        else:

            print('暂无学生信息!')

            break



        showall()



        answer = input('是否继续删除学生?(y/n):')

        if answer == 'y':

            continue

        else:

            break



# -------------

# @description: 修改一个学生信息

# @author: feng

# @param {*}

# @return {*}

# -------------

def update():

    lst = reload()

    print(lst)

    while True:

        stu_id = input('请输入要修改的学生的id:')

        if not stu_id:

            print('输入为空,请重新输入!')

            continue

        # 如果读取到学生列表,修改标志

        flag = False

        if lst:

            with open(filename, 'w', encoding='utf-8') as originFile:

                for item in lst:

                    if item['id'] == stu_id:

                        while True:

                            name = input('请输入学生的新名称:')

                            if not name:

                                print('学生名称为空,请重新输入!')

                                continue



                            item['name'] = name

                            try:

                                engscore = int(input('请输入新英语成绩:'))

                                pytscore = int(input('请输入新python成绩:'))

                                javscore = int(input('请输入新java成绩:'))

                            except:

                                print('输入无效,不是整数数字,请重新输入信息!')

                                continue

                            item['engscore'] = engscore

                            item['pytscore'] = pytscore

                            item['javscore'] = javscore

                            flag = True

                            break



                        break

                if flag:

                    print('id为' + stu_id + '的学生信息修改成功!')

                    save(lst)

                else:

                    print('没有找到符合条件的学生!')

        else:

            print('暂无学生信息!')

            break



        showall()



        answer = input('是否继续修改学生信息?(y/n):')

        if answer == 'y':

            continue

        else:

            break



def sort():

    lst = reload()

    if not lst:

        print('暂无学生!')

        return

    else:

        asc_or_desc = input('请选择(0.升序,1.降序)')

        if asc_or_desc != '0' and asc_or_desc != '1':

            print('排序方式错误,请重新选择!')

            sort()

        elif asc_or_desc == '1':

            asc_or_desc = True

        elif asc_or_desc == '0':

            asc_or_desc = False



        model = input('请选择排序方式(1.按英语成绩,2.按python成绩,3.按java成绩,4.按总成绩):')

        if model == '1':

            lst.sort(key=lambda x: int(x['engscore']), reverse=asc_or_desc)

        elif model == '2':

            lst.sort(key=lambda x: int(x['pytscore']), reverse=asc_or_desc)

        elif model == '3':

            lst.sort(key=lambda x: int(x['javscore']), reverse=asc_or_desc)

        elif model == '4':

            lst.sort(key=lambda x: int(x['engscore']) + int(x['javscore']) +

                     int(x['pytscore']),

                     reverse=asc_or_desc)

        else:

            print('选择有误!请重新选择')

            sort()

        show_result(lst)



# -------------

# @description: 统计学生总人数

# @author: feng

# @param {*}

# @return {*}

# -------------

def total():

    lst = reload()

    print('所有学生数量:' + len(lst))



# -------------

# @description: 展示所有学生列表

# @author: feng

# @param {*}

# @return {*}

# -------------

def showall():

    lst = reload()

    show_result(lst)



# -------------

# @description: 将学生列表数据保存到文件中

# @author: feng

# @param {*} lst

# @return {*}

# -------------

def save(lst):

    try:

        stu_txt = open(filename, 'a', encoding='utf-8')

    except:

        stu_txt = open(filename, 'w', encoding='utf-8')

    for item in lst:

        stu_txt.write(str(item) + '\n')

    stu_txt.close()



# -------------

# @description: 将文件中保存的学生信息读取到列表中

# @author: feng

# @param {*}

# @return {*}

# -------------

def reload():

    lst = []

    if os.path.exists(filename):

        # stu_txt = open(filename, 'rw', encoding='utf-8')

        # lst = stu_txt.readlines()

        # stu_txt.close()

        with open(filename, 'r', encoding='utf-8') as originFile:

            lst2 = originFile.readlines()

            for item in lst2:

                d = dict(eval(item))

                lst.append(d)

    return lst



if __name__ == '__main__':

    main()

三、运行截图

学生信息管理系统python MySQL 学生信息管理系统Python代码_python