首页 > 其他分享 >学生管理系统

学生管理系统

时间:2024-09-26 09:19:34浏览次数:8  
标签:管理系统 信息 学生 stu dict 编号 print

需求说明

  • 1-先打印提示主界面(1-6的数字):让用户选择要进行的操作
  • 2-当用户选择1时,增加信息:添加学生信息(学生编号、学生姓名、联系方式),注意-学生编号必须唯一
  • 3-当用户选择2时,修改信息:修改学生信息(先输入学生编号,如果学生信息已存在可以修改姓名和联系方式)
  • 4-当用户选择3时,删除信息:删除学生信息(先输入学生编号,如果学生信息已存在进行删除)
  • 5-当用户选择4时,查询一个信息:查询单个学生信息(根据学生编号查)
  • 6-当用户选择5时,查询所有信息:直接返回所有数据
  • 7-当用户选择6时,退出系统,注意-只要用户不主动退出,那就一直使用!!!

需求分析

  • 定义函数print_info(),打印主界面提示信息
  • 程序主入口main()函数,自定义while True循环实现调用print_info()函数,让用户选择对应的操作
    • 注意:处理一下非法值
  • 自定义函数add_stu(),实现添加学生信息,当用户选择1时调用add_stu()
    • 注意:学生编号必须唯一
    • 注意:手机号格式验证
  • 自定义函数update_stu(),实现修改学生信息,当用户选择2时调用update_stu()
    • 注意:只能根据学生编号修改学生姓名和手机号
    • 注意:如果学生编号不存在,给出提示
  • 自定义函数delete_stu(),实现删除学生信息,当用户选择3时调用delete_stu()
    • 注意:只能根据学生编号删除
    • 注意:如果学生编号不存在,给出提示
  • 自定义函数query_one(),实现查询单个学生信息,当用户选择4时调用query_one()
    • 注意:根据编号查询
  • 自定义函数query_all(),实现查询所有学生信息,当用户选择5时调用query_all()
  • 当用户选择6时,跳出while True循环

技术选择

  • 基础语法:print() input() 字面量 注释 关键字 变量 数据类型 字符串格式化
  • 判断语句:if elif elif … else
  • 循环语句:while和for循环
  • 数据容器:列表 字符串 字典
  • 函数:定义函数 调用函数 局部变量和全局变量 global
  • 文件:后续会用数据库代替保存数据
  • 异常:try … except … else … finally

需求实现

公共工具模块

import re


def is_phone_num(phone_num):
    """
    判断手机号格式是否正确
    :param phone_num:
    :return:
    """
    result = re.match(pattern='^1\d{10}$', string=phone_num)
    return result

基于内存实现

import mytool

"""
- 1-先打印提示主界面(1-6的数字):让用户选择要进行的操作
- 2-当用户选择1时,增加信息:添加学生信息(学生编号、学生姓名、联系方式),注意-学生编号必须唯一
- 3-当用户选择2时,修改信息:修改学生信息(先输入学生编号,如果学生信息已存在可以修改姓名和联系方式)
- 4-当用户选择3时,删除信息:删除学生信息(先输入学生编号,如果学生信息已存在进行删除)
- 5-当用户选择4时,查询一个信息:查询单个学生信息(根据学生编号查)
- 6-当用户选择5时,查询所有信息:直接返回所有数据
- 7-当用户选择6时,退出系统,注意-只要用户不主动退出,那就一直使用!!!
"""
# 定义全局变量列表,用于保存所有学生信息
stu_list = []


def print_info():
    """
    给用户提示操作选择
    :return: None
    """
    print('--------------------- 学生信息管理系统 --------------------------')
    print("用户选择1时,增加信息:添加学生信息")
    print("用户选择2时,修改信息:修改学生信息")
    print("用户选择3时,删除信息:删除学生信息")
    print("用户选择4时,查询信息:查询单个学生信息")
    print("用户选择5时,查询信息:查询所有学生信息")
    print("用户选择6时,退出系统")
    print('--------------------- 学生信息管理系统 --------------------------')


def add_stu():
    # 定义列表用于保存所有的学生信息
    global stu_list
    # 从键盘输入学生信息
    id = input("请您输入要添加的学生编号:")
    # 判断学生编号是否已存在
    for stu_dict in stu_list:
        if stu_dict['id'] == id:
            print("对不起,您输入的学生编号已经存在,请重新输入")
            # 结束当前函数
            return
    name = input("请您输入要添加的学生姓名:")
    phone = input("请您输入要添加的学生手机号:")

    # 判断手机号是否符合规则
    result = mytool.is_phone_num(phone)
    if result is None:
        print("对不起,您输入的手机号不正确,请重新输入")
        # 结束当前函数
        return

    # 把学生信息封装成字典
    stu_dict = {'id': id, 'name': name, 'phone': phone}
    # 将学生信息字典保存到列表中
    stu_list.append(stu_dict)
    print(stu_list)


def update_stu():
    """
    修改学生信息
    :return:
    """
    # 声明全局变量
    global stu_list
    # 提示用户输入需要修改的学生编号
    id = input("请您输入要修改的学生编号:")
    # 遍历列表,取出每一个学生信息(字典)
    for stu_dict in stu_list:
        # 判断编号是否存在
        if stu_dict['id'] == id:
            # 修改姓名和手机号
            name = input("请您输入新的学生姓名:")
            phone = input("请您输入新的学生电话:")
            # 判断手机号是否符合规则
            result = mytool.is_phone_num(phone)
            if result is None:
                print("对不起,您输入的手机号不正确,请重新输入")
                # 结束当前函数
                return
            stu_dict['name'] = name
            stu_dict['phone'] = phone
            print(stu_list)
            break
    else:
        print("您输入的学生编号不存在!!!")


def delete_stu():
    """
    删除学生信息
    :return:
    """
    # 声明全局变量
    global stu_list
    # 从键盘输入要删除的学生编号
    id = input("请您输入要删除的学生编号:")
    # 遍历列表,判断学生编号是否已存在
    for stu_dict in stu_list:
        if stu_dict['id'] == id:
            # 如果学生编号已存在,执行删除
            stu_list.remove(stu_dict)
            print(f"{stu_dict}相关信息已成功删除!!!")
            break
    else:
        # 如果循环遍历后没有找到对应的学生编号,给出提示
        print("您输入的学生编号不存在,请重新输入!!!")


def query_one():
    """
    查询单个学生信息
    :return:
    """
    # 声明全局变量
    global stu_list
    # 从键盘输入要查询的学生编号
    id = input("请输入您要查询的学生编号:")
    # 遍历列表,判断学生编号是否存在
    for stu_dict in stu_list:
        if stu_dict['id'] == id:
            # 如果学生编号存在
            print(f"学生编号:{stu_dict['id']}, 学生姓名:{stu_dict['name']}, 学生手机号:{stu_dict['phone']}")
            break
    else:
        print("您输入的学生编号不存在,请重新操作!!!")


def query_all():
    """
    查询所有学生信息
    :return:
    """
    # 声明全局变量
    global stu_list
    # 判断当前学生信息是否有值
    if len(stu_list) > 0:
        # 遍历列表,格式化输出信息
        for stu_dict in stu_list:
            print(f"学生编号:{stu_dict['id']}, 学生姓名:{stu_dict['name']}, 学生手机号:{stu_dict['phone']}")
    else:
        print("现在还没有学生信息,赶紧去招生!!!")




if __name__ == '__main__':
    while True:
        # 调用打印主界面函数
        print_info()
        # 从键盘获取用户选择
        choice = input('请输入您的选择:')
        if choice == '1':
            add_stu()
        elif choice == '2':
            update_stu()
        elif choice == '3':
            delete_stu()
        elif choice == '4':
            query_one()
        elif choice == '5':
            query_all()
        elif choice == '6':
            break
        else:
            print("您的输入有误,请重新输入!!!")

基于文件实现

"""
1. 先打印提示主界面(1-6的数字): 让用户选择他/她要进行的操作.
2. 当用户选择1的时候, 实现操作: 添加学生(学生编号, 学生姓名, 手机号).   注意: 学生编号必须唯一
3. 当用户选择2的时候, 实现操作: 删除学生(根据编号删除)
4. 当用户选择3的时候, 实现操作: 修改学生信息(根据编号修改, 只能改姓名, 手机号)
5. 当用户选择4的时候, 实现操作: 查询单个学生信息(根据编号查询)
6. 当用户选择5的时候, 实现操作: 查询所有学生信息
7. 当用户选择6的时候, 实现操作: 退出系统     注意: 只要用户不主动退出,那就一直能用!!!
"""
import json

from mytool import is_phone_num


# 1.主界面函数
def print_info():
    # 给用户提示的各种选项
    print('===============学生管理系统================')
    print('1.添加学生(学生编号, 学生姓名, 手机号)')
    print('2.删除学生(根据编号删除)')
    print('3.修改学生信息(根据编号修改, 只能改姓名, 手机号)')
    print('4.查询单个学生信息(根据编号查询)')
    print('5.查询所有学生信息')
    print('6.退出系统')
    print('===============学生管理系统================')


# 3.添加学生
def add_stu():
    # 3.1 提示用户输入学生编号
    add_id = input('请您输入要添加的学生编号:')
    # 3.2 先判断该学号是否存在,如果存在就结束当前操作,如果不存在就添加学生其他信息
    # 从文件中读取学生信息
    with open(file='./student_info.txt', mode='r') as f:
        stu_list = f.readlines()
    # if stu_list:
    for stu_str in stu_list:
        # 将学生信息字符串转换为字典
        stu_dict = json.loads(stu_str)
        # 如果id已经存在,就结束当前操作
        if stu_dict['id'] == add_id:
            print('对不起,您输入的学生编号已经存在,请重新操作')
            # 结束当前函数
            return
    # 如果程序走到此处,说明学号不存在,可以直接添加
    name = input('请您输入要添加的学生姓名:')
    tel = input('请您输入要添加的学生电话:')
    while is_phone_num(tel) is None:
        tel = input("电话格式不正确,请重新输入:")
    # 3.3 把学生信息封装成字典,一个字典代表一个学生
    stu_dict = {"id": add_id, "name": name, "tel": tel}
    # 3.4 把学生添加到列表中
    # stu_list.append(stu_dict)
    # 3.4 将列表中的信息追加到学生信息文件中
    with open('./student_info.txt', 'a') as f:
        # 注意:不要使用str(stu_dict)将字典转换为字符串,str()转换之后是单引号
        # 使用json.loads(str)将字符串转换回字典时需要,字符串放在双引号中
        f.write(json.dumps(stu_dict) + "\n")
    print(f"{stu_dict}的学生信息已成功录入!")


# 4.删除学生
def del_stu():
    # 获取删除学生的学号
    del_id = input('请您输入要删除的学生编号:')
    # 遍历列表,判断如果学号存在就删除对应的学生信息,如果不存在就提示您输入的学号不存在,请重新操作
    # 从文件中读取学生信息
    with open(file='./student_info.txt', mode='r') as f:
        stu_list = f.readlines()
    for stu_str in stu_list:
        # 将学生信息字符串转换为字典
        stu_dict = json.loads(stu_str)
        # 判断
        if stu_dict['id'] == del_id:
            # 如果学号存在就删除对应的学生信息
            stu_list.remove(stu_str)
            # 删除成功后,就跳出循环
            print(f'{stu_dict}信息删除成功删除成功!')
            break
    else:
        # 如果整个循环遍历后都没有找到对应的学号,说明学号不存在就直接提示即可
        print('您输入的学号不存在,请重新操作')
    # 将列表中的信息覆盖写入到学生信息文件中
    with open('./student_info.txt', 'w') as f:
        # 将删除信息之后的学生列表一行行写入文件
        f.writelines(stu_list)


# 5.查看单个学生信息
def search_one():
    # 获取要查找的学生的学号
    search_id = input('请您输入要查找的学生编号:')
    # 遍历列表,判断如果学号存在打印对应的学生信息,如果不存在就提示您输入的学号不存在,请重新操作
    # 从文件中读取学生信息
    with open(file='./student_info.txt', mode='r') as f:
        stu_list = f.readlines()
    for stu_str in stu_list:
        # 将学生信息字符串转换为字典
        stu_dict = json.loads(stu_str)
        # 判断
        if stu_dict['id'] == search_id:
            # 如果学号存在打印对应的学生信息
            print(f"学号:{stu_dict['id']},姓名:{stu_dict['name']},电话:{stu_dict['tel']}")
            # 打印后跳出循环
            break
    else:
        # 如果整个循环遍历后都没有找到对应的学号,说明学号不存在就直接提示即可
        print('您输入的学号不存在,请重新操作')


# 6.查看所有学生信息
def search_all():
    # 判断:如果列表中有学生信息就输出,没有就提示添加后再来查
    # 从文件中读取学生信息
    with open(file='./student_info.txt', mode='r') as f:
        stu_list = f.readlines()
    if len(stu_list) > 0:
        # 遍历列表,格式化输出信息
        for stu_str in stu_list:
            # 将学生信息字符串转换为字典
            stu_dict = json.loads(stu_str)
            # 格式化输出
            print(f"学号:{stu_dict['id']},姓名:{stu_dict['name']},电话:{stu_dict['tel']}")
    else:
        print('现在还没有学生信息哦,请添加后再来查看~')


# 7.更改学生信息
def update_stu():
    # 提示用户输入要更改的学生的编号
    update_id = input('请您输入要修改的学生的编号:')
    # 遍历列表
    # 从文件中读取学生信息
    with open(file='./student_info.txt', mode='r') as f:
        stu_list = f.readlines()
    for stu_str in stu_list:
        # 将学生信息字符串转换为字典
        stu_dict = json.loads(stu_str)
        # 如果学号存在就去更新
        if stu_dict['id'] == update_id:
            # 将学生信息列表中旧的信息删除
            stu_list.remove(stu_str)
            # 更新姓名和电话
            name = input('请您输入新的姓名:')
            tel = input('请您输入新的电话:')
            stu_dict['name'] = name
            stu_dict['tel'] = tel
            # 将新的学生信息字典转换为字符串添加到学生信息列表中
            # 注意:不要忘了换行符
            stu_list.append(json.dumps(stu_dict) + "\n")
            # 更新成功后,就跳出循环
            print(f'{stu_dict}信息更新成功!')
            break
    else:
        # 如果学号不存在提示不存在
        print('您输入的学号不存在,请重新操作')
    # 将列表中的信息覆盖写入到学生信息文件中
    with open('./student_info.txt', 'w', encoding='utf8') as f:
        # 将删除信息之后的学生列表一行行写入文件
        f.writelines(stu_list)


# 2.让用户选择他/她要进行的操作
while True:
    # 调用主界面
    print_info()
    # 2.1获取用户的选择
    choice = input('请您输入您的选择:')
    # 2.2判断并调用对应操作
    if choice == '1':
        # print('调用添加学生的函数')
        add_stu()
    elif choice == '2':
        # print('调用删除学生的函数')
        del_stu()
    elif choice == '3':
        # print('调用修改学生的函数')
        update_stu()
    elif choice == '4':
        # print('调用查询单个学生信息的函数')
        search_one()
    elif choice == '5':
        # print('调用查询所有学生信息的函数')
        search_all()
    elif choice == '6':
        print('谢谢惠顾,欢迎再次光临!')
        break
    else:
        print('您的选择有误,请参考提示给出准确的选择!!!')

标签:管理系统,信息,学生,stu,dict,编号,print
From: https://blog.csdn.net/qq_51504246/article/details/142546036

相关文章

  • Java基于SpringBoot的高校门诊管理系统+Vue[毕业设计]
    文末获取资源,收藏关注不迷路文章目录项目介绍技术介绍项目界面关键代码目录项目介绍相比于以前的传统手工管理方式,智能化的管理方式可以大幅降低高校门诊的运营人员成本,实现了高校门诊管理的标准化、制度化、程序化的管理,有效地防止了高校门诊管理的随意管理,提......
  • Java基于SpringBoot的高校洗浴管理系统+Vue[毕业设计]
    文末获取资源,收藏关注不迷路文章目录项目介绍技术介绍项目界面关键代码目录项目介绍高校洗浴管理系统采用B/S架构,数据库是MySQL。网站的搭建与开发采用了先进的java进行编写,使用了springboot框架。该系统从两个对象:由管理员和学生来对系统进行设计构建。主要功能......
  • 【毕设作品】SpringBoot公寓管理系统
    文章目录前言题目技术栈功能概述功能结构图实现页面截图系统测试系统测试目的系统功能测试系统测试结论文章参考我的优势代码参考数据库参考源码获取前言❤️博主简介:全网累计学员1000+,培训机构讲师、全栈开发工程师、知乎/小红书优秀作者、腾讯云/阿里云VIP客户、......
  • FrameWork后台管理系统源码
    一、源码描述网站后台管理系统,为练手项目,仅供大家学习。二、功能介绍菜单管理:根菜单和二级菜单管理。常用操作:网站初始化操作和修改登录密码。用户管理:用户管理。角色管理:角色管理和角色权限管理。其他操作:日志管理。数据库操作:查看数据库和备份数据库。三、说明1......
  • 基于SpringBoot+Vue的毕业生实习与就业管理系统设计与实现毕设(文档+源码)
            大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是一款基于SpringBoot+Vue的毕业生实习与就业管理系统,项目源码请点击文章末尾联系我哦~目前有各类成品毕设JavaWeb SSMSpringBoot等等项目框架,源码丰富,欢迎咨询。 一、项目介绍       ......
  • 基于SpringBoot+Vue的毕业设计成绩管理系统设计与实现毕设(文档+源码)
            大家好呀,我是一个混迹在java圈的码农。今天要和大家分享的是一款基于SpringBoot+Vue的毕业设计成绩管理系统,项目源码请点击文章末尾联系我哦~目前有各类成品毕设JavaWeb SSMSpringBoot等等项目框架,源码丰富,欢迎咨询。 一、项目介绍        传......
  • Java毕业设计:基于Springboot网球场地预约网站管理系统毕业设计源代码作品和开题报告怎
     博主介绍:黄菊华老师《Vue.js入门与商城开发实战》《微信小程序商城开发》图书作者,CSDN博客专家,在线教育专家,CSDN钻石讲师;专注大学生毕业设计教育和辅导。所有项目都配有从入门到精通的基础知识视频课程,学习后应对毕业设计答辩。项目配有对应开发文档、开题报告、任务书、P......
  • 基于SSM的学生学情预警系统的设计与实现
    系统描述随着信息互联网购物的飞速发展,一般有能力的机构管理系统。本文介绍了学生学情预警系统的开发全过程。通过分析企业对于学生学情预警系统的需求,创建了一个计算机管理学生学情预警系统的方案。文章介绍了学生学情预警系统的系统分析部分,包括可行性分析等,系统设计部分主......
  • springboot+vue智能小区物业管理系统【开题+程序+论文】
    系统程序文件列表开题报告内容研究背景随着城市化进程的加速,智能小区作为现代城市生活的重要组成部分,其管理水平直接关系到居民的生活质量和幸福感。传统物业管理方式面临着效率低下、信息孤岛、响应滞后等诸多问题,已难以满足居民日益增长的多元化、便捷化服务需求。因此,开......
  • 经典sql题(十三)炸裂对应学生的姓名和成绩
    explode和posexplode的区别explode:用于将数组中的每个元素展开为单独的行。结果中只包含元素的值,不包含其索引。如果输入数组有n个元素,结果将返回n行。posexplode:用于将数组中的每个元素展开为单独的行,同时提供每个元素的索引。结果包含两个列:一个是元素的索......