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()