python编写小型学生管理系统

# 功能:学生信息管理系统
# 开发时间: 2020/10/23  20:05
#定义一个文件对象用于对学生信息数据进行保存
import os
filename='student.txt'
# 进行程序主函数的定义
def main():
    while True:
        # 调用菜单函数页面来另其显示到控制台当中去
        menum()
        choice=int(input("请进行选择\n"))
        if choice in [0,1,2,3,4,5,6,7]:
            if choice==0:
                answer=input("您确定要退出系统吗?y/n\n")
                if answer=='y' or answer=='Y':
                    print("谢谢您的使用\n")
                    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("         1.录入学生信息")
    print("         2.查找学生信息")
    print("         3.删除学生信息")
    print("         4.修改学生信息")
    print("         5.排序")
    print("         6.统计学生总人数")
    print("         7.显示所有学生信息")
    print("         0.退出系统")
    print("===========================================")
def insert():
    student_list=[]#用于实现对学生信息对象进行存放
    while True:
        id=input('请输入学生ID:')
        if not id:#当当前的id值为空的时候则结束循环
            break
        name=input('请输入姓名:')
        if not name:#当name值为空的时候
            break
        try:
            english=int(input('请输入英语成绩:'))
            python = int(input('请输入python成绩:'))
            java=int(input('请输入java成绩:'))
        except:
            print('输入无效,所输入的成绩类型不是整型')
            continue
        #对当前所录入的学生对象信息进行保存
        student= {'id':id,'name':name,'english':english,'python':python,'java':java}
        student_list.append(student)
        answer=input('是否继续进行数据的添加:y/n')
        if answer=='y':
            continue
        else:
            break
    #调用save方法来实现将当前所输入的学生信息存放到文件对象当中去
    save(student_list)
    print("学生信息数据录入完毕")
def save(list):
    try:
        student_txt=open(filename,'a',encoding='utf-8')
    except:
        student_txt=open(filename,'w',encoding='utf-8')
    #文件创建完毕之后,开始将列表对象当中的数据写入到当前的文件对象当中去
    for item in list:
        student_txt.write(str(item)+'\n')
    student_txt.close()
def search():
    student_query=[]#定义一个列表对象用于实现对学生对象当中的信息进行存放
    while True:
        id=''
        name=''
        if os.path.exists(filename):#判断当前路径当中是否存在存放学生信息的文件对象
            mode=input('按照id查找输入1,按姓名查找输入2\n')
            if mode=='1':
                id=input('请输入id值:')
            elif mode=='2':
                name=input('请输入姓名:')
            else:
                print("您的输入有误")
                search()
            #当文件对象存在并没有错误的时候,开始对文件对象当中的数据信息进行读取
            with open(filename,'r',encoding='utf-8') as rfile:
                #将文件对象当中的所有的数据信息读取出来,此时所有的数据信息都成为一个字符串对象
                students=rfile.readlines()#将文件当中的每一行作为列表对象的一个元素进行读取
                #对列表对象当中的元素进行遍历
                for item in students:
                    #将当前所遍历到的列表当中的字符串元素对象转变为字典元素对象
                    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':
                continue
            elif answer=='n':
                break
        else:
            print("暂时还没有学生数据")
            return
def show_student(list):
    if len(list)==0:
        print('没有查询到学生信息')
        return
    else:
        #定义标题的显示格式
        format_title='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}\t'
        print(format_title.format('ID','姓名','英语成绩','Python成绩','java成绩','总成绩'))
        #定义内容的显示格式
        format_data='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}\t'
        for item in list:
            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 not student_id:
            break
        else:
            if os.path.exists(filename):#判断在当前的系统路径下是否存在该文件对象
                #当student.txt文件对象存在的时候,将文件对象当中的信息读取到file文件对象当中去
                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: #重新对student.txt文件对象进行更新操作
                    d={}
                    for item in student_old:#对原有学生列表对象当中的信息进行遍历
                       d=dict(eval(item))#将当前所遍历到的字符串对象转变为字典类型存放到空字典d当中
                       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':
                continue
            else:
                break

def modify():
    show()
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as rfile:
            #对去文件当中原来的学生信息列表,没一条学生信息数据作为列表对象当中的一个元素值
            student_old=rfile.readlines()
            # print(student_old)
    else:#当学生文件对象不存在的时候直接返回空
        return
    student_id=input('请输入学生对象的id值:')
    #遍历当前内存当中的学生列表信息值并对相应的学生id值进行修改
    with open(filename,'w',encoding='utf-8') as wfile:
        d={}
        #遍历当前内存当中已经读取到的学生信息
        for item in student_old:
            d = dict(eval(item))
            if d['id']==student_id:
                while True:
                    try:
                        d['name'] = input('请输入姓名:')
                        d['english'] =int(input('请输入英语:'))
                        d['python'] = int(input('请输入python成绩:'))
                        d['java'] =int(input('请输入java成绩:'))
                    except:
                        print('您的输入有误,请重新进行输入操作')
                    break
                wfile.write(str(d)+'\n')
                print('修改成功!!!')
            else:#没有找到要进行修改的学生对象
                wfile.write(str(d)+'\n')
        answer=input('是否要对其它学生对象的信息进行修改?y/n')
        if answer=='y':
            modify()
        else:
            return
def sort():
    show()#先调用show方法来实现对文件当中的所有学生信息进行显示
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as rfile:
            students_new=[]#用于存放排序好之后的学生列表
            students=rfile.readlines()
            for item in students:
                d=dict(eval(item))#将当前所遍历到的列表元素对象转变为字典对象
                students_new.append(d)#将转变之后的字典对象添加到列表当中去
        asc_or_desc=input("请选择列表的排序方式:0为升序、1为降序\n")
        if asc_or_desc=='0':
            flag=False
        elif asc_or_desc=='1':
            flag=True
        else:
            print("您的输有误,请重新进行输入")
            sort()
        mode=input("请选择排序的方式:1.按英语成绩排序.2.按python成绩排序.3.按java成绩排序.0.按照总成绩排序.\n")
        if mode=='1':
            '''
                lambda item:int(students_new['english']) lambda相当于是匿名函数,遍历列表对象当中English
                lambda 写一个匿名函数对象
                stu 代表遍历当到的列表对象当中的字典元素
                stu[english] 获取字典元素当中的英语成绩作为key值来进行排序操作
            '''
            students_new.sort(key=lambda stu:int(stu['english']) ,reverse=flag)
        elif mode=='2':
            students_new.sort(key=lambda stu:int(stu['python']) ,reverse=flag)
        elif mode=='3':
            students_new.sort(key=lambda stu:int(stu['java']) ,reverse=flag)
        elif mode=='0':
            students_new.sort(key=lambda stu:int(stu['english']+stu['python']+stu['java']) ,
                              reverse=flag)
        else:
            print("您的输入有误,请重新进行输入.")
            sort()
        print("调用show_student方法")
        show_student(students_new)#对排序好之后的新列表进行输出
        answer=input("是否继续执行排序操作?y/n\n")
        if answer=='y':
            sort()
        elif answer=='n':
            pass
    else:
        print("当前路径当中没有保存学生信息对象")
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_list=[]
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as rfile:
            students=rfile.readlines()#将文件当中的所有学生信息读取到列表对象当中去
            for item in  students:#从学生列表当中来实现对所有的学生信息进行遍历操作
                student_list.append(dict(eval(item)))
            if student_list:
                show_student(student_list)
    else:
        print("在指定的路径下文件对象不存在")
if __name__ == '__main__':
    main()

程序输出:

=============学生信息管理系统================

----------------功能菜单--------------------

         1.录入学生信息

         2.查找学生信息

         3.删除学生信息

         4.修改学生信息

         5.排序

         6.统计学生总人数

         7.显示所有学生信息

         0.退出系统

===========================================

请进行选择

1

请输入学生ID:1008

请输入姓名:小龙女

请输入英语成绩:99

请输入python成绩:88

请输入java成绩:77

是否继续进行数据的添加:y/nn

学生信息数据录入完毕

=============学生信息管理系统================

----------------功能菜单--------------------

         1.录入学生信息

         2.查找学生信息

         3.删除学生信息

         4.修改学生信息

         5.排序

         6.统计学生总人数

         7.显示所有学生信息

         0.退出系统

===========================================

请进行选择

2

按照id查找输入1,按姓名查找输入2

2

请输入姓名:小龙女

  ID               姓名               英语成绩           Python成绩           java成绩            总成绩           

 1008             小龙女                99               88                77              264           

是否要继续进行学生信息的查询操作?y/n

n

=============学生信息管理系统================

----------------功能菜单--------------------

         1.录入学生信息

         2.查找学生信息

         3.删除学生信息

         4.修改学生信息

         5.排序

         6.统计学生总人数

         7.显示所有学生信息

         0.退出系统

===========================================

请进行选择

3

请输入所要删除的学生对象的id值:1008

id为1008的学生信息已经被删除

  ID               姓名               英语成绩           Python成绩           java成绩            总成绩           

 1001             清之羽                88               88                88              264           

 1002             老白                99               99                99              297           

 1004              无心                34               56                90              180           

是否继续对学生对象信息进行重新删除?y/nn

=============学生信息管理系统================

----------------功能菜单--------------------

         1.录入学生信息

         2.查找学生信息

         3.删除学生信息

         4.修改学生信息

         5.排序

         6.统计学生总人数

         7.显示所有学生信息

         0.退出系统

===========================================

请进行选择

5

  ID               姓名               英语成绩           Python成绩           java成绩            总成绩           

 1001             清之羽                88               88                88              264           

 1002             老白                99               99                99              297           

 1004              无心                34               56                90              180           

请选择列表的排序方式:0为升序、1为降序

1

请选择排序的方式:1.按英语成绩排序.2.按python成绩排序.3.按java成绩排序.0.按照总成绩排序.

3

调用show_student方法

 

  ID               姓名               英语成绩           Python成绩           java成绩            总成绩           

 1002             老白                99               99                99              297           

 1004              无心                34               56                90              180           

 1001             清之羽                88               88                88              264           

是否继续执行排序操作?y/n

n

=============学生信息管理系统================

 

----------------功能菜单--------------------

         1.录入学生信息

         2.查找学生信息

         3.删除学生信息

         4.修改学生信息

         5.排序

         6.统计学生总人数

         7.显示所有学生信息

 

         0.退出系统

===========================================

 

 

 

 

请进行选择

6

一共有3名学生

 

=============学生信息管理系统================

----------------功能菜单--------------------

         1.录入学生信息

         2.查找学生信息

         3.删除学生信息

         4.修改学生信息

         5.排序

         6.统计学生总人数

 

 

 

 

         7.显示所有学生信息

         0.退出系统

===========================================

请进行选择

7

 

 

 

  ID               姓名               英语成绩           Python成绩           java成绩            总成绩           

 1001             清之羽                88               88                88              264           

 

 

 1002             老白                99               99                99              297           

 1004              无心                34               56                90              180           

 

 

=============学生信息管理系统================

----------------功能菜单--------------------

         1.录入学生信息

         2.查找学生信息

         3.删除学生信息

         4.修改学生信息

         5.排序

         6.统计学生总人数

         7.显示所有学生信息

         0.退出系统

===========================================

请进行选择

0

您确定要退出系统吗?y/n

y

谢谢您的使用

 

  • 3
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值