美文网首页
day10作业

day10作业

作者: liuperson | 来源:发表于2018-09-04 18:13 被阅读0次

    学生信息管理系统

    import json
    from time import sleep
    filename='student_da.txt'
    
    def mian_surface():
        while True:
    
            #主界面
            print('='*20)
            print('学生信息管理系统')
            print('1.查看学生\n2.添加学生\n3.删除学生\n4.修改学生\n0.退出系统')
            print('='*20)
    
            #选择
            value=input('请选择:')
            if value=='1':
                look_()
            if value=='2':
                add_()
            if value=='3':
                delete_()
            if value=='4':
                modify_()
            if value=='0':
                print('谢谢使用,再见!!')
                break
    
    def add_():
        while True:
            #刷新字典,每个字典均已经写入json文件中
            students = {}
            name = input('姓名:')
            age = input('年龄:')
            tel = input('电话:')
            student = {"姓名": name, "年龄": age, "电话": tel}
            students.update(student)
    
            open_file(students)
            print('保存成功!')
            break
    
    def get_info():
    
        dic_stu = {}
        #每一行解析出来的字典
    
        student_list=[]
        #用列表把这些字典保存起来
    
        with open(filename,'r+',encoding='utf-8',errors='ignore')as f:
    
            students=f.readlines()
            #readlines()代表循环执行,所以后面有缩进
            #将json中每行数据读做列表中一个元素,即字典
    
            for student in students:
                #将列表中的字典遍历出来
    
                if student.startswith(u'\ufeff'):
                    #(固定格式)它占据的是3个字符,开头的格式要求,所以在后面会有切片,第一行才需要切,后面就不需要了,所以是else
    
                    student = student.encode('utf-8')[3:].decode('utf-8').replace('\'', '\"')
                    #decode解码和编码,replace把之前写进去的内容单引号改成双引号
    
                    dic_stu = json.loads(student, encoding='utf-8')
                    #把json里面的内容赋给了dic_stu
                else:
                    student=student.encode('utf-8').decode('utf-8').replace('\'','\"')
                    dic_stu=json.loads(student,encoding='utf-8')
    
                student_list.append(dic_stu)
                #字典都保存起来
    
        return student_list
        #函数执行完,给出return值,其他地方调用的时候,一直直接得到student_list
    
    def look_():
        student_list=get_info()
        #获取列表
    
        for student in student_list:
            for key in student:
                print('%s:%s'%(key,student[key]),end=' ')
            print()
    
    def delete_():
        student_list=get_info()
        #获得列表
    
        num=len(student_list)
        #num:学生的个数
    
        name=input('请输入你想删除的学生的姓名:')
        for student in student_list:
            for key in student:
                if student[key]==name:
                    student_list.remove(student)
                    print('删除成功!')
                    break
    
        if num>len(student_list):
            #进行判断是否已经删除
    
            # 将删除了指定学生的信息写回文件中,首先是要将文件清空
            writeback_file(student_list)
            #重新显示文件里面的信息
        else:
            print('你想要删除的学生不存在!')
    
    def modify_():
        """
        修改学生信息
        :return:
        """
        student_list=get_info()
        #先获取所有学生
    
        name=input('请输入你想修改的学生的姓名:')
        #获取学生的名字
    
        for student in student_list:
            for key in student:
                if student[key]==name:
                    name=input('请输入新的名字:')
                    age=input('请输入新的年龄:')
                    tel=input('请输入新的电话:')
                    student_list[student_list.index(student)]={'姓名':name,'年龄':age,'电话':tel}
                    print('修改成功!')
                    writeback_file(student_list)
                    return 0
        else:
            print('对不起,无此学生!')
    
    def writeback_file(student_list):
    
        #将提取出来修改后的内容,重新写回json文件
        with open(filename,'w',encoding='utf-8')as _:
            for student in student_list:
                open_file(student)
    
    def open_file(m):#m是参数,是字典或者是列表,最后都会转换成字符串
    
        #students是开始字典,则后面以a+形式
        with open(filename,'a+',encoding='utf-8')as f:
    
            #字典不可直接写入json文件,而是以字符串形式
            f.write(str(m)+'\n')
    
    
    
    mian_surface()
    

    相关文章

      网友评论

          本文标题:day10作业

          本文链接:https://www.haomeiwen.com/subject/nvuiwftx.html