***(自定义异常)完成某个计费系统的用户登录和注册模块,要求如下:
1
) 创建一个
User
类,包括:用户登录名(
username
)、密码(
password
)、用
户真实姓名(
name
)、电子邮件地址(
email
)属性和相应的构造方法及
set/get
方
法。
2
) 创建两个自定义异常类,一个
LoginException
,表示登录异常。一个
RegisterException
, 表示注册异常。自定义的两个异常,都要求有一个接受字符
串类型参数的构造方法。
3
) 创建一个
UserBiz
接口,该接口中定义两个方法:
void register(String username, String password, String password2,
String name, String email) throws RegisterException //
用户注册
void login(String username, String password) throws LoginException //
用户登录
其中
register
方法接受两个
password
参数,原因是:在用户注册时,需要输入
两遍
password
,只有两次输入的
password
一致,才允许注册。
4
) 创建
UserBiz
接口的实现类。其中
为该实现类创建一个属性,该属性为一个
Map
,用来保存已注册的用户信息。
Map
的键为用户登录名,值为登录名对应的
User
对象。初始情况下,
Map
中
保存的对象为以下两个:
用户名
密码
真实姓名 电子邮件
admin admin Administrator admin@123.com
Tom
cat
tomcat
tomcat@cat.com
register
方法在以下两种情况下抛出异常:
1
)
username
在
Map
中已存在
2
) 两次输入的
password
不一致
login
方法在以下两种情况下抛出异常:
1
)
username
不存在
2
)
username
和
password
不匹配
5
) 创建一个
UserView
接口,该接口中定义两个方法:
void login();
void register();
6
) 创建
UserView
接口的实现类。
该实现类的
login
方法中,利用命令行,让用户输入用户名和密码,之后调用
UserBiz
中的
login
方法。部分代码如下:
void login(){
System.out.println(“
请输入用户名:
”);
String username = /*
读入用户名
…*/;
System.out.println(“
请输入密码
”);
String password = /*
读入密码
*/;
//
调用
UserBiz
中的
login
方法
}
该类的
register
方法采用类似的方法,让用户输入注册时需要的信息,然后调用
UserBiz
中的
register
方法。
注意:
1
、 密码应该让用户输入两遍。
2
、
UserViewImpl
中应当有一个
UserBiz
类型的属性
7
) 编写测试代码。
类图如下:
![](https://img-blog.csdnimg.cn/direct/066c9d0315754e52bc30c9e04cb18bd8.png)
代码:
//实体类
public class User {
private String username; //用户名
private String password; //密码
private String name; //真实姓名
private String email; //邮箱
//构造
private User(){}
public User(String username, String password, String name, String email) {
this.username = username;
this.password = password;
this.name = name;
this.email = email;
}
// getter/setter
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 getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
}
//UserBiz接口
public interface UserBiz {
//用户注册
void register(String username, String password, String password2, String name, String email)throws RegisterException;
//用户登录
void login(String username, String password)throws LoginException;
}
//UseView接口
public interface UserView {
//登录方法
void login();
//注册方法
void register();
}
//UserBizImpl实现类
public class UserBizlmpl implements UserBiz {
// 保存用户信息,键为登录名,值为对应的User对象。
Map<String, User> userMap = new HashMap<>();
// 初始存储的用户信息
{
userMap.put("admin", new User("admin", "admin", "Administrator", "admin@123.com"));
userMap.put("Tom", new User("Tom", "cat", "tomcat", "tomcat@cat.com"));
}
@Override
public void register(String username, String password, String password2, String name, String email) throws RegisterException {
// 可以使用 contains() 方法来判断元素是否存在于集合当中:
if (userMap.containsKey(username))
// 如果用户名在Map中已存在
throw new RegisterException("抱歉亲亲!用户名:" + username + "已经创建过账户了哦~");
// 如果两次输入密码不一致
if (!password.equals(password2))
throw new RegisterException("您两次输入的密码不同,请重试~");
// 注册成功,存入Map
userMap.put(username, new User(username, password, name, email));
System.out.println(username + "恭喜你,注册成功!");
}
@Override
public void login(String username, String password) throws LoginException {
// 可以使用 contains() 方法来判断元素是否存在于集合当中:
if (!userMap.containsKey(username))
// 如果用户名在Map中不存在
throw new LoginException("抱歉亲亲!未找到用户名:" + username + ",请注册!");
// 如果账号密码不匹配 Map.get()获取指定 key 对应对 value,要注意这个get后获得的是User对象,想要密码还得调用getpassword
if (!password.equals(userMap.get(username).getPassword()))
throw new LoginException("密码错误,请重试!");
// 登录成功
System.out.println("登录成功!"+ username + "欢迎回家~");
}
}
//UserViewImpl实现类
public class UserViewImpl implements UserView {
UserBiz ub = new UserBizlmpl();
Scanner scanner = new Scanner(System.in);
//登录,输入用户名密码
@Override
public void login() {
System.out.println("请输入用户名:");
String username = scanner.nextLine();
System.out.println("请输入密码:");
String password = scanner.nextLine();
try {
//调用UserBiz接口登录方法
ub.login(username,password);
}catch (LoginException le){
le.printStackTrace();
}
}
@Override
public void register() {
System.out.println("请输入用户名:");
String username2 = scanner.nextLine();
System.out.println("请输入密码:");
String password2 = scanner.nextLine();
System.out.println("请再次输入密码:");
String password3 = scanner.nextLine();
System.out.println("请输入真实姓名:");
String name = scanner.nextLine();
System.out.println("请输入邮箱:");
String email = scanner.nextLine();
try{
ub.register(username2,password2,password3,name,email);
}catch (RegisterException re){
re.printStackTrace();
}
}
}
//Login异常类
public class LoginException extends Exception{
public LoginException() {
}
public LoginException(String message) {
super(message);
}
}
//注册异常类
public class RegisterException extends Exception{
public RegisterException() {
}
public RegisterException(String message) {
super(message);
}
}
//测试
public class TestUser {
public static void main(String[] args) {
UserView uw = new UserViewImpl();
// uw.register();
uw.login();
}
}