python实现学生管理系统(包含文件操作)

python实现学生管理系统(包含文件操作)

  • 前言:这个程序是在B站看相关教程学会的 好歹是敲完了 但是其中也有一些小bug或许没有被发现,并且有的地方还可以精简,发此博客为了记录自己一步步的成长之路~
1.需求分析

首先是学生管理系统的功能,分为7个部分,分别是:
1>录入学生信息、
2>查找学生信息、
3>删除学生信息、
4>修改学生信息、
5>学生排名、
6>统计学生总人数、
7>显示全部学生信息。

2.功能细化
  • 录入的学生信息包括含学号,姓名,成绩(英语、数学、C语言、python、Java)
  • 查找学生信息可以通过学号查找、也可以通过姓名查找
  • 删除、修改学生信息只能通过学号删改
  • 排名可以根据成绩(各科成绩、总成绩)排名,或者根据学号排名。排序可以是从大到小,也可以是从小到大。
3.具体实现
import os 	#引入内置模块
filename='student.txt'	#将被创建的储存学生信息的文本文件取名为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()	#显示全部学生信息
        else:
            continue

#菜单界面
def menu():
    print('''
----------------------------------------------------------------------
--------------------------欢迎来到学生信息管理系统--------------------
----------------------------------------------------------------------
                        1.录入学生信息
                        2.查找学生信息
                        3.删除学生信息
                        4.修改学生信息
                        5.学生成绩排名
                        6.统计学生总人数
                        7.显示全部学生信息
                        0.退出系统
----------------------------------------------------------------------
----------------------------------------------------------------------
----------------------------------------------------------------------''')
    return

#用来将学生信息储存在文本文件中
def save(lst):
    try:
        stu_txt=open(filename,'a',encoding='utf-8')	#以追加方式打开文本文件
    except:
        stu_txt=open(filename,'w',encoding='utf-8')	#如果刚开始没有文本文件,则创建一个文本文件
    for item in lst:
        stu_txt.write(str(item)+'\n')
    stu_txt.close()

    
#录入学生信息
def insert():
    stu_list=[]  	#创建一个学生信息列表
    while True:
        id=input('请输入学生ID:')
        if not id:
            break
        name=input('请输入姓名:')
        if not name:
            break
        try:
            english=int(input('请输入英语成绩:'))
            math=int(input('请输入数学成绩:'))
            cguage=int(input('请输C语言成绩:'))
            python=int(input('请输入Python成绩:'))
            java=int(input('请输入Java成绩:'))
        except:
            print('输入无效,不是整数类型,请重新输入')
            continue
        #将录入的学生保存到字典当中
        student={'id':id,'name':name,'english':english,'math':math,'cguage':cguage,'python':python,'java':java}
        #将学生信息放到列表中
        stu_list.append(student)
        answer=input('是否继续添加?y/n:')
        if answer=='y'or answer=='Y':
            continue
        else:
            break
    save(stu_list) 	#将创建的学生列表传进此函数中保存在文件里
    print('学生信息录入完毕!')
    return


#查找学生信息
def search():
    stu_dply=[]		#创建学生列表并且初始化,这个列表就是要被查询的学生列表
    				#为什么要创建列表?当通过姓名进行查询时,可能会存在同名现象,因此需要列表存储多个学生信息
    stu_id=''
    stu_name=''
    if os.path.exists(filename):
        order=int(input('按ID查找请输入1,按姓名查找请输入2:'))
        if order==1:
            stu_id=input('请输入学生ID:')
        elif order==2:
            stu_name=input('请输入学生姓名:')
        else:
            print('What fucking problem with you ???')
            search()		#调用自己重新输入(有两种方式 循环和递归 这里选择了递归)
            
        with open(filename,'r',encoding='utf-8') as file:	#以只读形式打开文本文件
            stu_old=file.readlines()		#将文件内所有的学生信息储存在stu_old列表里
            for item in stu_old:		#遍历每个学生的信息
                d=dict(eval(item))	#将每个学生信息转换为字典
                if stu_id!='':		#当输入的要查询的学生信息合法
                    if d['id']==stu_id:	#当字典里的学生信息id跟输入的学生id相同
                        stu_dply.append(d)	#将此学生字典追加到将要展示的学生列表中
                elif stu_name!='':
                    if d['name']==stu_name:
                        stu_dply.append(d)
        #显示查询结果
        show_student(stu_dply)
        #请空列表
        stu_dply.clear()
        answer=input('是否继续查询?y/n:')
        if answer=='y'or answer=='Y':
            search()
        else:
            print('ojbk!')
    return


#删除学生信息
def delete():
    while True:	#这里用了循环的方式执行可能出现的重复操作,而不是递归
        stu_id=input('请输入要删除的学生ID:')
        if stu_id!='':
            if os.path.exists(filename):	#判断学生信息文件是否存在
                with open(filename,'r',encoding='utf-8') as file:
                    stu_old=file.readlines()    #readline返回的是字符串                   #print(stu_old)
        else:
            stu_old=[]
        flag=False   #标记是否删除
        if stu_old:     #原文件不为空
            with open(filename,'w',encoding='utf-8') as wfile:
                d={}
                for item in stu_old:    #item是字符串
                    d=dict(eval(item))  #将字符串转成字典
                    if d['id']!=stu_id:
                        wfile.write(str(d)+'\n')
                    else:
                        flag=True   #表示不需要删除
                if flag:
                    print(f'id为{stu_id}的学生信息已被删除')
                else:
                    print(f'没有找到id为{stu_id}的学生信息')
        else:
            print('无该学生信息!')
            break
        show()  #删除之后重新显示所有学生信息
        answer=input('是否继续删除学生信息?y/n:')
        if answer=='y' or answer=='Y':
            continue
        else:
            break
    return

#修改学生信息
def modify():
    while True:
        stu_id=input('请输入要修改的学生ID:')
        if stu_id!='':
            if os.path.exists(filename):
                with open(filename,'r',encoding='utf-8') as file:
                    stu_old=file.readlines()
        else:
            stu_old=[]
        flag=False
        if stu_old:
            with open(filename,'w',encoding='utf-8') as wfile:
                for item in stu_old:
                    d=dict(eval(item)) 
                    if d['id']!=stu_id:
                        wfile.write(str(d)+'\n')
                    else:
                        flag=True
                if flag:
                    print('找到这名学生,可以修改他的相关信息了!')
                    while True:
                        d['name']=input('请输入姓名:')
                        try:
                            d['english']=int(input('请输入英语成绩:'))
                            d['math']=int(input('请输入数学成绩:'))
                            d['cguage']=int(input('请输C语言成绩:'))
                            d['python']=int(input('请输入Python成绩:'))
                            d['java']=int(input('请输入Java成绩:'))
                            print('修改成功!')
                            break
                        except:
                            print('输入无效,不是整数类型,请重新输入')
                            continue
                    d['id']=stu_id
                    wfile.write(str(d)+'\n')
                else:
                    print(f'没有找到id为{stu_id}的学生信息')
                show()  #修改之后显示所有学生信息
                answer=input('是否继续修改其他学生信息?y/n:')
                if answer=='y' or answer=='Y':
                    continue
                else:
                    break
    return


#对学生信息排序
def sort():
    show()
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as file:
            stu_lst=file.readlines()
        stu_new=[]
        for item in stu_lst:
            d=dict(eval(item))
            stu_new.append(d)
    else:
        print('暂未保存学生信息!')
        return
    order=int(input('请选择(0升序,1降序):')) #False升序,True降序
    mode=int(input('请选择排序方式(1.英语成绩,2.数学成绩,3.Python成绩,4.C语言成绩,5.Java成绩,6.总成绩,0.ID):'))
    if mode==1:
        stu_new.sort(key=lambda i:int(i['english']),reverse=order)    #reverse是排序方式 x这个参数是字典
    elif mode==2:
        stu_new.sort(key=lambda i:int(i['math']),reverse=order)
    elif mode==3:
        stu_new.sort(key=lambda i:int(i['python']),reverse=order)
    elif mode==4:
        stu_new.sort(key=lambda i:int(i['cguage']),reverse=order)
    elif mode==5:
        stu_new.sort(key=lambda i:int(i['java']),reverse=order)
    elif mode==6:
        stu_new.sort(key=lambda i:int(i['english'])+int(i['math'])+int(i['python'])+int(i['cguage'])+int(i['java']),reverse=order)
    elif mode==0:
        stu_new.sort(key=lambda i:int(i['id']),reverse=order)
    else:
        print('输入有误,请重新输入。')
        sort()
    show_student(stu_new)
    return


#统计学生总人数
def total():
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as file:
            students=file.readlines()
            if students:
                print('一共有%d名学生'%len(students))
            else:
                print('还没有录入学生信息')
    else:
        print('暂未保存学生信息')
    return


#显示全部学生信息
def show():
    stu_dply=[]
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as file:
            students=file.readlines()
            if students:
                for item in students:
                    d=dict(eval(item))
                    stu_dply.append(d)
                show_student(stu_dply)
            else:
                print('还没有录入学生信息')
    else:
        print('暂未保存学生信息')
    return

#显示学生信息
def show_student(lst):
    if len(lst)==0:
        print('没有查询到学生信息,无数据显示!')
        return
    #定义标题显示格式
    print('ID\t\t姓名\t\t英语成绩\t数学成绩\tC语言成绩\tPython成绩\tJava成绩\t总成绩\t')
    for item in lst:
        for index in item:
            print(item[index],end='\t\t')
        print(item['english']+item['math']+item['cguage']+item['python']+item['java'])
    print('按任意键继续')
    os.system('pause')
    
if __name__=='__main__':            #以主函数运行
    main()
  • 4
    点赞
  • 35
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
学生信息管理系统是一个用于管理学生信息的软件系统。在Python中,可以通过文件来存储和管理学生信息。下面是一个简单的示例,演示了如何使用Python来创建和管理学生信息的文件。 首先,我们需要创建一个名为"students.txt"的文件来保存学生信息。可以使用Python文件操作函数来创建和写入文件。以下是一个示例代码: ```python # 打开文件,如果文件不存在则创建 file = open("students.txt", "w") # 写入学生信息 file.write("学生1, 男, 18\n") file.write("学生2, 女, 19\n") file.write("学生3, 男, 20\n") # 关闭文件 file.close() ``` 上述代码将创建一个名为"students.txt"的文件,并将学生信息写入文件中。每行表示一个学生的信息,包括姓名、性别和年龄。 接下来,我们可以编写一个Python程序来读取和处理学生信息文件。以下是一个示例代码: ```python # 打开文件,读取学生信息 file = open("students.txt", "r") # 逐行读取学生信息并打印 for line in file: student_info = line.strip().split(", ") name = student_info[0] gender = student_info[1] age = student_info[2] print("姓名:", name) print("性别:", gender) print("年龄:", age) print() # 关闭文件 file.close() ``` 上述代码将逐行读取"students.txt"文件中的学生信息,并将每个学生的姓名、性别和年龄打印出来。 这是一个简单的示例,演示了如何使用Python来创建和管理学生信息的文件。实际的学生信息管理系统可能会更复杂,包括更多的功能和数据处理。但是,通过文件操作和数据处理技术,可以实现一个完整的学生信息管理系统。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值