python实现学生信息管理系统

自学完python编写的第一个项目  希望能给小伙伴一点参考

不会的问题可以和我一起探讨 我也是一名学生

如果能给你带来帮助 记得点个赞再走吧

#杜锋
#开发时间 2021/4/2719:16
import  os
filename='student.txt'
def main():
    while True: #没有break 一直执行下去
        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('=================学生信息管理系统===================')
    print('----------------------功能菜单---------------------')
    print('--------------------1录入学生信息------------------')
    print('--------------------2查找学生信息------------------')
    print('--------------------3删除学生信息------------------')
    print('--------------------4修改学生信息------------------')
    print('--------------------5排序------------------------')
    print('--------------------6统计学生总人数----------------')
    print('--------------------7显示所有学生信息--------------')
    print('--------------------0退出学生系统------------------')
    print('-------------------------------------------------')
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:
            break
    #调用save()函数
    save(student_list)
    print('学生信息录用完成')
def save(list):
    try:
        stu_txt=open(filename,'a',encoding='utf-8')

    except:
        stu_txt=open(filename,'w',encoding='utf-8')
    for item in list:
        stu_txt.write(str(item)+'\n')
    stu_txt.close()





def search():
    student_query=[]
    while True:
        id=''
        name=''
        if os.path.exists(filename):
            mode=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_old=rfile.readlines()
             for item in student_old: #遍历列表
                d=dict(eval(item)) #转换为字典
                if id!='':
                    if id==d['id']:
                        student_query.append(d)  #将字典写入列表
                elif name!=' ':
                    if name==d['name']:
                        student_query.append(d)  # 将字典写入列表

            show_student(student_query)
            student_query.clear()
            answer=input('是否要继续查询Y/N')
            if answer=='Y' or answer=='y':
                search()
            else:
                break

        else:
            print('暂未存放学生')
            return
def show_student(list):
    if len(list)==0:
        print('没有查询到学生信息!!!')
        return
    #定义标题的显示格式
    format_title='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
    print(format_title.format('ID','姓名','英语成绩','python成绩','Java成绩','总成绩'))
    #定义内容显示格式
    format_date='{:^6}\t{:^12}\t{:^8}\t{:^10}\t{:^10}\t{:^8}'
    for item in list:
        print(format_date.format(
                                 item.get('id'),
                                 item.get('name'),
                                 item.get('english'),
                                 item.get('python'),
                                 item.get('java'),
                                 int(item.get('english'))+int(item.get('python'))+int(item.get('java'))
        ))


def delete():
    while True:
        student_id=input('请输入删除学生id:')
        if student_id != '':
            if os.path.exists(filename):
                with open(filename,'r',encoding='utf-8') as file:
                    student_old=file.readlines() #读取文件每一行 冰放入列表 student_old 列表
            else:
                student_old=[] #为空
            flage=False#标记是否删除
            if student_old:
                with open(filename,'w',encoding='utf-8') as wfile:
                    d={} #定义一个空字典
                    for item in student_old:
                       d=dict(eval(item))#将字符串转换成字典
                       if d['id']!=student_id: #写入记录
                           wfile.write(str(d)+'\n')
                       else:
                           flage=True
                    if flage==True:
                        print('id为{0}的学生信息已被删除'.format(student_id))
                    else:
                         print('没有找到ID为{0}的学生'.format(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:
       return
   student_id=input('请输入修改学生id:')
   with open(filename,'w',encoding='utf-8') as wfile:
       for item in student_old:
           d=dict(eval(item)) ############转换为字典#########################因为要查找id
           if d['id']==student_id:#找到学生id
              print('找到学生信息')
              while True:
                try:
                  d['name:']=input('请输入姓名')
                  d['english']=int(input('请输入英语成绩:'))
                  d['python']=int(input('请输入Python成绩:'))
                  d['java']=int(input('请输入java成绩:'))
                except:
                    print('你的输入有误请重新输入')
                else:
                    break
              wfile.write(str(d)+'\n')
              print('修改成功')
           else:
               wfile.write(str(d)+'\n') ####将id不同的学生重写入文件 因为open w 会重新覆盖原文件
       answer=input('是否继续修改学生信息 Y/N')
       if answer=='Y' or answer=='y':
           modify()




def sort():
    show()

    if os.path.exists(filename):
        studen_new = []
        with open(filename,'r',encoding='utf-8') as rfile:
           student_list3= rfile.readlines() #字符串
        for item in student_list3:
                d=dict(eval(item)) #转为字典
                studen_new.append(d)
    else:
        print('文件没有存储学生信息')
        return
    asc_or_desc=input('请选择0升序 1降序')
    if asc_or_desc=='0':
        asc_or_desc_bool=False
    elif asc_or_desc=='1':
        asc_or_desc_bool=True
    else:
        print('你的输入有误请重新输入') #重新调用sort()方法
        sort()
    mode=input('请选择排序方式 1.按英语程序排序 2.按Python程序排序 3.按Java成绩排序 0.按总成绩排序')
    if mode=='1':
        studen_new.sort(key=lambda x : int(x['english']),reverse=asc_or_desc_bool)###x是字典
    elif mode=='2':
        studen_new.sort(key=lambda x: int(x['python']), reverse=asc_or_desc_bool)  # x是字典
    elif mode=='3':
        studen_new.sort(key=lambda x: int(x['java']), reverse=asc_or_desc_bool)  # x是字典
    elif mode=='0':
        studen_new.sort(key=lambda x:int(x['english'])+int(x['python'])+int(x['java']),reverse=asc_or_desc_bool) #x是字典
    else: #key 根据关键字k排序 reverse 表示升序还是降序
        print('请重新输入') #重新调用sort(函数
        sort()
    show_student(studen_new)
def total():
    if os.path.exists(filename):
        with open(filename,'r',encoding='utf-8') as rfile:
            students=rfile.readlines()
            if students:
                print('一共有{0}个学生'.format(len(students))) #len()判断列表的长度 每一个字典项目占一个长度

            else:
                print('还没有录用信息')
    else:
        print('暂未保存数据....')
def show():
    student_lst1= []
    if os.path.exists(filename): #判断文件是否存在
        with open(filename,'r',encoding='utf-8') as rfile:
            students1=rfile.readlines() #将文件每行作为独立对象存储列表
            for item in students1:
                d=dict(eval(item)) #item为列表对象 转换为字典对象
                student_lst1.append(d)
            if student_lst1:
                show_student(student_lst1)

    else:
        print('文件中暂未存储学生信息')
if __name__ == '__main__':
    main()

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值