学生信息管理系统Python

2022-08-27 11:25:59

学生信息系统

提示:python编写的学生成绩管理系统,包括8个功能和打包教程

截图来自于B站python视频, 代码进行了一些改进,需要用的自取;

以下代码已经完整,另打包一份完整代码完整代码

一、功能界面

  • 代码
defmenum():print('==================student_manger=================')print('---------------------功能界面---------------------')print('\t\t1.录入学生信息')print('\t\t2.查找学生信息')print('\t\t3.删除学生信息')print('\t\t4.修改学生成绩')print('\t\t5.排序')print('\t\t6.统计学生总人数')print('\t\t7.显示所有学生信息')print('\t\t8.显示功能介绍按钮')print('\t\t0.退出')print('================================================')

二 、主函数

  • 代码
defmain():menum()while True:try:
            choice=int(input('请选择你想进行的操作: '))
        except ValueError:print('输入的数据存在错误,只能输入0到7的整数!')try:
                choice=int(input('请重新输入: '))
            except ValueError:print('重复输入错误,退出系统!')breakif choice in[0,1,2,3,4,5,6,7,8]:if choice==0:
                answer=input('你确定要退出系统吗?(Y/N): ')if answer=='Y'or answer=='y':print('谢谢使用!')break
                elif answer=='N'or answer=='n':print('即将返回上一步操作!')continueelse:input('输入错误,即将返回主界面!')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()else:menum()else:print('你选择的操作无效,请重新输入!:')

三 、学生信息录入功能

  • 逻辑结构图
    在这里插入图片描述
  • 代码
definsert():
    student_list=[]
    id_list=[]while True:
        id=input('请输入ID: ')ifnot id:break
        name=input('请输入姓名:')ifnot name:breaktry:
            english=float(input('请输入英语成绩:'))
            math=float(input('请输入数学成绩:'))
            python=float(input('请输入Python成绩:'))
        except ValueError:print('数据输入错误!')continue

        # 将录入的学生信息存放到字典中
        student={'id': id,'name': name,'english': english,'math': math,'Python': python}

        # 将每个学生的信息存放在列表中if student['id'] in id_list:                    # student['id']=value(id)print('已存在相同ID:')for i inrange(len(student_list)):if student_list[i][id]== student[id]:  # 输出重复id元素print(student_list[i].items())breakprint('请重新录入!')else:
            id_list.append(str(student['id']))
            student_list.append(student)

        # 是否继续添加学生信息
        answer=input('是否继续添加学生信息?(Y/N): ')if answer=='Y'or answer=='y':continue
        elif answer=='N'or answer=='n':
            # 存储学生信息save(student_list, filename)print('学生信息录入完毕!')breakelse:print('输入错误,即将返回主界面!')break

四 、学生信息查找功能

  • 逻辑结构图
    在这里插入图片描述
  • 代码
defsearch():while True:if os.path.exists(filename):
            withopen(filename,'r', encoding='utf-8') as s_file:
                student_qurey= s_file.readlines()              # 将学生信息全部取出

                id_list=[]
                name_list=[]for i in student_qurey:
                    d=dict(eval(i))
                    id_list.append(d['id'])                    # 将所有学生的id存放在id_list中
                    name_list.append(d['name'])                # 将所有学生的name存放在id_list中try:
                mode=int(input('请选择查询模式: 1.按照ID查询 / 2.按照姓名查询 '))
            except ValueError:print('数据类型输入错误!请重新输入!')else:if mode==1:                                  # 按照ID查询
                    id=input('请输入学生id: ')if id in id_list:print('已经查找到该名学生:')print('ID\t\t\t姓名:\t\t英语成绩:\t\t数学成绩:\t\tPython成绩:\t\t总成绩:')for item in student_qurey:ifdict(eval(item))['id']== id:
                                p=dict(eval(item))print('{0}\t\t{1}\t\t{2}\t\t{3}\t\t{4}\t\t{5}'.format(
                                                 p['id'], p['name'], p['english'], p['math'], p['Python'],float(p['english'])+float(p['math'])+float(p['Python'])))else:print('查无此人!')

                elif mode==2:                               # 按照姓名查询
                    name=input('请输入学生姓名: ')if name in name_list:print('已经查找到该名学生:')print('ID\t\t\t姓名:\t\t英语成绩:\t\t数学成绩:\t\tPython成绩:\t\t总成绩:')for item in student_qurey:ifdict(eval(item))['name']== name:
                                p=dict(eval(item))print('{0}\t\t{1}\t\t{2}\t\t{3}\t\t{4}\t\t{5}'.format(
                                    p['id'], p['name'], p['english'], p['math'], p['Python'],float(p['english'])+float(p['math'])+float(p['Python'])))else:print('查无此人!')else:print('输入错误,只能选择1/2两种模式!')

                answer=input('是否继续查询? (Y/N)')if answer=='Y'or answer=='y':continue
                elif answer=='N'or answer=='n':print('正在退出查询..')breakelse:print('输入错误,即将返回主界面!')breakelse:print('无学生信息文件!')return

五 、删除学生信息

  • 逻辑结构图
    在这里插入图片描述

  • 代码

defdelete():while True:
        student_id=input('请输入想要删除的学生的ID: ')if student_id!='':if os.path.exists(filename):
                withopen(filename,'r', encoding='utf-8') as file:
                    student_old= file.readlines()else:
                student_old=[]
            flag= False                            # 标记是否删除if student_old:
                withopen(filename,'w', encoding='utf-8') as wfile:for item in student_old:
                        d=dict(eval(item))        # 转化为字典类型if d['id']!= student_id:
                            wfile.write(str(d)+'\n')else:
                            flag= Trueif flag:print(f'id为{student_id}的学生信息已被删除!')else:print(f'没有找到id为{student_id}的学生信息!')else:print('无学生信息')breakshow()                  # 显示更新后的文件信息

            answer=input('是否继续删除学生信息?(Y/N): ')if answer=='Y'or answer=='y':continue
            elif answer=='N'or answer=='n':breakelse:print('输入错误,即将返回主界面!')break

六 、学生信息修改功能

  • 逻辑结构图

在这里插入图片描述

  • 代码
defmodify():show()if os.path.exists(filename):
        withopen(filename,'r', encoding='utf-8') as rfile:
            student_old= rfile.readlines()             # 直接将文本文件的内容整行读取到列表中else:print('学生文件信息不存在!')

    student_id=input('请输入想要修改的学生的ID: ')

    withopen(filename,'w', encoding='utf-8') as just_file:  # 判断学生是否在该系统中
        id_list=[]for i in student_old:
            d=dict(eval(i))
            id_list.append(d['id'])                             # 将所有学生的id存放在id_list中if student_id in id_list:                               # 要修改的学生存在时for item in student_old:
                e=dict(eval(item))if e['id']== student_id:print('已找到该名学生!')while True:try:
                            e['name']=input('请输入姓名: ')
                            e['english']=input('请输入英语成绩: ')
                            e['math']=input('请输入数学成绩: ')
                            e['Python']=input('请输入Python成绩: ')
                        except ValueError:print('数据类型输入错误!请重新输入!')else:break  #try...except..else: 输入为出错时,执行else语句

                    just_file.write(str(e)+'\n')print('修改成功!')else:
                    just_file.write(str(e)+'\n')else:
            answer1=input('查无此人!,是否执行插入操作?  (Y/N)')if answer1=='Y'or answer1=='y':insert()else:print('结束当前操作')

        answer=input('是否继续修改其余学生信息?(Y/N): ')if answer=='Y'or answer=='y':modify()
        elif answer=='N'or answer=='n':print('结束修改,即将返回主界面..')else:print('输入错误,即将返回主界面!')

七 、学生成绩排序

  • 逻辑结构图
    在这里插入图片描述
  • 代码

defsort():
    student_new=[]if os.path.exists(filename):
        withopen(filename,'r', encoding='utf-8') as sort_file:
            student_list= sort_file.readlines()                    # 无序的学生信息列表for item in student_list:
            d=dict(eval(item))
            student_new.append(d)                                   # 列表元素转化为字典while True:try:
                sort_choice=int(input('请选择排序方式: 0:升序 / 1:降序\t'))
            except ValueError:print('输入的数据类型错误,请重新输入')else:if sort_choice==0:
                    Flag= Falsebreak
                elif sort_choice==1:
                    Flag= Truebreakelse:print('输入错误,只能在0/1中选择!')continuewhile True:try:
                asc_choice=int(input('请选择按照哪一门成绩进行排序: 英语:0/ 数学:1/ python:2\t\t'))
            except ValueError:print('输入的数据类型错误,请重新输入')else:if asc_choice==0:
                    student_new.sort(key= lambda x:int(x['english']), reverse= Flag)     # 根据列表中的元素进行排序show()break
                elif asc_choice==1:
                    student_new.sort(key= lambda x:int(x['math']), reverse= Flag)show()break
                elif asc_choice==2:
                    student_new.sort(key= lambda x:int(x['Python']), reverse= Flag)show()break
                elif asc_choice==3:
                    student_new.sort(key= lambda x:int(x['Python'])+int(x['english'])+int(x['math']), reverse= Flag)show()breakelse:print('输入错误,只能在0/1/2中选择!')continueelse:print('学生信息文件不存在!')

八 、 学生人数统计

  • 逻辑结构图
    在这里插入图片描述

  • 代码

deftotal():
    nums=0if os.path
  • 作者:南风不竞:
  • 原文链接:https://blog.csdn.net/qq_44001342/article/details/124352657
    更新时间:2022-08-27 11:25:59