一、系统功能概述
- 实现学生信息管理系统完整功能(当前仅支持用stu_info字典保存一条学生信息,字典中各元素分别对应学生学号、姓名、性别、语文成绩、数学成绩、英语成绩, stu_info列表在系统初始为空);
- 控制台界面显示学生信息管理系统主界面菜单;
- 支持用户控制台输入选择菜单功能选项对应值
- 依据用户输入的选择值显示对应功能选项详细文字信息,同时执行以下操作:
- 当用户输入为“1”时,控制台输入待添加学生学号;
- 当用户输入为“2”时,控制台输入待删除学生学号;
- 当用户输入为“3”时,控制台输入待更新学生学号;
- 当用户输入为“4”时,控制台输入待查询学生学号;
- 当用户输入为“5”时,控制台输入待统计学生学号;
- 当用户输入为“6”时,输出所有学生的平均成绩;
- 当用户输入为“7”时,退出系统
- 将存储的学生信息放入学生成绩统计表.xlsx中;
二、流程图
三、源代码
import openpyxl
import os
def menu():
print("=" * 50)
print('欢迎使用学生管理系统')
print('1.添加学生信息')
print('2.删除学生信息')
print('3.修改学生信息')
print('4.查询学生信息')
print('5.学生成绩统计')
print('6.查看所有学生平均成绩')
print('7.退出系统')
print("=" * 50)
try:
return int(input('请输入选择的功能:\n'))
except ValueError:
print("您未输入想要进行的功能")
# 进行添加操作将学生添加进入字典
def add(stu_list):
stu_info = {}
t = 1
while t:
stu_info["学号"] = input('请输入学号')
for i in stu_list:
if i["学号"] == stu_info["学号"]:
print("学号信息重复")
break
else:
t = 0
stu_info["姓名"] = input('请输入姓名')
stu_info["性别"] = input("请输入性别")
stu_info["语文成绩"] = float(input('请输入语文成绩'))
stu_info["数学成绩"] = float(input('请输入数学成绩'))
stu_info["英语成绩"] = float(input('请输入英语成绩'))
return stu_info
# 将添加的学生信息从字典添加进入表格
def addxlsx(stu_list, id, workbook):
# 激活worksheet
worksheet = workbook.active
stu_info = add(stu_list)
worksheet['A1'] = '学号'
worksheet['B1'] = '姓名'
worksheet['C1'] = '性别'
worksheet['D1'] = '语文成绩'
worksheet['E1'] = '数学成绩'
worksheet['F1'] = '英语成绩'
worksheet['A' + str(id)] = stu_info['学号']
worksheet['B' + str(id)] = stu_info['姓名']
worksheet['C' + str(id)] = stu_info['性别']
worksheet['D' + str(id)] = stu_info['语文成绩']
worksheet['E' + str(id)] = stu_info['数学成绩']
worksheet['F' + str(id)] = stu_info['英语成绩']
workbook.save("学生成绩统计表.xlsx")
return stu_info
# 删除集合中的学生信息
def delent(stu_list):
test = input('请输入需要删除的学号')
for stu_info in stu_list:
if stu_info["学号"] == test:
stu_list.remove(stu_info)
return stu_list
print("学号不存在")
return stu_list
# 将删除后的信息同步到表格文件中
def delentxlsx(stu_list):
stu_list = delent(stu_list)
update(stu_list)
return stu_list
# 传入一个集合将集合中存储学生信息的字典转存进入表格文件
def update(stu_list):
# 创建一个含有表头的集合
stu_set = [['学号', '姓名', '性别', '语文成绩', '数学成绩', '英语成绩']]
# 遍历集合中的字典
for stu_inof in stu_list:
# 将字典中的values内容传入集合
stu_set.append(list(stu_inof.values()))
# 创建一个新的实例
wb = openpyxl.Workbook()
sheet = wb.active
# 将刚存于集合中的学生信息存入新的实例中
for i in stu_set:
sheet.append(i)
# 更新’学生成绩统计表.xlsx‘文件
wb.save("学生成绩统计表.xlsx")
# 更新学生信息
def seta(stu_list):
test = input('请输入需要更改的学号')
if len(stu_list):
for stu_info in stu_list:
if stu_info["学号"] == test:
i = stu_list.index(stu_info)
stu_info["姓名"] = input('请输入姓名')
stu_info["性别"] = input("请输入性别")
stu_info["语文成绩"] = float(input('请输入语文成绩'))
stu_info["数学成绩"] = float(input('请输入数学成绩'))
stu_info["英语成绩"] = float(input('请输入英语成绩'))
stu_list[i] = stu_info
update(stu_list)
print("学生信息已更改")
return stu_list
print("%s学生信息不存在" % test)
return stu_list
def get(stu_list):
test = input('请输入需要查找的学号')
if len(stu_list):
for stu_info in stu_list:
if stu_info["学号"] == test:
# 格式化输出学生信息
print("学号:" + str(stu_info["学号"]) + "\n姓名:" + str(stu_info["姓名"]) + "\n性别:" + str(stu_info["性别"]) +
"\n语文成绩:" + float(stu_info["语文成绩"]) + "\n数学成绩:" + float(stu_info["数学成绩"]) + "\n英语成绩:" +
float(stu_info["英语成绩"]))
return
print("学号%s的学生信息不存在" % test)
def StatisticalResults(stu_list):
test = input('请输入需要统计的学号')
if len(stu_list):
for stu_info in stu_list:
if stu_info["学号"] == test:
print('学生成绩总和为%.2f' % (stu_info["语文成绩"] + stu_info["数学成绩"] + stu_info["英语成绩"]))
print('学生平均成绩为%.2f' % ((stu_info["语文成绩"] + stu_info["数学成绩"] + stu_info["英语成绩"]) / 3))
return
print("学号为%s学生信息不存在" % test)
def AverageScore(stu_list):
languages = float()
mathematicss = float()
englishs = float()
for stu_info in stu_list:
languages += float(stu_info['语文成绩'])
mathematicss += float(stu_info['数学成绩'])
englishs += float(stu_info['英语成绩'])
print('语文平均成绩为%.2f' % (languages/len(stu_list)))
print('数学平均成绩为%.2f' % (mathematicss/len(stu_list)))
print('英语平均成绩为%.2f' % (englishs/len(stu_list)))
# 读取"学生成绩统计表.xlsx"中的信息并同步到系统中
def read(workbook):
# 激活 worksheet
ws = workbook.active
# 将表格中的数据转化为字典
stu_list = []
# 获取"学生成绩统计表.xlsx"的长度
for i in range(workbook.active.max_row):
# 跳过第一行的表头
if i == 0:
continue
stu_info = {"学号": ws['A' + str(i + 1)].value, "姓名": ws['B' + str(i + 1)].value,
"性别": ws['C' + str(i + 1)].value,
"语文成绩": ws['D' + str(i + 1)].value, "数学成绩": ws['E' + str(i + 1)].value,
"英语成绩": ws['F' + str(i + 1)].value}
stu_list.append(stu_info)
return stu_list
if __name__ == '__main__':
# 判断"学生成绩统计表.xlsx"是否存在
if not os.path.exists("学生成绩统计表.xlsx"):
# 不存在创建"学生成绩统计表.xlsx"
workbook = openpyxl.Workbook()
worksheet = workbook.active
workbook.save("学生成绩统计表.xlsx")
# 创建锚点以确定新的学生信息放于第几行
id = 1
book = openpyxl.load_workbook('学生成绩统计表.xlsx', data_only=True)
id += book.active.max_row
stu_list = read(book)
while 1:
function = menu()
if function == 1:
stu_list.append(addxlsx(stu_list, id, book))
id += 1
elif function == 2:
stu_list = delentxlsx(stu_list)
elif function == 3:
stu_list = seta(stu_list)
elif function == 4:
get(stu_list)
elif function == 5:
StatisticalResults(stu_list)
elif function == 6:
AverageScore(stu_list)
elif function == 7:
break