案例介绍:编写程序实现简单的登录注册功能。程序包含以下4个功能:
(1)登录功能,用户输入正确的账号密码进行成功;
(2)注册功能,输入用户名和密码进行注册;
(3)查看功能,查看所有的用户名与密码;
(4)退出功能,退出系统。
用户可以输入对应的编号进行相应的功能操作。例如,输入2进入注册功能,输入用户名和密码进行注册。
案例思路:
- 在存储账号密码时,如果对每一个用户的账号密码都定义两个变量存储,则会出现过多孤立的变量,很难一次性将全部数据持有。此时,可以使用数组解决多个数据的存储问题。创建一个可以存储多个用户账号数组和一个可以存储多个用户密码的数组。需要注意的是,需要在两个数组前加上static属性,这样做是为了让本类都可以使用到这两个数组。
- 从运行结果可以看出,我们首先打印出了可以操作的列表以及序列号,我们可以定print方法来实现打印。
- 从运行结果可以看出,查看功能是将已有的用户信息打印,我们需要使用for循环打印我们已有的账号数组和密码数组。
- 注册功能是在定义好的账号数组和密码数组添加新的数据,这里我们会需要的增加账号和密码数组的长度。增加原有数组长度时,需要先定义两组新的数组,在原有数组的长度上增加长度,并将原有的数组复制进新的数组。
将原有的数组复制进新的数组时需要使用到System的arraycopy方法,arraycopy方法的用法如下所示。
arrayCopy(arr1, 2, arr2, 5, 10);
此句代码是将arr1数组里从索引为2的元素开始, 复制到数组arr2里的索引为5的位置, 复制的元素个数为10个。
5.登录功能可以使用for循环判断用户输入的字符与数组中的字符是否匹配,以此来判断是否登录成功。
6.退出功能可以使用System的exit方法。
7."登录注册"程序明确的分为4个功能,如果将多个独立的功能代码写在一起,代码将会相对冗长,可以使用针对不同功能将其封装到不同的方法中,将完整独立的功能分离出来,然后只需要在程序的main()方法中调用方法即可。
案例实现:
public class Main {
// 存储用户名和密码
public static String arr1[] = new String[3];
public static String arr2[] = new String[3];
static int index = 0;
public static void main(String[] args) {
arr1[0] = "heima";
arr2[0] = "123456";
while (true) {
print();
Scanner scan = new Scanner(System.in);
System.out.println("请选择功能:");
String str = scan.next();
if (str.equals("1")) {
login();
} else if (str.equals("2")) {
register();
} else if (str.equals("3")) {
show(); //用户退出
break;
} else if (str.equals("0")) {
System.exit(0);
} else {
System.out.println("输入错误");
}
}
}
/*
* 登录功能,键盘输入用户名与密码
* 使用for循环加if判断验证输入的用户名与密码是否正确
*/
public static void login() {
for (int i = 0; i < 3; i++) {
Scanner scan1 = new Scanner(System.in);
System.out.println("请输入用户名:");
String str1 = scan1.next();
Scanner scan2 = new Scanner(System.in);
System.out.println("请输入密码:");
String str2 = scan2.next();
for (int i1 = 0; i1 < arr2.length; i1++) {
if (str1.equals(arr1[i1]) && str2.equals(arr2[i1])) {
System.out.println("登录成功!");
return;
}
}
System.out.println("登录失败,请重新输入!");
}
}
/*
* 注册功能,键盘输入用户名与密码
* 定义一个boolean变量,使用for循序判断用户是否存在
* 如果用户不存在,在数组中插入注册的账号密码时
* 可能会有数组长度不够的情况,所以需要使用到
* 增加数组的长度,这里调用增加数组长度的方法add()。
*/
public static void register() {
Scanner scan1 = new Scanner(System.in);
System.out.println("请输入用户名:");
String str1 = scan1.next();
Scanner scan2 = new Scanner(System.in);
System.out.println("请输入密码:");
String str2 = scan2.next();
boolean flag = true;
for (int i = 0; i < arr1.length; i++) {
if (str1.equals(arr1[i])) {
System.out.println("用户名已存在");
flag = false;
}
}
if (flag == true) {
index++;
if (index < arr1.length) {
arr1[index] = str1;
arr2[index] = str2;
System.out.println("注册成功!");
} else {
add();
arr1[index] = str1;
arr2[index] = str2;
System.out.println("注册成功!");
}
}
}
/*
* 查看功能
* 使用for循环打印两个数组的长度
*/
public static void show() {
for (int i = 0; i < arr1.length; i++) {
if (arr1[i] != null) {
System.out.println("用户名:" + arr1[i] + "," + "密码:"+ arr2[i]+ "\n");
}
}
}
/*
* 增加数组长度
* 先定义两个新的数组并在原有的数组长度上加3
* 使用System的arraycopy方法复制原有的数组到新的数组
* 最后将新的数组赋值给原有的arr1与aar2
*/
public static void add() {
String newarray1[] = new String[arr1.length + 3];
String newarray2[] = new String[arr1.length + 3];
System.arraycopy(arr1, 0, newarray1, 0, arr1.length);
System.arraycopy(arr2, 0, newarray2, 0, arr1.length);
arr1 = newarray1;
arr2 = newarray2;
show();
}
/*
* 可操作功能的显示
*/
public static void print() {
System.out.println("--------------------黑马管理系统--------------------");
System.out.println(" 1.登录功能 (login) ");
System.out.println(" 2.注册功能(register) ");
System.out.println(" 3.查看(show) ");
System.out.println(" 0.退出(exit) ");
System.out.println("--------------------黑马管理系统--------------------");
}
}
在文件2-6中,第5~7行代码使用static定义了全局变量arr1[]数组用于用户名存储,arr2[]数组用于密码存储,index用于数组的下标。第34-50行代码定义了用户登录的方法,使用for循环数组的长度,使用if判断输入的用户名与密码是否与数组中的匹配,可以得出登录成功或者失败。
第58~85行代码是用户注册的方法,定义一个boolean变量,使用for循序判断用户是否存在如果用户不存在,在数组中插入注册的账号密码时可能会有数组长度不够的情况,所以需要使用到增加数组的长度,这里调用增加数组长度的方法add()。
第90~96行代码是查看方法是实现,使用for循环打印arr1[]与arr2[]。
第103~111行代码是增加数组长度的方法,先定义两个新的数组并在原有的数组长度上加3使用System的arraycopy方法复制原有的数组到新的数组最后将新的数组赋值给原有的arr1与aar2。
第115~120行代码是对可操作功能的显示。
第11~28行代码是main方法,使用while循环用户操作,调用封装好的方法实现登录注册小功能。