一、这是一个黑马程序员提供的java基础语法练习项目
二、要求是可以实现登录、注册和忘记密码三个功能。需要创建一个用户类,他们包含下列属性:用户名、密码、身份证号码、手机号码。整个系统的功能需要满足:
三、用户类
package SMS2;
public class Student {
private String username;
private String password;
private String id;
private String phone_number;
public Student() {
}
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 getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
public String getPhone_number() {
return phone_number;
}
public void setPhone_number(String phone_number) {
this.phone_number = phone_number;
}
}
四、测试类
package SMS2;
import java.util.ArrayList;
import java.util.Scanner;
public class Student_test {
public static void main(String[] args) {
ArrayList<Student> list=new ArrayList<Student>();
Scanner sc=new Scanner(System.in);
boolean flag=true;
while (flag){
System.out.println("欢迎来到学生管理系统");
System.out.println("请选择操作1登录 2注册 3忘记密码");
int click=sc.nextInt();
switch (click){
case 1:
System.out.println("请输入用户名");
String login_name=sc.next();
if (check_enroll(list,login_name)!=true) {
System.out.println("用户名未注册,请先注册");
break;
}else {
System.out.println("请输入密码");
String login_password=sc.next();
char [] captcha=generate_CAPTCHA();
String str = new String(captcha);
System.out.println("请输入验证码:"+str);
while (true){
String input_captcha= sc.next();
char[] input_capt=input_captcha.toCharArray();
if (check_CAPTCHA(captcha,input_capt)) break;
else {
captcha=generate_CAPTCHA();
str = new String(captcha);
System.out.println("验证码不正确,请重新输入:"+str);
}
}
int count=0;
while (true){
if (check_loginpassword(list,login_name,login_password)){
System.out.println("登录中,欢迎访问");
break;
}else {
System.out.println("密码错误,请重新输入");
login_password=sc.next();
}
}
}
flag=false;
break;
case 2:
System.out.println("请输入用户名,用户名长度必须在3~15位之间");
String name=sc.next();
if (check_username1(list,name)&&check_username2(name)){
Student s=new Student();
list.add(s);
s.setUsername(name);
System.out.println("请输入密码");
while (true){
String password1=sc.next();
System.out.println("请再次确认密码");
String password2=sc.next();
if (password1.equals(password2)) {
s.setPassword(password1);
System.out.println("密码设置成功,请输入身份证号");
break;
}else System.out.println("两次输入不一致,请重新输入密码");
}
while (true){
String id=sc.next();
if (check_id(id)){
s.setId(id);
System.out.println("身份证号验证成功,请输入手机号");
break;
}else System.out.println("请再次输入身份证号");
}
while (true){
String phonenum=sc.next();
if (check_phonenum(phonenum)){
s.setPhone_number(phonenum);
System.out.println("手机号验证成功,信息录入完成");
break;
}
}
}
break;
case 3:
System.out.println("请输入用户名");
login_name=sc.next();
if (check_enroll(list,login_name)!=true) {
System.out.println("用户名未注册,请先注册");
break;
}else{
System.out.println("请输入身份证号");
String id=sc.next();
System.out.println("请输入手机号");
String phone_num=sc.next();
if (check_info(list,login_name,id,phone_num)>=0){
System.out.println("请输入新密码");
list.get(check_info(list,login_name,id,phone_num)).setPassword(sc.next());
System.out.println("密码修改成功");
}else System.out.println("账号信息不匹配,修改失败");
}
break;
}
}
}
//检查用户名是否存在
public static boolean check_username1(ArrayList<Student> list,String username) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getUsername().equals(username)) {
System.out.println("用户名已存在");
return false;
}
}
return true;
}
//检查用户名是否合法
public static boolean check_username2(String username) {
boolean flag=true;
if (username.length()<3||username.length()>15){
System.out.print("长度不合法,用户名长度必须在3~15位之间;");
flag=false;
}
boolean check_num=false;
boolean check_alphabet=false;
for (int i=0;i<username.length();i++){
char alphabet=username.charAt(i);
if (check_alphabet&&check_num) break;
else if (alphabet>=48&&alphabet<=57) check_num=true;
else if ((alphabet>=65&&alphabet<=90)||(alphabet>=97&&alphabet<=122)) check_alphabet=true;
else continue;
}
if ((check_alphabet!=true)||(check_num!=true)) {
System.out.print("用户名组成不合法,只能是字母加数字的组合,但是不能是纯数字;");
flag=false;
}
if (flag!=true) System.out.println();
return flag;
}
//检查id是否合法
public static boolean check_id(String id) {
boolean flag=true;
if (id.length()!=18) {
System.out.print("身份证号长度不合法;");
flag=false;
}else {
for (int i=0;i<18;i++){
if (i<17&&(id.charAt(i)<48||id.charAt(i)>57)){
System.out.print("身份证号前17位,必须都是数字;");
flag=false;
}else if (i==17&&((id.charAt(i)!=88&&id.charAt(i)!=120)&&(id.charAt(i)<48||id.charAt(i)>57))){
System.out.print("身份证号最为一位要么是数字,要么是大写X或小写x;");
flag=false;
}
}
}
if (id.charAt(0)=='0'){
System.out.print("身份证号不能以0开头;");
flag=false;
}
if (flag!=true) System.out.println();
return flag;
}
//检查手机号是否合法
public static boolean check_phonenum(String phonenum) {
boolean flag=true;
if (phonenum.length()!=11){
flag=false;
System.out.print("手机号长度必须为11位;");
}
if (phonenum.charAt(0)=='0'){
flag=false;
System.out.print("手机号不能以0开头;");
}
for (int i=0;i<phonenum.length();i++){
if (phonenum.charAt(i)<48||phonenum.charAt(i)>57){
flag=false;
System.out.println("手机号必须都是数字");
}
}
if (flag!=true) System.out.println();
return flag;
}
//检查登录用户名是否存在
public static boolean check_enroll(ArrayList<Student> list,String login_name) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getUsername().equals(login_name)) return true;
}
return false;
}
//检查登录密码是否正确
public static boolean check_loginpassword(ArrayList<Student> list,String login_name,String password) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getUsername().equals(login_name)&&list.get(i).getPassword().equals(password))
return true;
}
return false;
}
//生成验证码
public static char[] generate_CAPTCHA() {
int rand_num1=(int)(Math.random()*5);
char [] arr=new char[5];
for (int i = 0; i < arr.length; i++) {
if (i==rand_num1){//数字
arr[i]=(char)((int)(Math.random()*10)+48);
}else {
int rand_num2=(int)(1+Math.random()*2);//判断大小写
int rand_num3=(int)(0+Math.random()*26);//选择字母
if (rand_num2==1) arr[i]=(char)((int)(65+Math.random()*26));
else arr[i]=(char)((int)(97+Math.random()*26));
}
}
return arr;
}
//检查验证码是否正确
public static boolean check_CAPTCHA(char[] captcha1,char[] captcha2) {
if (captcha1.length!=captcha2.length) return false;
char c1=' ';
char c2=' ';
for (int i = 0; i < captcha1.length; i++) {
c1=Character.toUpperCase(captcha1[i]);
c2=Character.toUpperCase(captcha2[i]);
if(c1!=c2) return false;
}
return true;
}
//检查信息是否正确
public static int check_info(ArrayList<Student> list,String login_name,String id,String phone_num) {
for (int i = 0; i < list.size(); i++) {
if (list.get(i).getUsername().equals(login_name)&&list.get(i).getId().equals(id)&&list.get(i).getPhone_number().equals(phone_num)) return i;
}
return -1;
}
}
五、总结
1.整体逻辑并不复杂