Python——学生管理系统

news2024/12/24 3:39:22

实现学生系统的增,删,查,打印所有学生功能,分别介绍使用列表存储和使用文件存储的代码

使用列表存储

import sys
students = []


def menu():
    print("1. 新增学生")
    print("2. 显示学生")
    print("3. 查找学生")
    print("4. 删除学生")
    print("0. 退出程序")
    choice = input("请输入您的操作>:")
    return int(choice)


def insert():
    print("开始新增学生!")
    name = input("请输入要增加学生的姓名>:")
    id = input("请输入要增加学生的学号>:")
    sex = input("请输入要增加学生的性别>: 男/女")

    if sex not in("男", "女"):
        print("输入的性别有错!")
        return
    classroom = input("请输入学生所在的班级>:")
    student = {
        "name": name,
        "id": id,
        "sex": sex,
        "classroom": classroom
    }
    global students
    students.append(student)


def show():
    for student in students:
        print(f"学生姓名:{student['name']} 学号:{student['id']} 性别:{student['sex']} 班级:{student['classroom']}")


def search():
    choice = int(input("请输入按姓名查找(1)/ 按学号查找(2)>: 1/2"))
    if choice == 1:
        name = input("请输入要查找的学生的姓名>:")
        for student in students:
            if student['name'] == name:
                print("找到了!")
                print(
                    f"学生姓名:{student['name']} 学号:{student['id']} 性别:{student['sex']} 班级:{student['classroom']}")
                return
            print("没找到")
            return
    else:
        id = input("请输入要查找的学生的学号>:")
        for student in students:
            if student['id'] == id:
                print("找到了!")
                print(
                    f"学生姓名:{student['name']} 学号:{student['id']} 性别:{student['sex']} 班级:{student['classroom']}")
                return
            print("没找到")
            return


def delete():
    choice = int(input("请输入按姓名删除(1)/ 按学号删除(2)>: 1/2"))
    if choice == 1:
        name = input("请输入要删除的学生的姓名>:")
        for student in students:
            if student['name'] == name:
                print("找到了!")
                print(
                    f"学生姓名:{student['name']} 学号:{student['id']} 性别:{student['sex']} 班级:{student['classroom']}")
                choice2 = int(input("确认删除请按1,否则按0>:"))
                if choice2 == 1:
                    students.remove(student)
                    return
            print("没找到")
            return
    else:
        id = input("请输入要删除的学生的学号>:")
        for student in students:
            if student['name'] == id:
                print("找到了!")
                print(
                    f"学生姓名:{student['name']} 学号:{student['id']} 性别:{student['sex']} 班级:{student['classroom']}")
                choice2 = int(input("确认删除请按1,否则按0>:"))
                if choice2 == 1:
                    students.remove(student)
                    return
            print("没找到")
            return


def main():
    print("---------------------------------")
    print("-----------学生管理系统------------")
    print("----student management system----")
    print("---------------------------------")

    while True:
        choice = menu()
        if choice == 1:
            insert()
        elif choice == 2:
            show()
        elif choice == 3:
            search()
        elif choice == 4:
            delete()
        elif choice == 0:
            print("退出程序!")
            sys.exit(0)
        else:
            print("输入错误,请输入0-4的数字!")


main()

使用文件存储

import os.path
import sys
students = []


def menu():
    print("1. 新增学生")
    print("2. 显示学生")
    print("3. 查找学生")
    print("4. 删除学生")
    print("0. 退出程序")
    choice = input("请输入您的操作>:")
    return int(choice)


def save():
    with open('students.txt', 'w', encoding='utf8') as f:
        for student in students:
            f.write(f"{student['name']}\t{student['id']}\t{student['sex']}\t{student['classroom']}\n")
        print(f"存档成功! 共存储了{len(student)}条数据")


def load():
    if not os.path.exists("students.txt"):
        return
    global students
    students = []
    with open("students.txt", "r", encoding="utf8") as f:
        for line in f:
            line = line.strip() # 去除字符串开头和末尾的空白符
            tokens = line.split("\t")
            if len(tokens) != 4:
                print(f"第{line}行数据出现格式错误!")
                continue
            student = {
                'id': tokens[0],
                'name': tokens[1],
                'sex': tokens[2],
                'classroom': tokens[3]
            }
            students.append(student)


def insert():
    print("开始新增学生!")
    name = input("请输入要增加学生的姓名>:")
    id = input("请输入要增加学生的学号>:")
    sex = input("请输入要增加学生的性别>: 男/女")

    if sex not in("男", "女"):
        print("输入的性别有错!")
        return
    classroom = input("请输入学生所在的班级>:")
    student = {
        "name": name,
        "id": id,
        "sex": sex,
        "classroom": classroom
    }
    global students
    students.append(student)
    save()


def show():
    for student in students:
        print(f"学生姓名:{student['name']} 学号:{student['id']} 性别:{student['sex']} 班级:{student['classroom']}")


def search():
    choice = int(input("请输入按姓名查找(1)/ 按学号查找(2)>: 1/2"))
    if choice == 1:
        name = input("请输入要查找的学生的姓名>:")
        for student in students:
            if student['name'] == name:
                print("找到了!")
                print(
                    f"学生姓名:{student['name']} 学号:{student['id']} 性别:{student['sex']} 班级:{student['classroom']}")
                return
            print("没找到")
            return
    else:
        id = input("请输入要查找的学生的学号>:")
        for student in students:
            if student['id'] == id:
                print("找到了!")
                print(
                    f"学生姓名:{student['name']} 学号:{student['id']} 性别:{student['sex']} 班级:{student['classroom']}")
                return
            print("没找到")
            return


def delete():
    choice = int(input("请输入按姓名删除(1)/ 按学号删除(2)>: 1/2"))
    if choice == 1:
        name = input("请输入要删除的学生的姓名>:")
        for student in students:
            if student['name'] == name:
                print("找到了!")
                print(
                    f"学生姓名:{student['name']} 学号:{student['id']} 性别:{student['sex']} 班级:{student['classroom']}")
                choice2 = int(input("确认删除请按1,否则按0>:"))
                if choice2 == 1:
                    students.remove(student)
                    save()
                    return
            print("没找到")
            return
    else:
        id = input("请输入要删除的学生的学号>:")
        for student in students:
            if student['name'] == id:
                print("找到了!")
                print(
                    f"学生姓名:{student['name']} 学号:{student['id']} 性别:{student['sex']} 班级:{student['classroom']}")
                choice2 = int(input("确认删除请按1,否则按0>:"))
                if choice2 == 1:
                    students.remove(student)
                    save()
                    return
            print("没找到")
            return


def main():
    load()
    print("---------------------------------")
    print("-----------学生管理系统------------")
    print("----student management system----")
    print("---------------------------------")

    while True:
        choice = menu()
        if choice == 1:
            insert()
        elif choice == 2:
            show()
        elif choice == 3:
            search()
        elif choice == 4:
            delete()
        elif choice == 0:
            print("退出程序!")
            sys.exit(0)
        else:
            print("输入错误,请输入0-4的数字!")


main()

可以看到,这时我们的程序中就有了students.txt
在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/78279.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【OpenCV学习】第10课:形态学操作的应用-图像去掉干扰线丶干扰点

仅自学做笔记用,后续有错误会更改 理论 去干扰线干扰点的操作方法, 大体上与第9课所说的提取水平/垂直线一致, 只是把核改为矩形, 不要线型就行,反正都是通过开操作来实行的。 操作流程: 输入图像(一般是…

python数据分析:湖南省第七次人口普查可视化

前言 嗨喽~大家好呀,这里是魔王呐 ❤ ~ 今天案例难度指数: ☆☆☆ 准备 环境使用: Anaconda (python3.9) –> 识别我们写的代码 开发工具: jupyter notebook –> 代码编辑功能敲代码的工具 相关模块: pandas pyechart…

[附源码]计算机毕业设计基于Web的绿色环保网站Springboot程序

项目运行 环境配置: Jdk1.8 Tomcat7.0 Mysql HBuilderX(Webstorm也行) Eclispe(IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持)。 项目技术: SSM mybatis Maven Vue 等等组成,B/S模式 M…

c# .net iot树莓派/香橙派用到物联网包Iot.Device.bindings 支持设备说明文档

c# .net iot树莓派(进口,贵)/香橙派(国产,功能相同,性价比高)用到物联网包Iot.Device.bindings 支持设备说明文档 我们c# .net iot开发树莓派/香橙派都需要用到Iot.Device.bindings、System.De…

RNA-seq 详细教程:假设检验和多重检验(8)

学习目标 了解模型拟合的过程比较两种假设检验方法(Wald test vs. LRT)了解多重测试校正的重要性了解用于多重测试校正的不同方法1. 模型拟合和假设检验 DESeq2 工作流程的最后一步是对每个基因进行计数并将其拟合到模型中并测试差异表达。 Hypothesis t…

osgEarth各个示例分析目录

概述 由于数字地球项目需要osgEarth的代码知识,故决定学习osgEarth的示例,示例中有很多可以借鉴的内容。以下是分析目录,完全是随机进行的,并没有什么上下文逻辑。 每一篇代码边学习边分析,如果有错误,请…

【Java面试】说说JVM的内存结构以及他们那些会产生内存溢出?

文章目录内存结构内存溢出的产生内存结构 对于JVM的内存结构,我将按照上面两张图配合来讲。 Java Source就是我们的Java源代码,经过JVM编译器编译之后变为Java Class也称Java字节码文件。当我们运行java命令对字节码文件进行运行的时候,将会…

深度学习-三维卷积神经网络(3DCNN)

1. 3DCNN理解 2D卷积仅仅考虑2D图片的空间信息,所以只适用于单张2D图片的视觉理解任务。在处理3D图像或视频时,网络的输入多了一个维度,输入由(c,height,width)(c,height,width)(c,height,width)变为了(c,depth,height,width)(c,depth,height…

计算机毕业设计django基于python学生考试成绩数据分析与可视化系统

项目介绍 随着社会的逐步发展,计算机网络技术对人们工作、生活影响是全面且深入的。基于计算机网络的管理系统越来越受到人们的欢迎,人们可以通过基于网络的管理系统进行实时数据信息查询、管理数据信息等,给人们的生活、工作带来便利。 在学校的日常管理工作中,学生成绩的统计…

【Python计算机视觉】项目实战之图像增强imguag对关键点变换、标注框变化(附源码 超详细必看)

需要源码或运行有问题请点赞关注收藏后评论区留言私信~~~ 一、imgaug简介 imguag使一个用于机器学习实验中图像增强的Python依赖库,支持Python2.7和Python3.4以上的版本,它支持多种图像增强技术,并允许轻松地组合这些技术,具有简…

uniapp中如何使用vuex进行状态管理(登录小案例讲解)

前言 本篇文章来讲解uniapp中如何使用vuex来实现状态管理,后面会讲实现登录状态管理的案例。如果之前学过vuex全家桶的同学那应该没啥问题,在uniapp中使用vuex和vue中基本是一样的。 什么是vuex 简单来说就是vue中的状态管理仓库,对于vuex…

从文件包含到RCE方法

前言 大家在参加众测的行动时,若是发现了以下基础危害不大的漏洞,不建议直接提交的,而是应该想办法看,能不能对该漏洞进行升级,扩大其危害,多拿点奖励。当然,文件包含不算常见,经常…

车床零件加工调度问题

目录 题目 思路 代码 运行结果 题目 某车间需要用一台车床和一台加工A,B,C,D4个零件。每个零件都需要先用车床加工,再用加工。车床和加工每个零件所需的工时(包括加工前的准备时间以及加工后的处理时间)如下表所示。…

移动端APP测试常见面试题精析

现在面试测试职位,要求非常全面,那么APP测试一般需要哪些技术呢?下面总结了APP测试常见面试题: 1.Android四大组件? Activity:描述UI,并且处理用户与机器屏幕的交互。应用程序中,一个Activity就相当于手…

c++ 基础(新手入门必看)

C基础讲解,用于C语言向C的衔接 文章目录命名空间C输入输出缺省参数函数重载引用内联函数auto关键字基于范围for循环指针空值 -- nullptr命名空间 如果你以前看到过C的程序,那么你大概率会看到这样一行代码 这行代码就用到了命名空间的知识,…

QT 系统学习 day06 ,摄像头,语音识别(语音转文字,文字转语音,Qt 的人脸识别系统),

1.调用摄像头&#xff0c;拍照&#xff0c;存储照片 1.摄像头文件 /******* 摄像头相关类 *****/ #include <QCamera> /*** 摄像头类 ***/ #include <QCameraInfo> /*** 系统摄像头属性类 ***/ #include <QCameraImageCapture> /*** 用于记录摄像头数据的类…

C语言入门(一)——程序的基本概念

程序的基本概念 程序和编程语言 自然语言和形式语言 程序的调试 第一个程序 程序的基本概念 程序和编程语言 1.程序 程序&#xff08;Program&#xff09;告诉计算机应如何完成一个计算任务&#xff0c;这里的计算可以是数学运算&#xff0c;比如解方 程&#xff0c;也可…

Centos7下安装PostgreSQL14及其基本命令使用

MySQL关系型数据库目前算是互联网公司使用最多的。前两天看到一个推文&#xff0c;相对比国内使用MySQL&#xff0c;PostgreSQL在国内的普及貌似不高&#xff1f;国外像网络电话公司Skype公司等在大量使用PostgreSQL 作为互联网从业者&#xff0c;保持学习是必须的。开始学习Po…

小甲鱼C语言【课后笔记第一章——打印(printf)

目录 1、“打印”就是“输出”的意思 2、使用 GCC 编译程序&#xff1a;gcc 源代码 -o 可执行文件。 3、printf 是格式化输出函数 a、函数概要 b、函数原型 c、参数分析 d、返回值 e、演示 4. 转义字符 5. 反斜杠的奥义 6、课后习题&#xff08;编程题&#xff09; 1、…

性能工具之JMeter模拟多IP地址访问

文章目录一、前言二、前置条件三、操作步骤一、前言 今天一同事在压测时提到怎么用 JMeter 里虚拟多个 IP 来发送请求&#xff0c;我想了一下以前用LR时用过虚拟ip地址&#xff0c;JMeter 还没有使用过。想着原理应该是相通的&#xff0c;既然 LR 都能支持的话&#xff0c;那 …