系统需求
1.实现可以添加新的学员
2.修改单个学员的各项信息
3.将某个学员的所有信息全部删除
4.查看单个学员的信息
5.将所有学员的信息罗列出来
6.计算考试成绩的平均值
7.计算考试的及格率(大于60分)
8.每次操作后可以选择返回主菜单
9.将所有的学员信息保存在一个txt文件中
设计细节
因为某些操作会用到os模块所以先进行进行声明
import os
准备工作
# 创建总字典
# 创建的字典为大字典 我们采用字典嵌套的方式来进行数据的查找录入等....
all_dict = {} #创建一个空的字典用来装数据
字典中的信息格式应为all_dict={学员学号:{学员信息},学员学号:{学员信息}…}采用字典嵌套的方式进行保存
将每个功能都装在函数中,可以减少内存,在需要用的时候直接调用就好了
1.上传数据
在上传之前先要创建一个 “学生信息.txt” 文件
然后用 global 方法来使函数中的 all_dict字典可以改变全局中all_dict字典
再用 eval() 函数将文件中的数据转换回原来的数据类型
def shangchuan(): #定义函数
if os.path.exists("学生信息.txt"): #判断是否存在存储数据的文件
with open("学生信息.txt", "r", encoding="utf-8") as file: #打开数据传输的通道
ret = file.read() #将读取的数据赋值给一个变量
global all_dict #利用global函数使局部变量可以影响全局变量
all_dict = eval(ret) #将eval() 函数用来执行一个字符串表达式,并返回表达式的值
print("加载成功.......")
2.添加新的学员信息
首先判断学员是否存在,学员不存在才可以添加,存在了的话接下来的一系列操作也就没属于添加新学员了
用 input 方法来让用户进行信息的输入
再利用字典的 setedfault 方法将数据保存进字典中
def add():
while True: #设置循环
num = input("请输入学号:")
if num in all_dict: #判断学员是否存在
print("该学生已存在!")
else:
name = input("请输入姓名:")
age = int(input("请输入年龄:"))
python = int(input("请输入python成绩:"))
# 将用户输入的信息添加到字典里
stu_dict = {'num': num, 'name': name, 'age': age, 'python': python}
all_dict.setdefault(num, stu_dict)
print("添加成功!")
# 自定义是返回菜单还是继续添加
re_minu = int(input("返回主菜单输入0 继续输入新学员输入 1"))
if re_minu == 0:
return
elif re_minu == 1:
continue
else:
print("请输入正确的选项!")
continue
3.删除学员的信息
还是先判断是否存在该学员
用方法 del 字典名[key值] 来完成删除学员信息的目的
def delete():
while True: #设置循环
num = input("请输入想要删除学员的学号:")
if num in all_dict: #判断是否存在该学员 存在则直接删除字典中信息
del all_dict[num]
print("删除成功!")
re_minu = int(input("返回主菜单输入0 继续删除输入1"))
if re_minu == 0:
return # 用return来跳出删除学员的循环
elif re_minu == 1:
continue
else:
print("请输入正确的选项!")
continue
else:
print("该学员不存在,请确认信息!")
4.修改学员信息
判断学员是否存在
通过学号num来在字典中进行查找,找到该学员信息的小字典
再通过 字典名[key值]=value值 的方法来进行修改,将属性名作为key值来进行定位
def rerevise():
while True: #定义循环
num = input("请输入想要修改信息学员的学号:")
if num in all_dict: # 判断学员是否存在
new_num = input("请输入新的学号:")
new_name = input("请输入新的姓名:")
new_age = input("请输入新的年龄:")
new_python = input("请输入新的python成绩:")
# 利用学号的key值num来寻找对应的学员信息的小字典
all_dict[num] = {'num': new_num, 'name': new_name, 'age': new_age, 'python': new_python}
# 再通过小字典中的key值来寻找对应的属性的值 大字典[小字典对应的key值][属性对应的key值]
print("修改成功!")
print("学号:%s |姓名:%s |年龄:%d |python成绩:%d" % (all_dict[num]['num'], all_dict[num]['name'], all_dict[num]['age'], all_dict[num]['python']))
re_minu = int(input("返回主菜单输入0 继续修改输入1"))
if re_minu == 0:
return
elif re_minu == 1:
continue
else:
print("请输入正确的选项!")
continue
else:
print("该学员不存在,请确认信息!")
5.查看单个学员的信息
利用key值(学员号 num)来进行查找
def one_look():
while True:
one_num = input("请输入需要查询学员的学号:")
if one_num in all_dict:
print("查询结果如下:")
# 利用key值(学员号 num)来进行查找
print("学号:%s |姓名:%s |年龄:%d |python成绩:%d" % (all_dict[one_num]['num'], all_dict[one_num]['name'], all_dict[one_num]['age'], all_dict[one_num]['python']))
re_minu = int(input("返回主菜单输入0 继续查询输入1"))
if re_minu == 0:
return
elif re_minu == 1:
continue
else:
print("请输入正确的选项!")
continue
else:
print("该学员不存在!")
6.查看所有学员的信息
直接将字典中的内容进行输出就可以了
def all_look():
print("查询结果如下:")
for value in all_dict.values(): # 利用 字典名.values() 的方法来找出所有的储存学员信息的小字典
print("学号:%s |姓名:%s |年龄:%d |python成绩:%d" % (value['num'], value['name'], value['age'], value['python']))
7.查看考试的平均成绩
首先得将字典中所有的成绩这一属性的属性值找到并放到一个列表中取(这里采用for循环遍历)
再计算所有人成绩的和,以及平均成绩
def avg():
# 平均成绩=每个人的成绩之和/人数
list = [] # 创建空的列表用来装每个人的成绩
a = 0 # 定义初始的a的值 用来计算成绩之和
for stu_dic in all_dict.values(): # 循环遍历找出每个人的成绩并放到列表中
list.append(stu_dic['python'])
for i in list: # 列表中每个人的成绩相加
a += i
print("本次python考试的平均分是:", a // len(all_dict)) # 输出并计算平均成绩
re_minu = int(input("返回主菜单输入0 "))
if re_minu == 0:
return
7.查看考试的及格率
和平均值一样,首先得将字典中所有的成绩这一属性的属性值找到并放到一个列表中取(这里采用for循环遍历)
在用一个 for循环 将列表中的所有元素进行if判断是否及格,得出及格的人数
计算及格率,输出
def pr():
# 及格率=及格的人数/总人数
list = [] # 创建空的列表用来装每个人的成绩
b = 0 # 定义b的初始值 用来计算及格的人数
for stu_dic in all_dict.values(): # 循环遍历找出每个人的成绩并放到列表中
list.append(stu_dic['python'])
for i in list: # 判断成绩是否及格 及格了b的值+1
if i >= 60:
b += 1
c = b / len(all_dict) * 100 # 计算及格率
print("本次python考试的及格率:%.2f%%" % c) # 输出
re_minu = int(input("返回主菜单输入0 "))
if re_minu == 0:
return
else:
print("请输入正确的选项!")
函数定义完毕,接下来就进入程序内部进行一个一个调用
shangchuan() #每次程序开始之前都会讲文件中的数据保存到字典中
while True: # 循环
# 创建开始菜单界面
print("=" * 30)
print("-----学生管理系统-----")
print("1.添加新学员")
print("2.删除旧学员")
print("3.修改学员信息")
print("4.查看单个学员信息")
print("5.查看所有学员信息")
print("6.查看本次python的平均成绩")
print("7.查看本次python的及格率")
print("8.退出程序")
print("=" * 30)
# 选择想要进行的操作
start_num = int(input("请输入想要进行的操作序号:"))
# 判断进行的操作 然后根据操作的序号来调用函数
if start_num == 1:
add()
elif start_num == 2:
delete()
elif start_num == 3:
rerevise()
elif start_num == 4:
one_look()
elif start_num == 5:
all_look()
elif start_num == 6:
avg()
elif start_num == 7:
pr()
elif start_num == 8:
print("保存数据,退出程序!")
with open("学生信息.txt", "w", encoding="utf-8") as all_data: # 将字典中的数据保存到文件中去
all_data.write(str(all_dict))
break