文章目录
- 一、Student.java类
- 二、User_Student.java类
- 三、Main_Student
- (一)初始界面
- (二)注册功能
- 用户名格式验证
- 用户名存在性验证
- 身份证号码验证
- 电话号码验证
- (三)登录功能
- 生成随机验证码
- 验证用户名和密码
- (四)忘记密码
- 查询用户对象下标
- (五)Main_student.java示例代码
- 四、Fun_student.java
- (一)系统主界面
- (二)添加学生信息功能
- 学号存在性判断
- (三)删除学生信息功能
- (四)修改学生信息功能
- (五)查看所有学生信息功能
- (六)Fun_student.java示例代码
本版本为初级状态,适合初学Java者查看!
需求
该系统主要功能如下:
添加学生:通过键盘录入学生信息,添加到集合中
删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
查看学生:将集合中的学生对象信息进行展示
退出系统:结束程序
一、Student.java类
定义学生类,包含以下成员变量:学号、姓名、年龄、家庭地址
package com.burial.project;
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;
}
//get和set方法
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
}
二、User_Student.java类
定义用户信息类,包含以下成员变量:用户名、密码、身份证号码、手机号码
package com.burial.project;
//用户类
public class User_Student {
//成员变量
private String userName;//用户名
private String password;//密码
private String personID;//身份证号码
private String phoneNumber;//手机号码
//空参和全参方法
public User_Student() {//空参
}
public User_Student(String userName, String password, String personID, String phoneNumber) {//全参
this.userName = userName;
this.password = password;
this.personID = personID;
this.phoneNumber = phoneNumber;
}
//get和set方法
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return password;
}
public void setPassword(String password) {
this.password = password;
}
public String getPersonID() {
return personID;
}
public void setPersonID(String personID) {
this.personID = personID;
}
public String getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(String phoneNumber) {
this.phoneNumber = phoneNumber;
}
}
三、Main_Student
(一)初始界面
需求
设计一个菜单:登录、注册、忘记密码、退出功能
//给定一个集合存储用户对象
ArrayList<User_Student> list = new ArrayList<>();//创建集合--存储用户对象
//选择系统
while (true) {
//初始界面菜单
System.out.println("*****欢迎来到学生管理系统*****");
System.out.println(" **** 1、登录 ****");
System.out.println(" **** 2、注册 ****");
System.out.println("****** 3、忘记密码 ******");
System.out.println("****** 0、退出系统 ******");
System.out.println("****************************");
System.out.println("请选择:");
Scanner sc = new Scanner(System.in);//创建对象--键盘录入
int input = sc.nextInt();//录入选择项
//选择
switch (input){
case 1:
login(list);//登录
break;
case 2:
register(list);//注册
break;
case 3:
forgetPassword(list);//忘记密码
break;
case 0:
System.out.println("欢迎下次使用!");
System.exit(0);//退出系统
default:
System.out.println("选择有误,请重新选择!");
break;
}
}
(二)注册功能
需求
- 用户名需要满足以下要求:
- 用户名唯一
- 用户名长度必须在3~15位之间
- 只能是字母加数字的组合,但是不能是纯数字
- 密码键盘输入两次,两次一致才可以进行注册。
- 身份证号码需要验证。
- 长度为18位
- 不能以0为开头
- 前17位,必须都是数字
- 最为一位可以是数字,也可以是大写X或小写x
- 手机号验证。
- 长度为11位
- 不能以0为开头
- 必须都是数字
private static void register(ArrayList<User_Student> list) {//注册
Scanner sc = new Scanner(System.in);//创建对象--键盘录入
//1、键盘录入用户名
String name;//定义姓名变量
while (true) {
System.out.println("请输入用户名:");
name = sc.next();//录入用户名
//验证用户名--先验证格式,再验证是否重复
//验证长度和组合--符合返回true,否则返回false
boolean flag = checkUsername(name);
if(!flag){//false--重新录入
System.out.println("用户名不符合要求,请重新输入!");
continue;//若用户名格式不符合要求,则无需验证其唯一性
}
//验证用户名唯一性
int index = contains(list,name);//重复返回下标,否则返回-1
if(index < 0){//-1--未重复--合法
break;
}
else{//重复
System.out.println("用户名重复,请重新零输入!");
}
}
//2、键盘录入密码
String password;//定义密码变量
while (true) {
//录入两次密码
System.out.println("请设置密码:");
password = sc.next();//录入用户密码
System.out.println("请再次输入已设置的密码:");
String userPassword = sc.next();//再次录入用户密码
//验证两次密码是否一致
if(password.equals(userPassword)){//两次密码一致
break;
}
else{//两次密码不一致
System.out.println("两次密码不一致,请重新设置密码!");
}
}
//3、键盘录入身份证号码
String ID;//定义身份证号码变量
while (true) {
//录入身份证号码
System.out.println("请输入身份证号码:");
ID = sc.next();//录入身份证号码
//验证身份证号码
boolean flag = checkUserID(ID);//符合返回true,否则返回false
if(flag){//合法
break;
}
else{//不合法
System.out.println("身份证号码有误,请重新输入!");
}
}
//4、键盘录入手机号
String phoneNumber;//定义手机号变量
while (true) {
//录入手机号码
System.out.println("请输入手机号:");
phoneNumber = sc.next();//录入用户手机号码
//验证手机号码
boolean flag = checkUserphoneNumber(phoneNumber);//符合返回true,否则返回false
if(flag)
break;
else
System.out.println("手机号码有误,请重新输入!");
}
//5、存入对象--创建用户对象
User_Student user = new User_Student(name,password,ID,phoneNumber);
//6、存入集合
list.add(user);
System.out.println("注册成功!");
//6、显示当前集合中的对象信息
for (int i = 0; i < list.size(); i++) {
//获取集合中的用户对象
User_Student use = list.get(i);
//打印用户对象中的数据
System.out.println("用户名:" + use.getUserName() + "\t" + "密码:" + use.getPassword() + "\t" +
"身份证号码:" + use.getPersonID() + "\t" + "手机号码:" + use.getPhoneNumber());
}
}
用户名格式验证
private static boolean checkUsername(String userName) {//验证用户名长度和组合
//1、验证长度--3~15位
int len = userName.length();//用户名长度
if(len < 3 || len > 15){//不满足3~15位,返回false
return false;
}
//2、验证组合--只能是字母加数字的组合,但不能是纯数字
//字母加数字--遍历
char ch;
for (int i = 0; i < userName.length(); i++) {
//获取每一位字符--charAt
ch = userName.charAt(i);
//对比--只能是字母加数字
if(!((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9'))){
return false;
}
}
//纯数字--遍历统计字母
int tag = 0;//统计字母
for (int i = 0; i < userName.length(); i++) {
//获取每一位字符--charAt
ch = userName.charAt(i);
//如果存在字母,则不是纯数字
if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')){
tag = 1;//若有字母出现,则将tag标记为1
break;
}
}
//如果tag大于0,说明有字母出现,返回true,否则返回false
return tag > 0;
}
用户名存在性验证
private static int contains(ArrayList<User_Student> list, String name) {
//集合中没有对象
if(list.size() == 0)
return -1;
//验证用户名是否存在于集合中
//遍历对比
for (int i = 0; i < list.size(); i++) {
//获取集合中的每一个用户对象
User_Student user = list.get(i);
//对比
if(name.equals(user.getUserName())){//找到了
return i;//返回其下标
}
}
return -1;//未找到
}
身份证号码验证
private static boolean checkUserID(String id) {
//1、验证长度--18位
if(id.length() != 18)
return false;
//2、验证开头第一位--不能以0开头--startsWith
boolean flag = id.startsWith("0");//真的返回true,否则返回false
if(flag)
return false;
//3、验证前17位--前17位必须是数字
char ch;
for (int i = 0; i < id.length() - 1; i++) {
//获取字符串的每一位
ch = id.charAt(i);
//对比
if(!(ch >= '0' && ch <= '9'))
return false;
}
//4、验证最后一位--最后一位可以是数字,也可以是字母小写 x 或大写 X
//获取最后一位
ch = id.charAt(17);
//验证
if((ch >= '0' && ch <= '9') || ch =='x' || ch == 'X')
return true;
else
return false;
}
电话号码验证
private static boolean checkUserphoneNumber(String phoneNumber) {
//1、验证长度--长度11位
if(phoneNumber.length() != 11)
return false;
//2、验证开头第一位--不能以0开头
char ch = phoneNumber.charAt(0);//获取开头字符
if(ch == '0')
return false;
//验证组成--必须是数字
for (int i = 0; i < phoneNumber.length(); i++) {
//获取每一位字符
ch = phoneNumber.charAt(i);
//对比
if(!(ch >= '0' && ch <= '9'))
return false;
}
return true;
}
(三)登录功能
需求
- 键盘录入用户名
- 用户名如果未注册,直接结束方法,并提示:用户名未注册,请先注册
- 键盘录入密码与验证码
- 判断验证码是否正确,如不正确,重新输入
- 再判断用户名和密码是否正确,有3次机会
- 验证码规则:
- 长度为5 + 由4位大写或者小写字母和1位数字组成,同一个字母可重复
- 数字可以出现在任意位置
- 比如: aQa1K
private static void login(ArrayList<User_Student> list) {//登录
Scanner sc = new Scanner(System.in);//创建对象--录入登录信息
while (true) {
//1、录入用户名
System.out.println("请输入用户名:");
String userName = sc.next();//录入登录用户名
//验证用户名是否存在
int result = contains(list,userName);
if(result == -1){
System.out.println("用户名:" + userName + " 未注册,请先注册!");
return;
}
//2、录入密码
System.out.println("请输入密码:");
String passWord = sc.next();//录入登录密码
while (true) {
//3、生成验证码
String rightCode = getCode();
//4、录入验证码
//显示验证码
System.out.println(rightCode);
//输入验证码
System.out.println("请输入验证码:");
String code = sc.next();//录入验证码
//判断验证码是否正确
if(!(code.equalsIgnoreCase(rightCode))){//不正确--重新输入
System.out.println("验证码有误,请重新输入!");
}
else{//验证码正确
break;
}
}
//2、判断密码和用户名是否正确
//封装思想:可把一些零散的金数据封装成一个对象
User_Student useInfo = new User_Student(userName,passWord,null,null);
//验证用户名和密码
boolean flag = checkUserInfo(list,useInfo);
if(flag){//用户名和密码正确
System.out.println("登录成功!");
//创建对象,启动学生系统
Fun_Student fun = new Fun_Student();//创建对象--启动学生系统
//启动学生系统主功能区
fun.studentSystem();
break;
}
else{//用户名和密码不正确
System.out.println("用户名或密码有误,请重新输入!");
}
}
}
生成随机验证码
private static String getCode() {
//运用集合生成一个验证码--4个字母一个数字组成
//1、添加字符到集合
//创建字符集合
ArrayList<Character> list = new ArrayList<>();//字符集合--Character为Java中自己定义的字符类
//添加字符到集合
for (int i = 0; i < 26; i++) {
list.add((char)('a' + i));//添加小写字母
list.add((char)('A' + i));//添加大写字母
}
//2、从字符集合中抽取4次字符
Random r = new Random();//创建对象--生成随机数
int index;
char ch;
StringBuilder sb = new StringBuilder();//创建对象--字符串操作
//抽取字符
for (int i = 0; i < 4; i++) {
//从集合中获取随机索引
index = r.nextInt(list.size());
//根据随机索引得到随机字符
ch = list.get(index);
//拼接字符--StringBuilder
sb.append(ch);
}
//3、获取随机数字
int number = r.nextInt(10);
//拼接--把数字放到末尾
sb.append(number);
//4、将数字放到任意位置
//将字符串转为字符数组--先用toString转为字符串,再用toCharArray转为字符数组
char[] arr = sb.toString().toCharArray();
//获取字符数组的随机索引
int len = arr.length;//字符数组长度
int randIndex = r.nextInt(len);//获取字符数组的随机索引
//将字符数组的最大索引与随机索引指向的元素进行交换
char temp = arr[len- 1];
arr[len - 1] = arr[randIndex];
arr[randIndex] = temp;
//转为字符返回
return new String(arr);
}
验证用户名和密码
private static boolean checkUserInfo(ArrayList<User_Student> list, User_Student useInfo) {
//判断用户是否存在于集合中
boolean flag1,flag2;
for (int i = 0; i < list.size(); i++) {
//获取集合中的每一个用户对象
User_Student user = list.get(i);
//对比--用户和密码
flag1 = useInfo.getUserName().equals(user.getUserName());//用户名对比
flag2 = useInfo.getPassword().equals(user.getPassword());//密码对比
if(flag1 && flag2)
return true;
}
return false;
}
(四)忘记密码
需求
- 键盘录入用户名,判断当前用户名是否存在,如不存在,直接结束方法,并提示:未注册
- 键盘录入身份证号码和手机号码
- 判断当前用户的身份证号码和手机号码是否一致,
- 如果一致,则提示输入密码,进行修改。
- 如果不一致,则提示:账号信息不匹配,修改失败。
private static void forgetPassword(ArrayList<User_Student> list) {//忘记密码
Scanner sc = new Scanner(System.in);//创建对象--键盘录入
//1、录入用户名
System.out.println("请输入用户名:");
String userName = sc.next();//录入用户名
//验证用户名是否存在
int index1 = contains(list,userName);
if(index1 < 0){//不存在
System.out.println("该用户名未注册!");
return;
}
//2、录入手机号和身份证号码
System.out.println("请输入身份证号码:");
String ID = sc.next();//录入身份证号码
System.out.println("请输入手机号:");
String phoneNumber = sc.next();//录入手机号
//验证身份证号手机号是否一致
//获取用户对象的下标
int index2 = findIndex(list,userName);
//获取用户名为:userName 下的用户对象
User_Student user = list.get(index2);
//对比
if(!(user.getPersonID().equals(ID) && phoneNumber.equals(user.getPassword()))){//不一致
System.out.println("账号信息不匹配,修改失败!");
return;
}
//3、修改密码
String password;
while (true) {
//输入新密码
System.out.println("请输入新的密码:");
password = sc.next();//录入新密码
System.out.println("请再次输入新的密码:");
String againPassword = sc.next();//再次录入新密码
//验证密码的一致性
if(password.equals(againPassword)){
break;
}
else{
System.out.println("两次密码不一致,请重新输入");
}
}
//修改对象里的数据
user.setPassword(password);
System.out.println("密码修改成功!");
}
查询用户对象下标
private static int findIndex(ArrayList<User_Student> list, String userName) {
for (int i = 0; i < list.size(); i++) {
//获取集合中的用户对象
User_Student user = list.get(i);
//对比
if(userName.equals(user.getUserName()))
return i;
}
return -1;
}
(五)Main_student.java示例代码
package com.burial.project;
import java.util.ArrayList;
import java.util.Random;
import java.util.Scanner;
public class Main_Student {
public static void main(String[] args) {
//给定一个集合存储用户对象
ArrayList<User_Student> list = new ArrayList<>();//创建集合--存储用户对象
//选择系统
while (true) {
//初始界面菜单
System.out.println("*****欢迎来到学生管理系统*****");
System.out.println(" **** 1、登录 ****");
System.out.println(" **** 2、注册 ****");
System.out.println("****** 3、忘记密码 ******");
System.out.println("****** 0、退出系统 ******");
System.out.println("****************************");
System.out.println("请选择:");
Scanner sc = new Scanner(System.in);//创建对象--键盘录入
int input = sc.nextInt();//接收选择结果
//选择功能
switch (input){
case 1:
login(list);//登录
break;
case 2:
register(list);//注册
break;
case 3:
forgetPassword(list);//忘记密码
break;
case 0:
System.out.println("欢迎下次使用!");
System.exit(0);//退出系统
default:
System.out.println("选择有误,请重新选择!");
break;
}
}
}
private static void forgetPassword(ArrayList<User_Student> list) {//忘记密码
Scanner sc = new Scanner(System.in);
//1、录入用户名
System.out.println("请输入用户名:");
String userName = sc.next();
//验证用户名是否存在
int index1 = contains(list,userName);
if(index1 < 0){//不存在
System.out.println("该用户名未注册!");
return;
}
//2、录入手机号和身份证号码
System.out.println("请输入身份证号码:");
String ID = sc.next();
System.out.println("请输入手机号:");
String phoneNumber = sc.next();
//验证身份证号手机号是否一致
//获取用户对象的下标
int index2 = findIndex(list,userName);
//获取用户名为:userName 下的用户对象
User_Student user = list.get(index2);
//对比
if(!(user.getPersonID().equals(ID) && phoneNumber.equals(user.getPassword()))){//不一致
System.out.println("账号信息不匹配,修改失败!");
return;
}
//3、修改密码
String password;
while (true) {
//输入新密码
System.out.println("请输入新的密码:");
password = sc.next();
System.out.println("请再次输入新的密码:");
String againPassword = sc.next();
//验证密码的一致性
if(password.equals(againPassword)){
break;
}
else{
System.out.println("两次密码不一致,请重新输入");
}
}
//修改对象里的数据
user.setPassword(password);
System.out.println("密码修改成功!");
}
private static int findIndex(ArrayList<User_Student> list, String userName) {
for (int i = 0; i < list.size(); i++) {
User_Student user = list.get(i);
if(userName.equals(user.getUserName()))
return i;
}
return -1;
}
private static void register(ArrayList<User_Student> list) {//注册
Scanner sc = new Scanner(System.in);//创建对象--键盘录入
//1、键盘录入用户名
String name;
while (true) {
System.out.println("请输入用户名:");
name = sc.next();//接收用户名
//验证用户名--先验证格式,再验证是否重复
//验证长度和组合--符合返回true,否则返回false
boolean flag = checkUsername(name);
if(!flag){//false--重新录入
System.out.println("用户名不符合要求,请重新输入!");
continue;
}
//验证用户名唯一性
int index = contains(list,name);//重复返回下标,否则返回-1
if(index < 0){//-1--未重复--合法
break;
}
else{
System.out.println("用户名重复,请重新零输入!");
}
}
//2、键盘录入密码
String password;
while (true) {
//录入两次密码
System.out.println("请设置密码:");
password = sc.next();
System.out.println("请再次输入设置的密码:");
String userPassword = sc.next();
//验证两次密码是否一致
if(password.equals(userPassword)){//合法
break;
}
else{
System.out.println("两次密码不一致,请重新设置密码!");
}
}
//3、键盘录入身份证号码
String ID;
while (true) {
//录入身份证号码
System.out.println("请输入身份证号码:");
ID = sc.next();
//验证身份证号码
boolean flag = checkUserID(ID);//符合返回true,否则返回false
if(flag){//合法
break;
}
else{
System.out.println("身份证号码有误,请重新输入!");
}
}
//4、键盘录入手机号
String phoneNumber;
while (true) {
//录入手机号码
System.out.println("请输入手机号:");
phoneNumber = sc.next();
//验证手机号码
boolean flag = checkUserphoneNumber(phoneNumber);//符合返回true,否则返回false
if(flag)
break;
}
//5、存入对象
User_Student user = new User_Student(name,password,ID,phoneNumber);
//6、存入集合
list.add(user);
System.out.println("注册成功!");
for (int i = 0; i < list.size(); i++) {
User_Student use = list.get(i);
System.out.println("用户名:" + use.getUserName() + "\t" + "密码:" + use.getPassword() + "\t" +
"身份证号码:" + use.getPersonID() + "\t" + "手机号码:" + use.getPhoneNumber());
}
}
private static boolean checkUserphoneNumber(String phoneNumber) {
//长度11位
if(phoneNumber.length() != 11)
return false;
//不能以0开头
char ch = phoneNumber.charAt(0);//获取开头字符
if(ch == '0')
return false;
//必须是数字
for (int i = 0; i < phoneNumber.length(); i++) {
//获取每一位字符
ch = phoneNumber.charAt(i);
//对比
if(!(ch >= '0' && ch <= '9'))
return false;
}
return true;
}
private static boolean checkUserID(String id) {
//验证长度--18位
if(id.length() != 18)
return false;
//不能以0开头--startsWith
boolean flag = id.startsWith("0");//真的返回true,否则返回false
if(flag)
return false;
//前17位必须是数字
char ch;
for (int i = 0; i < id.length() - 1; i++) {
//获取字符串的每一位
ch = id.charAt(i);
//对比
if(!(ch >= '0' && ch <= '9'))
return false;
}
//最后一位可以是数字,也可以是字母小写 x 或大写 X
//获取最后一位
ch = id.charAt(17);
if((ch >= '0' && ch <= '9') || ch =='x' || ch == 'X')
return true;
else
return false;
}
private static int contains(ArrayList<User_Student> list, String name) {
//集合中没有对象
if(list.size() == 0)
return -1;
//遍历对比
for (int i = 0; i < list.size(); i++) {
//获取集合中的每一个用户对象
User_Student user = list.get(i);
//对比
if(name.equals(user.getUserName())){//找到了
return i;
}
}
return -1;//未找到
}
private static boolean checkUsername(String userName) {//验证用户名长度和组合
//1、长度--3~15位
int len = userName.length();//用户名长度
if(len < 3 || len > 15){
return false;
}
//2、只能是字母加数字的组合,但不能是纯数字
//字母加数字--遍历
char ch;
for (int i = 0; i < userName.length(); i++) {
//获取每一位字符--charAt
ch = userName.charAt(i);
//对比--只能是字母加数字
if(!((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z') || (ch >= '0' && ch <= '9'))){
return false;
}
}
//纯数字--遍历统计字母
int tag = 0;//统计字母
for (int i = 0; i < userName.length(); i++) {
//获取每一位字符--charAt
ch = userName.charAt(i);
//如果存在字母,则不是纯数字
if((ch >= 'a' && ch <= 'z') || (ch >= 'A' && ch <= 'Z')){
tag = 1;//若有字母出现,则将tag标记为1
break;
}
}
//如果tag大于0,说明有字母出现,返回true,否则返回false
return tag > 0;
}
private static void login(ArrayList<User_Student> list) {//登录
Scanner sc = new Scanner(System.in);//创建对象--录入登录信息
while (true) {
//1、录入用户名
System.out.println("请输入用户名:");
String userName = sc.next();//获取登录用户名
//验证用户名是否存在
int result = contains(list,userName);
if(result == -1){
System.out.println("用户名:" + userName + " 未注册,请先注册!");
return;
}
//2、录入密码
System.out.println("请输入密码:");
String passWord = sc.next();//获取登录密码
while (true) {
//3、生成验证码
String rightCode = getCode();
//4、录入验证码
//显示验证码
System.out.println(rightCode);
System.out.println("请输入验证码:");
String code = sc.next();
//判断验证码是否正确
if(!(code.equalsIgnoreCase(rightCode))){//不正确--重新输入
System.out.println("验证码有误,请重新输入!");
}
else{//验证码正确
break;
}
}
//判断密码和用户名是否正确
//封装思想:可把一些零散的金数据封装成一个对象
User_Student useInfo = new User_Student(userName,passWord,null,null);
boolean flag = checkUserInfo(list,useInfo);
if(flag){
System.out.println("登录成功!");
//创建对象,启动学生系统
Fun_Student fun = new Fun_Student();
fun.studentSystem();
break;
}
else{
System.out.println("用户名或密码有误,请重新输入!");
}
}
}
private static boolean checkUserInfo(ArrayList<User_Student> list, User_Student useInfo) {
//判断用户是否存在于集合中
boolean flag1,flag2;
for (int i = 0; i < list.size(); i++) {
//获取集合中的每一个用户对象
User_Student user = list.get(i);
//对比--用户和密码
flag1 = useInfo.getUserName().equals(user.getUserName());//用户名对比
flag2 = useInfo.getPassword().equals(user.getPassword());//密码对比
if(flag1 && flag2)
return true;
}
return false;
}
private static String getCode() {
//运用集合生成一个验证码--4个字母一个数字组成
//1、添加字符到集合
ArrayList<Character> list = new ArrayList<>();//字符集合--Character为Java中自己定义的字符类
for (int i = 0; i < 26; i++) {
list.add((char)('a' + i));//添加小写字母
list.add((char)('A' + i));//添加大写字母
}
//2、抽取4次字符
Random r = new Random();//创建对象,生成随机数
int index;
char ch;
StringBuilder sb = new StringBuilder();
for (int i = 0; i < 4; i++) {
//从集合中获取随机索引
index = r.nextInt(list.size());
//根据随机索引得到随机字符
ch = list.get(index);
//拼接字符--StringBuilder
sb.append(ch);
}
//3、获取随机数字
int number = r.nextInt(10);
//拼接--把数字放到末尾
sb.append(number);
//4、将数字放到任意位置
//将字符串转为字符数组--先用toString转为字符串,再用toCharArray转为字符数组
char[] arr = sb.toString().toCharArray();
//获取字符数组的随机索引
int len = arr.length;//字符数组长度
int randIndex = r.nextInt(len);
//将字符数组的最大索引与随机索引指向的元素进行交换
char temp = arr[len- 1];
arr[len - 1] = arr[randIndex];
arr[randIndex] = temp;
//转为字符返回
return new String(arr);
}
}
四、Fun_student.java
(一)系统主界面
需求
设计一个菜单:添加学生、删除学生、修改学生、查看学生、退出功能
//创建集合存储学生信息
ArrayList<Student> list = new ArrayList<>();
//功能选择
Scanner sc = new Scanner(System.in);//创建对象--键盘录入
int input = 0;
while(true){
menu();//调用功能界面菜单
input = sc.nextInt();//录入选择项
//选择
switch(input){
case 1:
System.out.println("请输入需要录入的学生个数:");
int num = sc.nextInt();//录入学生个数
for (int i = 1; i <= num; i++) {
addStu(list,i);//添加学生
}
break;
case 2:
delStu(list);//删除学生
break;
case 3:
modStu(list);//修改学生
break;
case 4:
findStu(list);//查找所有学生
break;
case 0:
System.exit(0);//退出系统
default:
System.out.println("选择有误,请重试!");
break;
}
}
(二)添加学生信息功能
需求
通过键盘录入学生信息,添加到集合中,注:学号必须唯一
public static void addStu(ArrayList<Student> list,int num){
//保证程序的健壮性
if(list == null){
System.out.println("集合不存在,无法添加学生信息!");
return;
}
//1、录入学生信息
//录入学号
Scanner sc = new Scanner(System.in);//创建对象--键盘录入
String id = "";//定义接收学生学号的变量
while(true){
System.out.println("请输入第" + num + "个学生的学号:");
id = sc.next();//录入学生学号
//对学号的唯一性进行判断
boolean flag = IsExit(list,id);//存在返回true,不存在返回false
if(flag){//重复
System.out.println("学号重复,请重新输入!");
}
else{//不重复--学号录入正确
break;//跳出学号录入循环
}
}
//录入姓名
System.out.println("请输入第" + num + "个学生的姓名:");
String name = sc.next();//录入学生姓名
//录入年龄
System.out.println("请输入第" + num + "个学生的年龄:");
int age = sc.nextInt();//录入学生年龄
//录入家庭地址
System.out.println("请输入第" + num + "个学生的家庭地址:");
String address = sc.next();//录入学生家庭地址
//2、放入学生对象中
//存入学生对象中--创建学生对象并赋值
Student stu = new Student(id,name,age,address);
//3、存入学生集合中
list.add(stu);
System.out.println("第" + num + "名学生信息添加完毕!");
}
学号存在性判断
public static boolean IsExit(ArrayList<Student> list,String id){
//判断传递的参数是否为空,集合是否为空
if(list == null || list.size() == 0)
return false;
//判断ID是否重复
for (int i = 0; i < list.size(); i++) {
//获取集合中的学生对象
Student stu = list.get(i);
boolean flag = id.equals(stu.getId());//比较ID
if(flag) {//true--重复
return false;
}
}
return false;//未重复
}
(三)删除学生信息功能
需求
通过键盘录入要删除学生的学号,将该学生对象从集合中删除
public static void delStu(ArrayList<Student> list){
//1、判断传递的参数是否为空,集合是否为空
if(list == null || list.size() == 0){
System.out.println("当前系统暂无学生!");
return;
}
//2、输入要删除的学号
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除的学号:");
String id = sc.next();
//查询并删除
for (int i = 0; i < list.size(); i++) {
//获取集合中的学生对象
Student stu = list.get(i);
//查询
if(id.equals(stu.getId())){//找到
//删除
list.remove(i);
System.out.println("已将学号为:" + id + " 的学生信息删除!");
return;
}
}
//未找到
System.out.println("系统中查无此人!");
}
(四)修改学生信息功能
需求
通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
public static void modStu(ArrayList<Student> list){
//1、判断传递的参数是否为空,集合是否为空
if(list == null || list.size() == 0){
System.out.println("当前系统暂无学生!");
return;
}
//2、输入要修改的学生学号
Scanner sc = new Scanner(System.in);//创建对象--键盘录入
System.out.println("请输入要修改的学生学号:");
String id = sc.next();//录入学生学号
//3、查询并修改
for (int i = 0; i < list.size(); i++) {
//获取集合中的学生对象
Student stu = list.get(i);
//判断修改的学号是否存在
if(id.equals(stu.getId())){//学号存在
//修改--姓名、年龄、家庭地址
//录入姓名
System.out.println("请输入新的学生姓名:");
String name = sc.next();//录入新的学生姓名
//录入年龄
System.out.println("请输入新的学生年龄:");
int age = sc.nextInt();//录入新的学生年龄
//录入家庭地址
System.out.println("请输入新的学生家庭地址:");
String address = sc.next();//录入新的学生家庭地址
//添加到对象中--全参方法
Student newStu = new Student(id,name,age,address);
//添加到集合中
list.add(newStu);
System.out.println("学号为:" + id + " 的学生信息已修改!");
return;
}
}
//学号不存在
System.out.println("系统中查无此人!");
}
(五)查看所有学生信息功能
需求
将集合中的学生对象信息进行展示,格式如下:
学号:张三 姓名:一段路 年龄:6 家庭地址:华夏神州
。。。。。。
public static void findStu(ArrayList<Student> list){
//1、判断传递的参数是否为空,集合是否为空
if(list == null || list.size() == 0){
System.out.println("当前系统暂无学生!");
return;
}
//2、打印--遍历
System.out.println("所有学生信息如下:");
for (int i = 0; i < list.size(); i++) {
//获取集合中的学生对象
Student stu = list.get(i);
//获取对象中的数据并打印
System.out.println("学号:" + stu.getId() + "\t" + "姓名:" + stu.getName() + "\t" +
"年龄:" + stu.getAge() + "\t" + "家庭地址:" + stu.getAddress());
}
}
(六)Fun_student.java示例代码
package com.burial.project;
import java.util.ArrayList;
import java.util.Scanner;
public class Fun_Student {
public static void studentSystem() {
//创建集合存储信息
ArrayList<Student> list = new ArrayList<>();
//功能选择
Scanner sc = new Scanner(System.in);
int input = 0;
while(true){
menu();
input = sc.nextInt();
switch(input){
case 1:
System.out.println("请输入需要录入的学生个数:");
int num = sc.nextInt();
for (int i = 1; i <= num; i++) {
addStu(list,i);
}
break;
case 2:
delStu(list);
break;
case 3:
modStu(list);
break;
case 4:
findStu(list);
break;
case 0:
System.exit(0);
default:
System.out.println("选择有误,请重试!");
break;
}
}
}
/*菜单
*/
public static void menu(){
System.out.println("***学生管理系统主功能区***");
System.out.println("*** 1、添加学生 ***");
System.out.println("*** 2、删除学生 ***");
System.out.println("*** 3、修改学生 ***");
System.out.println("*** 4、查看学生 ***");
System.out.println("*** 0、退出系统 ***");
System.out.println("************************");
System.out.println("请选择:");
}
/*添加学生:通过键盘录入学生信息,添加到集合中
*/
public static void addStu(ArrayList<Student> list,int num){
//1、录入学生信息
//录入学号
Scanner sc = new Scanner(System.in);
String id = "";
while(true){
System.out.println("请输入第" + num + "个学生的学号:");
id = sc.next();//录入学号
//对学号的唯一性进行判断
boolean flag = IsExit(list,id);//存在返回true,不存在返回false
if(flag){//重复
System.out.println("学号重复,请重新输入!");
}
else{//不重复
break;
}
}
//录入姓名
System.out.println("请输入第" + num + "个学生的姓名:");
String name = sc.next();
//录入年龄
System.out.println("请输入第" + num + "个学生的年龄:");
int age = sc.nextInt();
//录入家庭地址
System.out.println("请输入第" + num + "个学生的家庭地址:");
String address = sc.next();
//2、放入学生对象中
//创建学生对象并赋值
Student stu = new Student(id,name,age,address);
//3、放入学生集合中
list.add(stu);
System.out.println("第" + num + "名学生信息添加完毕!");
}
//学号唯一性判断
public static boolean IsExit(ArrayList<Student> list,String id){
//判断传递的参数是否为空,集合是否为空
if(list == null || list.size() == 0)
return false;
//判断ID是否重复
for (int i = 0; i < list.size(); i++) {
//获取集合中的学生对象
Student stu = list.get(i);
boolean flag = id.equals(stu.getId());//比较ID
if(flag) {//true--重复
return false;
}
}
return false;//未重复
}
/*删除学生:通过键盘录入要删除学生的学号,将该学生对象从集合中删除
*/
public static void delStu(ArrayList<Student> list){
//判断传递的参数是否为空,集合是否为空
if(list == null || list.size() == 0){
System.out.println("当前系统暂无学生!");
return;
}
//输入要删除的学号
Scanner sc = new Scanner(System.in);
System.out.println("请输入要删除的学号:");
String id = sc.next();
//查询并删除
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
//查询
if(id.equals(stu.getId())){//找到
list.remove(i);
System.out.println("已将学号为:" + id + " 的学生信息删除!");
return;
}
}
System.out.println("系统中查无此人!");
}
/*修改学生:通过键盘录入要修改学生的学号,将该学生对象其他信息进行修改
*/
public static void modStu(ArrayList<Student> list){
//判断传递的参数是否为空,集合是否为空
if(list == null || list.size() == 0){
System.out.println("当前系统暂无学生!");
return;
}
//输入要修改的学生学号
Scanner sc = new Scanner(System.in);
System.out.println("请输入要修改的学生学号:");
String id = sc.next();
//查询并修改
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
if(id.equals(stu.getId())){//存在
//修改--姓名、年龄、家庭地址
//录入姓名
System.out.println("请输入学生的姓名:");
String name = sc.next();
//录入年龄
System.out.println("请输入学生的年龄:");
int age = sc.nextInt();
//录入家庭地址
System.out.println("请输入学生的家庭地址:");
String address = sc.next();
//放入对象中
Student newStu = new Student(id,name,age,address);
//放入集合中
list.add(newStu);
System.out.println("学号为:" + id + " 的学生信息已修改!");
return;
}
}
System.out.println("系统中查无此人!");
}
/*查看学生:将集合中的学生对象信息进行展示
*/
public static void findStu(ArrayList<Student> list){
//判断传递的参数是否为空,集合是否为空
if(list == null || list.size() == 0){
System.out.println("当前系统暂无学生!");
return;
}
System.out.println("所有学生信息如下:");
for (int i = 0; i < list.size(); i++) {
Student stu = list.get(i);
System.out.println("学号:" + stu.getId() + "\t" + "姓名:" + stu.getName() + "\t" +
"年龄:" + stu.getAge() + "\t" + "家庭地址:" + stu.getAddress());
}
}
}
执行结果部分截图
注册
登录
添加以下信息,显示结果
- 23001 一一 11 中国
- 23002 段段 22 中国
- 23003 路路 33 中国