day10作业

2018-09-04  本文已影响0人  liuperson

学生信息管理系统

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()
上一篇下一篇

猜你喜欢

热点阅读