当前位置: 代码迷 >> 综合 >> python编写小型学生管理系统
  详细解决方案

python编写小型学生管理系统

热度:14   发布时间:2023-10-24 03:25:44.0
# 功能:学生信息管理系统
# 开发时间: 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")breakelse:continueelif 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值为空的时候则结束循环breakname=input('请输入姓名:')if not name:#当name值为空的时候breaktry: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':continueelse: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':continueelif answer=='n':breakelse:print("暂时还没有学生数据")return
def show_student(list):if len(list)==0:print('没有查询到学生信息')returnelse:#定义标题的显示格式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:breakelse: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=Trueif flag:print(f"id为{student_id}的学生信息已经被删除")else:print(f"没有找到id为{student_id}的学生对象")else:#表明没有从磁盘文件当中读取到任何数据print("没有学生信息")breakshow()#重新对文件当中的所有学生信息数据进行显示answer=input('是否继续对学生对象信息进行重新删除?y/n')if answer=='y':continueelse:breakdef modify():show()if os.path.exists(filename):with open(filename,'r',encoding='utf-8') as rfile:#对去文件当中原来的学生信息列表,没一条学生信息数据作为列表对象当中的一个元素值student_old=rfile.readlines()# print(student_old)else:#当学生文件对象不存在的时候直接返回空returnstudent_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('您的输入有误,请重新进行输入操作')breakwfile.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=Falseelif asc_or_desc=='1':flag=Trueelse:print("您的输有误,请重新进行输入")sort()mode=input("请选择排序的方式:1.按英语成绩排序.2.按python成绩排序.3.按java成绩排序.0.按照总成绩排序.\n")if mode=='1':'''lambda item:int(students_new['english']) lambda相当于是匿名函数,遍历列表对象当中Englishlambda 写一个匿名函数对象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':passelse: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

谢谢您的使用

 

  相关解决方案