- 添加注册功能
import javax.naming.OperationNotSupportedException;
import java.util.ArrayList;
import java.util.Scanner;
public class useTest {
public static void main(String[] args) {
//创建用户类
use use = new use();
//集合记录用户名
ArrayList<String> Aname = new ArrayList<>();
//集合记录密码
ArrayList<String> Apassword = new ArrayList<>();
//集合记录身份证号码
ArrayList<String> Acard = new ArrayList<>();
//集合记录手机号码
ArrayList<String> Aphone = new ArrayList<>();
Scanner sc = new Scanner(System.in);
//主界面
while (true) {
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码 4退出");
int i = sc.nextInt();
switch (i) {
case 1 -> System.out.println("登陆");
case 2 -> Username(Aname,Apassword, Acard, Aphone);
case 3 -> System.out.println("忘记密码");
case 4 -> System.exit(0);
default -> System.out.println("没有此选项");
}
}
}
public static void Username(ArrayList<String> Aname, ArrayList<String> Apassword, ArrayList<String> Acard, ArrayList<String> Aphone) {
Scanner sc = new Scanner(System.in);
//注册用户名
while (true) {
//键盘录入用户名
int a = 0;
System.out.println("请输入用户名");
String name = sc.nextLine();
//调用方法判断长度
boolean length = length(name);
//调用方法判断是否重复
boolean repeat = repeat(Aname, name);
//调用方法判断是否包含标点符号
boolean combination1 = combination1(name);
//
boolean combination2 = combination2(name);
//判断长度
if (length) {
System.out.println("用户名长度不符合要求,请重新输入");
} else if (repeat) {
System.out.println("用户名重复,请重新输入");
} else if (combination1) {
System.out.println("用户名不能包含标点符号等,请重新输入");
} else if (combination2) {
System.out.println("用户名不能为纯数字,请重新输入");
} else {
System.out.println("用户名输入正确");
Aname.add(name);
break;
}
}
//注册密码
while (true) {
//键盘录入密码
System.out.println("请输入密码");
//输入第一遍密码
String password1 = sc.next();
System.out.println("请再次输入密码");
//输入第二遍密码
String password2 = sc.next();
//将两次密码对比,一样的话提示密码注册成功,如果不一样就重新输入
if (password1.equals(password2)) {
System.out.println("密码注册成功");
Apassword.add(password1);
break;
} else {
System.out.println("两次输入的密码不同,请重新输入");
}
}
//注册身份证号
while (true) {
System.out.println("请输入身份证号码");
//键盘录入身份证号码
String card = sc.next();
//判断身份证的长度的是否为18,不是为true,是为false
boolean b = card.length() != 18;
//判断身份证的第一位是否为0,不是为true,是为false
boolean b1 = card.charAt(0) != '0';
//调用方法判断前17位是否为纯数字
boolean num = num(card);
//判断最后一位是否在0~9,x,X的范围内
boolean last = last(card);
if (b) {
System.out.println("身份证长度错误,请重新输入");
} else if (!b1) {
System.out.println("身份证第一位格式错误,请重新输入");
} else if (num) {
System.out.println("身份证前17位格式错误,请重新输入");
} else if (last) {
System.out.println("身份证最后一位格式错误,请重新输入");
} else {
System.out.println("身份证录入成功!");
Acard.add(card);
break;
}
}
//注册手机号
while (true) {
//键盘录入手机号
System.out.println("请输入你的手机号码");
String phone = sc.next();
boolean b = phone.length() != 11;//相等为false,不相等为true
boolean b1 = phone.charAt(0) != '0';//相等为false,不相等为true
boolean digital = digital(phone);
if (b) {
System.out.println("手机号长度输入错误,请重新输入");
} else if (!b1) {
System.out.println("手机号第一位不能为0,请重新输入");
} else if (digital) {
System.out.println("手机号只能为纯数字");
} else {
System.out.println("手机号验证成功");
Aphone.add(phone);
break;
}
}
System.out.println("账号注册成功!!!");
System.out.println("请记住您的账户密码!!!");
}
//判断用户名的长度是否符合要求
public static boolean length(String name) {
if (name.length() > 15 || name.length() < 3) {
return true;
}
return false;
}
//判断用户名是否存在 repeat-重复
public static boolean repeat(ArrayList<String> Aname, String name) {
//利用循环遍历用户名集合判断用户名是否重复
for (int i = 0; i < Aname.size(); i++) {
boolean panduan = Aname.get(i).equals(name);
if (panduan) {
System.out.println("用户名重复,请重新输入");
return true;
}
}
return false;
}
//判断用户名的组合是否正确 组合=combination
public static boolean combination1(String name) {
//创建一个数组用来记录数字和字母,然后遍历和输入的用户名进行对比
//如果用户名里有一个在数组中不存在,那么就输入错误,需要重新输入
char[] zmsz = new char[62];
char a = 'a' - 1;
char A = 'A' - 1;
char num = '0' - 1;
//将需要的数据添加到数组中
for (int i = 0; i < zmsz.length; i++) {
if (i > 51) {
num++;
zmsz[i] = num;
} else if (i > 25) {
A++;
zmsz[i] = A;
} else {
a++;
zmsz[i] = a;
}
}
//将数组装换成字符串
String s = "";
for (int i = 0; i < zmsz.length; i++) {
s = s + zmsz[i] + "";
}
//利用循环嵌套,将name里的每一个字符进行对比
int b;
boolean equals = true;
for (int i = 0; i < name.length(); i++) {
b = 0;
for (int n = 0; n < zmsz.length; n++) {
//转换成字符串形式
String c = name.charAt(i) + "";
String s1 = s.charAt(n) + "";
equals = c.equals(s1);
if (!equals) {
//将用户名的每一个字符进行对比
//当用户名的字符和数组中的字符不同时,输出false,相同时输出true
//当输出false时,b++;
//如果字符存在'a'~'b',A~B,0~9中 那么就只会有61个false
b++;
}
//当b==62时,说明用户名中有字符不符合要求
if (b == 62) {
//如果有不同的,就说明不符合要求,返回true
return true;
}
}
}
//符合要求,返回false
return false;
}
//判断用户名的组合是否为纯数字 组合=combination
public static boolean combination2(String name) {
char a = 'a' - 1;
char A = 'A' - 1;
char[] zm = new char[52];
//利用循环将字母的大小写添加到数组中
for (int i = 0; i < zm.length; i++) {
if (i > 25) {
a++;
zm[i] = a;
} else {
A++;
zm[i] = A;
}
}
//定义一个变量用来记录
int num1 = 0;
//先利用循环将name遍历出来,在嵌套zm(字母的大小写).length的循环
//将name里面的字符和zm(字母的大小写)数组进行对比
for (int i = 0; i < name.length(); i++) {
for (int n = 0; n < zm.length; n++) {
//将char转换为String
String sz = zm[n] + "";
String sn = name.charAt(i) + "";
//对比 当name字符为字母时,输出true
//当name字符为数字时,输出false
boolean equals = sn.equals(sz);
//当对比结果为true时,num1++
if (equals) {
num1++;
}
}
}
//当num1为0时,代表用户名为纯数字,返回true
if (num1 == 0) {
return true;
}
return false;
}
//判断身份证前17位是否为纯数字
public static boolean num(String card) {
//添加数组用来记录0~9的数字
char[] num = new char[10];
char num1 = '0' - 1;
//利用循环将数字添加到数组中
for (int i = 0; i < num.length; i++) {
num1++;
num[i] = num1;
}
//利用循环将身份证的字符遍历出来
//在嵌套循环将身份证的每一个字符和数字数组对比
//定义变量用来记录
for (int i = 0; i < card.length() - 1; i++) {
int numer = 0;
for (int n = 0; n < num.length; n++) {
//对比,相同为true,不同为false
boolean equals = (card.charAt(i) + "").equals(num[n] + "");
//当输出为false时,numer++
if (!equals) {
numer++;
}
}
//因为身份证前17位只能是数字(0~9),所以正常来说numer只能等于9
//当numer等于10时,代表前17位有字母,所以返回true
if (numer == 10) {
return true;
}
}
return false;
}
//判断身份证的最后一位
public static boolean last(String card) {
//添加数组用来记录0~9的数字
char[] num = new char[12];
char num1 = '0' - 1;
char x = 'x';
char X = 'X';
//定义变量用来记录
int numer = 0;
//利用循环将数字添加到数组中
for (int i = 0; i < num.length; i++) {
num1++;
num[i] = num1;
if (i == 10) {
num[i] = x;
} else if (i == 11) {
num[i] = X;
}
}
//将身份证最后一位转为字符串
String s = card.charAt(card.length() - 1) + "";
//利用循环判断
for (int i = 0; i < num.length; i++) {
//将身份证的最后一位拿出来和数组中的值对比,相同为true
boolean equals = s.equals(num[i] + "");
//当equals==true时,numer++
if (equals) {
numer++;
}
}
//因为身份证只能是0~9和x以及X,所以当格式正确的时候
//numer==1,当numer==0时表示,输入的身份证最后一位不在0~9,x,X的范围中,返回true
if (numer == 0) {
return true;
} else {
return false;
}
}
//判断手机号是否都为数字 数字-digital
public static boolean digital(String phone) {
//添加数组 记录0~9的数字
char num = '0' - 1;
char[] num1 = new char[10];
//利用循环将数字添加到数组中
for (int i = 0; i < num1.length; i++) {
num++;
num1[i] = num;
}
//定义变量记录数据
int num2 = 0;
//利用循环将手机号码的字符遍历出来
//在嵌套循环将手机号的每一个字符和数字数组对比
for (int i = 0; i < phone.length(); i++) {
for (int n = 0; n < num1.length; n++) {
//将字符转换为字符串
String s = phone.charAt(i) + "";
String s1 = num1[n] + "";
//对比,数据相同时为true
boolean equals = s.equals(s1);
//当equals的值为true时,num2++
if (equals) {
num2++;
}
}
}
/*
对比举例:
5---1 false 当equals的结果为true时
5---2 false num2++
5---3 false 因为如果手机号是纯数字的话,num2必定加一
5---4 false 又因为手机号一共有11位
5---5 true 所以,当num2<11时,表示手机号不是纯数字
5---6 false 所以返回true
5---7 false
5---8 false
5---9 false
5---0 false
*/
if (num2 < 11) {
return true;
}
return false;
}
}
标签:++,代码,System,length,实操,println,true,out
From: https://www.cnblogs.com/Alluw/p/16897308.html