主要内容 #
- 综合实战:使用python编写学生信息管理系统
11.主函数的编写 #
通过前面课程的努力,我们已经通过函数,实现了学生信息管理系统的各种功能。接下来我们只需要合理调用这些函数即可。以下示例不能单独调用,仅作为讲解使用stu=[……]#学生信息列表
####################函数定义区
def insert():
def search():
def delete():
def modify():
def seq()
def show()
def menu()
####################
####################主函数区
menu()#首先提供用户输入的菜单
while (True):
option = input("请选择功能模式:") # 选择菜单项
if option in ['0', '1', '2', '3', '4', '5', '6']:
if option== '0': # 退出系统
print('您已退出学生成绩管理系统!')
break
elif option == '1': # 录入学生信息
insert()
elif option == '2': # 查找学生信息
search()
elif option== '3': # 删除学生信息
delete()
elif option== '4': # 修改学生信息
modify()
elif option == '5': # 学生成绩排序
seq()
elif option == '6': # 显示所有学生信息
show()
else:
print("输入有误!",end='')
####################
以上程序共分为三个部分,全局变量区,函数定义区,主函数区,事实上主函数区我们并未把它定义成函数,通过无限循环我们不断获取用户输入,在根据用户输入调用相关函数。
stu=[……]#学生信息列表
####################函数定义区
def insert():
def search():
def delete():
def modify():
def seq()
def show()
def menu()
####################
####################主函数区
menu()#首先提供用户输入的菜单
while (True):
option = input("请选择功能模式:") # 选择菜单项
if option in ['0', '1', '2', '3', '4', '5', '6']:
if option== '0': # 退出系统
print('您已退出学生成绩管理系统!')
break
elif option == '1': # 录入学生信息
insert()
elif option == '2': # 查找学生信息
search()
elif option== '3': # 删除学生信息
delete()
elif option== '4': # 修改学生信息
modify()
elif option == '5': # 学生成绩排序
seq()
elif option == '6': # 显示所有学生信息
show()
else:
print("输入有误!",end='')
####################
以上程序共分为三个部分,全局变量区,函数定义区,主函数区,事实上主函数区我们并未把它定义成函数,通过无限循环我们不断获取用户输入,在根据用户输入调用相关函数。
stu=[……]#学生信息列表 ####################函数定义区 def insert(): def search(): def delete(): def modify(): def seq() def show() def menu() #################### ####################主函数区 menu()#首先提供用户输入的菜单 while (True): option = input("请选择功能模式:") # 选择菜单项 if option in ['0', '1', '2', '3', '4', '5', '6']: if option== '0': # 退出系统 print('您已退出学生成绩管理系统!') break elif option == '1': # 录入学生信息 insert() elif option == '2': # 查找学生信息 search() elif option== '3': # 删除学生信息 delete() elif option== '4': # 修改学生信息 modify() elif option == '5': # 学生成绩排序 seq() elif option == '6': # 显示所有学生信息 show() else: print("输入有误!",end='') #################### 以上程序共分为三个部分,全局变量区,函数定义区,主函数区,事实上主函数区我们并未把它定义成函数,通过无限循环我们不断获取用户输入,在根据用户输入调用相关函数。
12.学生信息管理系统 #
按照示例1的思路,我们将写好的系统展示如下;因为输入输出太多,又在每个函数开始和结束时增加了标识,方便用户使用。通过这样的方式,将我们每小节课所写的程序组合起来,也能编写比较复杂的系统stu=[{'id':'001',"name": '李明', "English": 97, "python": 100},
{'id':'002',"name": '王晓东', "English": 91, "python": 89},
{'id':'003',"name": '杨雪', "English": 98, "python": 92},
{'id':'004',"name": '冯小乐', "English": 87, "python": 98},
{'id':'005',"name": '刘前进', "English": 84, "python": 92},
]#建立一个保存学生信息的列表
###################函数定义区
def insert():#添加学生信息函数insert()
print("*"*20+'录入学生信息'+"*"*20)#开始标识
while True:
id = input("请输入ID:");
name = input('请输入姓名:') # 输入学号和姓名
while True: # 通过无限循环和try…except语句保证用户能正确输入成绩
try:
py = int(input('请输入python成绩:'))
eng = int(input('请输入英语成绩:'))
break # 结束本层循环
except:
print('所输入的成绩需为整数!')
continue # 本层循环从头开始
stu.append({'id': id, "name": name, "English": eng, "python": py}) # 增加学生列表信息
mark = input('添加成功! 是否继续输入?(y/n):')
if mark == 'y':
continue
elif mark == 'n':
break
else:
print('未正确输入y or n!!')
break
print("*" * 19 + '录入学生信息结束' + "*" * 19)#结束标识
def search():#通过学号或者姓名查询学生信息
print("*" * 20 + '查询学生信息' + "*" * 20)
while True:
idlist = [i['id'] for i in stu]#列表推导表达式建立学号列表,循环变量i表示列表stu中的元素,其数据类型为字典
namelist = [i["name"] for i in stu]
temp=input('请输入学号或姓名:')#注意用户输入学号或姓名
if temp in idlist or temp in namelist:
try:#如果输入为学号,则该模块正常执行
print(stu[idlist.index(temp)])#想一想为什么?
except:#如果输入为姓名,执行该模块
print(stu[namelist.index(temp)])
else:
print('输入有误!')#输入的既不是学号也不是姓名
continue
mark = input('是否继续查询?(y/n):')
if mark == 'y':
continue#本层循环从头开始
elif mark == 'n':
break#结束本层循环
else:
print('未正确输入y or n!')
break
print("*" * 19 + '学生信息查询结束' + "*" * 19)
def delete():#通过学号删除学生信息,可参考search()函数的注释
print("*" * 20 + '删除学生信息' + "*" * 20)
while True:
idlist = [i['id'] for i in stu]
id = input('请输入学号:')
if id in idlist:
del stu[idlist.index(id)]#通过del关键字删除stu列中表对应索引的元素
else:
print('输入有误!')
continue
mark = input('删除成功!是否继续删除?(y/n):')
if mark == 'y':
continue
elif mark == 'n':
break
else:
print('未正确输入y or n!')
break
print("*" * 19 + '学生信息删除结束' + "*" * 19)
def modify():#通过学号修改学生信息
print("*" * 20 + '修改学生信息' + "*" * 20)
while True:
idlist = [i['id'] for i in stu]
id = input('请输入学号:')
if id in idlist:
while True:
try:
py = int(input('请重新输入python成绩:'))
eng = int(input('请重新输入英语成绩:'))
stu[idlist.index(id)]['python']=py
stu[idlist.index(id)]['English']=eng
break
except:
print('所输入的成绩需为整数!')
continue
else:
print('输入有误!')
continue
mark = input('修改成功!是否继续修改?(y/n):')
if mark == 'y':
continue
elif mark == 'n':
break
else:
print('未正确输入y or n!')
break
print("*" * 19 + '学生信息修改结束' + "*" * 19)
def show():#显示全部学生信息函数
print("*" * 20 + '打印学生信息' + "*" * 20)
for i in stu:
print(i)
print("*" * 19 + '学生信息打印结束' + "*" * 19)
def seq():#按成绩排序
print("*" * 20 + '学生成绩排序' + "*" * 20)
mark=input("输入\033[1;31m '0' \033[0m(python)或\033[1;31m '1' \033[0m(英语)进行排序:")#1和0红色高亮显示
if mark=='0':
stu1 = sorted(stu, key=lambda x: x['python'], reverse=True)#sorted()函数的排序功能,按字典中的python成绩排序
for i in stu1:#逐行打印,验证seq()排序功能
print(i)
elif mark=='1':
stu1 = sorted(stu, key=lambda x: x['English'], reverse=True)#sorted()函数排序功能,按字典中的英语成绩排序
for i in stu1:
print(i)
else:
print('输入有误!')
print("*" * 19 + '学生成绩排序结束' + "*" * 19)
def menu():
print('\033[1;34;46m' + '——' * 10 + '学生管理系统' + '——' * 10 + '\033[0m') # 高亮显示 字体颜色蓝色 背景色青色
print('\033[1;30;46m' + ' ' * 16 + '1.添加学生信息' + ' ' * 22 + '\033[0m') # 高亮显示 字体颜色黑色 背景色青色
print('\033[1;30;46m' + ' ' * 16 + '2.查询学生信息' + ' ' * 22 + '\033[0m')
print('\033[1;30;46m' + ' ' * 16 + '3.删除学生信息' + ' ' * 22 + '\033[0m')
print('\033[1;30;46m' + ' ' * 16 + '4.修改学生信息' + ' ' * 22 + '\033[0m')
print('\033[1;30;46m' + ' ' * 16 + '5.学生成绩排序' + ' ' * 22 + '\033[0m')
print('\033[1;30;46m' + ' ' * 16 + '6.显示学生信息' + ' ' * 22 + '\033[0m')
print('\033[1;30;46m' + ' ' * 8 + '说明:通过数字选择菜单 0退出系统' + ' ' * 13 + '\033[0m')
###################函数定义区
menu()
while (True):
option = input("请选择功能模式:") # 选择菜单项
if option in ['0', '1', '2', '3', '4', '5', '6']:
if option== '0': # 退出系统
print('您已退出学生成绩管理系统!')
break
elif option == '1': # 录入学生信息
insert()
elif option == '2': # 查找学生信息
search()
elif option== '3': # 删除学生信息
delete()
elif option== '4': # 修改学生信息
modify()
elif option == '5': # 学生成绩排序
seq()
elif option == '6': # 显示所有学生信息
show()
else:
print("输入有误!",end='')
stu=[{'id':'001',"name": '李明', "English": 97, "python": 100},
{'id':'002',"name": '王晓东', "English": 91, "python": 89},
{'id':'003',"name": '杨雪', "English": 98, "python": 92},
{'id':'004',"name": '冯小乐', "English": 87, "python": 98},
{'id':'005',"name": '刘前进', "English": 84, "python": 92},
]#建立一个保存学生信息的列表
###################函数定义区
def insert():#添加学生信息函数insert()
print("*"*20+'录入学生信息'+"*"*20)#开始标识
while True:
id = input("请输入ID:");
name = input('请输入姓名:') # 输入学号和姓名
while True: # 通过无限循环和try…except语句保证用户能正确输入成绩
try:
py = int(input('请输入python成绩:'))
eng = int(input('请输入英语成绩:'))
break # 结束本层循环
except:
print('所输入的成绩需为整数!')
continue # 本层循环从头开始
stu.append({'id': id, "name": name, "English": eng, "python": py}) # 增加学生列表信息
mark = input('添加成功! 是否继续输入?(y/n):')
if mark == 'y':
continue
elif mark == 'n':
break
else:
print('未正确输入y or n!!')
break
print("*" * 19 + '录入学生信息结束' + "*" * 19)#结束标识
def search():#通过学号或者姓名查询学生信息
print("*" * 20 + '查询学生信息' + "*" * 20)
while True:
idlist = [i['id'] for i in stu]#列表推导表达式建立学号列表,循环变量i表示列表stu中的元素,其数据类型为字典
namelist = [i["name"] for i in stu]
temp=input('请输入学号或姓名:')#注意用户输入学号或姓名
if temp in idlist or temp in namelist:
try:#如果输入为学号,则该模块正常执行
print(stu[idlist.index(temp)])#想一想为什么?
except:#如果输入为姓名,执行该模块
print(stu[namelist.index(temp)])
else:
print('输入有误!')#输入的既不是学号也不是姓名
continue
mark = input('是否继续查询?(y/n):')
if mark == 'y':
continue#本层循环从头开始
elif mark == 'n':
break#结束本层循环
else:
print('未正确输入y or n!')
break
print("*" * 19 + '学生信息查询结束' + "*" * 19)
def delete():#通过学号删除学生信息,可参考search()函数的注释
print("*" * 20 + '删除学生信息' + "*" * 20)
while True:
idlist = [i['id'] for i in stu]
id = input('请输入学号:')
if id in idlist:
del stu[idlist.index(id)]#通过del关键字删除stu列中表对应索引的元素
else:
print('输入有误!')
continue
mark = input('删除成功!是否继续删除?(y/n):')
if mark == 'y':
continue
elif mark == 'n':
break
else:
print('未正确输入y or n!')
break
print("*" * 19 + '学生信息删除结束' + "*" * 19)
def modify():#通过学号修改学生信息
print("*" * 20 + '修改学生信息' + "*" * 20)
while True:
idlist = [i['id'] for i in stu]
id = input('请输入学号:')
if id in idlist:
while True:
try:
py = int(input('请重新输入python成绩:'))
eng = int(input('请重新输入英语成绩:'))
stu[idlist.index(id)]['python']=py
stu[idlist.index(id)]['English']=eng
break
except:
print('所输入的成绩需为整数!')
continue
else:
print('输入有误!')
continue
mark = input('修改成功!是否继续修改?(y/n):')
if mark == 'y':
continue
elif mark == 'n':
break
else:
print('未正确输入y or n!')
break
print("*" * 19 + '学生信息修改结束' + "*" * 19)
def show():#显示全部学生信息函数
print("*" * 20 + '打印学生信息' + "*" * 20)
for i in stu:
print(i)
print("*" * 19 + '学生信息打印结束' + "*" * 19)
def seq():#按成绩排序
print("*" * 20 + '学生成绩排序' + "*" * 20)
mark=input("输入\033[1;31m '0' \033[0m(python)或\033[1;31m '1' \033[0m(英语)进行排序:")#1和0红色高亮显示
if mark=='0':
stu1 = sorted(stu, key=lambda x: x['python'], reverse=True)#sorted()函数的排序功能,按字典中的python成绩排序
for i in stu1:#逐行打印,验证seq()排序功能
print(i)
elif mark=='1':
stu1 = sorted(stu, key=lambda x: x['English'], reverse=True)#sorted()函数排序功能,按字典中的英语成绩排序
for i in stu1:
print(i)
else:
print('输入有误!')
print("*" * 19 + '学生成绩排序结束' + "*" * 19)
def menu():
print('\033[1;34;46m' + '——' * 10 + '学生管理系统' + '——' * 10 + '\033[0m') # 高亮显示 字体颜色蓝色 背景色青色
print('\033[1;30;46m' + ' ' * 16 + '1.添加学生信息' + ' ' * 22 + '\033[0m') # 高亮显示 字体颜色黑色 背景色青色
print('\033[1;30;46m' + ' ' * 16 + '2.查询学生信息' + ' ' * 22 + '\033[0m')
print('\033[1;30;46m' + ' ' * 16 + '3.删除学生信息' + ' ' * 22 + '\033[0m')
print('\033[1;30;46m' + ' ' * 16 + '4.修改学生信息' + ' ' * 22 + '\033[0m')
print('\033[1;30;46m' + ' ' * 16 + '5.学生成绩排序' + ' ' * 22 + '\033[0m')
print('\033[1;30;46m' + ' ' * 16 + '6.显示学生信息' + ' ' * 22 + '\033[0m')
print('\033[1;30;46m' + ' ' * 8 + '说明:通过数字选择菜单 0退出系统' + ' ' * 13 + '\033[0m')
###################函数定义区
menu()
while (True):
option = input("请选择功能模式:") # 选择菜单项
if option in ['0', '1', '2', '3', '4', '5', '6']:
if option== '0': # 退出系统
print('您已退出学生成绩管理系统!')
break
elif option == '1': # 录入学生信息
insert()
elif option == '2': # 查找学生信息
search()
elif option== '3': # 删除学生信息
delete()
elif option== '4': # 修改学生信息
modify()
elif option == '5': # 学生成绩排序
seq()
elif option == '6': # 显示所有学生信息
show()
else:
print("输入有误!",end='')
stu=[{'id':'001',"name": '李明', "English": 97, "python": 100}, {'id':'002',"name": '王晓东', "English": 91, "python": 89}, {'id':'003',"name": '杨雪', "English": 98, "python": 92}, {'id':'004',"name": '冯小乐', "English": 87, "python": 98}, {'id':'005',"name": '刘前进', "English": 84, "python": 92}, ]#建立一个保存学生信息的列表 ###################函数定义区 def insert():#添加学生信息函数insert() print("*"*20+'录入学生信息'+"*"*20)#开始标识 while True: id = input("请输入ID:"); name = input('请输入姓名:') # 输入学号和姓名 while True: # 通过无限循环和try…except语句保证用户能正确输入成绩 try: py = int(input('请输入python成绩:')) eng = int(input('请输入英语成绩:')) break # 结束本层循环 except: print('所输入的成绩需为整数!') continue # 本层循环从头开始 stu.append({'id': id, "name": name, "English": eng, "python": py}) # 增加学生列表信息 mark = input('添加成功! 是否继续输入?(y/n):') if mark == 'y': continue elif mark == 'n': break else: print('未正确输入y or n!!') break print("*" * 19 + '录入学生信息结束' + "*" * 19)#结束标识 def search():#通过学号或者姓名查询学生信息 print("*" * 20 + '查询学生信息' + "*" * 20) while True: idlist = [i['id'] for i in stu]#列表推导表达式建立学号列表,循环变量i表示列表stu中的元素,其数据类型为字典 namelist = [i["name"] for i in stu] temp=input('请输入学号或姓名:')#注意用户输入学号或姓名 if temp in idlist or temp in namelist: try:#如果输入为学号,则该模块正常执行 print(stu[idlist.index(temp)])#想一想为什么? except:#如果输入为姓名,执行该模块 print(stu[namelist.index(temp)]) else: print('输入有误!')#输入的既不是学号也不是姓名 continue mark = input('是否继续查询?(y/n):') if mark == 'y': continue#本层循环从头开始 elif mark == 'n': break#结束本层循环 else: print('未正确输入y or n!') break print("*" * 19 + '学生信息查询结束' + "*" * 19) def delete():#通过学号删除学生信息,可参考search()函数的注释 print("*" * 20 + '删除学生信息' + "*" * 20) while True: idlist = [i['id'] for i in stu] id = input('请输入学号:') if id in idlist: del stu[idlist.index(id)]#通过del关键字删除stu列中表对应索引的元素 else: print('输入有误!') continue mark = input('删除成功!是否继续删除?(y/n):') if mark == 'y': continue elif mark == 'n': break else: print('未正确输入y or n!') break print("*" * 19 + '学生信息删除结束' + "*" * 19) def modify():#通过学号修改学生信息 print("*" * 20 + '修改学生信息' + "*" * 20) while True: idlist = [i['id'] for i in stu] id = input('请输入学号:') if id in idlist: while True: try: py = int(input('请重新输入python成绩:')) eng = int(input('请重新输入英语成绩:')) stu[idlist.index(id)]['python']=py stu[idlist.index(id)]['English']=eng break except: print('所输入的成绩需为整数!') continue else: print('输入有误!') continue mark = input('修改成功!是否继续修改?(y/n):') if mark == 'y': continue elif mark == 'n': break else: print('未正确输入y or n!') break print("*" * 19 + '学生信息修改结束' + "*" * 19) def show():#显示全部学生信息函数 print("*" * 20 + '打印学生信息' + "*" * 20) for i in stu: print(i) print("*" * 19 + '学生信息打印结束' + "*" * 19) def seq():#按成绩排序 print("*" * 20 + '学生成绩排序' + "*" * 20) mark=input("输入\033[1;31m '0' \033[0m(python)或\033[1;31m '1' \033[0m(英语)进行排序:")#1和0红色高亮显示 if mark=='0': stu1 = sorted(stu, key=lambda x: x['python'], reverse=True)#sorted()函数的排序功能,按字典中的python成绩排序 for i in stu1:#逐行打印,验证seq()排序功能 print(i) elif mark=='1': stu1 = sorted(stu, key=lambda x: x['English'], reverse=True)#sorted()函数排序功能,按字典中的英语成绩排序 for i in stu1: print(i) else: print('输入有误!') print("*" * 19 + '学生成绩排序结束' + "*" * 19) def menu(): print('\033[1;34;46m' + '——' * 10 + '学生管理系统' + '——' * 10 + '\033[0m') # 高亮显示 字体颜色蓝色 背景色青色 print('\033[1;30;46m' + ' ' * 16 + '1.添加学生信息' + ' ' * 22 + '\033[0m') # 高亮显示 字体颜色黑色 背景色青色 print('\033[1;30;46m' + ' ' * 16 + '2.查询学生信息' + ' ' * 22 + '\033[0m') print('\033[1;30;46m' + ' ' * 16 + '3.删除学生信息' + ' ' * 22 + '\033[0m') print('\033[1;30;46m' + ' ' * 16 + '4.修改学生信息' + ' ' * 22 + '\033[0m') print('\033[1;30;46m' + ' ' * 16 + '5.学生成绩排序' + ' ' * 22 + '\033[0m') print('\033[1;30;46m' + ' ' * 16 + '6.显示学生信息' + ' ' * 22 + '\033[0m') print('\033[1;30;46m' + ' ' * 8 + '说明:通过数字选择菜单 0退出系统' + ' ' * 13 + '\033[0m') ###################函数定义区 menu() while (True): option = input("请选择功能模式:") # 选择菜单项 if option in ['0', '1', '2', '3', '4', '5', '6']: if option== '0': # 退出系统 print('您已退出学生成绩管理系统!') break elif option == '1': # 录入学生信息 insert() elif option == '2': # 查找学生信息 search() elif option== '3': # 删除学生信息 delete() elif option== '4': # 修改学生信息 modify() elif option == '5': # 学生成绩排序 seq() elif option == '6': # 显示所有学生信息 show() else: print("输入有误!",end='')
习题 #
- 运行示例二代码,尽可能多地尝试各种不同的输入选择,完成该学生管理系统的代码测试
OJ训练题 #
1、练23.4 首字母 – ★
2、【入门】大数的平方 – ★
3、【入门】运动会成绩统计 – ★
4、【入门】打印空心等腰三角形 – ★★
5、【入门】求落地次数 – ★★★