python使用面向对象实现学生信息增删改查

news2024/9/9 6:09:40
编写学生管理系统,实现增删改查
输入数字1,添加学生信息(编号, 名字,年纪,性别)
第一个学生id为101 后续学生自动加1
输入数字2,查看所有学生信息
输入数字3,查看指定学生信息
输入学生id,显示对应学生信息
输入数字4,修改学生信息
输入学生id,输入学生新名字,新年纪,新性别
输入数字5,删除指定学生
输入学生id,删除指定学生
输入数字0,退出系统
class Student:
    def __init__(self, sid, name, age, sex):
        self.sid = sid
        self.name = name
        self.age = age
        self.sex = sex

    def __str__(self):
        return f"id:{self.sid},name:{self.name},age:{self.age},sex:{self.sex}"


class StudentManage:
    def __init__(self):
        self.students = []

    def save_data(self):
        with open("学生管理系统.txt", 'wb') as f:
            pickle.dump(self.students, f)

    def load_data(self):
        try:
            with open("学生管理系统.txt", 'rb') as f:
                self.students = pickle.load(f)
        except FileNotFoundError:
            self.students = []

    def add_student_name(self):
        while True:
            name = input("请输入姓名")
            if 2 <= len(name) <= 4:
                return name
            else:
                print(f"输入不合法")

    def add_student_age(self):
        while True:
            age = int(input("请输入年龄"))
            if 2 <= age <= 80:
                return age
            else:
                print(f"输入不合法")

    def add_student_sex(self):
        while True:
            sex = input("请输入性别")
            if sex in ["男", "女"]:
                return sex
            else:
                print(f"输入不合法")

    def continue_quit(self):
        option2 = input("继续(Y)退出(N)")
        if option2 == "Y" or option2 == "y":
            return option2
        if option2 == "n" or option2 == "N":
            return option2

    def add_student(self):
        while True:
            sid = 101 if not self.students else self.students[-1].sid + 1
            name = self.add_student_name()
            age = self.add_student_age()
            sex = self.add_student_sex()
            s = Student(sid, name, age, sex)
            self.students.append(s)
            print(f"添加成功,现在共有学生{len(self.students)}人")
            self.save_data()
            option2 = self.continue_quit()
            if option2 == "Y" or option2 == "y":
                pass
            else:
                break

    def show_all_student(self):
        if self.students:
            for s in self.students:
                print(s)
        else:
            print(f"还未添加学生")

    def show_student(self):
        while True:
            if self.students:
                uid = int(input("请输入要查看的学生的id"))
                for s in self.students:
                    if s.sid == uid:
                        print(s)
                    else:
                        print(f"没有找到id为{uid}的学生")
                option2 = self.continue_quit()
                if option2 == "Y" or option2 == "y":
                    pass
                else:
                    break
            else:
                print(f"还未添加学生")

    def update_student(self):
        while True:
            if self.students:
                uid = int(input("请输入要修改的学生的id"))
                for s in self.students:
                    if s.sid == uid:
                        s.name = self.add_student_name()
                        s.age = self.add_student_age()
                        s.sex = self.add_student_sex()
                        print(f"修改成功")
                        break
                else:
                    print(f"没找到id为:{uid}的学生")
                option2 = self.continue_quit()
                if option2 == "Y" or option2 == "y":
                    pass
                else:
                    break
            else:
                print(f"还未添加学生")

    def remove_student(self):
        while True:
            if self.students:
                uid = int(input("请输入要删除的学生的id"))
                for s in self.students:
                    if s.sid == uid:
                        self.students.remove(s)
                        print(f"删除成功")
                        break
                else:
                    print(f"没找到id为:{uid}的学生")
                option2 = self.continue_quit()
                if option2 == "Y" or option2 == "y":
                    pass
                else:
                    break
            else:
                print(f"还未添加学生")


class SystemManage(StudentManage):

    def main_menu(self):
        menu = """输入数字1,添加学生信息(编号, 名字,年纪,性别)
第一个学生id为101 后续学生自动加1
输入数字2,查看所有学生信息
输入数字3,查看指定学生信息
输入学生id,显示对应学生信息
输入数字4,修改学生信息
输入学生id,输入学生新名字,新年纪,新性别
输入数字5,删除指定学生
输入学生id,删除指定学生
输入数字0,退出系统"""
        print(menu)

    def main_option(self):
        self.load_data()
        while True:
            self.main_menu()
            option = input("请输入选项")
            if option not in [str(i) for i in range(0, 6)]:
                print(f"输入不合法")
            elif option == "1":
                self.add_student()
            elif option == "2":
                self.show_all_student()
            elif option == "3":
                self.show_student()
            elif option == "4":
                self.update_student()
            elif option == "5":
                self.remove_student()
            elif option == "0":
                self.save_data()
                print(f"退出系统成功")
                break


s = SystemManage()
s.main_option()

 

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

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

相关文章

最短路(dijkstra迪杰斯特拉)

最短路径问题在图论中是一个经典的问题&#xff0c;目的是找到从一个起始顶点到其他所有顶点的最短路径。Dijkstra算法是解决非负权图最短路径问题的常用算法。下面是一个使用Dijkstra算法解决最短路径问题的Java程序例子。 动画描述(从0节点开始更新) 问题描述 假设有一个图…

【机器学习西瓜书学习笔记——模型评估与选择】

机器学习西瓜书学习笔记【第二章】 第二章 模型评估与选择2.1训练误差和测试误差错误率误差 欠拟合和过拟合2.2评估方法留出法交叉验证法自助法 2.3性能度量查准率、查全率与F1查准率查全率F1 P-R曲线ROC与AUCROCAUC 代价敏感错误率与代价曲线代价曲线 2.4比较检验假设检验&…

VSCode+Vue3无法找到模块“../components/xxxxx.vue”的声明文件的错误

莫名奇妙的错误 今天用Vue3写个demo&#xff0c;在components下面新建了一个DeviceList.Vue的文件&#xff0c;在HomeView引用它后居然报错&#xff0c;提示&#xff1a;无法找到模块“…/components/DeviceList.vue”的声明文件&#xff0c;真是离了个大谱&#xff0c;文件明…

【Redis】 拓展:Redis - BigKey方案探讨

BigKey: 用户越多&#xff0c;redis数据越多&#xff0c;bigkey会使得缓存数据更大&#xff0c;网络带宽会被占用&#xff0c;执行效率就低下&#xff0c;高并发的时候吞吐量QPS也会下降。 产生原因&#xff1a; 看如下list&#xff1a; 一个key的内容太大&#xff0c;比如1M&…

VR舒适度术语表与检查表:为MR和空间计算应用创业者准备

随着混合现实&#xff08;MR&#xff09;和空间计算应用的发展&#xff0c;确保用户在虚拟环境中的舒适度变得尤为重要。本文将介绍一套专门针对VR舒适度的术语表&#xff0c;并提供两个知名VR游戏作为示例&#xff0c;来展示如何应用这些术语。这些术语和示例可以帮助开发者更…

基于Hadoop的服装电商数据分析系统【Hdfs、flume、HIve、sqoop、MySQL、echarts】

文章目录 有需要本项目的代码或文档以及全部资源&#xff0c;或者部署调试可以私信博主项目介绍总体研究方向数据集介绍配置flume文件HIve建表HIveSQL大数据分析MySQL建表Sqoop命令导出数据到MySQL数据可视化店铺销售情况.......等 总结每文一语 有需要本项目的代码或文档以及全…

【面向就业的Linux基础】从入门到熟练,探索Linux的秘密(十四)-租云服务器及配环境、docker基本命令

主要介绍了租云服务器和docker配置、基本命令&#xff01;&#xff01;&#xff01; 文章目录 前言 一、云平台 二、租云服务器及安装docker 1.阿里云 2.安装docker 三、docker命令 将当前用户添加到docker用户组 镜像&#xff08;images&#xff09; 容器(container) 四、实战…

Vue3-18 组件基础

组件的定义 我们在项目的src/components种定义组件&#xff0c;vue提供了几种简单的组件的定义方式 在单文件种定义组件 <script setup> import { ref } from vue const count ref(0) </script> <template><div>第一种<button click"count…

系统测试:验证系统整体行为的关键环节

目录 前言1. 系统测试的概念2. 系统测试的主要作用2.1 验证需求实现2.2 发现集成问题2.3 提高系统质量2.4 评估系统性能 3. 系统测试在整个测试过程中的地位3.1 单元测试3.2 集成测试3.3 系统测试3.4 验收测试 4. 常用的系统测试工具4.1 Selenium4.2 JMeter4.3 LoadRunner4.4 T…

高等数学 第七讲 一元函数积分学的概念和性质_不定积分_定积分_变限积分_反常积分

1.不定积分 文章目录 1.不定积分1.1 原函数1.1.1 原函数与不定积分的定义1.1.2 原函数存在定理 2.定积分2.1 定积分的定义2.2 定积分的精确定义2.3 定积分的几何意义2.4 定积分的存在定理2.5 定积分的性质 3.变限积分3.1 变限积分的定理3.2 变限积分的性质 4.反常积分(待更新) …

springboot集团门户网站--论文源码调试讲解

第2章 开发环境与技术 开发集团门户网站需要搭建编程的环境&#xff0c;也需要通过调查&#xff0c;对各个相关技术进行分析&#xff0c;选取适合本系统开发的技术与工具。 2.1 MySQL数据库 MySQL是一种具有安全系数、安全系数、混合开发性、高效化等特征的轻量关联数据库智…

2024.07纪念一 debezium : spring-boot结合debezium

使用前提&#xff1a; 一、mysql开启了logibin 在mysql的安装路径下的my.ini中 【mysqlid】下 添加 log-binmysql-bin # 开启 binlog binlog-formatROW # 选择 ROW 模式 server_id1 # 配置 MySQL replaction 需要定义&#xff0c;不要和 canal 的 slaveId 重复 参考gitee的项目…

mysql超大分页问题处理~

大家好&#xff0c;我是程序媛雪儿&#xff0c;今天咱们聊mysql超大分页问题处理。 超大分页问题是什么&#xff1f; 数据量很大的时候&#xff0c;在查询中&#xff0c;越靠后&#xff0c;分页查询效率越低 例如 select * from tb_sku limit 0,10; select * from tb_sku lim…

专治408开始的晚!8月一定要完成这些事!

八月份才开始408&#xff0c;那到考试最多也只有4-5个月的时间 别担心&#xff0c;可以复习两轮&#xff01; 其实我一直建议大家408复习三轮&#xff0c;但是如果时间不够&#xff0c;那就要在复习质量上下功夫&#xff01; 考408有一个好处&#xff0c;就是不用先确定学校…

【错误总结】Ubuntu系统中执行 sudo apt-get update报错

Ubuntu系统中执行 sudo apt-get update报错 命令行描述升级sudo报错并解决错误描述错误解决原因1&#xff1a;系统网络问题 原因2&#xff1a;设置清华源后/etc/apt/sources.list不匹配原因3&#xff1a;ubuntu自带的源/etc/apt/sources.list有问题 apt-get update成功log参考 …

【Story】《程序员面试的“八股文”辩论:技术基础与实际能力的博弈》

目录 程序员面试中的“八股文”&#xff1a;助力还是阻力&#xff1f;1. “八股文”的背景与定义1.1 “八股文”的起源1.2 “八股文”的常见类型 2. “八股文”的作用分析2.1 理论基础的评价2.1.1 助力2.1.2 阻力 3. 实际工作能力的考察3.1 助力3.2 阻力 4. 面试中的背题能力4.…

利用代理IP助力社媒营销的指南来了!

文章目录 前言一、有效数据收集二、建立流量矩阵三、精准定制内容选择正确的代理类型定时监测和更新代理IP遵守平台政策 总结 前言 在当今数字化时代&#xff0c;社交媒体营销已成为企业推广品牌、增强用户互动不可或缺的一环。从本质上看&#xff0c;社媒营销是公共关系和客户…

借助 NGINX 对本地的 Kubernetes 服务进行自动化的 TCP 负载均衡

原文作者&#xff1a;Chris Akker - F5 技术解决方案架构师&#xff0c;Steve Wagner - F5 NGINX 解决方案架构师 原文链接&#xff1a;借助 NGINX 对本地的 Kubernetes 服务进行自动化的 TCP 负载均衡 转载来源&#xff1a;NGINX 中文官网 NGINX 唯一中文官方社区 &#xff0c…

Windows11安装MongoDB7.0.12详细教程

下载 地址&#xff1a;https://www.mongodb.com/try/download/community 我使用的是迅雷下载&#xff1a; 安装 选择自定义安装&#xff1a; 选择安装目录&#xff1a; 开始安装&#xff1a; 这个玩意会卡比较长的时间&#xff1a; 最后这一步如果没有科学上网&#…

虾皮笔试0620-选择题

虚拟存储的基础是程序局部性理论&#xff0c;它的基本含义是程序执行时对内存访问的不均匀性。这一理论具体体现在两个方面&#xff1a; 时间局部性&#xff1a;时间局部性是指如果程序中的某个数据项被访问&#xff0c;那么在不久的将来它可能再次被访问。这通常是因为程序存在…