🚀write in front🚀
🔎大家好,我是翻斗花园牛爷爷★。希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎
🆔本文由 翻斗花园牛爷爷★ 原创 CSDN首发🐒 如需转载还请通知⚠
📝个人主页:翻斗花园牛爷爷★—CSDN博客
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝
📣系列专栏:翻斗花园牛爷爷★的系列专栏——CSDN博客
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本
目录
我们在学习了基础的Python语法之后,想要更快的熟悉和理解学习的知识。最好的方法莫过于做一些小项目了。今天我带大家看一看如何用Python写一个学生管理系统🥳🥳🥳。
但在此之前我们要对将要写的学生管理系统进行需求分析,也就是我们想要让这个管理系统具备的功能。
成品预览
需求分析
1.添加学生及其他信息
2.将学生信息储存
3.对学生信息进行修改和删除
4.查询学生的信息
5.根据学生成绩进行排序
6.统计总分
当然,很多小伙伴们还是对这个没有思路,不知道应该如何写下去😔😔😔。那么,我们可以把它分为一个一个的模块来写。这样结构就比较清晰了。😺😺😺
模块分类
1.添加学生信息模块
2.查找学生信息模块
3.删除学生信息模块
4.修改学生信息模块
5.统计学生总人数模块
6.排序模块
7.显示所有学生信息模块
8.退出模块
当然了,我们写这些模块首先要定义一些函数;注意哦,这里的函数名是自己定义的,别的名字也可以的,这里我为了让大家更加直观一些,用近似的英文作为函数名。😬😬😬
那么,准备工作结束了,我们要开始考虑写代码了!!!😈😈😈
一、基础界面实现
1.主菜单的打印
这里其实跟C语言实现的游戏很像,两者都有共同之处。大家可以看看我之前写的C语言实现扫雷,猜数字游戏的文章,文章还附有打包 .c 文件的教程。链接在这里:😁😁😁https://blog.csdn.net/m0_73965301/article/details/132032707
废话不多说,步入正题吧!!!
def menu():
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('==========================================================================')
这里的\t就是水平占位符,为了使成品更加美观而加上的,小伙伴们可以根据自己的需求自行修改哦。
2..主函数
主函数的重要性不容置疑,无论是在C语言还是Python中都非常重要。所有函数最终都要回到主函数来进行。
这里我为了代码简洁(好吧,就是不想再单独写一个模块🤪🤪🤪),将系统重复运行的与退出模块都写到了main函数中。
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:
add() #录入学生信息
elif choice==2:
search() #查找学生信息
elif choice==3:
delete() #删除学生信息
elif choice==4:
modify() #修改学生信息
elif choice==5:
total() #统计学生总人数
elif choice==6:
sort() #排序
elif choice==7:
show() #显示所有学生信息
这里我用到的break和continue大家如果不理解具体的应用,可以去看看我写的continue和break的区别,虽然是C语言版的,但是你看完就会豁然开朗。链接如下:😁😁😁https://blog.csdn.net/m0_73965301/article/details/132044659
同时也要提醒小伙伴们,注意缩进哦🤟🤟🤟
二、模块实现
1.添加学生信息
在这里我们选择调用add函数,在此之前我们首先要定义一个列表,用于存放信息。并将它声明为全局变量。在代码顶端加一句
student_list=[]
那么如何实现添加学生信息呢???聪明的小伙伴们可能就有人猜到用字典了,将录入的学生信息保存在字典中最后存入列表中。这次我们要录入的学生信息分别为:1.学生ID 2.学生姓名 3.语文成绩 4.数学成绩 5.英语成绩。
知道需要什么后,我们便可以开始进行代码的编写了😀😀😀
def add():
global student_list #全局变量的声明
while True: #保证重复运行
id=input('请输入学生ID(如1001):')
if not id: #判断输入是否为空,为空则执行break
break
name=input('请输入学生姓名:')
if not name: #同上
break
try: #这里的try...except防止报错
chinese=int(input('请输入语文成绩:'))
math=int(input('请输入数学成绩:'))
english=int(input('请输入英语成绩:'))
except:
print('非法输入,请重新输入')
continue
for student in student_list: #进行遍历
if student['name']==name:
print("你输入的学生已经存在")
return
if student['id']==id:
print("你输入的学生已经存在")
return
#将录入的信息保存到字典里
student={'id':id,'name':name,'chinese':chinese,'math':math,'english':english}
#将学生信息添加到列表中
student_list.append(student)
answer=input('是否继续添加y/n\n')
if answer=='y' or answer=='Y':
continue
else:
break
print('学生信息录入完毕!!!')
2.查询学生信息
想要查询到学生的信息,首先我们知道学生的信息以字典的形式保存在列表中,所以我们可以知道基本单位就是字典,因此对列表进行遍历就可以。我们可以利用姓名来进行查询信息,但有的小伙伴问了,可不可以分两种情况呢,我么们可以选择查找的方式;既可以通过查找ID的方式查找信息也可以通过查找姓名进行查找信息。代码如下:
def search():
global student_list#定义全局变量
mode=input("请选择查询方式:1.姓名查询\t2.ID查询\n")
if mode=='1':
name = input("请输入你要查询的学生姓名:")
for student in student_list: #for...else
if student['name'] == name:
print(f'学号:{student["id"]}\n姓名:{student["name"]}\n语文成绩:{student["chinese"]}\n数学成绩:{student["math"]}\n英语成绩:{student["english"]}\n总成绩: {student["chinese"] + student["math"] + student["english"]}')
return 0
else:
print("抱歉。你输入的学生姓名不存在!!!请重新输入:") #else对准for,而不是if
elif mode=='2':
id=input("请输入你要查询的学生ID:")
for student in student_list:
if student['id'] == id:
print(f'学号:{student["id"]}\n姓名:{student["name"]}\n语文成绩:{student["chinese"]}\n数学成绩:{student["math"]}\n英语成绩:{student["english"]}\n总成绩: {student["chinese"] + student["math"] + student["english"]}')
# 注意这里必须是双引号,不然会报错
return 0
else:
print("抱歉。你输入的学生ID不存在!!!请重新输入:")
else:
print("非法输入,请重新输入!!!")
search() #在输入错误后,再次执行search()重新开始
return None
看完这些代码,可能有小伙伴们很好奇这里的return 0和return None有什么特殊的含义呢!!!🧐🧐🧐
return 0的意思是当找到匹配的学生信息后,返回值为0,表示查询成功。这个值可以作为判断查询是否成功的标志。
return None表示没有返回任何值。它的作用是结束函数的执行并返回到调用函数的地方。在这种情况下,它表示在执行search()函数时没有找到对应的学生信息,函数将在此处结束执行。
大家学会了吗😬😬😬
3.删除学生信息
对于删除操作,这里就要用到remove这个方法了,用法如下:
具体的流程也很简单,就是对列表进行遍历。然后通过对姓名的判断来进行remove()操作,进行删除。代码如下:
def delete():
global student_list#定义全局变量
name = input("请输入你要删除的学生姓名")
for student in student_list:#对列表进行遍历
if student['name'] == name: #如果输入的名字能够找到便执行以下语句
student_list.remove(student)
print('恭喜你,删除成功!!!')
return 0
print('你输入的学生姓名不存在,请重新输入!!!')#如果找不到对应的名字,就会执行这句
return None
删除后,你可以再通过查找学生信息模块进行检查一遍,看看是否成功。
4.修改学生信息
修改学生信息与删除信息其实差不多,只需要覆盖原来的信息就可以。
def modify():
global student_list
name = input("请输入你要修改的学生姓名")
for student in student_list:
if student['name']==name:
student['id']=input("请输入修改后的学生id:")
student['name']=input("请输入修改后的学生姓名:")
student['chinese']=int(input("请输入修改后的语文成绩:"))
student['math']=int(input("请输入修改后的数学成绩:"))
student['english']=int(input("请输入修改后的英语成绩:"))
print('恭喜你,修改成功')
return 0
print('你输入的学生姓名不存在,请重新输入!!!')
return None
要记得,这里的各科成绩都要转化为int类型,不然在查询修改后的成绩时就无法计算总成绩了。 我就是大意了,开始发现总成绩无法计算,最后通过调试才发现。同志们,牢记教训啊😭😭😭
5.统计学生总人数
思路很简单,这里就利用到了len(),计算个数。在列表中存放着一个个字典,每个字典就是一个学生的信息,因此len()在这里的作用就是计算列表中的字典个数,也就是学生人数。
def total():
global student_list
if student_list:
print(f'一共有{len(student_list)}人')
else:
print('还没有录入学生信息')
6.排序
接下来可是重头戏了,大家一定都很好奇学校怎么给你们排成绩。马上你们就知道了😛😛😛
首先,我们要知道排序的方式是选择升序排列还是降序排列呢???想到这里我们就知道应该先写出选择它们两个的代码了。
def sort():
global student_list
student_new=[] #定义一个新列表,用于存放排序后的学生信息
for student in student_list:
student_new.append(student)
student_sort=input("请选择排序方式:1.升序 2.降序")
if student_sort=='1':
student_sort_bool=False
elif student_sort=='2':
student_sort_bool=True
else:
print('非法输入,请重新输入!!!')
sort()
这里的bool(布尔类型)是升序和降序的关键所在,True为降序,False为升序。
那么,第一步已经让我们可以实现选择升序还是降序。接着往下走,选择了升序或者降序后,我们就要开始选择按哪一科的成绩来进行排序或者是总成绩。代码如下:
mode=input("请选择排序方式(1.按语文成绩排序 2.按数学成绩排序 3.按英语成绩排序 4.按总成绩排序)")
if mode == '1':
student_new.sort(key=lambda x:int(x['chinese']),reverse=student_sort_bool)
elif mode == '2':
student_new.sort(key=lambda x:int(x['math']),reverse=student_sort_bool)
elif mode == '3':
student_new.sort(key=lambda x:int(x['english']),reverse=student_sort_bool)
elif mode == '4':
student_new.sort(key=lambda x:int(x['chinese'])+int(x['math'])+int(x['english']),reverse=student_sort_bool)
else:
print('非法输入,请重新输入!!!')
sort()
print('学生id\t学生姓名\t语文成绩\t数学成绩\t英语成绩\t总成绩') #为了美观,大家自行调整
for student in student_new:
print(f'{student["id"]}\t {student["name"]}\t {student["chinese"]}\t {student["math"]}\t {student["english"]}\t\t{student["chinese"] + student["math"] + student["english"]}')
相信大家疑问很多,比如lambda以及x什么意思啊。不要急,我来为大家讲解一番
首先,lambda是一个匿名函数,就是避免了多次声明不同变量。这里就是用于排序的关键字函数
lambda 参数 : 表达式。通过使用"sort"函数对"student_new"列表进行排序。排序的方式是使用一个lambda函数作为排序的key,该函数通过提取每个学生字典中的"chinese"键对应的值来进行比较。
lambda函数以列表中的每个字典元素x作为输入,并且返回字典元素x中'chinese'键对应的值。根据该值进行排序。因此,第一个x代表列表中的每个字典元素。你也可以用别的字母进行代替。
"reverse"变量用于指定是否降序排列。变量为布尔类型。
大家懂了吗😁😁😁
模块完整代码:
def sort():
global student_list
student_new=[] #定义一个新列表,用于存放排序后的学生信息
for student in student_list:
student_new.append(student)
student_sort=input("请选择排序方式:1.升序 2.降序")
if student_sort=='1':
student_sort_bool=False
elif student_sort=='2':
student_sort_bool=True
else:
print('非法输入,请重新输入!!!')
sort()
mode=input("请选择排序方式(1.按语文成绩排序 2.按数学成绩排序 3.按英语成绩排序 4.按总成绩排序)")
if mode == '1':
student_new.sort(key=lambda x:int(x['chinese']),reverse=student_sort_bool)
elif mode == '2':
student_new.sort(key=lambda x:int(x['math']),reverse=student_sort_bool)
elif mode == '3':
student_new.sort(key=lambda x:int(x['english']),reverse=student_sort_bool)
elif mode == '4':
student_new.sort(key=lambda x:int(x['chinese'])+int(x['math'])+int(x['english']),reverse=student_sort_bool)
else:
print('非法输入,请重新输入!!!')
sort()
print('学生id\t学生姓名\t语文成绩\t数学成绩\t英语成绩\t总成绩')
for student in student_new: #遍历排序过的列表
print(f'{student["id"]}\t {student["name"]}\t {student["chinese"]}\t {student["math"]}\t {student["english"]}\t\t{student["chinese"] + student["math"] + student["english"]}')
7.显示所有学生信息
这个就很简单了,直接遍历打印就可以了。
def show():
print('学生id\t学生姓名\t语文成绩\t数学成绩\t英语成绩\t总成绩') #为了美观,大家自行调整
for student in student_list:
print(f'{student["id"]}\t {student["name"]}\t {student["chinese"]}\t {student["math"]}\t {student["english"]}\t {student["chinese"]+student["math"]+student["english"]}') #空格和制表符根据输出结果自行调整
到这里,我们的代码就全部完成了。大家是不是豁然开朗,茅塞顿开呢!!!😬😬😬
三、完整代码
1.代码展示
student_list=[]
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:
add() #录入学生信息
elif choice==2:
search() #查找学生信息
elif choice==3:
delete() #删除学生信息
elif choice==4:
modify() #修改学生信息
elif choice==5:
total() #统计学生总人数
elif choice==6:
sort() #排序
elif choice==7:
show() #显示所有学生信息
def menu():
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 add():
global student_list
while True:
id=input('请输入学生ID(如1001):')
if not id:
break
name=input('请输入学生姓名:')
if not name:
break
try:
chinese=int(input('请输入语文成绩:'))
math=int(input('请输入数学成绩:'))
english=int(input('请输入英语成绩:'))
except:
print('非法输入,请重新输入')
continue
for student in student_list:
if student['name']==name:
print("你输入的学生已经存在")
return
if student['id']==id:
print("你输入的学生已经存在")
return
#将录入的信息保存到字典里
student={'id':id,'name':name,'chinese':chinese,'math':math,'english':english}
#将学生信息添加到列表中
student_list.append(student)
answer=input('是否继续添加y/n\n')
if answer=='y' or answer=='Y':
continue
else:
break
print('学生信息录入完毕!!!')
def search():
global student_list#定义全局变量
mode=input("请选择查询方式:1.姓名查询\t2.ID查询\n")
if mode=='1':
name = input("请输入你要查询的学生姓名:")
for student in student_list:
if student['name'] == name:
print(f'学号:{student["id"]}\n姓名:{student["name"]}\n语文成绩:{student["chinese"]}\n数学成绩:{student["math"]}\n英语成绩:{student["english"]}\n总成绩: {student["chinese"] + student["math"] + student["english"]}')
return 0
else:
print("抱歉。你输入的学生姓名不存在!!!请重新输入:")
elif mode=='2':
id=input("请输入你要查询的学生ID:")
for student in student_list:
if student['id'] == id:
print(f'学号:{student["id"]}\n姓名:{student["name"]}\n语文成绩:{student["chinese"]}\n数学成绩:{student["math"]}\n英语成绩:{student["english"]}\n总成绩: {student["chinese"] + student["math"] + student["english"]}')
# 注意这里必须是双引号,不然会报错
return 0
else:
print("抱歉。你输入的学生ID不存在!!!请重新输入:")
else:
print("非法输入,请重新输入!!!")
search()
return None
def delete():
global student_list#定义全局变量
name = input("请输入你要删除的学生姓名")
for student in student_list:#进行遍历,如果输入的名字能够找到便执行以下语句
if student['name'] == name:
student_list.remove(student)
print('恭喜你,删除成功!!!')
return 0
print('你输入的学生姓名不存在,请重新输入!!!')#如果找不到对应的名字,就会执行这句
return None
def modify():
global student_list
name = input("请输入你要删除的学生姓名")
for student in student_list:
if student['name']==name:
student['id']=input("请输入修改后的学生id:")
student['name']=input("请输入修改后的学生姓名:")
student['chinese']=int(input("请输入修改后的语文成绩:"))
student['math']=int(input("请输入修改后的数学成绩:"))
student['english']=int(input("请输入修改后的英语成绩:"))
print('恭喜你,修改成功')
return 0
print('你输入的学生姓名不存在,请重新输入!!!')
return None
def total():
global student_list
if student_list:
print(f'一共有{len(student_list)}人')
else:
print('还没有录入学生信息')
def sort():
global student_list
student_new=[]
for student in student_list:
student_new.append(student)
student_sort=input("请选择排序方式:1.升序 2.降序")
if student_sort=='1':
student_sort_bool=False
elif student_sort=='2':
student_sort_bool=True
else:
print('非法输入,请重新输入!!!')
sort()
mode=input("请选择排序方式(1.按语文成绩排序 2.按数学成绩排序 3.按英语成绩排序 4.按总成绩排序)")
if mode == '1':
student_new.sort(key=lambda x:int(x['chinese']),reverse=student_sort_bool)
elif mode == '2':
student_new.sort(key=lambda x:int(x['math']),reverse=student_sort_bool)
elif mode == '3':
student_new.sort(key=lambda x:int(x['english']),reverse=student_sort_bool)
elif mode == '4':
student_new.sort(key=lambda x:int(x['chinese'])+int(x['math'])+int(x['english']),reverse=student_sort_bool)
else:
print('非法输入,请重新输入!!!')
sort()
print('学生id\t学生姓名\t语文成绩\t数学成绩\t英语成绩\t总成绩')
for student in student_new:
print(f'{student["id"]}\t {student["name"]}\t {student["chinese"]}\t {student["math"]}\t {student["english"]}\t\t{student["chinese"] + student["math"] + student["english"]}')
def show():
print('学生id\t学生姓名\t语文成绩\t数学成绩\t英语成绩\t总成绩')
for student in student_list:
print(f'{student["id"]}\t {student["name"]}\t {student["chinese"]}\t {student["math"]}\t {student["english"]}\t {student["chinese"]+student["math"]+student["english"]}')
if __name__=='__main__':
main()
2.流程展示
创作不易,希望大佬们以及未来的大佬们给个三连再走吧
创作不易,希望大佬们以及未来的大佬们给个三连再走吧
创作不易,希望大佬们以及未来的大佬们给个三连再走吧
同时,也希望各位大佬能够指正文章的错误,(^_^)∠※
当然也要提醒各位小伙伴们,只有自己打出来,才能真正的掌握哦。😁😁😁