跳至正文
View Categories

3 min read

主要内容 #

  1. 综合实战:使用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='')

习题 #

  1. 运行示例二代码,尽可能多地尝试各种不同的输入选择,完成该学生管理系统的代码测试

OJ训练题 #

1、练23.4 首字母 – ★
2、【入门】大数的平方 – ★
3、【入门】运动会成绩统计 – ★
4、【入门】打印空心等腰三角形 – ★★
5、【入门】求落地次数 – ★★★