# 功能:学生信息管理系统
# 开发时间: 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
谢谢您的使用