python实现简易的学生信息管理系统

 更新时间:2022年05月16日 15:18:58   作者:长得丑就要多读书  
这篇文章主要为大家详细介绍了python实现简易的学生信息管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

本文实例为大家分享了python实现简易学生信息管理系统的具体代码,供大家参考,具体内容如下

一、系统功能

1.录入学生信息

2.查找学生信息

3.修改学生信息

4.删除学生信息

5.成绩排序

6.统计学生总人数

7.显示所有学生信息

0.退出系统

二、系统开发环境

1.操作系统:win7

2.开发工具:PyCharm

3.Python内置模块:os,re

三、实现代码

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 #退出while循环并退出系统
                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 insert():
    student_list=[] #用于存储学生信息,列表每个元素是字典。
    while True:
        id=input('请输入学生ID:')
        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)')
        if answer=='y' or answer=='Y':
            continue
        else:
            break
 
    #将学生信息保存在文件中
    save(student_list)
    print('学生信息录入完毕!')
    pass
 
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)')
            if answer=='y' or answer=='Y':
                continue
            else:
                break
        else:
            print('暂未保存学生信息。')
            return
    pass
 
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)')
            if answer=='y' or answer=='Y':
                continue
            else:
                break
    pass
 
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('找到此学生信息,可以修改。')
                while True:
                    try:
                        d['name']=input('请输入学生姓名:')
                        d['English']=input('请输入English成绩:')
                        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)')
        if answer=='y':
            modify()
    pass
 
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_bool=False
    elif asc_or_desc=='1':
        asc_or_desc_bool=True
    else:
        print('您的输入有误,请重新输入!')
        sort()
    mode=input('请选择排序方式(0:按总成绩排序,1:按English成绩排序,2:按Python成绩排序,3:按Java成绩排序)')
    if mode=='0':
        student_new.sort(key=lambda x: int(x['English'])+int(x['Python'])+int(x['Java']), reverse=asc_or_desc_bool)
    elif mode=='1':
        student_new.sort(key=lambda x:int(x['English']),reverse=asc_or_desc_bool)
    elif mode=='2':
        student_new.sort(key=lambda x: int(x['Python']), reverse=asc_or_desc_bool)
    elif mode=='3':
        student_new.sort(key=lambda x: int(x['Java']), reverse=asc_or_desc_bool)
    else:
        print('您的输入有误,请重新输入!')
        sort()
    show_student(student_new)
    pass
 
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('暂未保存学生信息......')
    pass
 
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)
    else:
        print('暂未保存过数据!')
    pass
 
def save(stu_list):
    try:
        stu_txt=open(filename,'a',encoding='utf=8')
    except:
        stu_txt=open(filename,'w',encoding='utf-8')
    for item in stu_list:
        stu_txt.write(str(item)+'\n')
    stu_txt.close()
 
def show_student(lst):
    if len(lst)==0:
        print('没有查到学生信息,无数据显示!')
        return
    #定义标题显示格式
    format_title='{:^6}\t{:^12}\t{:^10}\t{:^10}\t{:^10}\t{:^8}'
    print(format_title.format('ID','姓名','English成绩','Python成绩','Java成绩','总成绩'))
    #定义内容显示格式
    format_data='{:^6}\t{:^12}\t{:^10}\t{:^18}\t{:^14}\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'),str(int(item.get('English'))+int(item.get('Python'))+int(item.get('Java')))))
    pass
 
def menum():
    print('-------------------学生信息管理系统--------------------')
    print('-----------------------功能菜单------------------------')
    print('                    1.录入学生信息')
    print('                    2.查找学生信息')
    print('                    3.删除学生信息')
    print('                    4.修改学生信息')
    print('                    5.成绩排序')
    print('                    6.统计学生总人数')
    print('                    7.显示所有学生信息')
    print('                    0.退出系统')
    print('------------------------------------------------------')
 
main()

四、项目打包并生成.exe可执行文件

1.安装第三方模块,打开dos窗口,输入:pip install PyInstaller并回车,

2.输入:pyinstaller -F 程序文件具体位置,

3.回车后即可在输出内容的倒数第二行看到.exe文件的位置。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

相关文章

  • Python-OpenCV教程之图像的位运算详解

    Python-OpenCV教程之图像的位运算详解

    图像的位运算是指对图像的数值按照二进制值逐位进行取反、与、或、异或操作,本文就带大家了解相关知识,需要的朋友可以参考下
    2021-06-06
  • 自己编程中遇到的Python错误和解决方法汇总整理

    自己编程中遇到的Python错误和解决方法汇总整理

    这篇文章主要介绍了自己编程中遇到的Python错误和解决方法汇总整理,本文收集整理了较多的案例,需要的朋友可以参考下
    2015-06-06
  • Python+Matplotlib绘制发散条形图的示例代码

    Python+Matplotlib绘制发散条形图的示例代码

    发散条形图(Diverging Bar)是一种用于显示数据分布的图表,可以帮助我们比较不同类别或分组的数据的差异和相对性,本文介绍了Matplotlib绘制发散条形图的函数源码,需要的可以参考一下
    2023-06-06
  • Python实现的插入排序算法原理与用法实例分析

    Python实现的插入排序算法原理与用法实例分析

    这篇文章主要介绍了Python实现的插入排序算法原理与用法,简单描述了插入排序的原理,并结合实例形式分析了Python实现插入排序的相关操作技巧,需要的朋友可以参考下
    2017-11-11
  • Python中判断subprocess调起的shell命令是否结束

    Python中判断subprocess调起的shell命令是否结束

    这篇文章主要介绍了Python中判断subprocess调起的shell命令是否结束的方式,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-04-04
  • Django使用httpresponse返回用户头像实例代码

    Django使用httpresponse返回用户头像实例代码

    这篇文章主要介绍了Django使用httpresponse返回用户头像实例代码
    2018-01-01
  • django搭建项目配置环境和创建表过程详解

    django搭建项目配置环境和创建表过程详解

    这篇文章主要介绍了django搭建项目配置环境和创建表过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 利用 Python 实现多任务进程

    利用 Python 实现多任务进程

    这篇文章主要介绍如何利用 Python 实现多任务进程,正在执行的程序,由程序、数据和进程控制块组成,是正在执行的程序,程序的一次执行过程,是资源调度的基本单位。下面就来详细介绍改内容,需要的朋友可以参考一下
    2021-10-10
  • 详解Python IO口多路复用

    详解Python IO口多路复用

    这篇文章主要介绍了Python IO口多路复用的的相关资料,文中讲解的非常细致,帮助大家更好的理解和学习,感兴趣的朋友可以参考下
    2020-06-06
  • 详解用Python进行时间序列预测的7种方法

    详解用Python进行时间序列预测的7种方法

    这篇文章主要介绍了详解用Python进行时间序列预测的7种方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-03-03

最新评论