完成某个计费系统的用户登录和注册模块,要求如下:
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 | [email protected] |
Tom | cat | tomcat | [email protected] |
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 方法。
package billing_System;
/**
* 创建一个User 类,包括:用户登录名(username)、密码(password)、用
* 户真实姓名(name)、电子邮件地址(email)属性和相应的构造方法及set/get 方
* 法。
*/
public class User {
private String username;
private String password;
private String name;
private String email;
public User() {
}
public User(String username, String password, String name, String email) {
this.username = username;
this.password = password;
this.name = name;
this.email = email;
}
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;
}
}
package billing_System;
public class LoginException extends RuntimeException {
public LoginException(String message) {
super(message);
}
}
package billing_System;
public class RegisterException extends RuntimeException {
public RegisterException(String message) {
super(message);
}
}
package billing_System;
/**
* 创建一个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 一致,才允许注册。
*/
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; //用户登录
}
package billing_System;
import java.util.HashMap;
import java.util.Map;
/**
* 4) 创建UserBiz 接口的实现类。其中
* 为该实现类创建一个属性,该属性为一个Map,用来保存已注册的用户信息。
* Map 的键为用户登录名,值为登录名对应的User 对象。初始情况下,Map 中
* 保存的对象为以下两个:
* 用户名 密码 真实姓名 电子邮件
* admin admin Administrator [email protected]
* Tom cat tomcat [email protected]
* register 方法在以下两种情况下抛出异常:
* 1) username 在Map 中已存在
* 2) 两次输入的password 不一致
* login 方法在以下两种情况下抛出异常:
* 1) username 不存在
* 2) username 和password 不匹配
*/
public class UserBizImpl implements UserBiz {
Map map = new HashMap<>();
{
map.put("admin",new User("admin","admin","Administrator","[email protected]"));
map.put("Tom",new User("Tom","cat","tomcat","[email protected] "));
}
@Override
public void register(String username, String password, String password2,
String name, String email) throws RegisterException {
if (map.get(username) == null){
if (password.equals(password2)) {
map.put(username, new User(username, password, name, email));
System.out.println("注册成功!");
}else {
throw new RegisterException("密码确认错误!");
}
}else {
throw new RegisterException("用户已存在!");
}
}
@Override
public void login(String username, String password) throws LoginException {
if (map.get(username) != null) {
if ((map.get(username).getPassword()).equals(password)) {
System.out.println("登录成功!");
}else {
throw new LoginException("密码错误!");
}
}else {
throw new LoginException("用户不存在!");
}
}
}
package billing_System;
/**
* 创建一个UserView 接口,该接口中定义两个方法:
* void login();
* void register();
*/
public interface UserView {
void login();
void register();
}
package billing_System;
import java.util.Scanner;
/**
* 创建UserView 接口的实现类。
* 该实现类的login 方法中,利用命令行,让用户输入用户名和密码,之后调用
* UserBiz 中的login 方法。部分代码如下:
* void login(){
* System.out.println(“请输入用户名:”);
* String username = /读入用户名…/;
* System.out.println(“请输入密码”);
* String password= /读入密码/;
* //调用UserBiz 中的login 方法
*}
*该类的register 方法采用类似的方法,让用户输入注册时需要的信息,然后调用
*UserBiz 中的register 方法。
*/
public class UserViewImpl implements UserView {
Scanner input = new Scanner(System.in);
UserBiz ub = new UserBizImpl();
@Override
public void login() {
System.out.println("请输入用户名:");
String username = input.next();
System.out.println("请输入密码:");
String password= input.next();
//调用UserBiz 中的login 方法
try {
ub.login(username, password);
}catch (Exception e) {
System.out.println(e.getMessage());
}
}
@Override
public void register() {
System.out.println("请输入用户名:");
String username = input.next();
System.out.println("请输入密码:");
String password = input.next();
System.out.println("请输入确认密码:");
String password2 = input.next();
System.out.println("请输入真实姓名:");
String name = input.next();
System.out.println("请输入邮箱地址:");
String email = input.next();
//调用UserBiz 中的login 方法
try {
ub.register(username, password, password2, name, email);
}catch (Exception e) {
System.out.println(e.getMessage());
}
}
}
package billing_System;
public class Main {
public static void main(String[] args) {
UserViewImpl uvi = new UserViewImpl();
while (true) {
System.out.println("选择操作:\n\t1)登录\n\t2)注册\n\t其他)退出");
String key = uvi.input.next();
switch (key){
case "1":
uvi.login();
break;
case "2":
uvi.register();
break;
default:
return;
}
}
}
}