• 学生管理系统


    0.项目流程

    (1)需求分析

    (2)系统设计

    (3)系统开发必备

    (4)主函数设计

    (5)学生信息维护模块设计

    (6)查询/统计模块设计

    (7)排序模块设计

    (8)项目打包

    1.需求分析

    学生管理系统应该具备的功能
    (1)添加学生及成绩信息;
    (2)将学生信息保存到文件中;
    (3)修改和删除学生信息;
    (4)查询学生信息;
    (5)根据学生成绩进行排序;
    (6)统计学生的总分;

    2.系统设计

    2.1系统功能结构

    学生信息管理系统的七大模块

    (1)录入学生信息模块

    (2)查找学生信息模块

    (3)删除学生信息模块

    (4)修改学生信息模块

    (5)学生成绩排名模块

    (6)统计学生总人数模块

    (7)显示学生信息模块

    2.2 系统业务流程

    3.系统开发必备

    3.1 系统开发环境

    • 操作系统Win10
    • Python 解释器版本:Python 3.7
    • 开发工具:PyCharm
    • Python 内置模块:os,re

    3.2 项目目录结构

    4.主函数设计

    4.1 系统主界面运行效果图

     

    4.2 主函数的业务流程

    4.3 实现主函数

     主程序代码v1.0

    def main():
        while True:
            menum()
            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()
    
    
    # 菜单函数
    def menum():
        print('=====================学生信息管理系统=====================')
        print('---------------------功能菜单----------------------------')
        print('\t\t\t\t\t1.录入学生信息')
        print('\t\t\t\t\t2.查找学生信息')
        print('\t\t\t\t\t3.删除学生信息')
        print('\t\t\t\t\t4.修改学生信息')
        print('\t\t\t\t\t5.排序')
        print('\t\t\t\t\t6.统计学生总人数')
        print('\t\t\t\t\t7.显示所以学生信息')
        print('\t\t\t\t\t0.退出系统')
        print('--------------------------------------------------------')
    
    
    def insert():
        pass
    
    
    def search():
        pass
    
    
    def delete():
        pass
    
    
    def modify():
        pass
    
    
    def sort():
        pass
    
    
    def total():
        pass
    
    
    def show():
        pass
    
    
    if __name__ == '__main__':
        main()
    

      

    5.学生信息维护模块设计

    5.1 录入学生信息功能

    业务流程

     具体实现

    • save(student)函数,用于将学生信息保存到文件;
    • insert(),用于录入学生信息

    代码

    def insert():
        student_list = []
        while True:
            id = input('请输入ID(如1001):')
            if not id:
                break
            name = input('请输入姓名:')
            if not name:
                break
            try:
                englist = int(input('请输入英语成绩:'))
                python = int(input('请输入python成绩:'))
                java = int(input('请输入java成绩:'))
            except:
                print('输入无效,请重新输入')
                continue
            # 将录入的信息,保存到字典中
            student = {
                'id': id,
                'name': name,
                'english': englist,
                'python': python,
                'java': java,
            }
            # 将学生信息添加到列表中
            student_list.append(student)
            answer = input('是否继续添加?y/n\n')
            if answer == 'y' or answer == 'Y':
                continue
            else:
                break
    
        # 保存学生信息
        save(student_list)
        print('学生信息录入完毕!!!')
    
    
    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()
    

      

    5.2 删除学生信息功能

    业务流程

     具体实现

    • 编写函数delete(),删除学生信息
    • 调用show(),显示学生信息

    代码实现

    def delete():
        while True:
            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()
                else:
                    student_old = []
                flag = False
                if student_old:
                    with open(filename, 'w', encoding='utf-8') as wfile:
                        d = {}
                        for item in student_old:
                            d = dict(eval(item))  # 将字符串转换为字典
                            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 \n')
                if answer == 'y' or answer == 'Y':
                    continue
                else:
                    break

    5.3 修改学生信息功能

    业务流程

      

     具体实现

    • 编写主函数中修改学生信息函数modify()
    • 调用show(),显示学生信息

    代码实现

    def modify():
        show()
        if os.path.exists(filename):
            with open(filename, 'r', encoding='utf-8') as rfile:
                student_old = rfile.readlines()
        else:
            return
        student_id = input('请输入要修改的学员ID:')
        with open(filename, 'w', encoding='utf-8') as wfile:
            for item in student_old:
                d = dict(eval(item))
                if d['id'] == student_id:
                    print(f'找到学号为{student_id}的学生信息,可以进行修改')
                    while True:
                        try:
                            d['name'] = input('请输入姓名:')
                            d['english'] = input('请输入英语成绩:')
                            d['Python'] = input('请输入Python成绩:')
                            d['java'] = input('请输入Java成绩:')
                        except:
                            print('您的输入有误,请重新输入!!!')
                        else:
                            break
                    wfile.write(str(d) + '\n')
                    print('修改成功!!!')
                else:
                    wfile.write(str(d) + '\n')
            answer = input('是否继续修改?y/n \n')
            if answer == 'y' or answer == 'Y':
                modify()
    

      

    6.查询/统计模块

    6.1 查找学生信息功能

    业务流程

     具体实现

    • 编写主函数中修改学生信息函数search()
    • 定义显示查询结果函数show_student(query_student)

    代码实现

    def search():
        student_query = []
        while True:
            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', encoding='utf-8') as rfile:
                    student = rfile.readlines()
                    for item in student:
                        d = dict(eval(item))
                    if id != '':
                        if d['id'] == id:
                            student_query.append(d)
                    elif name != '':
                        if d['name'] == name:
                            student_query.append(d)
                show_student(student_query)
                student_query.clear()
                answer = input('是否继续查询?y/n\n')
                if answer == 'y' or answer == 'Y':
                    continue
                else:
                    break
            else:
                print('暂未保存学生信息')
                return
    
    
    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{:^10}\t{:^10}\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'),
                int(item.get('english')) + int(item.get('python')) + int(item.get('java')),
            ))
    

     

    6.1 统计学生总人数功能

    业务流程

    具体实现

    • 编写函数total ()

    代码实现

    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('暂未保存数据信息')
    

      

    6.2 显示所以学生信息功能

    业务流程

    具体实现

    • 编写查询学生信息函数show()

    代码实现

    def show():
        student_lst = []
        if os.path.exists(filename):
            with open(filename, 'r', encoding='utf-8') as rfile:
                students = rfile.readlines()
                for item in students:
                    student_lst.append(dict(eval(item)))
                if student_lst:
                    show_student(student_lst)
    

     

    7.排序模块

    业务流程

    代码实现

    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 = dict(eval(item))
                student_new.append(d)
        else:
            return
        asc_or_desc = input('请选择(0.升序 1.降序):')
        if asc_or_desc == '0':
            asc_or_desc = False
        elif asc_or_desc == '1':
            asc_or_desc = True
        else:
            print('输入有误,请重新输入')
            sort()
        mode = input('请选择排序方式:(1.按英语成绩排序 2.按照python成绩排序 3.按照Java成绩排序 0.按照总成绩排序):')
        if mode == '1':
            student_new.sort(key=lambda student_new: int(student_new['english']), reverse=asc_or_desc)
        elif mode == '2':
            student_new.sort(key=lambda student_new: int(student_new['python']), reverse=asc_or_desc)
        elif mode == '3':
            student_new.sort(key=lambda student_new: int(student_new['java']), reverse=asc_or_desc)
        elif mode == '4':
            student_new.sort(
                key=lambda student_new: int(student_new['english']) + int(student_new['java']) + int(student_new['python']),
                reverse=asc_or_desc)
        else:
            print('您的输入有误,请重新输入')
            sort()
        show_student(student_new)
    

      

     

    8 项目打包

    8.1 整体代码

    import os
    
    filename = 'students.txt'
    
    
    def main():
        while True:
            menum()
            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()
    
    
    # 菜单函数
    def menum():
        print('=====================学生信息管理系统=====================')
        print('---------------------功能菜单----------------------------')
        print('\t\t\t\t\t1.录入学生信息')
        print('\t\t\t\t\t2.查找学生信息')
        print('\t\t\t\t\t3.删除学生信息')
        print('\t\t\t\t\t4.修改学生信息')
        print('\t\t\t\t\t5.排序')
        print('\t\t\t\t\t6.统计学生总人数')
        print('\t\t\t\t\t7.显示所以学生信息')
        print('\t\t\t\t\t0.退出系统')
        print('--------------------------------------------------------')
    
    
    def insert():
        student_list = []
        while True:
            id = input('请输入ID(如1001):')
            if not id:
                break
            name = input('请输入姓名:')
            if not name:
                break
            try:
                englist = int(input('请输入英语成绩:'))
                python = int(input('请输入python成绩:'))
                java = int(input('请输入java成绩:'))
            except:
                print('输入无效,请重新输入')
                continue
            # 将录入的信息,保存到字典中
            student = {
                'id': id,
                'name': name,
                'english': englist,
                'python': python,
                'java': java,
            }
            # 将学生信息添加到列表中
            student_list.append(student)
            answer = input('是否继续添加?y/n\n')
            if answer == 'y' or answer == 'Y':
                continue
            else:
                break
    
        # 保存学生信息
        save(student_list)
        print('学生信息录入完毕!!!')
    
    
    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()
    
    
    def search():
        student_query = []
        while True:
            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', encoding='utf-8') as rfile:
                    student = rfile.readlines()
                    for item in student:
                        d = dict(eval(item))
                    if id != '':
                        if d['id'] == id:
                            student_query.append(d)
                    elif name != '':
                        if d['name'] == name:
                            student_query.append(d)
                show_student(student_query)
                student_query.clear()
                answer = input('是否继续查询?y/n\n')
                if answer == 'y' or answer == 'Y':
                    continue
                else:
                    break
            else:
                print('暂未保存学生信息')
                return
    
    
    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{:^10}\t{:^10}\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'),
                int(item.get('english')) + int(item.get('python')) + int(item.get('java')),
            ))
    
    
    def delete():
        while True:
            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()
                else:
                    student_old = []
                flag = False
                if student_old:
                    with open(filename, 'w', encoding='utf-8') as wfile:
                        d = {}
                        for item in student_old:
                            d = dict(eval(item))  # 将字符串转换为字典
                            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 \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:
            return
        student_id = input('请输入要修改的学员ID:')
        with open(filename, 'w', encoding='utf-8') as wfile:
            for item in student_old:
                d = dict(eval(item))
                if d['id'] == student_id:
                    print(f'找到学号为{student_id}的学生信息,可以进行修改')
                    while True:
                        try:
                            d['name'] = input('请输入姓名:')
                            d['english'] = input('请输入英语成绩:')
                            d['Python'] = input('请输入Python成绩:')
                            d['java'] = input('请输入Java成绩:')
                        except:
                            print('您的输入有误,请重新输入!!!')
                        else:
                            break
                    wfile.write(str(d) + '\n')
                    print('修改成功!!!')
                else:
                    wfile.write(str(d) + '\n')
            answer = input('是否继续修改?y/n \n')
            if answer == 'y' or answer == 'Y':
                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 = dict(eval(item))
                student_new.append(d)
        else:
            return
        asc_or_desc = input('请选择(0.升序 1.降序):')
        if asc_or_desc == '0':
            asc_or_desc = False
        elif asc_or_desc == '1':
            asc_or_desc = True
        else:
            print('输入有误,请重新输入')
            sort()
        mode = input('请选择排序方式:(1.按英语成绩排序 2.按照python成绩排序 3.按照Java成绩排序 0.按照总成绩排序):')
        if mode == '1':
            student_new.sort(key=lambda student_new: int(student_new['english']), reverse=asc_or_desc)
        elif mode == '2':
            student_new.sort(key=lambda student_new: int(student_new['python']), reverse=asc_or_desc)
        elif mode == '3':
            student_new.sort(key=lambda student_new: int(student_new['java']), reverse=asc_or_desc)
        elif mode == '4':
            student_new.sort(
                key=lambda student_new: int(student_new['english']) + int(student_new['java']) + int(student_new['python']),
                reverse=asc_or_desc)
        else:
            print('您的输入有误,请重新输入')
            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_lst = []
        if os.path.exists(filename):
            with open(filename, 'r', encoding='utf-8') as rfile:
                students = rfile.readlines()
                for item in students:
                    student_lst.append(eval(item))
                if student_lst:
                    show_student(student_lst)
    
    
    if __name__ == '__main__':
        main()
    

      

    8.2 项目打包

    • 安装第三方模块:pip install PyInstaller

    打包后生成的文件

    运行效果(有点丑)

  • 相关阅读:
    wxWidgets中wxDateTime与wxString的互操作
    wxWidgets文件操作(六)
    wxWidgets文件操作(三)wxFileDialog与wxTextCtrl
    终于完成词频统计小程序~
    我的第一个c#工程~
    Word frequency program的进展
    List Find和BinarySearch性能比较
    堆和栈
    Java工程师初学Android(四)(转)
    Java中static、this、super、final用法(转http://chytmaths.blog.163.com/blog/static/29482972200610125744333/)
  • 原文地址:https://www.cnblogs.com/shuimohei/p/15899158.html
Copyright © 2020-2023  润新知