Python练习项目:低配学生信息管理系统
如题,跟着B站杨淑娟老师的教程敲的学生管理系统 教学视频链接:https://www.bilibili.com/video/BV1Sw411Z779?spm_id_from=333.999.0.0 放上所有代码,跟着教程一个字一个字手敲的:
import os
filename="student.txt"
def menu():
os.system("cls")
print('==========================学生信息管理系统===============================')
print('------------------------------功能菜单--------------------------------')
print('\t\t\t\t\t\t1.录入学生信息')
print('\t\t\t\t\t\t2.查找入学生信息')
print('\t\t\t\t\t\t3.删除学生信息')
print('\t\t\t\t\t\t4.修改学生信息')
print('\t\t\t\t\t\t5.排序')
print('\t\t\t\t\t\t6.统计学生总人数')
print('\t\t\t\t\t\t7.显示所有学生信息')
print('\t\t\t\t\t\t0.退出')
print('==========================学生信息管理系统===============================')
def main():
while True:
menu()
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
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(如1001):')
if not id:
break
name=input('请输入姓名')
if not 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\n")
if answer=='y':
continue
else:
break
save(student_list)
print("学生信息录入完毕!")
def save(lst):
try:
stu_txt=open(filename,'a',encoding='utf=8')
except:
stu_txt=open(filename,'w',encoding='utf-8')
for item in lst:
stu_txt.write(str(item)+'\n')
stu_txt.close()
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('是否要继续查询?')
if answer=='y':
continue
else:
print('暂未保存学生信息')
return
def show_student(lst):
if len(lst)==0:
print('没有查询到学生信息,无数据显示!!!')
return
format_title='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
print(format_title.format('ID','姓名','英语成绩','Python成绩','Java成绩','总成绩'))
format_data='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\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'),
int(item.get('english'))+int(item.get('python'))+int(item.get('java'))))
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\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()
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('请输入英语成绩')
d['python'] = input('请输入Python成绩')
d['java']=input('请输入Java成绩')
except:
print('您的输入有误,请重新输入')
else:
break
wfile.write(str(d)+'\n')
print('修改成功!!!')
else:
wfile.rite(str(d)+'\n')
answer=input('是否继续修改其他学生信息?y/n\n')
if answer=='y':
modify()
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('请选择排序方式(1.按英语成绩排序,2.按Python成绩排序,3.按Java成绩排序,0.按总成绩排序')
if 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)
elif mode=='0':
student_new.sort(key=lambda x: int(x['english'])+int(x['python'])+int(x['java']), reverse=asc_or_desc_bool)
else:
print('您的输入有误,请重新输入!!!')
sort()
show_student(student_new)
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(eval(item))
if student_list:
show_student(student_list)
else:
print('暂未保存数据信息!!!')
if __name__ =='__main__':
main()
其中我觉得每次控制台输出一大堆实在累赘,想试试怎么清屏,百度之后得到这个结果: https://zhuanlan.zhihu.com/p/457916965 我自作聪明,直接在menu函数里面加了这么一句:
os.system("cls")
发现并没有效果,我寻思着他这个用在命令行里面,但我用的PyCharm编程,于是我又搜了一下怎么在PyCharm里面清屏: https://blog.csdn.net/weixin_46604505/article/details/116296928 https://www.csdn.net/tags/OtDaYgzsOTI4NTEtYmxvZwO0O0OO0O0O.html 然后我亲身实践了一下,确实如此······ 完整代码包我会上传个人资源库,需要的自取即可 这种学习项目我默认都设的免费下载,但是如果被CSDN主动调整的话我也没办法·······
顺便记录一下怎么打包成在其他电脑上也可使用的exe文件: 按Windows+R组合,输入cmd,打开Dos界面 输入pip Install PyInstaller 很坑的是如果这个窗口长时间没有新东西出来的话要敲回车催催他,不然他自己不干活 这样就差不多了 然后输入pyinstaller -F表示只生成一个可执行文件,然后去找Python文件的路径: 复制路径,加一个\,再复制文件名 回车等待 注意-F和路径之间要空格,我上面那个报错pyinstaller:error就是没空格引起的,空格了就对了 我和老师的结果显示有些不一样,不过我成功在dist目录找到了这个exe文件: 把存储学生信息的文本文件Student.txt从项目目录下面复制过来 双击exe文件就可以开始使用了 (PS:如果发现DOS界面什么也没有的话,尝试敲个回车试试,似乎我的电脑没有那么积极配合,每次都要我手动回车一次·······)
资源包放在这里了,设定了免费,不允许动态调分,有需要的码友欢迎自取: https://download.csdn.net/download/bailichen800/85391210
本人初学者,若有不周谬误之处还请大佬们批评指正,万分感谢!!!!
|