学生管理系统控制台版(java)

 首先得先写个Student类,用来存放学生信息

public class Student {private String id;private  String name;private int age;private String address;public Student() {}public Student(String id, String name, int age, String address) {this.id = id;this.name = name;this.age = age;this.address = address;}/*** 获取* @return id*/public String getId() {return id;}/*** 设置* @param id*/public void setId(String id) {this.id = id;}/*** 获取* @return name*/public String getName() {return name;}/*** 设置* @param name*/public void setName(String name) {this.name = name;}/*** 获取* @return age*/public int getAge() {return age;}/*** 设置* @param age*/public void setAge(int age) {this.age = age;}/*** 获取* @return address*/public String getAddress() {return address;}/*** 设置* @param address*/public void setAddress(String address) {this.address = address;}public String toString() {return "Student{id = " + id + ", name = " + name + ", age = " + age + ", address = " + address + "}";}
}

再写个User类,用来存放用户名,密码,身份证号,手机号 

public class User {private String  username;private String password;private String idOnly;private String phone;public User() {}public User(String username, String password, String idOnly, String phone) {this.username = username;this.password = password;this.idOnly = idOnly;this.phone = phone;}/*** 获取* @return username*/public String getUsername() {return username;}/*** 设置* @param username*/public void setUsername(String username) {this.username = username;}/*** 获取* @return password*/public String getPassword() {return password;}/*** 设置* @param password*/public void setPassword(String password) {this.password = password;}/*** 获取* @return idOnly*/public String getIdOnly() {return idOnly;}/*** 设置* @param idOnly*/public void setIdOnly(String idOnly) {this.idOnly = idOnly;}/*** 获取* @return phone*/public String getPhone() {return phone;}/*** 设置* @param phone*/public void setPhone(String phone) {this.phone = phone;}public String toString() {return "User{username = " + username + ", password = " + password + ", idOnly = " + idOnly + ", phone = " + phone + "}";}
}

 接下来就可以开始写正式的代码了

import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;public class StudentSystem {public static void main(String[] args) {ArrayList<User>userList=new ArrayList<>();int count=0;while (true) {System.out.println("欢迎来到学生管理系统");System.out.println("请选择操作1登录 2注册 3忘记密码");Scanner sd=new Scanner(System.in);int s = sd.nextInt();switch (s){case 1: {boolean login = login(userList);if(count==3){System.out.println("您已输入三次错误");exit();}if (login){ArrayList<Student>list=new ArrayList<>();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);int number = sc.nextInt();switch (number) {case 1:addStudent(list);break;case 2:deleteStudent(list);break;case 3:reviseStudent(list);break;case 4:selectStudent(list);break;case 5:exit();System.exit(0);//停止虚拟机运行default:System.out.println("没有这个选项");}}}else {System.out.println("用户名密码错误,请重新输入");count++;break;}}case 2:zhuCe(userList);break;case 3:forget(userList);break;default:System.out.println("没有这个选项");}}}//添加学生public static void   addStudent(ArrayList<Student>list){Student s=new Student();Scanner sc=new Scanner(System.in);String id= null;while (true) {System.out.println("请输入学生id");id = sc.next();boolean flag = exist(list, id);if(flag){System.out.println("id已经存在,请重新录入");}else{s.setId(id);break;}}System.out.println("请输入学生姓名");String name=sc.next();s.setName(name);System.out.println("请输入学生年龄");int age=sc.nextInt();s.setAge(age);System.out.println("请输入学生住址");String address=sc.next();s.setAddress(address);list.add(s);System.out.println("学生信息添加成功");}//删除学生public static void deleteStudent(ArrayList<Student>list){System.out.println("您要删除的学生id");Scanner sc=new Scanner(System.in);String id=sc.next();int i = index(list, id);if(i>=0){list.remove(i);System.out.println("id为"+id+"的学生删除成功");}else{System.out.println("id不存在,删除失败");}}//修改学生public static void reviseStudent(ArrayList<Student>list){Scanner sc=new Scanner(System.in);System.out.println("请输入要修改的学生id");String stuId = sc.next();int i = index(list, stuId);if(i>=0){Student stu=list.get(i);System.out.println("请输入学生姓名");String name=sc.next();stu.setName(name);System.out.println("请输入学生年龄");int age=sc.nextInt();stu.setAge(age);System.out.println("请输入学生住址");String address=sc.next();stu.setAddress(address);System.out.println("学生信息修改成功");}else{System.out.println("要修改的id"+stuId+"不存在,请重新输入");return;}}//查询学生public static void selectStudent(ArrayList<Student>list){if(list.size()==0){System.out.println("当前无学生信息,请添加后再查询");return;}System.out.println("id\t\t姓名\t年龄\t地址");for (int i = 0; i < list.size(); i++) {Student student = list.get(i);System.out.println(student.getId()+"\t"+student.getName()+"\t"+student.getAge()+"\t"+student.getAddress());}}//退出public static void exit(){System.out.println("退出");}//是否存在idpublic static boolean exist(ArrayList<Student>list,String id){for (int i = 0; i < list.size(); i++) {Student stu = list.get(i);String stuId = stu.getId();if(stuId.equals(id)){return true;}}return false;}//根据id获取索引public static int index(ArrayList<Student>list,String id){for (int i = 0; i < list.size(); i++) {Student stu = list.get(i);String stuId = stu.getId();if(stuId.equals(id)){return i;}}return -1;}//登录public static  boolean login(ArrayList<User>userList){Scanner sc=new Scanner(System.in);System.out.println("请输入用户名");String name = sc.next();System.out.println("请输入密码");String pwd=sc.next();String yesCode=getCode();System.out.println("请输入验证码");String code=sc.next();for (int i = 0; i < userList.size(); i++) {User user = userList.get(i);String username = user.getUsername();String password = user.getPassword();if(username.equals(name)&&password.equals(pwd)&&(code.equalsIgnoreCase(yesCode))){return true;}}boolean exist = existUser(userList, name);if(exist==false){System.out.println("用户未注册,请先注册");}return false;}//注册public static  void zhuCe(ArrayList<User>userList){User user=new User();Scanner sc=new Scanner(System.in);while (true) {System.out.println("请输入用户名");String username = sc.next();boolean flag1 = checkUsername(username);if (!flag1) {System.out.println("用户格式不满足,需要重新输入");continue;}boolean flag2 = existUser(userList, username);if(flag2){System.out.println("用户名"+username+"已存在,请重新输入");}else{System.out.println("用户名"+username+"可用");user.setUsername(username);break;}}while (true) {System.out.println("请输入密码");String password = sc.next();System.out.println("请再次输入密码");String againPassword=sc.next();if(!againPassword.equals(password)){System.out.println("两次输入的密码不一致,请重新输入");}else{System.out.println("两次输入的密码一致");user.setPassword(password);break;}}while (true) {System.out.println("请输入身份证号,长度18,不能以0开头,前17为必须是数字,最后一位可以是数字,也可以是大写X或小写x");String idOnly = sc.next();boolean flag3 = checkIdOnly(idOnly);if(flag3){System.out.println("身份证"+idOnly+"可用");user.setIdOnly(idOnly);break;}else{System.out.println("身份证"+idOnly+"没有按要求填写");}}while (true) {System.out.println("请输入手机号码,长度为11,不能以0开头,必须都是数字");String phone = sc.next();boolean flag4 = checkPhone(phone);if(flag4){System.out.println("手机号"+phone+"可用");user.setPhone(phone);break;}else{System.out.println("手机号"+phone+"没有按要求填写");}}userList.add(user);}//生成验证码public static String getCode(){ArrayList<Character>list=new ArrayList<>();for (int i = 0; i < 26; i++) {list.add((char)('a'+i));list.add((char)('A'+i));}StringBuilder sb=new StringBuilder();Random r=new Random();for (int i = 0; i < 4; i++) {//获取随即索引int index=r.nextInt(list.size());//利用随即索引获取字符char c=list.get(index);//把随机字符添加到sb中sb.append(c);}int number=r.nextInt(10);sb.append(number);System.out.print("正确的验证码为:");System.out.println(sb);char[] arr=sb.toString().toCharArray();int randomIndex=r.nextInt(arr.length);char temp = arr[randomIndex];arr[randomIndex]=arr[arr.length-1];arr[arr.length-1]=temp;return new String(arr);}//校验手机号private static boolean checkPhone(String phone) {//长度为11if(phone.length()!=11){return false;}//不能以0开头boolean flag = phone.startsWith("0");//如果判断正确返回trueif(flag){return false;}//必须都是数字for (int i = 0; i < phone.length()-1; i++) {char c = phone.charAt(i);if(!(c>='0'&&c<='9')){return false;}}return true;}//校验身份证private static boolean checkIdOnly(String idOnly) {if(idOnly.length()!=18){return false;}/*开头不能为0*/boolean flag = idOnly.startsWith("0");//如果判断正确返回trueif(flag){return false;}//前17为必须是数字for (int i = 0; i < idOnly.length()-1; i++) {char c = idOnly.charAt(i);if(!(c>='0'&&c<='9')){return false;}}//最后一位char endChar = idOnly.charAt(idOnly.length() - 1);if(!((endChar>='0'&&endChar<='9')||(endChar=='X')||(endChar=='x'))){return false;}return true;}//忘记密码public static  void forget(ArrayList<User>userList){User user=new User();System.out.println("请输入用户名");Scanner sc=new Scanner(System.in);String username = sc.next();boolean flag = existUser(userList, username);if(flag){System.out.println("请输入身份证号");String idOnly=sc.next();boolean result1 = existIdOnly(userList, idOnly);System.out.println("请输入手机号");String phone=sc.next();boolean result2 = existPhone(userList, phone);if(result1&&result2){System.out.println("请输入密码");String password=sc.next();user.setPassword(password);}else{System.out.println("账号信息不匹配,修改失败");}}else{System.out.println("未注册");}}//校验用户名public static boolean checkUsername(String username){//用户名长度在3~15之间int len=username.length();if(len<3||len>15){return false;}//只能是字母+数字,但不能是纯数字for (int i = 0; i < username.length(); i++) {char c = username.charAt(i);if(!((c>='a'&&c<='z')||(c>='A'&&c<='Z')||(c>='0'&&c<='9'))){return  false;}}int count=0;for (int i = 0; i < username.length(); i++) {char c = username.charAt(i);if((c>='a'&&c<='z')||(c>='A'&&c<='Z')){count++;break;}}return count>0;}//是否存在用户名public static boolean existUser(ArrayList<User>userList,String username){for (int i = 0; i < userList.size(); i++) {User user = userList.get(i);String stuId = user.getUsername();if(stuId.equals(username)){return true;}}return false;}//是否存在身份证号public static boolean existIdOnly(ArrayList<User>userList,String idOnly){for (int i = 0; i < userList.size(); i++) {User user = userList.get(i);String stuIdOnly = user.getIdOnly();if(stuIdOnly.equals(idOnly)){return true;}}return false;}//是否存在手机号public static boolean existPhone(ArrayList<User>userList,String phone){for (int i = 0; i < userList.size(); i++) {User user = userList.get(i);String stuPhone = user.getPhone();if(stuPhone.equals(phone)){return true;}}return false;}
}

运行结果

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年4月8日腾讯云故障复盘及情况说明

2024年4月8日15点23分&#xff0c;腾讯云团队收到告警信息&#xff0c;云API服务处于异常状态&#xff1b;随即在腾讯云工单、售后服务群以及微博等渠道开始大量出现腾讯云控制台登录不上的客户反馈。 经过故障定位发现&#xff0c;客户登录不上控制台正是由云API异常所导致。云…

极狐GitLab 如何在 helm 中恢复数据

本文作者&#xff1a;徐晓伟 GitLab 是一个全球知名的一体化 DevOps 平台&#xff0c;很多人都通过私有化部署 GitLab 来进行源代码托管。极狐GitLab 是 GitLab 在中国的发行版&#xff0c;专门为中国程序员服务。可以一键式部署极狐GitLab。 本文主要讲述了如何在极狐GitLab …

关于部署ELK和EFLK的相关知识

文章目录 一、ELK日志分析系统1、ELK简介1.2 ElasticSearch1.3 Logstash1.4 Kibana&#xff08;展示数据可视化界面&#xff09;1.5 Filebeat 2、使用ELK的原因3、完整日志系统的基本特征4、ELK的工作原理 二、部署ELK日志分析系统1、服务器配置2、关闭防火墙3、ELK ElasticSea…

李廉洋;4.12现货黄金,美原油最新走势分析及策略。

现货黄金在美盘末将历史新高刷至2377美元/盎司。美国3月份PPI指数较上年同期上升2.1%&#xff0c;为11个月来的最高增幅&#xff0c;这份数据加之此前火爆的CPI指数&#xff0c;为美联储实现2%目标所面临的坎坷之路奠定了基础。不过&#xff0c;PPI报告中的细节让担心通胀再度加…

Python快速获取编程问题答案的方法库之howdoi使用详解

概要 howdoi是一个命令行工具,它提供了一种快速获取编程问题答案的方法,通过搜索和抓取Stack Overflow等网站的内容,直接在终端中显示编程问题的解决方案。 安装 通过pip可以轻松安装howdoi: pip install howdoi特性 快速访问编程解决方案:无需手动浏览Stack Overflow。…

ThingsBoard通过服务端获取客户端属性或者共享属性

MQTT基础 客户端 MQTT连接 通过服务端获取属性值 案例 1、首先需要创建整个设备的信息&#xff0c;并复制访问令牌 ​2、通过工具MQTTX连接上对应的Topic 3、测试链接是否成功 4、通过服务端获取属性值 5、在客户端查看对应的客户端属性或者共享属性的key 6、查看整个…

ELK 日志分析系统

目录 一. ELK 相关知识 1. ELK 的概念与组件 1.1 ElasticSearch&#xff1a; 1.2 Kibana&#xff1a; 1.3 Logstash&#xff1a; 可以添加的其它组件&#xff1a; Filebeat&#xff1a; 缓存/消息队列&#xff08;redis、kafka、RabbitMQ等&#xff09;&#xff1a; Flu…

css文本属性

css常用文本属性汇总 属性描述color设置文本颜色text-align设置水平对齐方式text-decoration装饰文本text-indent设置缩进line-height设置行间距 设置文本颜色 color属性 属性值&#xff1a; 1.已定义的属性值&#xff0c;如red&#xff0c;green。 2.十六进制&#xff1…

MYSQL08_页的概述、内部结构、文件头、文件尾、最大最小记录、页目录、区段表

文章目录 ①. 页的概述、大小②. 页的内部结构③. 第一部分 - 文件头④. 第一部分 - 文件尾⑤. 第二部分 - 空闲、用户记录、最大最小⑥. 第三部分 - 页目录⑦. 第三部分 - 页面头部⑧. 从数据页角度看B树⑨. 区、段和表、碎片区 ①. 页的概述、大小 ①. 数据库的存储结构&…

计算机服务器中了360后缀勒索病毒怎么办?360后缀勒索病毒解密步骤

网络技术的不断应用与发展&#xff0c;为企业的生产运营提供了极大便利&#xff0c;利用网络可以开展各项工作业务&#xff0c;可以大大提高企业的生产效率&#xff0c;然而&#xff0c;网络是一把双刃剑&#xff0c;在为企业提供便利的同时&#xff0c;也为企业的数据安全带来…

【C 数据结构】单链表

文章目录 【 1. 基本原理 】1.1 链表的节点1.2 头指针、头节点、首元节点 【 2. 链表的创建 】2.0 创建1个空链表&#xff08;仅有头节点&#xff09;2.1 创建单链表&#xff08;头插入法&#xff09;*2.2 创建单链表&#xff08;尾插入法&#xff09; 【 3. 链表插入元素 】【…

下载好了annaconda,但是在创建一个新的Conda虚拟环境报错

文章目录 问题描述&#xff1a;解决方案1.生成一个配置文件 问题总结 问题描述&#xff1a; ProxyError(MaxRetryError(“HTTPSConnectionPool(host‘repo.anaconda.com’, port443): Max retries exceeded with url: /pkgs/pro/win-64/repodata.json.bz2 (Caused by ProxyErr…

【深度学习实战(1)】如何使用argparse模块设置自己的训练参数

一、argparse模块用法 1、argparse是一个python模块&#xff0c;用途是&#xff1a;命令行选项、参数和子命令的解释。 2、argparse库下载&#xff1a;pip install argparse 3、使用步骤&#xff1a; 导入argparse模块&#xff0c;并创建解释器 添加所需参数 解析参数 二、…

Ubuntu去除烦人的顶部【活动】按钮

文章目录 一、需求说明二、打开 extensions 网站三、安装 GNOME Shell 插件四、安装本地连接器五、安装 Hide Activities Button 插件六、最终效果七、卸载本地连接器命令参考 本文所使用的 Ubuntu 系统版本是 Ubuntu 22.04 ! 一、需求说明 使用 Ubuntu 的过程中&#xff0c;屏…

容器镜像进阶

Dockerfile 编写注意事项&#xff1a; 选择合适的基础镜像&#xff0c;没必要追求镜像的绝对大小。 alpine镜像不推荐&#xff0c;尤其是编译型业务&#xff0c;因为alpine镜像内置的musl libc库与标准的glibc不一样。 如果就是想使用alpine镜像&#xff0c;推荐多阶段构建&am…

003Node.js创建第一个web服务

如果用PHP来编写后端代码&#xff0c;需要用Apache或者Nginx的服务器,来处理客户的请求响应。对于Node.js时&#xff0c;不仅实现了应用&#xff0c;同时还实现了整个HTTP服务器. 安装 Node Snippets插件&#xff08;编程自带提示&#xff09; console.log(你好nodejs); //表…

CTF工具下载(1)----随波逐流

为什么要写这个博客喃&#xff0c;因为随波逐流每隔一段时间就会更新&#xff0c;要下载最新版本才能用&#xff0c;但是每次都会有点麻烦&#xff0c;所以写一个博客记录下。 1.进入官网&#xff0c;点击 2.进入城通网盘 3.进入编码工具 4.点击最新版本的随波逐流就下载了&am…

JavaScript进阶6之函数式编程与ES6ESNext规范

函数式编程 柯里化currycurrycompose示例&#xff1a;简化版展开写&#xff1a; debug示例一&#xff1a;示例二&#xff1a; 模板字符串css in js方案 箭头函数问题 生成器 generator应用场景 反射 Reflect 柯里化curry compose是curry的应用 在 lodash/fp underscore ramba …

常用接口测试工具/免费api

一 接口编辑文档 常用的接口文档编写apipost 二 免费接口测试 api 1. thecat 含有&#xff1a; The Cat API - Cat as a Service The Cat API 2. public-apis 进入页面往下拉 三 常用接口测试工具 postman 四 常用接口性能测试工具 Jmeter&#xff0c;loadrunner

GPT演变:从GPT到ChatGPT

Transformer 论文 Attention Is All You Need The dominant sequence transduction models are based on complex recurrent or convolutional neural networks in an encoder-decoder configuration. The best performing models also connect the encoder… https://arxiv.o…