运用python基础知识来实现函数版学生管理系统。
首先我们要实现以下需求:
针对上面的需求,实现简易版的学生管理系统,我们要实现增删改查的操作,那我们要输入对应的操作,来实现相应的需求,比如输入数字3对应添加学生,以此类推。那我们可以用我们学过的流程控制语句来操作。在实现需求前,我们还要考虑数据的保存用哪种形式,想想,我们前面学过的数据容器,列表是不是可以实现增删改查?同时为了更好理解数据,我们可以用列表里嵌套字典的形式如[{},{},{}…],这样我们就可以更好的实现我们的需求了,下面直接开干。
我们可以先代码的主干写出来,然后再一步一步实现其他的需求。
def run():
total_student = []
# 设置死循环,持续执行相应的操作
while True:
instr = input('请输入操作:')
# 1.查找学生信息
if instr == '1':
pass
# 2.删除学生信息
elif instr == '2':
pass
# 3.添加学生信息
elif instr == '3':
pass
# 4.修改学生信息
elif instr == '4':
pass
# 5.打印全部学生信息
elif instr == '5':
pass
# 0.结束操作
elif instr == '0':
print('退出系统!')
# break 结束循环
break
else:
print('错误操作!')
为了更好的人了解对应的操作,我们可以加一个提示的函数。
def tip():
print('-----------帮助------------')
print(' ', '1.查找学生信息')
print(' ', '2.删除学生信息')
print(' ', '3.添加学生信息')
print(' ', '4.修改学生信息')
print(' ', '5.打印全部学生信息')
print(' ', '6.结束')
print('-----------结束------------')
接下来,我们来实现查找学生,我们可以定义一个函数,接收传进来的总学生信息,然后一个个遍历,找到就停止,没找到就提示无此人,用for来遍历。
def find_student(data):
name = input('请输入学生姓名:')
for i in data:
if name == i.get('姓名'):
# 返回含有学生信息的字典
return i
else:
print('无此人!')
# 返回空字符
return ''
再来实现删除学生信息,删除学生的前提是要找到这个学生,然后删除,如果没有就提示没有,我们仔细看,会发现我们删除学生信息和修改学生信息都需要查找,因为我们把查找功能封装成一个函数,只要调用就行,这也算函数的一个特点,代码复用。所以我们只需调用就行。
def del_student(data):
# 返回的是字典
student = find_student(data)
if student:
print(f'删除{student.get("姓名")}成功!')
data.remove(student)
添加学生信息,无非就是往列表里添加一个字典,那我们就来实现一下。
# 添加学生信息
def add_student(data):
# 成绩必须是数字 否则会报错
student_name = input('请输入学生姓名:')
student_chine = input('请输入语文成绩:')
student_math = input('请输入数学成绩:')
student_english = input('请输入英语成绩:')
total = int(student_english) + int(student_chine) + int(student_math)
data.append({'姓名': student_name, '语文': int(student_chine), '数学': int(student_math), '英语': int(student_english),
'总分': total})
print(f'添加{student_name}信息成功!')
学生信息有的地方会错误,但我们不一定要全部修改,我们可以用if语句来判断,输入回车键不修改,输入修改语句进行修改。
# 修改学生信息
def change_student(data):
# 不修改按回车键
stu1 = find_student(data)
if stu1:
student_name = input('请重新输入姓名:')
if student_name:
stu1['姓名'] = student_name
student_chine = input('请输入语文成绩:')
if student_chine:
stu1['语文'] = int(student_chine)
student_math = input('请输入数学成绩:')
if student_math:
stu1['数学'] = int(student_math)
student_english = input('请输入英语成绩:')
if student_english:
stu1['英语'] = int(student_english)
total = stu1.get('语文') + stu1.get('数学') + stu1.get('英语')
stu1['总分'] = total
print(f'修改{stu1.get("姓名")}学生成功!')
我们来实现输出全部学生信息,遍历加打印,就能实现。
def print_total(data):
# 列表为空
if data:
print('姓名', '\t语文', '\t数学', '\t英语', '\t总分')
for s in data:
print(s.get('姓名'), '\t\t', s.get('语文'), '\t\t', s.get('数学'), '\t\t', s.get('英语'), '\t\t', s.get('总分'),
sep='')
else:
print('-----------数据为空------------')
最后我们把代码整合一下。完整代码如下
def find_student(data):
name = input('请输入学生姓名:')
for i in data:
if name == i.get('姓名'):
return i
else:
print('无此人!')
return ''
def del_student(data):
student = find_student(data)
if student:
print(f'删除{student.get("姓名")}成功!')
data.remove(student)
# 添加学生信息
def add_student(data):
# 如果学生没有输入正确的成绩呢?不如应该是数字 结果输入的是str
student_name = input('请输入学生姓名:')
student_chine = input('请输入语文成绩:')
student_math = input('请输入数学成绩:')
student_english = input('请输入英语成绩:')
total = int(student_english) + int(student_chine) + int(student_math)
data.append({'姓名': student_name, '语文': int(student_chine), '数学': int(student_math), '英语': int(student_english),
'总分': total})
print(f'添加{student_name}信息成功!')
# 修改学生信息
def change_student(data):
# 不修改按回车键
stu1 = find_student(data)
if stu1:
student_name = input('请重新输入姓名:')
if student_name:
stu1['姓名'] = student_name
student_chine = input('请输入语文成绩:')
if student_chine:
stu1['语文'] = int(student_chine)
student_math = input('请输入数学成绩:')
if student_math:
stu1['数学'] = int(student_math)
student_english = input('请输入英语成绩:')
if student_english:
stu1['英语'] = int(student_english)
total = stu1.get('语文') + stu1.get('数学') + stu1.get('英语')
stu1['总分'] = total
print(f'修改{stu1.get("姓名")}学生成功!')
def print_total(data):
# 列表为空
if data:
print('姓名', '\t语文', '\t数学', '\t英语', '\t总分')
for s in data:
print(s.get('姓名'), '\t\t', s.get('语文'), '\t\t', s.get('数学'), '\t\t', s.get('英语'), '\t\t', s.get('总分'),
sep='')
else:
print('-----------数据为空------------')
def tip():
print('-----------帮助------------')
print(' ', '1.查找学生信息')
print(' ', '2.删除学生信息')
print(' ', '3.添加学生信息')
print(' ', '4.修改学生信息')
print(' ', '5.输出全部学生信息')
print(' ', '0.退出系统')
print('-----------结束------------')
def run():
total_student = [{'姓名': '天天', '语文': 98, '数学': 99, '英语': 99, '总分': 296}]
# 设置死循环,一直执行相应的操作
while True:
tip()
instr = input('请输入操作:')
# 1.查找学生信息
if instr == '1':
print('-----------查找学生信息------------')
stu = find_student(total_student)
if stu:
# 对齐 整洁
print('姓名', '\t语文', '\t数学', '\t英语', '\t总分')
print(stu.get('姓名'), '\t\t', stu.get('语文'), '\t\t', stu.get('数学'), '\t\t', stu.get('英语'), '\t\t',
stu.get('总分'), sep='')
# 2.删除学生信息
elif instr == '2':
print('-----------删除学生信息------------')
del_student(total_student)
# 3.添加学生信息
elif instr == '3':
print('-----------添加学生信息------------')
add_student(total_student)
# 4.修改学生信息
elif instr == '4':
print('-----------修改学生信息------------')
change_student(total_student)
# 5.打印全部学生信息
elif instr == '5':
print('-----------全部学生信息------------')
print_total(total_student)
# 0.结束操作
elif instr == '0':
print('-----------结束操作------------')
print('退出系统!')
break
else:
print('错误操作!')
if __name__ == '__main__':
run()
这简易的学生管理系统是十分基础,很合适练习。其实这系统也不是很完善,有很多地方需要改进。比如数据不能持久化,程序结束了,数据也没了,大家可以用python文件的操作来保存数据到本地,可以去看看我那篇关于文件和目录的操作。当学生人数很多的时候,我们可不可以按某个关键字来排序?如总分,其他成绩等。