python自动化作业之用函数写学生成绩管理系统

"""

及格率:(低于及格线个数÷总成绩个数)×100%
平均值:全部成绩的总合÷总成绩个数
方差:所有成绩的平方和 ÷ 总成绩个数 - 平均值的平方

(语文成绩的平方 + 数学成绩的平方 + 英语成绩的平方) / 3 - (((语文成绩 + 数学成绩 + 英语成绩) / 3) ** 2)

1. 添加学生信息 学生姓名 学号 语文成绩 数学成绩 英语成绩
2. 根据学生学号查看学生成绩
3. 统计:各学生的平均成绩 成绩方差 班级各科及格率 平均成绩
4. 根据学号修改学生信息
5. 根据学号删除学生
6. 保存学生信息
7. 退出系统
读info.txt到score_sheet 增删改查,操作完write到info.txt,这边还没学数据库,数据只能暂时写到文本中。代码都是老师教的,仅供参考。
"""

score_sheet = [
# {'姓名': '张开', '学号': 123, '年龄': 18, '数学': 35.0, '语文': 92.0, '英语': 88.0},
# {'姓名': '李开', '学号': 234, '年龄': 18, '数学': 95.0, '语文': 22.0, '英语': 78.0},
# {'姓名': '王开', '学号': 345, '年龄': 20, '数学': 66.0, '语文': 22.0, '英语': 8.0}
]

PATH = './info.txt'

def read_file():
with open(PATH,'r',encoding='utf-8') as f:
title = f.readline().strip().split(',')
# print(title)
for line in f:
line = line.strip().split(',')
d = {
title[0]:line[0],
title[1]:int(line[1]),
title[2]:int(line[2]),
title[3]:int(line[3]),
title[4]:int(line[4]),
title[5]:int(line[5])
}
score_sheet.append(d)
# print(score_sheet)
def save_data():
with open(PATH,'w',encoding='utf-8') as f:
f.write(','.join(score_sheet[0].keys())+'\n')
for item in score_sheet:
f.write(','.join([str(i) for i in item.values()])+'\n')

def save_file():
""" 保存学生信息 """
save_data()
print('数据保存成功')

def add_info():
tmp = []
for i in score_sheet:
tmp.append(i['学号'])
while True:
res1 = int(input('输入学号:').strip())
if res1 in tmp:
print('该学号已存在')
continue
res2 = input('姓名:').strip()
res3 = int(input('年龄:').strip())
res4 = int(input('数学:').strip())
res5 = int(input('语文:').strip())
res6 = int(input('英语:').strip())
tmp_dict = {}
tmp_dict['姓名'] = res2
tmp_dict['学号'] = res1
tmp_dict['年龄'] = res3
tmp_dict['数学'] = res4
tmp_dict['语文'] = res5
tmp_dict['英语'] = res6
score_sheet.append(tmp_dict)
del tmp_dict
print('{}添加成功'.format(res2))
# print(score_sheet)
break

def show_info():
# tmp = []
# for i in score_sheet:
# tmp.append(i['学号'])
tmp = [i['学号'] for i in score_sheet] #列表生成式
while True:
cmd = int(input('学号列表:{}\n输入要查询的学生学号:'.format(tmp)).strip())
if cmd in tmp:
# #方式1
# user = score_sheet[int(tmp.index(cmd))]
# # print(score_sheet[index1])
# print('姓名:{} 学号:{} 年龄:{} 数学:{} 语文:{} 英语:{} 平均分:{:.2f}'.format(
# user['姓名'],user['学号'],user['年龄'],user['数学'],user['语文'],user['英语'],
# (user['数学'] + user['语文'] + user['英语']) / 3))
# print('退出请按1')
# elif cmd == 1:
# break
# else:
# print('输入的学号不存在! 退出请按1 ')
#方式2
for i in score_sheet:
if i['学号'] == cmd:
print('姓名:{} 学号:{} 年龄:{} 数学成绩:{} 语文成绩:{} 英语成绩:{} 平均分:{:.2f}'.format(
i['姓名'],i['学号'],i['年龄'],i['数学'],i['语文'],i['英语'],
(i['数学'] + i['语文'] + i['英语']) / 3
))
return
else:
print('输入的学号不存在!')

def update_info():
tmp = [i['学号'] for i in score_sheet] # 列表生成式
while True:
cmd = int(input('学号列表:{}\n输入要更新的学生的学号:'.format(tmp)).strip())
if cmd in tmp:
for i in score_sheet:
if i['学号'] == cmd:
print(score_sheet.index(i),i)
#学号唯一,不允许修改
res1,res2 = input('新的名字:').strip(),int(input('新的年龄:').strip())
res3,res4,res5 = int(input('新的数学成绩:').strip()),int(input('新的语文成绩:').strip()),int(input('新的英语成绩:').strip())
res1 = res1 if res1 else score_sheet[i]['姓名']
res2 = res2 if res2 else score_sheet[i]['年龄']
res3 = res3 if res3 else score_sheet[i]['数学']
res4 = res4 if res4 else score_sheet[i]['语文']
res5 = res5 if res5 else score_sheet[i]['英语']
current_index = score_sheet.index(i)
score_sheet[current_index] = new_dict = {
'姓名': res1,
'学号': i['学号'],
'年龄': res2,
'数学': res3,
'语文': res4,
'英语': res5,
}
# score_sheet[current_index] = new_dict
print('old_dict: {}\nnew_dict: {}\nupdate successful'.format(i,new_dict))
return
else:
print('输入的学号不存在!')

def drop_info():
tmp = [i['学号'] for i in score_sheet] # 列表生成式
while True:
cmd = int(input('学号列表:{}\n输入要删除的学生的学号:'.format(tmp)).strip())
if cmd in tmp:
for i in score_sheet:
if i['学号'] == cmd:
# print(score_sheet.index(i), i)
##方式1
# score_sheet.pop(score_sheet.index(i))
##方式2
score_sheet.remove(i)
print('old_dict: {}\ndelete successful'.format(i))
# print(score_sheet)
return
else:
print('输入的学号不存在!')

def count_info():
""" 统计信息:各学生的平均成绩 成绩方差 班级各科及格率 平均成绩 """
tmp_dict = {
"考试总人数":0,
"语文成绩总分数": 0,
"语文成绩及格数": 0,
"数学成绩总分数": 0,
"数学成绩及格数": 0,
"英语成绩总分数": 0,
"英语成绩及格数": 0,
}
for i in score_sheet:
print('{} 的平均成绩: {:.2f} 成绩方差: {:.2f}'.format(
i['姓名'],
(i['数学'] + i['语文'] + i['英语']) / 3,
(i['数学']**2+ i['语文']**2 + i['英语']**2) / 3 - (((i['数学'] + i['语文'] + i['英语']) / 3)**2),

))
tmp_dict['考试总人数'] += 1
tmp_dict['语文成绩总分数'] += i['语文']
tmp_dict['数学成绩总分数'] += i['数学']
tmp_dict['英语成绩总分数'] += i['英语']
if i['语文'] >= 60:
tmp_dict['语文成绩及格数'] += 1
if i['数学'] >= 60:
tmp_dict['数学成绩及格数'] += 1
if i['英语'] >= 60:
tmp_dict['英语成绩及格数'] += 1
print("""
班级各科情况汇总:
考数学的总人数:{} 平均成绩:{:.2f} 及格率:{:.2f}%,
考语文的总人数:{} 平均成绩:{:.2f} 及格率:{:.2f}%,
考英语的总人数:{} 平均成绩:{:.2f} 及格率:{:.2f}%,
""".format(
tmp_dict['考试总人数'],tmp_dict['数学成绩总分数']/tmp_dict['考试总人数'],tmp_dict['数学成绩及格数']/tmp_dict['考试总人数']*100,
tmp_dict['考试总人数'],tmp_dict['语文成绩总分数']/tmp_dict['考试总人数'],tmp_dict['语文成绩及格数']/tmp_dict['考试总人数']*100,
tmp_dict['考试总人数'],tmp_dict['英语成绩总分数']/tmp_dict['考试总人数'],tmp_dict['英语成绩及格数']/tmp_dict['考试总人数']*100,
)
)

def q():
""" 退出系统 """
choice = str(input('是否保存退出,保存退出按y,直接退出按n,y/n:'))
if choice == 'y':
save_data()
exit("退出系统")
elif choice == 'n':
exit("退出系统")
else:
print('输入的不正确,重新输入!')

def main():
""" 入口函数 """
#获取学生列表
read_file()
while True:
tmp_dict = {
1:['添加学生信息',add_info],
2:['根据学号查看学生信息',show_info],
3:['根据学号更新学生信息',update_info],
4:['根据学号删除学生信息',drop_info],
5:['统计信息',count_info],
6:['保存学生信息',save_file],
7:['退出系统',q],
}
for k,v in tmp_dict.items():
print(k,v[0])
cmd = input('\n根据序号选择操作:').strip()
if cmd.isdigit():
cmd = int(cmd)
# if cmd == 1:
# add_info()
# elif cmd == 2:
# show_info()
# elif cmd == 3:
# update_info()
# elif cmd == 4:
# drop_info()
# elif cmd == 5:
# count_info()
# elif cmd == 6:
# save_file()
# elif cmd == 7:
# q()
if cmd in tmp_dict:
tmp_dict[cmd][1]() #拿到序号对应的函数,去执行具体的功能。
else:
print('请输入一个合理的序号')
else:
print('请输入一个数字')

if __name__ == '__main__':
main()


posted @ 2021-04-21 15:33  lpaxq  阅读(676)  评论(0编辑  收藏  举报