您的位置:首页 > 编程语言 > Java开发

【Java】基于ArrayList实现的简单登录注册

2015-11-29 21:27 951 查看

—>需求

用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^
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: