丁小喜の兵器谱(学生管理系统)
我的第一个独立看需求完成项目,虽然很简单(笑)
建立一个可以增加,修改,删除,展示学生信息的系统
首先是一个界面,让你决定进行哪个操作
1.2.3.4.5分别对应不同的操作,switch与这一操作完美契合,在switch语句里调用对应操作的函数
Scanner sc = new Scanner(System.in);String choose = sc.next();switch (choose){case "1": addStudent(list);break;case "2": deleteStudent(list);break;case "3": change(list);break;case "4": look(list);break;case "5": System.out.println("退出成功");break quit;default:System.out.println("你输入的什么玩意");}
接着考虑用什么盛装对应的学生信息,如果用数组的话不确定有多少个学生信息,所以集合ArrayList是最好的选择。
ArrayList<student> list = new ArrayList<>();
然后就是界面了很简单,想做成什么样式的就做成什么什么样式的,我就做成了百晓生,啊不,丁小喜的兵器谱(笑)
System.out.println("------------这里是丁小喜の兵器谱---------------");System.out.println("1:新晋高手");System.out.println("2:高手除名");System.out.println("3:替换高手");System.out.println("4:展示兵器谱");System.out.println("5:退出");System.out.println("请做出你的选择吧!");
再就是不能只进行一次操作吧?所以加上while true循环。那怎么退出呢?自然是用break跳出指定循环的办法了呀。所以最好main函数是长这样的:
public static void main(String[] args) {ArrayList<student> list = new ArrayList<>();quit:while(true){System.out.println("------------这里是丁小喜の兵器谱---------------");System.out.println("1:新晋高手");System.out.println("2:高手除名");System.out.println("3:替换高手");System.out.println("4:展示兵器谱");System.out.println("5:退出");System.out.println("请做出你的选择吧!");Scanner sc = new Scanner(System.in);String choose = sc.next();switch (choose){case "1": addStudent(list);break;case "2": deleteStudent(list);break;case "3": change(list);break;case "4": look(list);break;case "5": System.out.println("退出成功");break quit;default:System.out.println("你输入的什么玩意");}}}
然后是操作的写法
3展示学生编号:
当集合里没有对象时,直接返回,没有学生信息还展示个锤子
public static void look(ArrayList<student> list){if(list.size()==0) {System.out.println("还有没有高手你心里没有点ac数?");return;}System.out.println("绰号"+'\t'+'\t'+"姓名"+'\t'+'\t'+"年龄"+'\t'+'\t'+"籍贯");for (int i = 0; i < list.size(); i++) {System.out.printf(list.get(i).getId()+"\t\t");System.out.printf(list.get(i).getName()+"\t\t");System.out.printf(list.get(i).getAge()+"\t\t");System.out.printf(list.get(i).getPlace()+"\t\t");System.out.println("");}}
1添加学生对象:
进来首先判断输入的id是否之前有过,就像武林高手不能有同一个绰号,如果之前有过就让他从新添加,判断是否相同就用list.get(i).getId().equals(id)就行了。首先list.get(i)获取编号为i的student对象。list.get(i).getId()获取该对象的id值再.equals(id)就比较了两个id是否相同。
不同就创建一个新的对象。
public static void addStudent(ArrayList<student> list){Scanner sc = new Scanner(System.in);String id = null;re:while (true) {System.out.println("请输入高手的绰号:");id = sc.next();for (int i = 0; i < list.size(); i++) {if (list.get(i).getId().equals(id)) {System.out.println("已经有高手起这个绰号了,给爷重新起");continue re;}}break;}System.out.println("请输入高手的姓名:");String name = sc.next();System.out.println("请输入高手的籍贯:");String place = sc.next();System.out.println("请输入高手的年龄:");int age = sc.nextInt();student a = new student(name,id,age,place);list.add(a);
}
2删除一个学生信息:
和之前一样先判断有没有学生信息。如果有直接list.remove(i)就完事了。
如果输错id怎么办呢?很简单,在for循环的过程中如果发现id相同,直接删除跑路了,那没跑路说明就没有你提供的id!!!
public static void deleteStudent(ArrayList<student> list){if(list.size()==0){System.out.println("一个高手也没,你除个锤子名");return;}System.out.println("请输入要除名的高手绰号:");Scanner sc = new Scanner(System.in);String id = sc.next();for (int i = 0; i < list.size(); i++) {if(list.get(i).getId().equals(id)) {list.remove(i);System.out.println("除名成功");return;}}System.out.println("你tm故意找茬是吧!!!");}
4修改学生编号:
和删除大差不差,简直就是删除和插入的拼接操作
public static void change(ArrayList<student> list){Scanner sc = new Scanner(System.in);if(list.size()==0){System.out.println("一个高手也没,你改个锤子名");return;}System.out.println("请输入要替换的高手绰号:");String id = sc.next();for (int i = 0; i < list.size(); i++) {if(list.get(i).getId().equals(id)) {System.out.println("请输入高手的新绰号:");id = sc.next();System.out.println("请输入高手的姓名:");String name = sc.next();System.out.println("请输入高手的籍贯:");String place = sc.next();System.out.println("请输入高手的年龄:");int age = sc.nextInt();student stu = new student(name,id,age,place);list.set(i,stu);System.out.println("替换成功");return;}}System.out.println("查无此人");}
最后别忘了写student的JavaBean类哦。
最后把相同代码段合并写成一个函数就可以了:
public class studentTest {public static void main(String[] args) {ArrayList<student> list = new ArrayList<>();quit:while(true){System.out.println("------------这里是丁小喜の兵器谱---------------");System.out.println("1:新晋高手");System.out.println("2:高手除名");System.out.println("3:替换高手");System.out.println("4:展示兵器谱");System.out.println("5:退出");System.out.println("请做出你的选择吧!");Scanner sc = new Scanner(System.in);String choose = sc.next();switch (choose){case "1": addStudent(list);break;case "2": deleteStudent(list);break;case "3": change(list);break;case "4": look(list);break;case "5": System.out.println("退出成功");break quit;default:System.out.println("你输入的什么玩意");}}}public static void addStudent(ArrayList<student> list){Scanner sc = new Scanner(System.in);String id = null;re:while (true) {System.out.println("请输入高手的绰号:");id = sc.next();for (int i = 0; i < list.size(); i++) {if (list.get(i).getId().equals(id)) {System.out.println("已经有高手起这个绰号了,给爷重新起");continue re;}}break;}list.add(gai(list,id));}public static void deleteStudent(ArrayList<student> list){if(list.size()==0){System.out.println("一个高手也没,你除个锤子名");return;}System.out.println("请输入要除名的高手绰号:");Scanner sc = new Scanner(System.in);String id = sc.next();for (int i = 0; i < list.size(); i++) {if(list.get(i).getId().equals(id)) {list.remove(i);System.out.println("除名成功");return;}}System.out.println("你tm故意找茬是吧!!!");}public static void look(ArrayList<student> list){if(list.size()==0) {System.out.println("还有没有高手你心里没有点ac数?");return;}System.out.println("绰号"+'\t'+'\t'+"姓名"+'\t'+'\t'+"年龄"+'\t'+'\t'+"籍贯");for (int i = 0; i < list.size(); i++) {System.out.printf(list.get(i).getId()+"\t\t");System.out.printf(list.get(i).getName()+"\t\t");System.out.printf(list.get(i).getAge()+"\t\t");System.out.printf(list.get(i).getPlace()+"\t\t");System.out.println("");}}public static void change(ArrayList<student> list){Scanner sc = new Scanner(System.in);if(list.size()==0){System.out.println("一个高手也没,你改个锤子名");return;}System.out.println("请输入要替换的高手绰号:");String id = sc.next();for (int i = 0; i < list.size(); i++) {if(list.get(i).getId().equals(id)) {System.out.println("请输入高手的新绰号:");id = sc.next();list.set(i,gai(list,id));System.out.println("替换成功");return;}}System.out.println("查无此人");}public static student gai(ArrayList<student> list,String id){Scanner sc = new Scanner(System.in);System.out.println("请输入高手的姓名:");String name = sc.next();System.out.println("请输入高手的籍贯:");String place = sc.next();System.out.println("请输入高手的年龄:");int age = sc.nextInt();student a = new student(name,id,age,place);return a;}}
相关文章:
丁小喜の兵器谱(学生管理系统)
我的第一个独立看需求完成项目,虽然很简单(笑)建立一个可以增加,修改,删除,展示学生信息的系统首先是一个界面,让你决定进行哪个操作1.2.3.4.5分别对应不同的操作,switch与这一操作完…...

linux:字符串拷贝的五种方法:使用指针下标,指针变量加偏移量,指针变量自加等
字符串数组名做函数形参,会退化正指针变量,需要使用指针变量操作字符串 代码: #include <stdlib.h> #include <stdio.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> #include <s…...
cesium常用方法汇集(工具篇)
1.Scene.prototype.pickPositionWorldCoordinates 根据屏幕坐标获取世界坐标 2,Scene.prototype.pickPosition 根据屏幕坐标获取世界坐标 3,Scene.prototype.drillPick 通过屏幕坐标拾取多个对象 4,Scene.prototype.pickFromRay 通过射线拾…...
分布式一致性与共识算法(一)
这里写目录标题是什么ACIDCAP组合一致性概念共识为什么需要共识算法会如何发展列举Paxos算法ZAB(Zookeeper Atomic Broadcast)协议Raft 算法参考引用是什么 从实现效果上来说,很多人或多或少都了解或者设计过具有强一致性的系统。但是&#…...
C++---最长上升子序列模型---怪盗基德的滑翔翼(每日一道算法2023.2.27)
注意事项: 本题为"线性dp—最长上升子序列的长度"的扩展题,所以dp思路这里就不再赘述。 题目: 怪盗基德是一个充满传奇色彩的怪盗,专门以珠宝为目标的超级盗窃犯。 而他最为突出的地方,就是他每次都能逃脱中…...

Python 之 Pandas 文件操作和读取 CSV 参数详解
文章目录一、Pandas 读取文件二、CSV 文件读取1. 基本参数2. 通用解析参数3. 空值处理相关参数4. 时间处理相关参数5. 分块读入相关参数一、Pandas 读取文件 当使用 Pandas 做数据分析的时,需要读取事先准备好的数据集,这是做数据分析的第一步。Panda 提…...

微服务的异步通信技术RabbitMQ
文章目录前言1.WorkQueue(工作队列)消息预取机制2.Publish&Subscribe(发布-订阅)1.Fanout(广播)2.DirectExchange(路由)3.TopicExchange(话题)MQ的优点前…...

Word处理控件Aspose.Words功能演示:使用 C++ 在 Word (DOC/DOCX) 中添加或删除水印
Aspose.Words 是一种高级Word文档处理API,用于执行各种文档管理和操作任务。API支持生成,修改,转换,呈现和打印文档,而无需在跨平台应用程序中直接使用Microsoft Word。此外, Aspose API支持流行文件格式处…...

chatGPT模型原理
文章目录简介BertGPT 初代GPT-2GPT-3chatGPT开源ChatGPT简介 openai 的 GPT 大模型的发展历程。 Bert 2018年,自然语言处理 NLP 领域也步入了 LLM 时代,谷歌出品的 Bert 模型横空出世,碾压了以往的所有模型,直接在各种NLP的建模…...

四、阻塞队列
文章目录基础概念生产者消费者概念JUC阻塞队列的存取方法ArrayBlockingQueueArrayBlockingQueue的基本使用生产者方法实现原理ArrayBlockingQueue的常见属性add方法实现offer方法实现offer(time,unit)方法put方法消费者方法实现原理remove方法poll方法poll(time,unit)方法take方…...

企业电子招投标采购系统源码之登录页面
信息数智化招采系统 服务框架:Spring Cloud、Spring Boot2、Mybatis、OAuth2、Security 前端架构:VUE、Uniapp、Layui、Bootstrap、H5、CSS3 涉及技术:Eureka、Config、Zuul、OAuth2、Security、OSS、Turbine、Zipkin、Feign、Monitor、…...

SQL零基础入门学习(十三)
上一篇(SQL零基础入门学习(十二)) SQL 视图(Views) 视图是可视化的表。 SQL CREATE VIEW 语句 在 SQL 中,视图是基于 SQL 语句的结果集的可视化的表。 视图包含行和列,就像一个…...

Java实现简单KV数据库
用Java实现一个简单的KV数据库 开发思路: 用map存储数据,再用一个List记录操作日志,开一个新线程将List中的操作写入日志文件中,再开一个线程用于网络IO服务接收客户端的命令,再启动时检查日志,如果有数据就…...

【Spark分布式内存计算框架——Spark Streaming】5. DStream(上)
3. DStream SparkStreaming模块将流式数据封装的数据结构:DStream(Discretized Stream,离散化数据流,连续不断的数据流),代表持续性的数据流和经过各种Spark算子操作后的结果数据流。 3.1 DStream 是什么…...

Spring系列-9 Async注解使用与原理
背景: 本文作为Spring系列的第九篇,介绍Async注解的使用、注意事项和实现原理,原理部分会结合Spring框架代码进行。 本文可以和Spring系列-8 AOP原理进行比较阅读 1.使用方式 Async一般注解在方法上,用于实现方法的异步…...

Python自动化测试实战篇(6)用PO分层模式及思想,优化unittest+ddt+yaml+request登录接口自动化测试
这些是之前的文章,里面有一些基础的知识点在前面由于前面已经有写过,所以这一篇就不再详细对之前的内容进行描述 Python自动化测试实战篇(1)读取xlsx中账户密码,unittest框架实现通过requests接口post登录网站请求&…...

Linux 进程:父子进程
目录一、了解子进程二、创建子进程1.创建子进程2.区分父子进程三、理解子进程四、创建子进程的意义进程就是运行中的应用程序,如果一个程序较为庞大,我们可以给这个程序创建多个进程,每个进程负责一部分代码的运行。 A进程如果创建了B进程&am…...

Unity 之 实现读取代码写进Word文档功能实现 -- 软著脚本生成工具
Unity 之 实现读取代码写进Word文档功能前言一,实现步骤1.1 逻辑梳理1.2 用到工具二,实现读写文件2.1 读取目录相关2.2 读写文件三,编辑器拓展3.1 编辑器拓展介绍3.2 实现界面可视化四,源码分享4.1 工具目录4.2 完整代码前言 之所…...

Typora图床配置:Typora + PicGo + 阿里云OSS
文章目录一、前景提要二、相关链接三、搭建步骤1. 购买阿里云对象存储OSS2. 对象存储OSS:创建Bucket3. 阿里云:添加OSS访问用户及权限4. 安装Typora5. 配置PicGo方法一:使用PicGo-Core (Command line)方法二:使用PicGo(app)6. 最后…...
二进制搭建以太坊2.0节点-2023最新详细版文档
文章目录 一、配置 JWT 认证二、部署执行节点geth2.1 下载geth二进制文件2.2 geth节点启动三、部署共识节点Prysm3.1 下载Prysm脚本3.2 Prysm容器生成四、检查节点是否同步完成4.1 检查geth执行节点4.2 检查prysm共识节点4.3 geth常用命令五、节点同步详细说明5.1 启动时日志5.…...

未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?
编辑:陈萍萍的公主一点人工一点智能 未来机器人的大脑:如何用神经网络模拟器实现更智能的决策?RWM通过双自回归机制有效解决了复合误差、部分可观测性和随机动力学等关键挑战,在不依赖领域特定归纳偏见的条件下实现了卓越的预测准…...

第19节 Node.js Express 框架
Express 是一个为Node.js设计的web开发框架,它基于nodejs平台。 Express 简介 Express是一个简洁而灵活的node.js Web应用框架, 提供了一系列强大特性帮助你创建各种Web应用,和丰富的HTTP工具。 使用Express可以快速地搭建一个完整功能的网站。 Expre…...

19c补丁后oracle属主变化,导致不能识别磁盘组
补丁后服务器重启,数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后,存在与用户组权限相关的问题。具体表现为,Oracle 实例的运行用户(oracle)和集…...
【网络】每天掌握一个Linux命令 - iftop
在Linux系统中,iftop是网络管理的得力助手,能实时监控网络流量、连接情况等,帮助排查网络异常。接下来从多方面详细介绍它。 目录 【网络】每天掌握一个Linux命令 - iftop工具概述安装方式核心功能基础用法进阶操作实战案例面试题场景生产场景…...
多场景 OkHttpClient 管理器 - Android 网络通信解决方案
下面是一个完整的 Android 实现,展示如何创建和管理多个 OkHttpClient 实例,分别用于长连接、普通 HTTP 请求和文件下载场景。 <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

SpringCloudGateway 自定义局部过滤器
场景: 将所有请求转化为同一路径请求(方便穿网配置)在请求头内标识原来路径,然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

OPENCV形态学基础之二腐蚀
一.腐蚀的原理 (图1) 数学表达式:dst(x,y) erode(src(x,y)) min(x,y)src(xx,yy) 腐蚀也是图像形态学的基本功能之一,腐蚀跟膨胀属于反向操作,膨胀是把图像图像变大,而腐蚀就是把图像变小。腐蚀后的图像变小变暗淡。 腐蚀…...
Android第十三次面试总结(四大 组件基础)
Activity生命周期和四大启动模式详解 一、Activity 生命周期 Activity 的生命周期由一系列回调方法组成,用于管理其创建、可见性、焦点和销毁过程。以下是核心方法及其调用时机: onCreate() 调用时机:Activity 首次创建时调用。…...
在Ubuntu24上采用Wine打开SourceInsight
1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...