Python入门练习 - 学生管理系统

Python 实现读书管理系统

在这里插入图片描述

"""
实现一个命令行版的读书管理系统
"""
import os.path
import sys

# 使用这个全局变量,来管理所有的学生信息
# 这个列表的每个元素都是一个‘字典’,每 个 字典就分别表示了一个同学

students = []

def save():
    """
    用于存档,将内存保存到文件中
    :return:
    """
    # 在同一个目录中创建资源文件用于存档信息
    with open('./resource.txt', 'w', encoding='utf8') as file:
        for stu in students:
            file.write(f"{stu['studentId']}\t{stu['name']}\t{stu['gender']}\t{stu['className']}\n")

        print(f"[存档成功] 共储存了{len(students)}条记录!")

def load():
    """
    用于读档
    :return:
    """
    # 如果存档文件不存在,则直接跳过读档流程
    if not os.path.exists('./resource.txt'):
        return

    # 读档之前要把旧的数据清干净
    global students
    students = []
    with open('./resource.txt', 'r', encoding='utf8') as file:
        for line in file:
            line = line.strip()
            splitList = line.split('\t')

            if len(splitList) != 4:
                print(f'当前格式存在问题, line={line}')
                continue

            student = {
                'studentId': splitList[0],
                'name': splitList[1],
                'gender': splitList[2],
                'className': splitList[3]
            }

            students.append(student)
    print(f"[读档成功] 共读取了{len(students)} 条记录")


def menu():
    print('-----------------------------------------')
    print('       1.新增学生                         ')
    print('       2.显示学生                         ')
    print('       3.查找学生                         ')
    print('       4.删除学生                         ')
    print('       0.退出程序                         ')
    print('-----------------------------------------')
    choice = input(' 请输入您的选择:')
    return choice

def insert():
    print('[新增学生]开始!')
    studentId = int(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 display():
    print('[显示学生] 开始!')
    for stu in students:
        print(f"{stu['studentId']}\t{stu['name']}\t{stu['gender']}\t{stu['className']}")

    print(f'[显示学生] 完毕,共显示了{len(students)}条记录')

def find():
    # 根据学生姓名来查找
    print('[查找学生] 开始!')
    name = input('请输入要查找的学生姓名')
    count = 0

    global students
    for stu in students:
        if stu['name'] == name:
            print(f"{stu['studentId']}\t{stu['name']}\t{stu['gender']}\t{stu['className']}")
            count += 1

    print(f'[查找学生] 完毕, 共匹配到{count}条记录')

def delete():
    print('[删除学生] 开始')
    studentId = input('请输入要删除学生的学号:')

    global students
    for stu in students:
        if stu['studentId'] == studentId:
            print(f"删除{stu['name']} 同学的信息!")
            students.remove(stu)

    save()
    print('[删除学生] 结束')


def main():
    """
    入口函数
    :return:
    """
    print('--------------------------------------------')
    print('            欢迎来到学生管理系统'                )
    print('--------------------------------------------')

    load()

    while True:
        chioce = menu()

        if chioce == '1':
            insert()
        elif chioce == '2':
            display()
        elif chioce == '3':
            find()
        elif chioce == '4':
            delete()
        elif chioce == '0':
            print('goodbye!')
            sys.exit(0)
        else:
            print('输入有误,请重新输入')


main()

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

电脑访问网页获取路由器WAN口内网IP

因为运维过程中容易出现路由器配置了固定IP但是没人知道后台密码,不确定这个办公室的IP地址,且使用tracert路由追踪也只会出现路由器的LAN口网关并不会出现WAN口IP。 今日正好遇到了个好方法,经过测试可以正常使用。 方法如下: 内…

机器视觉矿山安全生产风险预警系统

一、简介 十四五规划和2035年远景目标纲要针对企业安全生产提出了多项要求。其中,提高安全生产水平要求完善和贯彻执行安全生产责任制,建立公共安全隐患排查和安全预防控制体系,要求将安全生产提升至预防和控制阶段。 目前,矿山…

0DAY漏洞是什么,如何进行有效的防护

零日漏洞,指的是软件或系统中未被公开的、未被厂商知晓的安全漏洞。这些漏洞未被修复,因此黑客可以利用它们进行攻击,而受害者往往无法防范。由于这些漏洞的存在时间很短,因此称之为“零日漏洞”,也称为“0day漏洞”。…

LeetCode:1319. 连通网络的操作次数(并查集 Java)

目录 1319. 连通网络的操作次数 题目描述: 实现代码与解析: 并查集 原理思路: 1319. 连通网络的操作次数 题目描述: 用以太网线缆将 n 台计算机连接成一个网络,计算机的编号从 0 到 n-1。线缆用 connections 表示…

【Bug-ModuleNotFoundError: No module named ‘models‘】

🚀 作者 :“码上有前” 🚀 文章简介 :Python 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 出现这个错误: 出现了ModuleNotFoundError: No module named models’的问题。 文件在Model…

春秋云境CVE-2023-27179

简介 GDidees CMS v3.9.1及更低版本被发现存在本地文件泄露漏洞,漏洞通过位于 /_admin/imgdownload.php 的 filename 参数进行利用。 正文 进入靶场发现没有什么可以利用的地方,那么就按照靶场提示来,直接访问/_admin/imgdownload.php 打开…

SQLite数据库浏览器sqlite-web

什么是 sqlite-web ? sqlite-web是一个用 Python 编写的基于 Web 的 SQLite 数据库浏览器。 软件特点: 可与您现有的 SQLite 数据库配合使用,也可用于创建新数据库。添加或删除: 表格列(支持旧版本的 SQLite&#xff…

网络链路层之(1)基础概念

网络链路层之(1)基础概念 Author: Once Day Date: 2024年3月27日 一位热衷于Linux学习和开发的菜鸟,试图谱写一场冒险之旅,也许终点只是一场白日梦… 漫漫长路,有人对你微笑过嘛… 全系列文章可参考专栏: 通信网络技术_Once-Day的博客-CSD…

Spring(详细介绍)

目录 一、简介 1、什么是Spring? 2、Spring框架的核心特性 3、优点 二、IOC容器 介绍 1、获取资源的传统方式 2、控制反转方式获取资源 3、DI 4、IOC容器在Spring中的实现 入门案例 1、创建Maven Module 2、引入依赖 3、创建HelloWorld类 4、在Spring的配…

EdgeGallery开发指南

API接口 简介 EdgeGallery支持第三方业务系统通过北向接口网关调用EdgeGallery的业务接口。调用流程如下图所示(融合前端edgegallery-fe包含融合前端界面以及北向接口网关功能,通过浏览器访问时打开的是融合前端的界面,通过IP:Port/urlPref…

Overcooked!(并查集区间元素合并优化)

本题链接:登录—专业IT笔试面试备考平台_牛客网登录—专业IT笔试面试备考平台_牛客网登录—专业IT笔试面试备考平台_牛客网 题目: 样例: 输入 5 5 1 1 2 3 1 2 2 2 4 3 1 4 3 2 5 输出 YES YES NO 思路: 根据题意,这…

KubeSphere简单介绍及安装使用

KubeSphere 概述 官网地址:https://kubesphere.io/zh/ 什么是 kubesphere KubeSphere 是一个开源的多云容器管理平台,旨在简化企业级 k8s 集群的部署、管理和运维。它提供了一个可视化的管理界面,帮助用户更轻松地管理和监控 k8s 集群&…

『Apisix进阶篇』动态负载均衡:APISIX的实战演练与策略应用

🚀『Apisix系列文章』探索新一代微服务体系下的API管理新范式与最佳实践 【点击此跳转】 📣读完这篇文章里你能收获到 🎯 掌握APISIX中多种负载均衡策略的原理及其适用场景。📈 学习如何通过APISIX的Admin API和Dashboard进行负…

设计模式——行为型——策略模式Strategy

Q:策略模式的特点 A: 具体算法从具体的业务方法中独立出来策略模式是同行为的不同实现 Q:什么时候使用策略模式 A:多个if-else使用策略模式 收费对象类 public class CashContext {private CashStrategy cashStrategy;public…

备考ICA----Istio实验10---为单个主机配置TLS Istio Ingress Gateway实验

备考ICA----Istio实验10—为单个主机配置 TLS Istio Ingress Gateway实验 1. 环境准备 部署httpbin kubectl apply -f istio/samples/httpbin/httpbin.yaml 2. 证书生成 2.1 生成根证书 生成根证书keyfile和crt文件 mkdir example_certs_root openssl req -x509 -sha256 …

Code Review 最佳实践

成功的同行评审策略要求严格记录的流程与非威胁性、协作性环境之间保持平衡。高度规范的同行评审可能会抑制生产力,然而,过于随意的流程往往效果不佳。经理们需要找到一种折中方案,使同行评审既高效又有效,同时促进团队成员之间的…

特斯拉铺路 小米SU7稳了

文 | AUTO芯球 作者 | 李逵 我把特斯拉的销售拉黑了 拉完又后悔了 因为我欠他一个人情啊 具体怎么回事 看完你就会明白了 今天一大早 特斯拉的销售就发信息给我 说从4月1号开始 特斯拉就要涨价了 我以前去看的Model Y 要提价5000块 而且之前的补贴 什么保险补贴、…

Tunes不能读取iPhone的内容,请前往iPhone偏好设置的摘要选项卡,然后单击恢复以将此iPhone恢复为出厂设置

重启itunes: 参考链接: https://baijiahao.baidu.com/s?id1642568736254330322&wfrspider&forpc 人工智能学习网站: https://chat.xutongbao.top

「媒体宣传」媒体邀约几种常见方法!-51媒体

传媒如春雨,润物细无声,大家好,我是51媒体网胡老师。 媒体邀约的常见方法确实包括电话邀约、邮件邀约、社交媒体邀约以及通过媒体公关公司代邀约等。 电话邀约:这是一种直接且高效的方式,可以通过电话与媒体记者沟通&…

FANUC机器人KAREL语言程序结构(入门)

一、karel语言程序结构 FANUC机器人keral语言编程结构如下图所示: Keral指令对应的基础用法如下所示: 二、创建一个简单的写屏程序 依照对应的karel语法写写入下列程序 运行对应的程序进行测试: