Python项目实战:学生信息管理系统

🚀write in front🚀
🔎大家好,我是翻斗花园牛爷爷★。希望你看完之后,能对你有所帮助,不足请指正!共同学习交流🔎
🆔本文由 翻斗花园牛爷爷★ 原创 CSDN首发🐒 如需转载还请通知⚠
📝个人主页:翻斗花园牛爷爷★—CSDN博客
🎁欢迎各位→点赞👍 + 收藏⭐️ + 留言📝​
📣系列专栏:翻斗花园牛爷爷★的系列专栏——CSDN博客
✉️我们并非登上我们所选择的舞台,演出并非我们所选择的剧本

目录

成品预览

需求分析

模块分类

一、基础界面实现

1.主菜单的打印

2..主函数

二、模块实现

1.添加学生信息

2.查询学生信息

3.删除学生信息

4.修改学生信息

5.统计学生总人数

   6.排序

7.显示所有学生信息

三、完整代码

1.代码展示

2.流程展示


        我们在学习了基础的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.流程展示

 

 创作不易,希望大佬们以及未来的大佬们给个三连再走吧

 创作不易,希望大佬们以及未来的大佬们给个三连再走吧

 创作不易,希望大佬们以及未来的大佬们给个三连再走吧

同时,也希望各位大佬能够指正文章的错误,(^_^)∠※

当然也要提醒各位小伙伴们,只有自己打出来,才能真正的掌握哦。😁😁😁

  • 72
    点赞
  • 251
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 27
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 27
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

翻斗花园牛爷爷★

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值