Java实现登录、注册(使用数组存储数据)

用户登录注册案例分析

需求:
	编写一个系统,需要如下功能:
	1,用户注册
		注册完成后,保存起来,方便下次登录。
	2,用户登录
		登录成功,提示登录成功
		登录失败,提示三次以后加入黑名单
	
思路:
	怎么分析?
		1,有几个对象
		2,对象有什么属性和功能
		3,类之间的关系
	实际开发中,把类分为两种
		基本类:封装基本数据,eg	User
		操作类:对基本类的对象进行操作
		
	1,几个类以及类的成员
		用户类:
			属性:账户、密码
			行为:getters/setters
		用户操作类:
			登录		注册
		用户测试类:
			属性:无
			行为:main、测试登录以及注册功能
	2,类之间的关系
		用户操作类:
			创建用户对象、并且对该对象进行操作
		用户测试类:
			创建用户操作类对象,并且对该对象中的方法进行测试(期间或许会用到基本用户类对象)
		
		包结构:
			pojo(domain、bean):基本类
			dao 
				impl
					在dao.impl包中定义dao的具体实现方法
			test:存放测试类
			
		分层:
			cn.itcast.login.pojo
			cn.itcast.login.test
			cn.itcast.login.dao
			cn.itcast.dao.impl
			
		数据持久层(Dao)、业务逻辑层(Service)、表现层(struts/springMVC)
		表现层:MVC(model, view,controller)
		测试
		
		
通过比较,我们的用户登录注册最终选择按操作分:
	分包:
		cn.itcast.pojo一个简单的实体类
		cn.itcasst.dao操作接口
		cn.itcast.dao.impl操作的具体实现
		cn.itcast.test测试
		
注意:
	写方法的时候,如果参数超过三个,一般传递对象
package cn.itcast.test;

import java.util.Scanner;
//import cn.itcast.dao.UserDao;
import cn.itcast.dao.impl.UserDaoImpl;
import cn.itcast.pojo.User;

public class UserTest {

	/**
	 * @param args
	 * 
	 * @param	登录测试
	 * 
	 * @param	注册测试
	 */
	public static void main(String[] args) {
		while (true) {
			System.out.println("欢迎来到itcast");
			System.out.print("1:登录\t");
			System.out.print("2:注册\t");
			System.out.println("3: 退出");
			System.out.println("请根据数字进行选择:");
			Scanner sc = new Scanner(System.in);
			String line = sc.nextLine();

			switch (line) {
			case "1":
				System.out.println("欢迎来到登录界面!");
				// 键盘录入信息
				System.out.print("请输入用户名:");
				String username = sc.nextLine();
				System.out.print("请输入密码:");
				String password = sc.nextLine();
				/*
				 * 多态用法 UserDao ud = new UserDaoImpl(); 具体类用法
				 */
				UserDaoImpl udi = new UserDaoImpl();
				boolean flag = udi.isLogin(username, password);
				if (flag) {
					System.out.println("欢迎来到英雄联盟!");
					System.exit(0);
				} else {
					System.out.println("登录失败,即将返回主界面!!!");
				}
				break;
			case "2":
				System.out.println("欢迎来到注册界面");
				// 键盘录入用户信息
				System.out.println("请输入用户名:");
				String newUsername = sc.nextLine();
				// 此处可以加入判断,判断用户名是否已经存在、邮箱、电话都可以执行此操作。
				System.out.println("请输入密码:");
				String newPassword = sc.nextLine();
				System.out.println("请输入邮箱:");
				String newEmail = sc.nextLine();
				System.out.println("请输入电话:");
				String newPhone = sc.nextLine();

				// 把数据用对象进行封装
				User user = new User();
				user.setUsername(newUsername);
				user.setPassword(newPassword);
				user.setEmail(newEmail);
				user.setPhone(newPhone);

				// 创建用户操作类对象
				UserDaoImpl newUdi = new UserDaoImpl();

				// 调用注册方法
				newUdi.regist(user);
				System.out.println("注册成功");
				break;
			case "3":
				System.out.println("谢谢你的使用");
				System.exit(0);
				break;
			default:
				System.out.println("输入有误,返回主界面!!!");
				break;
			}

		}
	}

}

package cn.itcast.pojo;

public class User {
	private String username;
	private String password;
	private String email;
	private String phone;

	public User() {
		super();
		// TODO Auto-generated constructor stub
	}

	public User(String username, String password, String email, String phone) {
		super();
		this.username = username;
		this.password = password;
		this.email = email;
		this.phone = phone;
	}

	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 getEmail() {
		return email;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getPhone() {
		return phone;
	}

	public void setPhone(String phone) {
		this.phone = phone;
	}

	@Override
	public String toString() {
		// TODO Auto-generated method stub
		return "User [username=" + username + ",password=" + password
				+ ",email=" + email + ",phone" + phone + "]";
	}

}

package cn.itcast.dao;

import cn.itcast.pojo.User;//不导包。User不能使用
/**
 * 用户接口操作
 * 
 * @author s-star
 *
 */
public interface UserDao {
/**
 * 这是用户登录的功能
 * 
 * @param username
 * 			用户名
 * @param password
 * 			密码
 * @return	返回登录是否成功
 */
	public abstract boolean isLogin(String username,String password);
	
/**
 * 这是用户注册的功能
 * 
 * @param	user
 * 				要注册的用户
 */
	public abstract void regist(User user);
}

package cn.itcast.dao.impl;

//import java.util.ArrayList;
//import java.util.Collection;

import cn.itcast.dao.UserDao;
import cn.itcast.pojo.User;

/**
 * 用户操作类实现
 * 
 * @author s-star 如何实现呢?如果是注册一个用户,用User保存即可。 但是,注册肯定不止一个用户,所以我们得想想用什么存储?
 *         目前,我们学过的能够存储的:对象,对象数组。通过分析,我们最终选择对象数组。 问题:
 *         用对象数组,就得定义数组;定义数组,就得知道数组长度。 所以,对象数组不够好,最终选择集合。 不过还没学,只能用对象数组,
 *         自己固定一个长度:5.
 */

public class UserDaoImpl implements UserDao {
	// 定义成员变量数组
	private static User[] users = new User[5];
	private static int index = 0;

	// Collection c = new ArrayList();
	//
	// User users = new User();

	@Override
	public boolean isLogin(String username, String password) {
		/*
		 * 遍历数组,获取到每一个对象, 然后再拿着对象的用户名和密码 和传递过来的用户名和密码进行比较
		 */
		boolean flag = false;
		for (int i = 0; i < users.length; i++) {
			User user = users[i];
			// 判断是否为null
			if (user != null) {
				if (user.getUsername().equals(username)
						&& user.getPassword().equals(password)) {
					flag = true;
					break;
				}
			}
		}
		return flag;
	}

	@Override
	public void regist(User user) {
		users[index++] = user;
	}

}


  • 16
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我来给你讲一下Java迭代器的数组实现。 首先,我们需要定义一个迭代器类,这个类需要实现Java标准库中的Iterator接口。Iterator接口中包含了 hasNext()、next()、remove() 三个方法。接下来,我们可以定义一个内部类来实现这个迭代器接口,代码如下: ``` public class ArrayIterator<E> implements Iterator<E> { private int cursor; private E[] array; public ArrayIterator(E[] array) { this.array = array; this.cursor = 0; } @Override public boolean hasNext() { return cursor < array.length; } @Override public E next() { if (!hasNext()) { throw new NoSuchElementException(); } return array[cursor++]; } @Override public void remove() { throw new UnsupportedOperationException(); } } ``` 在这个迭代器类中,我们使用了一个 cursor 指针来记录当前迭代到了数组中的哪个位置。在 hasNext() 方法中,我们判断 cursor 是否小于数组的长度,如果是则表示还有下一个元素可以迭代。在 next() 方法中,我们首先判断是否还有下一个元素,如果没有则抛出 NoSuchElementException 异常,否则返回当前位置的元素,并将 cursor 指针向后移动一位。在 remove() 方法中,我们直接抛出 UnsupportedOperationException 异常,因为我们不支持删除操作。 现在,我们就可以使用这个迭代器来遍历一个数组了,例如: ``` Integer[] array = {1, 2, 3, 4, 5}; Iterator<Integer> iterator = new ArrayIterator<>(array); while (iterator.hasNext()) { Integer element = iterator.next(); System.out.println(element); } ``` 这段代码会输出数组中的每一个元素,即: ``` 1 2 3 4 5 ``` 希望我的回答能够帮到你!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值