回答:第一个Shape类的UML图设计有一些问题,我修改了一点,代码如下
package test;
/**
* @author bbyh
* @date 2022/12/19 0019 11:53
* @description
*/
public abstract class Shape {
/**
* 计算图形面积
*
* @return 返回图形面积
*/
public abstract double getArea();
/**
* 判断是否包含
*
* @param x x坐标
* @param y y坐标
* @return 返回是否包含,包含则返回true,不包含返回false
*/
public abstract boolean isContains(int x, int y);
public void print() {
// 该处为默认实现,由子类进行重写
}
}
package test;
/**
* @author bbyh
* @date 2022/12/19 0019 11:57
* @description
*/
public class Point {
private int x;
private int y;
public Point() {
}
public Point(int x, int y) {
this.x = x;
this.y = y;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public double getDistance(int x, int y) {
return Math.sqrt(Math.pow(this.x - x, 2) + Math.pow(this.y - y, 2));
}
public double getDistanceOfX(int x) {
return Math.abs(x);
}
public double getDistanceOfY(int y) {
return Math.abs(y);
}
}
package test;
/**
* @author bbyh
* @date 2022/12/19 0019 11:54
* @description
*/
public class Circle extends Shape {
private final Point point;
private final double r;
public Circle(Point point, double r) {
this.point = point;
this.r = r;
}
@Override
public double getArea() {
return Math.PI * r * r;
}
@Override
public boolean isContains(int x, int y) {
return point.getDistance(x, y) < r;
}
@Override
public void print() {
System.out.println("圆形的面积为:" + getArea());
}
}
package test;
/**
* @author bbyh
* @date 2022/12/19 0019 11:54
* @description 实际设计有问题,point里面的方法太少了,且无法判断正负值
*/
public class Rectangle extends Shape {
private final Point point;
private final double width;
private final double height;
public Rectangle(Point point, double width, double height) {
this.point = point;
this.width = width;
this.height = height;
}
@Override
public double getArea() {
return width * height;
}
@Override
public boolean isContains(int x, int y) {
return x - point.getX() < width && y - point.getY() < height;
}
@Override
public void print() {
System.out.println("矩形的面积为:" + getArea());
}
}
package test;
/**
* @author bbyh
* @date 2022/12/19 0019 12:18
* @description
*/
public class Test {
public static void main(String[] args) {
Shape[] shape = new Shape[4];
shape[0] = new Circle(new Point(3, 3), 3);
shape[0].print();
shape[1] = new Rectangle(new Point(3, 3), 3, 4);
shape[1].print();
shape[2] = new Circle(new Point(3, 3), 4);
shape[2].print();
shape[3] = new Rectangle(new Point(3, 3), 3, 5);
shape[3].print();
}
}
第二个用户管理前台代码如下
package login;
/**
* @author bbyh
* @date 2022/12/19 0019 12:34
* @description
*/
public interface UserDao {
/**
* 添加用户
*
* @param user 要添加的用户
* @return 返回用户是否添加成功
*/
boolean addUser(User user);
/**
* 获取用户
*
* @param userName 用户名
* @param password 密码
* @return 返回获取到的用户
*/
User getUser(String userName, String password);
}
package login;
/**
* @author bbyh
* @date 2022/12/19 0019 12:35
* @description
*/
public class User {
private String userName;
private String password;
public User() {
}
public User(String userName, String password) {
this.userName = userName;
this.password = password;
}
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 login;
import java.util.Objects;
/**
* @author bbyh
* @date 2022/12/19 0019 12:34
* @description
*/
public class UserDaoForArray implements UserDao {
private final User[] data = new User[10];
private int count = 0;
public UserDaoForArray() {
}
@Override
public boolean addUser(User user) {
if (getUser(user.getUserName(), user.getPassword()) == null) {
data[count++] = user;
return true;
}
return false;
}
@Override
public User getUser(String userName, String password) {
for (int i = 0; i < count; i++) {
if (Objects.equals(data[i].getUserName(), userName) && Objects.equals(data[i].getPassword(), password)) {
return data[i];
}
}
return null;
}
}
package login;
import java.util.Objects;
import java.util.Scanner;
/**
* @author bbyh
* @date 2022/12/19 0019 12:34
* @description
*/
public class Application {
private UserDao userDao;
public Application(UserDao userDao) {
this.userDao = userDao;
}
public void setUserDao(UserDao userDao) {
this.userDao = userDao;
}
public void register() {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入用户名:");
String userName = scanner.next();
System.out.print("请输入密码:");
String password = scanner.next();
System.out.print("请重新输入密码:");
String repeatPassword = scanner.next();
if (Objects.equals(password, repeatPassword)) {
if (userDao.addUser(new User(userName, password))) {
System.out.println(userName + "注册成功");
} else {
System.out.println(userName + "已存在,不能再次注册");
}
} else {
System.out.println("两次输入的密码不相符,请重新输入");
}
}
public void login() {
Scanner scanner = new Scanner(System.in);
System.out.print("请输入用户名:");
String userName = scanner.next();
System.out.print("请输入密码:");
String password = scanner.next();
if (userDao.getUser(userName, password) != null) {
System.out.println(userName + "已登录");
} else {
System.out.println(userName + "未登录");
}
}
}
package login;
import java.util.Scanner;
/**
* @author bbyh
* @date 2022/12/19 0019 12:50
* @description
*/
public class Test {
public static void main(String[] args) {
UserDao userDao = new UserDaoForArray();
Application application = new Application(userDao);
boolean flag = true;
Scanner scanner = new Scanner(System.in);
while (flag) {
System.out.println("1、登录");
System.out.println("2、注册");
System.out.println("3、退出系统");
System.out.print("请输入选项:");
int choice = scanner.nextInt();
switch (choice) {
case 1:
application.login();
break;
case 2:
application.register();
break;
case 3:
flag = false;
break;
default:
break;
}
System.out.println();
}
}
}