用Python实现学生管理系统

欢迎各位大佬的到来,今天所要分享的文章是关于如何实现学生管理系统,有需要的朋友可以参考一下,希望可以帮到大家!

文章目录

  • 一、开始界面实现
  • 1. 定义主函数
  • 2. 运用循环,获取用户需求
  • 二、函数实现各个模块功能
  • 1. 添加学生信息
  • 2. 展示学生信息
  • 3. 查找学生信息
  • 4. 删除学生信息
  • 5. 退出程序
  • 三、 把信息存入文件中
  • 1. save() 函数
  • 2. load() 函数
  • 四、整理代码
  • 1. 代码展示
  • 2. 运行过程
  • 一、开始界面实现

    1. 定义主函数

    定义一个主函数main,在通过定义一个menu函数对学生管理系统的菜单进行打印。

    # 定义menu()函数
    def menu():
        print('1. 新增学生')
        print('2. 显示学生')
        print('3. 查找学生')
        print('4. 删除学生')
        print('0. 退出程序')
    
    # 定义主函数
    def main():
        print('--------------------------------')
        print('        欢迎来到学生管理系统       ')
        print('-------------------------------')
        menu()
    
    
    main()
    

    2. 运用循环,获取用户需求

    1)使用 while True 循环:让菜单一直保持循环,直到用户选择退出操作时才结束循环操作。

    2)变量 choice:获取到的用户需要实现的功能进行存储。

    3)if 循环:使用多个分支循环语句,分别实现各个模块的功能。

    def menu():
        print('1. 新增学生')
        print('2. 显示学生')
        print('3. 查找学生')
        print('4. 删除学生')
        print('0. 退出程序')
        choice = input('请输入你的选择: ')
        return choice
    
    # 定义主函数
    def main():
        print('--------------------------------')
        print('        欢迎来到学生管理系统       ')
        print('-------------------------------')
        while True:
            choice = menu()
            if choice == '1':
                # 新增学生
                pass
            elif choice == '2':
                # 显示学生
                pass
            elif choice == '3':
                # 查找学生
                pass
            elif choice == '4':
                # 删除学生
                pass
            elif choice == '0':
                # 退出程序
                pass
            else:
                print('您的输入有误,请重新输入!')
                # 需要进入下次循环,让用户输入
                continue
    

    效果展示:

    二、函数实现各个模块功能

    下面,就需要完成上述代码所需要实现的各个功能操作

    1. 添加学生信息

    1)studentId,name,gender,className: 分别用来存储学生的学号、姓名、性别、班级的信息。
    2)student: 定义一个字典,用来存储上述全部信息。
    3)append(): 列表添加操作,将当前的字典存入列表,作为列表的一个元素。
    4)students[ ]: 定义了一个列表用来存储所有的学生信息。该列表中的每个元素都属于一个"字典",而每个字典就分别表示一个同学!

    # 使用这个全局变量,来管理所有学生的信息.
    students = []
    
    
    def insert():
        print('[新增学生] 开始!')
        studentId = input('请输入学生的学号:')
        name = input('请输入学生的姓名:')
        gender = input('请输入学生的性别:')
        if gender not in ('男', '女'):
            print('性别输入的内容不符合要求,新增失败!')
            return
        className = input('请输入学生的班级:')
        # 使用一个字典把上述的信息给聚合起来.
        student = {
            'studentId': studentId,
            'name': name,
            'gender': gender,
            'className': className
        }
        # 将上述信息添加到全局变量students列表中
        global students
        students.append(student)
        print('[新增学生] 完毕!')
    

    2. 展示学生信息

    遍历全局变量这个列表,把每个学生的信息进行打印。

    def show():
        print('[显示学生] 开始!')
        for s in students:
            print(f"{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}")
        print(f'[显示学生] 完毕! 共显示了{len(students)}条数据!')
    

    3. 查找学生信息

    我们假设根据学生的姓名来进行查找。使用 count 变量完成计数功能操作。

    def find():
        # 根据学生姓名,来进行查找
        print('[查找学生] 开始!')
        name = input('请输入要查找的同学姓名:')
        count = 0
        for s in students:
            if name == s['name']:
                print(f"{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}")
                count += 1
        print(f'[查找学生] 完毕! 共找到了{count}个匹配的同学.')
    

    4. 删除学生信息

    假设按照学生的学号进行删除操作。通过学号来确定该学生属于哪一个“字典”,然后把这个字典从列表中进行删除即完成该操作。

    def delete():
        print('[删除学生] 开始!')
        # 按照学号进行删除
        studentId = input('请输入要删除学生的学号:')
        # 看看这个学号对应的同学是哪个字典,然后把这个字典从列表中进行删除
        for s in students:
            if studentId == s['studentId']:
                print(f"删除 {s['name']} 同学的信息!")
                students.remove(s)
        print('[删除学生] 结束!')
    

    5. 退出程序

    使用内建函数 sys.exit (0) 退出程序即可。

            elif choice == '0':
                # 退出程序
                print('GoodBye!')
                sys.exit(0)
    

    三、 把信息存入文件中

    由于上述的插入学生信息操作和删除学生信息操作都保存在内存中,一旦我们结束程序,我们插入或删除的信息就全都不见了。为了让我们插入的信息可以一直保存下去,我们就需要定义两个函数:save() 函数和 load() 函数。

    1. save() 函数

    这个函数是用于存档学生信息的。把信息存储在和当前文件同级的目录中。存档的文件定义为文本文件。

    def save():
        # 用于存档
        # 此处的路径不是以d: 开头的"绝对路径",而是"相对路径"
        # 这个写法的含义就是让 record.txt 和当前的文件在同一个目录里.
        with open('record.txt', 'w', encoding='utf8') as f:
            for s in students:
                f.write(f"{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}\n")
            print(f'[存档成功] 共存储了 {len(students)} 条记录!')
    

    因此,每当我们修改一个数据时,就可以调用 save 函数对这个信息进行保存操作。

    2. load() 函数

    该函数是用于读取文档的操作。使用此函数,就可以实现当我们关闭程序再次运行程序时,可以读取到上次我们所保存的学生信息。
    1)os.path.exists (): 该内建函数用来判断某一个文件是否存在。
    2)line.strip (): 该功能是去掉一个字符串开头和末尾的空白符。
    空白符包括:空格,换行,回车,制表符等等。
    3)line.split (): 用于将字符串按照指定的分隔符分割成若干个字符串。

    def load():
        # 用于读档
        # 如果存档文件不存在,则直接跳过读档操作
        if not os.path.exists('record.txt'):
            return
    
        # 读档的时候要保证先把旧的数据先清理干净!
        global students
        students = []
        with open('record.txt', 'r', encoding='utf8') as f:
            for line in f:
                # 针对这一行数据,按照 \t 对其进行切分操作!
                # 切分之前要去除末尾的换行
                line = line.strip()
                tokens = line.split('\t')
                if len(tokens) != 4:
                    print(f'当前行格式存在问题! line = {line}')
                    continue
                student = {
                    'studentId': tokens[0],
                    'name': tokens[1],
                    'gender': tokens[2],
                    'className': tokens[3]
                }
                students.append(student)
        print(f'[读档成功] 共读取了 {len(students)} 条记录!')
    

    四、整理代码

    1. 代码展示

    import os.path
    import sys
    
    # 使用这个全局变量,来管理所有学生的信息.
    # 这个列表的每个元素都是一个"字典",每个字典就分别表示一个同学!
    students = []
    
    
    def save():
        # 用于存档
        with open('record.txt', 'w', encoding='utf8') as f:
            for s in students:
                f.write(f"{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}\n")
            print(f'[存档成功] 共存储了 {len(students)} 条记录!')
    
    def load():
        # 用于读档
        # 如果存档文件不存在,则直接跳过读档操作
        if not os.path.exists('record.txt'):
            return
    
        # 读档的时候要保证先把旧的数据先清理干净!
        global students
        students = []
        with open('record.txt', 'r', encoding='utf8') as f:
            for line in f:
                # 针对这一行数据,按照 \t 对其进行切分操作!
                # 切分之前要去除末尾的换行
                line = line.strip()
                tokens = line.split('\t')
                if len(tokens) != 4:
                    print(f'当前行格式存在问题! line = {line}')
                    continue
                student = {
                    'studentId': tokens[0],
                    'name': tokens[1],
                    'gender': tokens[2],
                    'className': tokens[3]
                }
                students.append(student)
        print(f'[读档成功] 共读取了 {len(students)} 条记录!')
    
    
    def menu():
        print('1. 新增学生')
        print('2. 显示学生')
        print('3. 查找学生')
        print('4. 删除学生')
        print('0. 退出程序')
        choice = input('请输入你的选择: ')
        return choice
    
    
    def insert():
        print('[新增学生] 开始!')
        studentId = input('请输入学生的学号:')
        name = input('请输入学生的姓名:')
        gender = input('请输入学生的性别:')
        if gender not in ('男', '女'):
            print('性别输入的内容不符合要求,新增失败!')
            return
        className = input('请输入学生的班级:')
        # 使用一个字典把上述的信息给聚合起来.
        student = {
            'studentId': studentId,
            'name': name,
            'gender': gender,
            'className': className
        }
    
        global students
        students.append(student)
        # 保存操作
        save()
        print('[新增学生] 完毕!')
    
    
    def show():
        # 遍历全局变量这个列表,把每个学生的信息打印出来.
        print('[显示学生] 开始!')
        for s in students:
            print(f"{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}")
        print(f'[显示学生] 完毕! 共显示了{len(students)}条数据!')
    
    
    def find():
        # 根据学生姓名,来进行查找
        print('[查找学生] 开始!')
        name = input('请输入要查找的同学姓名:')
        count = 0
        for s in students:
            if name == s['name']:
                print(f"{s['studentId']}\t{s['name']}\t{s['gender']}\t{s['className']}")
                count += 1
        print(f'[查找学生] 完毕! 共找到了{count}个匹配的同学.')
    
    
    def delete():
        print('[删除学生] 开始!')
        # 按照学号进行删除
        studentId = input('请输入要删除学生的学号:')
        # 看看这个学号对应的同学是哪个字典,然后把这个字典从列表中进行删除
        for s in students:
            if studentId == s['studentId']:
                print(f"删除 {s['name']} 同学的信息!")
                students.remove(s)
        # 增加保存操作
        save()
        print('[删除学生] 结束!')
    
    
    def main():
        # 通过控制台和命令进行交互
        print('--------------------------------')
        print('        欢迎来到学生管理系统       ')
        print('-------------------------------')
        load()
        while True:
            # 通过 menu 函数打印出菜单项
            choice = menu()
            if choice == '1':
                # 新增学生
                insert()
            elif choice == '2':
                # 显示学生
                show()
            elif choice == '3':
                # 查找学生
                find()
            elif choice == '4':
                # 删除学生
                delete()
            elif choice == '0':
                # 退出程序
                print('GoodBye!')
                sys.exit(0)
            else:
                print('您的输入有误,请重新输入!')
                # 需要进入下次循环,让用户输入
                continue
    
    main()
    

    2. 运行过程



    以上就是今天所要分享的内容,如果感觉内容不错,记得一键三连噢。创作不易,感谢大家的支持,我们下次再见!ヾ( ̄▽ ̄)ByeBye

    作者:夜晚中的人海

    物联沃分享整理
    物联沃-IOTWORD物联网 » 用Python实现学生管理系统

    发表回复