主要内容 #
- 综合实战:使用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='') #################### 以上程序共分为三个部分,全局变量区,函数定义区,主函数区,事实上主函数区我们并未把它定义成函数,通过无限循环我们不断获取用户输入,在根据用户输入调用相关函数。
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='')
习题 #
- 运行示例二代码,尽可能多地尝试各种不同的输入选择,完成该学生管理系统的代码测试
OJ训练题 #
1、练23.4 首字母 – ★
2、【入门】大数的平方 – ★
3、【入门】运动会成绩统计 – ★
4、【入门】打印空心等腰三角形 – ★★
5、【入门】求落地次数 – ★★★