Python实现学生信息管理系统(完整版).附详细注释

demo基于b站马士兵python教学基础,学生信息管理系统的项目实践。

主要功能模块:

(1)录入学生信息模块

(2)查找学生信息模块

(3)删除学生信息模块

(4)修改学生信息模块

(5)学生成绩排名模块

(6)统计学生总人数模块

(7)显示全部学生信息模块

源码如下:

import os.path
filename='student.txt'
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:
                insert()
            elif choice==2:
                search()
            elif choice==3:
                delete()
            elif choice==4:
                modify()
            elif choice==5:
                sort()
            elif choice==6:
                total()
            elif choice==7:
                show()
def menu():
    print('======================\033[0;35m学生管理系统\033[m============================')
    print('-----------------------功能菜单------------------------------')
    print('\t\t1.录入学生信息   \t\t\t\t2.查找学生信息')
    print('\t\t3.删除学生信息   \t\t\t\t4.修改学生信息')
    print('\t\t5.排序         \t\t\t\t6.统计总学生人数')
    print('\t\t7.显示所有学生信息\t\t\t\t0.退出')
#添加学生信息函数
def insert():
    student_list=[]
    while True:
        id=input('请输入id(如1001):')
        if not id:
            break
        name=input('请输入姓名:')
        if not name:
            break
        try:
            english=int(input('请输入英语成绩:'))
            python=int(input('请输入python成绩:'))
            java=int(input('请输入java成绩:'))
        except:
            print('输入成绩无效,请再次输入:')
            continue
        #将内容录入到字典中
        student={'id':id,'name':name,'english':english,'python':python,'java':java}
        #将学生信息添加到列表当中
        student_list.append(student)
        answer=input('是否继续添加?y/n:')
        if answer=='y' or answer=='Y':
            continue
        else:
            print('学生信息录入完毕!')
            break
    save(student_list)
#保存学生信息工具
def save(lst):      #列表内容保存到文件
    try:
        stu_txt=open(filename,'a',encoding='utf-8')  #追加的形式打开文件,没有该文件则创建文件,加上encoding害怕有中文乱码
    except:
        stu_txt = open(filename, 'w', encoding='utf-8')  #出错的话,写入的方式打开
    for item in lst:          #列表内容遍历到文件
        stu_txt.write(str(item)+'\n')
    stu_txt.close()
#定义学生信息搜索函数,可以实现按照ID或者姓名搜索
def search():
    student_query=[]    #查询到的id/name存储列表
    while True:
        id=''
        name=''
        if os.path.exists(filename):  # 如果可以打开文件
            mode=int(input('按id查找请输入1,按姓名查找请输入2:'))
            if mode==1:
                id=input('请输入要查找的id:')
            elif mode == 2:
                name=input('请输入要查找的姓名:')
            else:
                print('输入有误,请重新输入')
                search()
            with open(filename,'r',encoding='utf_8') as rfile:
                student=rfile.readlines()
                for item in student:
                    d=dict(eval(item))
                    if id!='':              #给id赋值了,就能查到
                        if d['id']==id:
                            student_query.append(d)
                    elif name != '':
                        if d['name']==name:
                            student_query.append(d)
            #显示查询结果
            show_student(student_query)
            #清空列表
            student_query.clear()
            answer=input('是否继续查询?y/n:')
            if answer=='y' or answer=='Y':
                continue
            else:
                break
        else:
            print('暂未保存学生信息')
            return
#列表内容展示工具
def show_student(lst):
    if len(lst)==0:
        print('没有查询到学生信息,无数据显示!')
        return
    #定义标题显示格式
    format_title='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'           #居中显示,占6个字符宽度
    print(format_title.format('ID', 'Name', 'English', 'Python', 'Java', 'Sum'))    #format函数使其一一对应
    #定义内容显示格式
    format_data = '{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
    for item in lst:
        print(format_data.format(item['id'],
                                 item['name'],
                                 item['english'],
                                 item['python'],
                                 item['java'],
                                 int(item['english'])+int(item['python'])+int(item['java'])))
#定义学生信息删除函数
def delete():
    while True:
        student_id=input('请输入您要删除的id:')
        if student_id !='':
            if os.path.exists(filename):         #判断文件是否存在  #文件内容传播:文件1-->列表-字典-->文件2
                with open(filename,'r',encoding='utf-8') as file:             #可以是file=open(),也可以是with open() as file
                    student_old=file.readlines()      #打开后,读取所有信息放到列表当中。readlines() 方法用于读取file所有行(直到结束符 EOF)并返回列表
            else:
                student_old=[]
            flag=False
            if student_old:
                with open(filename,'w',encoding='utf_8') as wfile:
                    d={}
                    for item in student_old:     #遍历列表并将不删除的信息重新写入文件
                        d=dict(eval(item))      #将字符串转化成字典。eval()函数的作用就是能够让字符串之中的表达式去进行实际的计算,不论是数字计算还是函数都可以实现
                        if d['id'] != student_id:
                            wfile.write(str(d) + '\n')   #不删除的内容重新写入文件
                        else:                     #删除完成
                            flag=True
                    if flag:
                        print(f'id为{student_id}的学生信息已删除!')
                    else:
                        print(f'没有找到id为{student_id}的学生信息!')
            else:          #从文件当中没有读到数据或者文件为空
                print('学生信息为空!')
                break
            show()            #删除之后重新显示所有学生信息
            answer=input('是否继续删除?y/n')
            if answer=='y' or answer=='Y':
                continue
            else:
                break
#定义学生信息修改函数
def modify():
    show()
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as rfile:
            student_old=rfile.readlines()
    else:
        print('没有学生信息的文件!')
        return
    student_id=input('请输入要修改的学生id:')          #先找到要修改的id信息
    with open(filename,'w',encoding='utf-8')as wfile:  #wfile作为写入的新文件
        for item in student_old:
            d=dict(eval(item))
            if d['id']==student_id:              #找到该学生id
                print('已找到该学生信息,请修改!')
                while True:
                    try:
                        d['name']=input('请输入姓名:')
                        d['english'] = input('请输入english成绩:')
                        d['python'] = input('请输入python成绩:')
                        d['java'] = input('请输入java成绩:')
                        break
                    except:
                        print('输入有误,请重新输入!')
                wfile.write(str(d)+'\n')                  #将不修改的内容写入
                print('修改成功!!!')
            else:
                wfile.write(str(d) + '\n')                #因为已经把student_old拿到d了,所以重新写入
        answer=input('是否继续修改学生信息?y/n:')
        if answer=='y' or answer=='Y':
            modify()
        else:
            return
#定义学生按成绩排序函数
def sort():
    show()
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8')as rfile:
            student_lst=rfile.readlines()
        student_new=[]
        for item in student_lst:
            d=dict(eval(item))
            student_new.append(d)
    else:
        return
    asc_or_dsc=input('请选择升序0还是降序1:')
    if asc_or_dsc=='0':
        asc_or_dsc_bool=False
    elif asc_or_dsc=='1':
        asc_or_dsc_bool=True
    else:
        print('您的输入有误,请重新输入')
        sort()
    mode = input('请选择排序方式(1.按英语成绩排序 2.按python成绩排序 3.按java成绩排序 0.按总成绩排序):')
    if mode=='1':
        student_new.sort(key=lambda x: int(x['english']), reverse=asc_or_dsc_bool)
    elif mode=='2':
        student_new.sort(key=lambda x: int(x['python']), reverse=asc_or_dsc_bool)
    elif mode=='3':
        student_new.sort(key=lambda x:int(x['java']),reverse=asc_or_dsc_bool)
    elif mode=='0':
        student_new.sort(key=lambda x:int(x['english'])+int(x['python'])+int(x['java']),reverse=asc_or_dsc_bool)
    else:
        print('输入有误,请重新输入!')
        sort()
    show_student(student_new)
#定义学生数量统计函数,不多解释了,比较简单
def total():
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8')as rfile:
            students=rfile.readlines()
            if students:
                print(f'一共有{len(students)}名学生。')
            else:
                print('还未录入学生信息!学生数为:0')
    else:
        print('文件不存在,暂未保存数据信息.....')
#定义学生信息展示函数
def show():
    student_lst=[]
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8')as rfile:
            students=rfile.readlines()
            for item in students:
                student_lst.append(eval(item))      #将文件内容赋给列表,以字典的形式,方便根据key,找value
            if student_lst:
                show_student(student_lst)
            else:
                print('还未录入学生信息!学生数为:0')
    else:
        print('文件不存在,暂未保存过数据!')



if __name__ == '__main__':
    main()

b站:花了2万多买的Python教程全套,现在分享给大家.....(相关视频)

csdn:菜康勇

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
学生信息管理系统是一个用于管理学生个人信息和学习记录的系统Python可以用来开发这样的系统,并且具有简单易学、易维护等特点。下面是一个简单的示例,展示了如何使用Python实现学生信息管理系统的一些基本功能: 1. 学生信息输入: ```python class Student: def __init__(self, name, age, grade): self.name = name self.age = age self.grade = grade students = [] def add_student(): name = input("请输入学生姓名:") age = input("请输入学生年龄:") grade = input("请输入学生年级:") student = Student(name, age, grade) students.append(student) print("学生信息添加成功!") add_student() ``` 2. 信息查找: ```python def find_student(name): for student in students: if student.name == name: print("学生姓名:", student.name) print("学生年龄:", student.age) print("学生年级:", student.grade) return print("未找到该学生信息!") name = input("请输入要查找的学生姓名:") find_student(name) ``` 3. 信息的删除与修改: ```python def delete_student(name): for student in students: if student.name == name: students.remove(student) print("学生信息删除成功!") return print("未找到该学生信息!") def update_student(name): for student in students: if student.name == name: student.name = input("请输入学生姓名:") student.age = input("请输入学生年龄:") student.grade = input("请输入学生年级:") print("学生信息修改成功!") return print("未找到该学生信息!") name = input("请输入要删除或修改的学生姓名:") delete_student(name) update_student(name) ``` 4. 信息展示: ```python def show_students(): for student in students: print("学生姓名:", student.name) print("学生年龄:", student.age) print("学生年级:", student.grade) show_students() ``` 这只是一个简单的示例,实际的学生信息管理系统可能包含更多功能和复杂的逻辑。你可以根据自己的需求进行扩展和优化。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值