1. 用户登录注册案例
(1)有哪些类:
- 用户类
- 测试类
(2)每个类有哪些东西:
- 用户类:
用户基本描述类:
成员变量:用户名,密码
构造方法:无参构造
成员方法:getXxx()/setXxx()
用户操作类:
登录,注册 - 测试类:
main方法
(3)类与类之间的关系:
在测试类中创建用户操作类和用户基本描述类的对象,并使用其功能
分包:按功能划分
- 用户基本描述类包:cn.itcast.pojo
- 用户操作接口:cn.itcast.dao
- 用户操作类包:cn.itcast.dao.impl
- 用户测试类包:cn.itcast.test
新增加的两个小问题:
(1)多个对象共享同一个成员变量,用静态
(2)循环里面如果有switch,并且在switch里面有break,那么结束的不是循环,而是switch,这时可用System.exit(0)
package cn.itcast.pojo;
/**
* 这是用户基本类
* @author Emotion
* @version V1.0
*/
public class User {
//用户名
private String username;
//密码
private String password;
public User() {
}
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;
}
}
package cn.itcast.dao;
import cn.itcast.pojo.User;
/**
* 这是针对用户进行操作的接口
* @author Emotion
* @version V1.0
*/
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;
/**
* 这是用户操作的具体实现类(集合版)
* @author Emotion
* @version V1.0
*/
import cn.itcast.dao.UserDao;
import cn.itcast.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 u : array) {
if(u.getUsername().equals(username) &&
u.getPassword().equals(password)) {
flag = true;
break;
}
}
return flag;
}
@Override
public void regist(User user) {
//把用户信息存入集合
array.add(user);
}
}
package cn.itcast.test;
import java.util.Scanner;
import cn.itcast.dao.UserDao;
import cn.itcast.dao.impl.UserDaoImpl;
import cn.itcast.pojo.User;
/**
* 这是用户测试类
* @author Emotion
* @version V1.0
*/
public class UserTest {
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 (choiceString) {
case "1":
System.out.println("------------登录界面-----------");
System.out.println("请输入用户名:");
String username = sc.nextLine();
System.out.println("请输入密码:");
String password = sc.nextLine();
//调用登录功能
boolean flag = ud.isLogin(username, password);
if(flag) {
System.out.println("登陆成功");
//这里写break结束的只是switch
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();
//把用户名和密码封装到一个对象中
User user = new User();
user.setUsername(newUsername);
user.setPassword(newPassword);
//调用注册功能
ud.regist(user);
System.out.println("注册成功");
break;
default:
System.out.println("谢谢使用,欢迎下次再来");
System.exit(0);
break;
}
}
}
}