python练习之学生管理系统(函数版)

运用python基础知识来实现函数版学生管理系统。

首先我们要实现以下需求:

  1. 查找学生
  2. 删除学生信息
  3. 添加学生信息
  4. 修改学生信息
  5. 学生信息包括姓名、语数外和总分成绩
  6. 输出全部学生信息
  7. 退出系统

针对上面的需求,实现简易版的学生管理系统,我们要实现增删改查的操作,那我们要输入对应的操作,来实现相应的需求,比如输入数字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文件的操作来保存数据到本地,可以去看看我那篇关于文件和目录的操作。当学生人数很多的时候,我们可不可以按某个关键字来排序?如总分,其他成绩等。

猜你喜欢

转载自blog.csdn.net/qq_65898266/article/details/124975500