实现功能
- 新增学生(insert)
- 显示学生(show)
- 查找学生(find)
- 删除学生(delete)
- 存档到文件
前四个功能实现
import sys
# 使用这个全局变量,来管理所有的学生信息
# 列表的每个元素都是一个'字典',每个字典分别表示了一个同学!
students = []
def menu():
print('1.增加学生')
print('2.显示学生')
print('3.查找学生')
print('4.删除学生')
print('0.退出程序')
choice = input('请输入您的选择:')
return choice
def insert():
Id = input('请输入学生的学号:')
name = input('请输入学生的姓名:')
gender = input('请输入学生的性别:')
if gender not in ('男', '女'):
print('性别输入的内容不符合要求,新增失败')
return
className = input('请输入学生的班级')
# 使用一个字典把上述的信息给聚合起来
student = {
'Id': Id,
'name': name,
'gender': gender,
'className': className
}
global students
students.append(student)
print('[新增学生]完毕!')
def show():
for s in students:
print(f'{s["Id"]}\t{s["name"]}\t{s["gender"]}\t{s["className"]}') # 注意外'内"
print(f'[显示学生]完毕,共显示了{len(students)}条数据')
def find():
name = input('请输入要查找的学生姓名:')
count = 0
# 读取的时候可以不加global,修改的时候才需要
for s in students:
if name == s['name']:
print(f'{s["Id"]}\t{s["name"]}\t{s["gender"]}\t{s["className"]}')
count += 1
print(f'[查找学生]完毕,共找到了{count}个匹配的同学')
def delete():
Id = input('请输入要删除的学生学号:')
for s in students:
if Id == s['Id']:
print(f'删除 {s["name"]} 同学的信息')
students.remove(s)
print('[删除学生]结束')
def main():
"""
入口函数
"""
print('--------------------')
print(' 欢迎来到学生管理系统 ')
print('--------------------')
while True:
choice = menu()
if choice == '1':
insert()
elif choice == '2':
show()
elif choice == '3':
find()
elif choice == '4':
delete()
elif choice == '0':
print('goodbye!')
sys.exit(0)
else:
print('您的输入有误,请重新输入')
continue
main()
存档
- 约定把数据保存在和py文件同级的目录中,文件名为 record.txt
- 文件内容按照 行文本 的方式来表示(每行代表一个学生)
- 按 ‘w’ 的方式打开文件,如果没有对应文件就创建一个新文件,如果有,那旧数据会被覆盖
新增两个函数save(存档)和load(读档)
import sys
import os.path
# 使用这个全局变量,来管理所有的学生信息
# 列表的每个元素都是一个'字典',每个字典分别表示了一个同学!
students = []
def menu():
print('1.增加学生')
print('2.显示学生')
print('3.查找学生')
print('4.删除学生')
print('0.退出程序')
choice = input('请输入您的选择:')
return choice
def save():
"""
用于存档
"""
# 相对路径--让record.txt 和 当前 py文件在同一目录里
with open('record.txt', 'w', encoding='utf8') as f:
for s in students:
f.write(f"{s['Id']}\t{s['name']}\t{s['gender']}\t{s['className']}\n")
print(f'[存档成功]共存储了{len(students)}条记录.')
def load():
"""
用于读档
"""
# 如果存档文件不存在,则直接跳过读档流程
# 为了避免读方式打开文件的时候,文件不存在引起异常
if not os.path.exists('record.txt'):
print('没有文件')
return
# 读档的时候保证先把旧的数据清理干净
global students
students = []
with open('record.txt','r',encoding='utf8') as f:
for line in f:
# 按照 \t 进行切分操作
# 切分之前,要去除末尾的换行符
line = line.strip() # 去掉一个字符串开头和末尾的空白符(空格/换行/制表符...)
tmp = line.split('\t') # 列表
if len(tmp) != 4:
print(f'当前行格式存在问题 Line ={line}')
continue
student = {
'Id': tmp[0],
'name': tmp[1],
'gender': tmp[2],
'className': tmp[3]
}
students.append(student)
print(f'[读档成功]共读取了{len(students)}条记录')
def insert():
Id = input('请输入学生的学号:')
name = input('请输入学生的姓名:')
gender = input('请输入学生的性别:')
if gender not in ('男','女'):
print('性别输入的内容不符合要求,新增失败')
return
className = input('请输入学生的班级')
# 使用一个字典把上述的信息给聚合起来
student = {
'Id': Id,
'name': name,
'gender': gender,
'className': className
}
global students
students.append(student)
save()
print('[新增学生]完毕!')
def show():
for s in students:
print(f'{s["Id"]}\t{s["name"]}\t{s["gender"]}\t{s["className"]}') # 注意外'内"
print(f'[显示学生]完毕,共显示了{len(students)}条数据')
def find():
name = input('请输入要查找的学生姓名:')
count = 0
# 读取的时候可以不加global,修改的时候才需要
for s in students:
if name == s['name']:
print(f'{s["Id"]}\t{s["name"]}\t{s["gender"]}\t{s["className"]}')
count += 1
print(f'[查找学生]完毕,共找到了{count}个匹配的同学')
def delete():
Id = input('请输入要删除的学生学号:')
for s in students:
if Id == s['Id']:
print(f'删除 {s["name"]} 同学的信息')
students.remove(s)
save()
print('[删除学生]结束')
def main():
"""
入口函数
"""
print('--------------------')
print(' 欢迎来到学生管理系统 ')
print('--------------------')
load()
while True:
choice = menu()
if choice == '1':
insert()
elif choice == '2':
show()
elif choice == '3':
find()
elif choice == '4':
delete()
elif choice == '0':
print('goodbye!')
sys.exit(0)
else:
print('您的输入有误,请重新输入')
continue
main()