Java项目练习——学生管理系统
1. 整体结构
代码实现了基本的学生管理系统功能,包括登录、注册、忘记密码、添加、删除、修改和查询学生信息。
使用了ArrayList来存储用户和学生信息。
使用了Scanner类来处理用户输入。
2. 主要功能模块
登录 (logIn):验证用户名和密码,支持验证码校验。
注册 (register):验证用户名、密码、身份证号和手机号。
忘记密码 (forgetPassword):通过用户名、身份证号和手机号验证后修改密码。
管理学生信息 (Manage):提供添加、删除、修改和查询学生信息的功能。
如果有问题,希望大家指正
Student_JavaBean
package student_Management_System;public class Student_JavaBean {private String id;private String name;private int age;private String address;public Student_JavaBean() {}public Student_JavaBean(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;}
}
User_JavaBean
package student_Management_System;
public class User_JavaBean {//属性:用户名、密码、身份证号码、手机号码private String username;private String password;private String idCard;private String phone;public User_JavaBean() {}public User_JavaBean(String username, String password, String idCard, String phone) {this.username = username;this.password = password;this.idCard = idCard;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 idCard*/public String getIdCard() {return idCard;}/*** 设置* @param idCard*/public void setIdCard(String idCard) {this.idCard = idCard;}/*** 获取* @return phone*/public String getPhone() {return phone;}/*** 设置* @param phone*/public void setPhone(String phone) {this.phone = phone;}
}
主函数
package student_Management_System;import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;public class Student {public static void main(String[] args) {ArrayList<Student_JavaBean>list=new ArrayList<>();ArrayList<User_JavaBean> user=new ArrayList<>();Scanner sc=new Scanner(System.in);while(true) {System.out.println("欢迎来到学生管理系统");System.out.println("请选择操作1登录 2注册 3忘记密码 4退出");int choose_up = sc.nextInt();switch (choose_up) {case 1: {logIn(user,list);break;}case 2:register(user);searchUsername(user);break;case 3:// 1,键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册// 2,键盘录入身份证号码和手机号码// 3,判断当前用户的身份证号码和手机号码是否一致,// 如果一致,则提示输入密码,进行修改。// 如果不一致,则提示:账号信息不匹配,修改失败。forgetPassword(user);break;case 4:return;default:System.out.println("输入错误");break;}}}public static void logIn(ArrayList<User_JavaBean>user,ArrayList<Student_JavaBean>list) {//用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册//判断验证码是否正确,如不正确,重新输入//再判断用户名和密码是否正确,有3次机会Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入用户名");String username = sc.next();boolean flag = checkHava(user,username);if (flag) {int count = 2;while (count >= 0) {System.out.println("请输入密码");String password = sc.next();int flag2 = (index(user, username));if (flag2 >= 0) {if (user.get(index(user, username)).getPassword().equals(password)) {break;}System.out.println("密码错误还有" + count + "次机会");if (count == 0) {return;}count--;}}break;}else {System.out.println("登录失败,用户名不存在,请按下其它数字键重新输入,按下0退出程序");int temp = sc.nextInt();if (temp == 0) {return;}}}while (true) {System.out.println("请输入验证码");String newVerificationCode = verificationCode();System.out.println(newVerificationCode);String verificationCode = sc.next();if (verificationCode.equals(newVerificationCode)) {break;}}System.out.println("登录成功");Manage(list);}public static void Manage(ArrayList<Student_JavaBean>list){Scanner sc=new Scanner(System.in);while (true) {int choose = menu(sc);switch (choose) {case 1:add(list);break;case 2:delete(list);break;case 3:upData(list);break;case 4:search(list);break;case 5:System.out.println("退出");return;default:System.out.println("输入错误重新输入");break;}}}public static void forgetPassword(ArrayList<User_JavaBean> user) {Scanner sc = new Scanner(System.in);while (true) {System.out.println("请输入用户名");String username = sc.next();int index = index(user, username);if (index == -1) {System.out.println("用户名不存在,请按下其它数字键重新输入,按下0退出程序");int temp = sc.nextInt();if (temp == 0) {return;}continue;}while (true) {System.out.println("输入用户的身份证号");String IdCard = sc.next();if (user.get(index).getIdCard().equals(IdCard)) {break;} else {System.out.println("身份证号不匹配,请按下其它数字键重新输入,按下0退出程序");int temp = sc.nextInt();if (temp == 0) {return;}}}while (true) {System.out.println("请输入用户的手机号");String phone = sc.next();if (user.get(index).getPhone().equals(phone)) {break;} else {System.out.println("手机号不匹配,请按下其它数字键重新输入,按下0退出程序");int temp = sc.nextInt();if (temp == 0) {return;}}}System.out.println("请输入新密码");String newPassword = sc.next();user.get(index).setPassword(newPassword);System.out.println("修改成功");return;}}public static int index(ArrayList<User_JavaBean>user,String temp){for (int i = 0; i < user.size(); i++) {if(user.get(i).getUsername().equals(temp)){return i;}}return -1;}public static boolean checkHava(ArrayList<User_JavaBean>user,String username){for (int i = 0; i < user.size(); i++) {if(user.get(i).getUsername().equals(username)){return true;}}System.out.println("用户未注册,请先注册");return false;}public static String verificationCode(){Random random=new Random();char[] zLen =new char[5];for (int i = 0; i < zLen.length-1; i++) {int flag=random.nextInt(2);if(flag==0) {zLen[i] = (char) (random.nextInt(25) + 65);}else{zLen[i] = (char) (random.nextInt(26) + 97);}}zLen[zLen.length-1]=(char)(random.nextInt(10)+'0');for (int i = 0; i < zLen.length; i++) {char temp=zLen[i];int j=random.nextInt(zLen.length);zLen[i]=zLen[j];zLen[j]=temp;}return new String(zLen);}public static void searchUsername(ArrayList<User_JavaBean>user){System.out.println("用户名 身份证号\t\t\t 密码\t 手机\t");for (int i = 0; i < user.size(); i++) {System.out.println(user.get(i).getUsername()+" "+user.get(i).getIdCard()+" "+user.get(i).getPassword()+" "+user.get(i).getPhone());}}public static void register(ArrayList<User_JavaBean>user){//用户名长度必须在3~15位之间//只能是字母加数字的组合,但是不能是纯数字// 2,密码键盘输入两次,两次一致才可以进行注册。// 3,身份证号码需要验证。// 验证要求:// 长度为18位// 不能以0为开头// 前17位,必须都是数字// 最为一位可以是数字,也可以是大写X或小写x// 4,手机号验证。// 验证要求:// 长度为11位// 不能以0为开头// 必须都是数字Scanner sc=new Scanner(System.in);User_JavaBean uj=new User_JavaBean();while(true) {System.out.println("请输入用户名(3-15位之间,只能字母加数字,但不能是纯数字)");String username = sc.next();boolean flag = checkUsername(username);if (flag) {uj.setUsername(username);break;} else {System.out.println("注册失败,用户名输入错误,请按下其它数字键重新输入,按下0退出程序");if(sc.nextInt()==0){return;}}}while(true){System.out.println("输入密码");String password=sc.next();if(checkPassword(password)){uj.setPassword(password);break;}else{System.out.println("两次密码输入不相同,请按下其它数字键重新输入,按下0退出程序");if(sc.nextInt()==0){return;}}}while(true){System.out.println("输入身份证号");String inCard=sc.next();if(checkInCard(inCard)){uj.setIdCard(inCard);break;}else{System.out.println("身份证号输入格式错误,请按下其它数字键重新输入,按下0退出程序");if(sc.nextInt()==0){return;}}}while(true){System.out.println("输入手机号");String phone=sc.next();if(checkPhone(phone)){uj.setPhone(phone);break;}else{System.out.println("手机号输入格式错误,请按下其它数字键重新输入,按下0退出程序");if(sc.nextInt()==0){return;}}}user.add(uj);System.out.println("注册成功!");}public static boolean checkPassword(String password){Scanner sc=new Scanner(System.in);System.out.println("请再次输入密码");String newPassword=sc.next();if(password.equals(newPassword)){return true;}System.out.println("两次输入不相同");return false;}public static boolean checkPhone(String Phone){//4,手机号验证。// 验证要求:// 长度为11位// 不能以0为开头// 必须都是数字char first=Phone.charAt(0);char []temp=new char[Phone.length()];int count=0;if(Phone.length()==11){if(first!='0'){for (int i = 0; i < Phone.length(); i++) {temp[i]=Phone.charAt(i);if(temp[i]>='0'&&temp[i]<='9'){count++;}}return count == 11;}}return false;}public static boolean checkInCard(String inCard){// 验证要求:// 长度为18位// 不能以0为开头// 前17位,必须都是数字// 最为一位可以是数字,也可以是大写X或小写xif(inCard.length()==18){char first=inCard.charAt(0);char []temp=new char[inCard.length()];char end=inCard.charAt(17);if(first!='0'){for (int i = 0; i < inCard.length()-1; i++) {temp[i]=inCard.charAt(i);if(temp[i]>='0'&&temp[i]<='9'){if(end>='0'&&end<='9'||end=='x'||end=='X'){return true;}}}}}System.out.println("身份证输入有误");return false;}public static boolean checkUsername(String pwd){Scanner sc=new Scanner(System.in);int len=pwd.length();if(len<3||len>15){return false;}int count=0;for (int i = 0; i < pwd.length(); i++) {char c=pwd.charAt(i);if(!(c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z' || c >= '0' && c <= '9'))//判断是否是在允许的范围内{System.out.println("范围不正确");return false;}}for (int i = 0; i < pwd.length(); i++) {char c=pwd.charAt(i);//判断是否是纯数字if(c>='0'&&c<='9'){count++;}}if(count==pwd.length()){System.out.println("不能是纯数字");return false;}return true;}public static boolean checkId(ArrayList<Student_JavaBean>list,String id){for (int i = 0; i < list.size(); i++) {if(list.get(i).getId().equals(id)){return true;}}return false;}public static void delete(ArrayList<Student_JavaBean>list){Scanner sc=new Scanner(System.in);System.out.println("请输入需要删除的id");String id=sc.next();boolean flag=checkId(list,id);if(!flag){System.out.println("该id不存在");return;}for (int i = 0; i < list.size(); i++) {if(list.get(i).getId().equals(id)){list.remove(i);break;}}System.out.println("删除成功");}public static void upData(ArrayList<Student_JavaBean>list) {Scanner sc = new Scanner(System.in);Student_JavaBean sj=new Student_JavaBean();System.out.println("请输入需要修改的id");String id = sc.next();boolean flag=checkId(list,id);if(!flag){System.out.println("不存在该id");return;}System.out.println("请输入修改类型:1.id 2.姓名 3.年龄 4.地址");int type=sc.nextInt();switch (type) {case 1: {for (int i = 0; i < list.size(); i++) {if (list.get(i).getId().equals(id)) {System.out.println("输入新的id");String newId = sc.next();sj.setId(newId);list.get(i).setId(newId);System.out.println("修改成功");break;}}break;}case 2: {for (int i = 0; i < list.size(); i++) {if (list.get(i).getId().equals(id)) {System.out.println("输入新的姓名");String newName = sc.next();sj.setName(newName);list.get(i).setName(newName);System.out.println("修改成功");break;}}break;}case 3: {for (int i = 0; i < list.size(); i++) {if (list.get(i).getId().equals(id)) {System.out.println("输入新的年龄");int newAge = sc.nextInt();sj.setAge(newAge);list.get(i).setAge(newAge);System.out.println("修改成功");break;}}break;}case 4:{for (int i = 0; i < list.size(); i++) {if (list.get(i).getId().equals(id)) {System.out.println("输入新的地址");String newAddress = sc.next();sj.setAddress(newAddress);list.get(i).setAddress(newAddress);System.out.println("修改成功");break;}}break;}default:System.out.println("输入有误");break;}}public static void search(ArrayList<Student_JavaBean> list){if(list.size()==0){System.out.println("当前无学生信息,请添加后再查询");}else{System.out.println("id\t\t姓名\t年龄\t地址\t");for (int i = 0; i < list.size(); i++) {Student_JavaBean su=list.get(i);System.out.println(su.getId()+"\t"+su.getName()+"\t"+su.getAge()+"\t"+su.getAddress()+"\t");}}}public static void add(ArrayList<Student_JavaBean>list){Student_JavaBean s=new Student_JavaBean();Scanner sc=new Scanner(System.in);System.out.println("输入id:");String id=sc.next();s.setId(id);boolean flag=checkId(list,id);if(flag){System.out.println("该id已存在");return;}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 int menu(Scanner sc){int choose;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.print("\"请输入您的选择:\"");choose=sc.nextInt();return choose;}}相关文章:
Java项目练习——学生管理系统
1. 整体结构 代码实现了基本的学生管理系统功能,包括登录、注册、忘记密码、添加、删除、修改和查询学生信息。 使用了ArrayList来存储用户和学生信息。 使用了Scanner类来处理用户输入。 2. 主要功能模块 登录 (logIn):验证用户名和密码,…...
sqlserver、达梦、mysql的差异
差异项sqlserver达梦mysql单行注释---- 1、-- ,--后面带个空格 2、# 包裹对象名称,如表、表字段等 [tableName] "tableName"tableName表字段自增IDENTITY(1, 1)IDENTITY(1, 1)AUTO_INCREMENT二进制数据类型IMAGEIMAGE、BLOBBLOB 存储一个汉字需…...
Spring AOP(定义、使用场景、用法、3种事务、事务失效场景及解决办法、面试题)
目录 1. AOP定义? 2.常见的AOP使用场景: 3.Spring AOP用法 3.1 Spring AOP中的几个核心概念 3.1.1 切面、切点、通知、连接点 3.1.2 切点表达式AspectJ 3.2 使用 Spring AOP 的步骤总结 3.2.1 添加依赖: 3.2.2 定义切面和切点(切点和…...
Flutter鸿蒙next 封装对话框详解
✅近期推荐:求职神器 https://bbs.csdn.net/topics/619384540 🔥欢迎大家订阅系列专栏:flutter_鸿蒙next 💬淼学派语录:只有不断的否认自己和肯定自己,才能走出弯曲不平的泥泞路,因为平坦的大路…...
【项目实战】通过LLaMaFactory+Qwen2-VL-2B微调一个多模态医疗大模型
前言 随着多模态大模型的发展,其不仅限于文字处理,更能够在图像、视频、音频方面进行识别与理解。医疗领域中,医生们往往需要对各种医学图像进行处理,以辅助诊断和治疗。如果将多模态大模型与图像诊断相结合,那么这会…...
SCSI驱动与 UFS 驱动交互概况
SCSI子系统概况 SCSI(Small Computer System Interface)子系统是 Linux 中的一个模块化框架,用于提供与存储设备的通用接口。通过 SCSI 子系统,可以支持不同类型的存储协议(如 UFS、SATA、SAS),…...
软件工程实践项目:人事管理系统
一、项目的需求说明 通过移动设备登录app提供简单、方便的操作。根据公司原来的考勤管理制度,为公司不同管理层次提供相应的权限功能。通过app上面的各种标准操作,考勤管理无纸化的实现,使公司的考勤管理更加科学规范,从而节省考…...
不使用三方软件,win系统下禁止单个应用联网能力的详细操作教程
本篇文章主要讲解,在win系统环境下,禁止某个应用联网能力的详细操作教程,通过本教程您可以快速掌握自定义对单个程序联网能力的限制和禁止。 作者:任聪聪 日期:2024年10月30日 步骤一、按下win按键(四个小方…...
近似线性可分支持向量机的原理推导
近似线性可分的意思是训练集中大部分实例点是线性可分的,只是一些特殊实例点的存在使得这种数据集不适用于直接使用线性可分支持向量机进行处理,但也没有到完全线性不可分的程度。所以近似线性可分支持向量机问题的关键就在于这些少数的特殊点。 相较于…...
Golang开发环境
Golang开发环境搭建 Go 语言开发包 国外:https://golang.org/dl/ 国内(推荐): https://golang.google.cn/dl/ 编辑器 Golang:https://www.jetbrains.com/go/ Visual Studio Code: https://code.visualstudio.com/ 搭建 Go 语言开发环境,需要…...
测试华为GaussDB(DWS)数仓,并通过APISQL快速将(表、视图、存储过程)发布为API
华为数据仓库服务 数据仓库服务(Data Warehouse Service,简称DWS)是一种基于公有云基础架构和平台的在线数据处理数据库,提供即开即用、可扩展且完全托管的分析型数据库服务。DWS是基于华为融合数据仓库GaussDB产品的云原生服务&a…...
使用GetX实现GetPage中间件
前言 GetX 中间件(Middleware)是 GetX 框架中的一种机制,用于在页面导航时对用户进行权限控制、数据预加载、页面访问条件设置等。通过使用中间件,可以有效地控制用户的访问流程,并在适当条件下引导用户到所需页面。 这…...
Navicat 17 功能简介 | SQL 预览
Navicat 17 功能简介 | SQL 预览 随着 17 版本的发布,Navicat 也带来了众多的新特性,包括兼容更多数据库、全新的模型设计、可视化智能 BI、智能数据分析、可视化查询解释、高质量数据字典、增强用户体验、扩展MongoDB 功能、轻松固定查询结果、便捷URI …...
ubuntu、Debian离线部署gitlab
一、软件包下载 gitlab安装包下载链接 ubuntu: ubuntu/focal 适用于 ubuntu20系列 ubuntu/bionic 适用于 ubuntu18 系列 Debian: debian/buster 适用于 Debian10系列 debian/bullseye 适用于 Debian11、12系列 二、安装gitlab ubuntu需要安装一些环境…...
数据库编程 SQLITE3 Linux环境
永久存储程序数据有两种方式: 用文件存储用数据库存储 对于多条记录的存储而言,采用文件时,插入、删除、查找的效率都会很差,为了提高这些操作的效率,有计算机科学家设计出了数据库存储方式 一、数据库 数据库的基本…...
独孤思维:总有一双眼睛默默观察你做副业
01 独孤昨天在陪伴群,分享了近期小白做副业的一些困扰。 并且以自己经历作为案例,分享了一些经验和方法。 最后顺势推出xx博主的关于365条赚钱信息小报童专栏。 订阅后,可以开拓副业赚钱思路,避免走一些弯路。 甚至于&#x…...
医院信息化与智能化系统(10)
医院信息化与智能化系统(10) 这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应…...
基于YOLO11/v10/v8/v5深度学习的危险驾驶行为检测识别系统设计与实现【python源码+Pyqt5界面+数据集+训练代码】
《博主简介》 小伙伴们好,我是阿旭。专注于人工智能、AIGC、python、计算机视觉相关分享研究。 ✌更多学习资源,可关注公-仲-hao:【阿旭算法与机器学习】,共同学习交流~ 👍感谢小伙伴们点赞、关注! 《------往期经典推…...
Flink CDC系列之:学习理解核心概念——Transform
Flink CDC系列之:学习理解核心概念——Transform Transform参数元数据字段函数比较函数逻辑函数字符串函数时间函数条件函数 示例添加计算列参考元数据列使用通配符投影所有字段添加过滤规则重新分配主键重新分配分区键指定表创建配置分类映射用户定义函数已知限制 …...
MyBatis-Plus:简化 CRUD 操作的艺术
一、关于MyBatis-Plus 1.1 简介 MyBatis-Plus 是一个基于 MyBatis 的增强工具,它旨在简化 MyBatis 的使用,提高开发效率。 关于Mybatis 简介 MyBatis 是一款流行的 Java 持久层框架,旨在简化 Java 应用程序与数…...
java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别
UnsatisfiedLinkError 在对接硬件设备中,我们会遇到使用 java 调用 dll文件 的情况,此时大概率出现UnsatisfiedLinkError链接错误,原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用,结果 dll 未实现 JNI 协…...
MVC 数据库
MVC 数据库 引言 在软件开发领域,Model-View-Controller(MVC)是一种流行的软件架构模式,它将应用程序分为三个核心组件:模型(Model)、视图(View)和控制器(Controller)。这种模式有助于提高代码的可维护性和可扩展性。本文将深入探讨MVC架构与数据库之间的关系,以…...
Nginx server_name 配置说明
Nginx 是一个高性能的反向代理和负载均衡服务器,其核心配置之一是 server 块中的 server_name 指令。server_name 决定了 Nginx 如何根据客户端请求的 Host 头匹配对应的虚拟主机(Virtual Host)。 1. 简介 Nginx 使用 server_name 指令来确定…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决
Spring Cloud Gateway 中自定义验证码接口返回 404 的排查与解决 问题背景 在一个基于 Spring Cloud Gateway WebFlux 构建的微服务项目中,新增了一个本地验证码接口 /code,使用函数式路由(RouterFunction)和 Hutool 的 Circle…...
CSS设置元素的宽度根据其内容自动调整
width: fit-content 是 CSS 中的一个属性值,用于设置元素的宽度根据其内容自动调整,确保宽度刚好容纳内容而不会超出。 效果对比 默认情况(width: auto): 块级元素(如 <div>)会占满父容器…...
HDFS分布式存储 zookeeper
hadoop介绍 狭义上hadoop是指apache的一款开源软件 用java语言实现开源框架,允许使用简单的变成模型跨计算机对大型集群进行分布式处理(1.海量的数据存储 2.海量数据的计算)Hadoop核心组件 hdfs(分布式文件存储系统)&a…...
C++:多态机制详解
目录 一. 多态的概念 1.静态多态(编译时多态) 二.动态多态的定义及实现 1.多态的构成条件 2.虚函数 3.虚函数的重写/覆盖 4.虚函数重写的一些其他问题 1).协变 2).析构函数的重写 5.override 和 final关键字 1&#…...
为什么要创建 Vue 实例
核心原因:Vue 需要一个「控制中心」来驱动整个应用 你可以把 Vue 实例想象成你应用的**「大脑」或「引擎」。它负责协调模板、数据、逻辑和行为,将它们变成一个活的、可交互的应用**。没有这个实例,你的代码只是一堆静态的 HTML、JavaScript 变量和函数,无法「活」起来。 …...
