今天学了接口,感觉挺好,还用了Junit测试框架来测试,写完这些代码,你的能力会提升的很大。
1.用接口做了个用户登录和注册模块:内容详解都在代码块中有注释
再补充一个小知识点:静态方法用类名直接就可以调用。在java代码块中,先执行静态代码块再执行普通代码块,最后执行构造方法
(1)定义一个UserService接口;里面包含(登录和注册两个功能)
package interface1;
public interface UserService {
//接口不能写方法 登录
public boolean login(String name,String pwd);
/*
* 如果密码不一致,则返回"1"
* 如果用户已存在,则返回“2”
* 如果注册成功。则返回"3"
*
*/
public String regist(String name,String pwd1,String pwd2);
}
(2)根据接口写界面层代码UserMenu
package interface1;
import java.util.Scanner;
public class UserMenu {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
UserService userManage = new UserServiceImpl();
//利用while循环,注册完成后用户和密码都保存直接就可以登录
boolean flag = true;
while (flag) {
System.out.println("1.登录,2.注册");
String nextLine = sc.nextLine();
switch (nextLine) {
case "1":
System.out.println("请输入账号:");
String username = sc.nextLine();
System.out.println("请输入密码:");
String pwd = sc.nextLine();
// 调用业务逻辑组件的登录方法
boolean login = userManage.login(username, pwd);
if (login) {
System.out.println("恭喜登录成功");
} else {
System.out.println("登陆失败");
}
break;
case "2":
System.out.println("请输入用户名:");
String name = sc.nextLine();
System.out.println("请输入密码:");
String pwd1 = sc.nextLine();
System.out.println("请确认密码:");
String pwd2 = sc.nextLine();
// 调用逻辑组件的注册方法
String regist = userManage.regist(name, pwd1, pwd2);
switch (regist) {
case "1":
System.out.println("您两次密码不一致");
break;
case "2":
System.out.println("您输入的账号已存在");
break;
case "3":
System.out.println("注册成功");
break;
default:
break;
}
break;
case "quit":
System.out.println("bye...........");
flag = false;
break;
}
}
}
}
(3)实现UserService接口,并添加UserDao接口
package interface1;
public class UserServiceImpl implements UserService {
UserDao userDao = new UserDaoImpl();
@Override
public boolean login(String name, String pwd) {
// TODO Auto-generated method stub
//调用Dao层的功能去查询该用户是否存在
User user = userDao.findUserByName(name);
if(user == null) {
return false;
}
if(user.getPassWord().equals(pwd)) {
return true;
}
return false;
}
@Override
public String regist(String name, String pwd1, String pwd2) {
// TODO Auto-generated method stub
// 检查两次密码是否一致,如果不一致,则返回1
if(!pwd1.endsWith(pwd2)) {
return "1";
}
//调Dao层的功能去检查用户名是否存在
boolean ifExist = userDao.checkUserIfExsit(name);
if(ifExist) {
return "2";
}
//将用户信息存储到数据库中
User u =new User();
u.set(name, pwd1);
userDao.addUser(u);
return "3";
}
}
package interface1;
public interface UserDao {
public User findUserByName(String userName);
public boolean checkUserIfExsit(String userName);
public void addUser(User user);
}
(4)实现UserDao接口代码
package interface1;
public class UserDaoImpl implements UserDao {
@Override
public User findUserByName(String userName) {
// TODO Auto-generated method stub
User user = UserDatabase.usermap.get(userName);
return user;
}
@Override
public boolean checkUserIfExsit(String userName) {
// TODO Auto-generated method stub
boolean containsKey = UserDatabase.usermap.containsKey(userName);
return containsKey;
}
@Override
public void addUser(User user) {
// TODO Auto-generated method stub
UserDatabase.usermap.put(user.getUserName(), user);
}
}
(5)因缺少缺数据,所以自己需要造一个静态数据库即可
package interface1;
import java.util.HashMap;
public class UserDatabase {
public static HashMap<String,User> usermap = new HashMap<>();
}
(6)junit测试部分代码块
package interface1;
import org.junit.Test;
public class UserDaoImplJuintTest {
@Test
public void testAdd() {
UserDaoImpl userDaoImpl = new UserDaoImpl();
User u2 = new User();
u2.set("zhangsan"," 123");
userDaoImpl.addUser(u2);
boolean ex = userDaoImpl.checkUserIfExsit("zhangsan");
System.out.println(ex);
}
@Test
public void testFind() {
UserDaoImpl userDaoImpl = new UserDaoImpl();
User xx = userDaoImpl.findUserByName("ccc");
System.out.println(xx.getPassWord());
}
}