【Java】基于ArrayList实现的简单登录注册
—>需求
用Java集合框架Collection接口的ArrayList实现类来做一个简单的登录注册功能。用户选择注册功能注册一个用户名和密码,然后选择登录功能进行登录。登陆成功后,有一个猜数字的小游戏。实现的功能有:
- 注册功能
- 登录功能
- 小游戏功能
—>分析
Java语言最本质的特点就是面向对象。为了使我们的功能更符合面向对象思想,我们首先考虑涉及到哪些对象、类:
- 用户类
- 成员变量
- 用户名
- 密码
- 构造方法
- 无参构造器
- 代餐构造器
- 成员方法
- getXxx()
- setXxx()
- 登录
- 注册
- 成员变量
- 测试类
- main()
鉴于用户类可能还包括其他的成员变量和成员方法,为方便将来扩展,我们把用户类划分为用户描述类、功能操作类。如下:
- 用户描述类
- 成员变量
- 用户名
- 密码
- 构造方法
- 无参构造器
- 带参构造期
- 成员方法
- getXXX()
- setXXX()
- 成员变量
- 功能操作类
- 成员方法
- 登录
- 注册
- 成员方法
- 测试类
- mian()
—>实现
在测试类中创建用户描述类的实例化对象,并通过对象调用其功能方法。按功能分包如下:
如图所示,依次为操作功能接口、操作功能接口实现类、猜数字游戏类、用户描述类、测试类。
操作功能接口UserDao.java源码如下:
package com.liuyi.dao;
import com.liuyi.pojo.User;
/*
* 这是针对用户进行操作的接口
*
* @Version V1.0
*
* */
public interface UserDao {
/*
* 这是用户的登录功能
*
* username 用户名
*
* password 密码
*
* return 返回登录是否成功
* */
public abstract boolean isLogin(String username,String password) ;
/*
* 这是用户注册功能
*
* user 这是要注册的用户信息
* */
public abstract void regist(User user) ;
}
操作功能接口实现类UserDaoImpl.java源码如下:
package com.liuyi.dao.impl;
import java.util.ArrayList;
import com.liuyi.dao.UserDao;
import com.liuyi.pojo.User;
/*
* 这是用户操作的具体实现类(集合版)
*
* */
public class UserDaoImpl implements UserDao {
// 为了让多个方法访问同一个集合,把集合定义为成员变量
// 为了不让外部访问,定义为private
// 为了让多个对象共享一个集合,定义为static
private static ArrayList<User> array = new ArrayList<User>();
@Override
public boolean isLogin(String username, String password) {
boolean flag = false;
for ( User us : array ) {
if (us.getUsername().equals(username) && us.getPasword().equals(password)) {
flag = true;
break;
}
}
return flag;
}
@Override
public void regist(User user) {
// 把用户信息存储到集合
//ArrayList<User> array = new ArrayList<User>();
array.add(user);
}
}
猜数字小游戏类GuessNumberGame.java源码如下:
package com.liuyi.game;
import java.util.Scanner;
/*
* 猜数字小游戏
*
* @Version V1.0
*
* */
public class GuessNumberGame {
public GuessNumberGame() {
super();
}
//游戏开始
@SuppressWarnings("resource")
public static void start() {
// 产生一个随机数
int number = (int)(Math.random()*100) + 1;
// 定义一个统计变量
int count = 0;
// 游戏开始
while (true) {
// 键盘录入一个数据
System.out.println("请输入一个你猜的数据(1--100):");
Scanner sc = new Scanner(System.in);
int guessNumber = sc.nextInt();
count++;
// 判断
if ( guessNumber>number ) {
System.out.println("你猜的数据" + guessNumber + "大了。再接再厉喔");
} else if ( guessNumber<number ) {
System.out.println("你猜的数据" + guessNumber + "小了。再接再厉喔");
} else {
System.out.println("恭喜你!" + count + "次就猜中啦");
break;
}
}
}
}
用户描述类User.java源码如下:
package com.liuyi.pojo;
/*
* 这是用户基本描述类
*
* @Version V1.0
*
* */
public class User {
// 用户名
private String username;
// 密码
private String pasword;
public User() {
super();
}
public String getUsername() {
return username;
}
public void setUsername(String username) {
this.username = username;
}
public String getPasword() {
return pasword;
}
public void setPasword(String pasword) {
this.pasword = pasword;
}
}
测试类UserTest.java源码如下:
package com.liuyi.test;
import java.util.Scanner;
import com.liuyi.dao.UserDao;
import com.liuyi.dao.impl.UserDaoImpl;
import com.liuyi.game.GuessNumberGame;
import com.liuyi.pojo.User;
/*
* 用户测试类
*
* @Version V1.0
*
* 两个小问题:
* 1.多个对象共享一个成员变量,则该长远变量应该用静态,即static修饰。
* 2.循环里如果有switch语句,switch语句里面的break结束的只是switch语句,而不是外层循环。
*
* */
public class UserTest {
@SuppressWarnings("resource")
public static void main(String[] args) {
while (true) {
// 欢迎界面。给出选择项
System.out.println("--------------欢迎光临--------------");
System.out.println("1---->登录");
System.out.println("2---->注册");
System.out.println("3---->退出");
System.out.println("请输入你的选择:");
// 键盘录入选择。根据选择做不同的操作
Scanner sc = new Scanner(System.in);
// 为了后面录入信息的方便,所有的数据录入都用字符串接收
String choiceString = sc.nextLine();
// switch语句的多个地方要使用,所以我定义在外面
UserDao ud = new UserDaoImpl();
// 这里用switch进行选择操作
switch (choiceString) {
case "1":
// 登录界面。请输入用户名和密码
System.out.println("--------------登录界面--------------");
System.out.println("请输入用户名:");
String username = sc.nextLine();
System.out.println("请输入密码:");
String password = sc.nextLine();
// UserDao ud = new UserDaoImpl();
boolean flag = ud.isLogin(username, password);
if ( flag ) {
System.out.println("恭喜你!登陆成功。可以开始玩游戏啦");
System.out.println("你要玩吗(y/n)?");
while (true) {
String resultString = sc.nextLine();
if (resultString.equalsIgnoreCase("y")) {
GuessNumberGame.start(); // 猜数字游戏开始
System.out.println("你还玩吗(y/n)?");
} else {
break;
}
}
System.out.println("谢谢使用。欢迎下次光临喔^O^ ");
System.exit(0); //直接退出外层while死循环
// break; // 注意,这里的break结束的是switch,而不是外循环
} else {
System.out.println("用户名或密码有误,登录失败咯");
}
break;
case "2":
// 注册界面。请输入用户名和密码
System.out.println("--------------注册界面--------------");
System.out.println("请输入用户名:");
String newUsername = sc.nextLine();
System.out.println("请输入密码:");
String newPassword = sc.nextLine();
// 把注册的用户名、密码封装到一个对象中
User user = new User();
user.setUsername(newUsername);
user.setPasword(newPassword);
// 调用注册功能 多态实现
// UserDao ud = new UserDaoImpl();
// 具体类实现 不建议使用。因为将来可能会修改实现类
// UserDaoImpl ud = new UserDaoImpl();
ud.regist(user);
System.out.println("注册成功");
break;
case "3":
default:
System.out.println("谢谢使用。欢迎下次光临喔^O^");
System.exit(0); //直接退出外层while死循环
break;
}
}
}
}
—>总结
ArrayList作为Java集合框架Collection接口的子接口List接口的实现类,底层实现代码的数据结构是数组,具有查询快、增删慢、线程不安全的特点。另外,作为Java集合框架中最长赢得实现类之一,ArrayList实现类支持泛型,因此我们可以把它封装成一个栈结构,满足栈的基本特点:先进后出。当然,还可以实现很多其他而功能,我会后续更新^O^
阅读更多声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:没有了
- 下一篇:没有了
