diff --git a/src/ru/skypro/Data.java b/src/ru/skypro/Data.java new file mode 100644 index 0000000..a6bb3d8 --- /dev/null +++ b/src/ru/skypro/Data.java @@ -0,0 +1,28 @@ +package ru.skypro; + +import ru.skypro.exceptions.WrongLoginException; +import ru.skypro.exceptions.WrongPasswordException; + +import java.util.Objects; +import java.util.regex.Pattern; + +public class Data { + + private static Boolean check(String string) + { + return Pattern.matches("^[A-Za-z0-9_]+$",string) && string.length() <=20 && string.length()>0; + } + + public static Boolean method(String login,String password , String confirmPassword) throws WrongLoginException, WrongPasswordException { + if (!check(login)){ + throw new WrongLoginException("Login incorrect"); + } + if (!check(password) || !check(confirmPassword)) { + throw new WrongPasswordException("Password incorrect"); + } + if (!Objects.equals(password, confirmPassword)){ + throw new WrongPasswordException("Password incorrect"); + } + return true; + } +} diff --git a/src/ru/skypro/Main.java b/src/ru/skypro/Main.java index 625884e..119a26f 100644 --- a/src/ru/skypro/Main.java +++ b/src/ru/skypro/Main.java @@ -1,7 +1,38 @@ package ru.skypro; +import ru.skypro.exceptions.DiagnosticFailException; +import ru.skypro.exceptions.WrongLoginException; +import ru.skypro.exceptions.WrongPasswordException; +import ru.skypro.exceptions.WrongRightsException; +import ru.skypro.transport.Car; +import ru.skypro.transport.CarBody; +import ru.skypro.transport.Driver; +import ru.skypro.transport.DriverB; + public class Main { public static void main(String[] args){ + String login = "1234", pass="43251", cpass="4321"; + try { + Data.method(login,pass,cpass); + System.out.println("Good"); + } catch (WrongLoginException | WrongPasswordException e) { + System.out.println(e); + } + try { + Driver failDriver = new DriverB("asd",true,22,null); + System.out.println("Good"); + } catch (WrongRightsException e){ + System.out.println(e); + } + Car car = new Car("asd","asd",1.3, CarBody.Кроссовер); + if (!car.diagnostic()){ + try { + throw new DiagnosticFailException(); + } catch (DiagnosticFailException e) { + System.out.println(e); + } + } + } } diff --git a/src/ru/skypro/exceptions/DiagnosticFailException.java b/src/ru/skypro/exceptions/DiagnosticFailException.java new file mode 100644 index 0000000..2d8bfea --- /dev/null +++ b/src/ru/skypro/exceptions/DiagnosticFailException.java @@ -0,0 +1,7 @@ +package ru.skypro.exceptions; + +public class DiagnosticFailException extends Exception{ + public DiagnosticFailException() { + super("программа должна выбросить ошибку."); + } +} diff --git a/src/ru/skypro/exceptions/WrongLoginException.java b/src/ru/skypro/exceptions/WrongLoginException.java new file mode 100644 index 0000000..4423fa3 --- /dev/null +++ b/src/ru/skypro/exceptions/WrongLoginException.java @@ -0,0 +1,11 @@ +package ru.skypro.exceptions; + +public class WrongLoginException extends Exception{ + + public WrongLoginException() { + } + + public WrongLoginException(String message) { + super(message); + } +} diff --git a/src/ru/skypro/exceptions/WrongPasswordException.java b/src/ru/skypro/exceptions/WrongPasswordException.java new file mode 100644 index 0000000..2eaf38e --- /dev/null +++ b/src/ru/skypro/exceptions/WrongPasswordException.java @@ -0,0 +1,11 @@ +package ru.skypro.exceptions; + +public class WrongPasswordException extends Exception{ + + public WrongPasswordException() { + } + + public WrongPasswordException(String message) { + super(message); + } +} diff --git a/src/ru/skypro/exceptions/WrongRightsException.java b/src/ru/skypro/exceptions/WrongRightsException.java new file mode 100644 index 0000000..abf3da0 --- /dev/null +++ b/src/ru/skypro/exceptions/WrongRightsException.java @@ -0,0 +1,8 @@ +package ru.skypro.exceptions; + +public class WrongRightsException extends Exception{ + + public WrongRightsException() { + super("Необходимо указать тип прав!"); + } +} diff --git a/src/ru/skypro/transport/Bus.java b/src/ru/skypro/transport/Bus.java new file mode 100644 index 0000000..27c6ea0 --- /dev/null +++ b/src/ru/skypro/transport/Bus.java @@ -0,0 +1,32 @@ +package ru.skypro.transport; + +public class Bus extends Transport implements Competitive { + + public Bus(String brand, String model, Double engineVolume, BusType type) { + super(brand, model, engineVolume, type); + } + + @Override + public void startMoving() { + super.startMoving(); + } + + @Override + public void stopMoving() { + super.stopMoving(); + } + @Override + public void pitStop() { + System.out.println("false"); + } + + @Override + public void maxSpeed() { + System.out.println("200"); + } + + @Override + public void bestTime() { + System.out.println("9.00"); + } +} diff --git a/src/ru/skypro/transport/BusType.java b/src/ru/skypro/transport/BusType.java new file mode 100644 index 0000000..8d66bea --- /dev/null +++ b/src/ru/skypro/transport/BusType.java @@ -0,0 +1,11 @@ +package ru.skypro.transport; + +public enum BusType { + + особо_малая , + малая , + средняя, + большая, + особо_большая + + } diff --git a/src/ru/skypro/transport/Car.java b/src/ru/skypro/transport/Car.java new file mode 100644 index 0000000..b7f3510 --- /dev/null +++ b/src/ru/skypro/transport/Car.java @@ -0,0 +1,39 @@ +package ru.skypro.transport; + +import ru.skypro.exceptions.DiagnosticFailException; + +public class Car extends Transport implements Competitive{ + public Car(String brand, String model, Double engineVolume, CarBody type) { + super(brand, model, engineVolume, type); + } + + @Override + public void startMoving() { + super.startMoving(); + } + + @Override + public void stopMoving() { + super.stopMoving(); + } + + @Override + public void pitStop() { + System.out.println("false"); + } + + @Override + public void maxSpeed() { + System.out.println("160"); + } + + @Override + public void bestTime() { + System.out.println("10.00"); + } + + @Override + public Boolean diagnostic() { + return this.getEngineVolume() >= 2; + } +} diff --git a/src/ru/skypro/transport/CarBody.java b/src/ru/skypro/transport/CarBody.java new file mode 100644 index 0000000..e7738fb --- /dev/null +++ b/src/ru/skypro/transport/CarBody.java @@ -0,0 +1,15 @@ +package ru.skypro.transport; + +public enum CarBody { + + Седан, + Хетчбек, + Купе, + Универсал, + Внедорожник, + Кроссовер, + Пикап, + Фургон, + Минивэн + +} diff --git a/src/ru/skypro/transport/Competitive.java b/src/ru/skypro/transport/Competitive.java new file mode 100644 index 0000000..6fe64c3 --- /dev/null +++ b/src/ru/skypro/transport/Competitive.java @@ -0,0 +1,7 @@ +package ru.skypro.transport; + +public interface Competitive { + void pitStop(); + void maxSpeed(); + void bestTime(); +} diff --git a/src/ru/skypro/transport/Driver.java b/src/ru/skypro/transport/Driver.java new file mode 100644 index 0000000..b316770 --- /dev/null +++ b/src/ru/skypro/transport/Driver.java @@ -0,0 +1,33 @@ +package ru.skypro.transport; + +import ru.skypro.exceptions.WrongRightsException; + +public abstract class Driver{ + + private final Transport transport; + private String fio; + private Boolean haveRights; + private Integer stazh; + + public Driver(String fio, Boolean haveRights, Integer stazh, Transport transport) throws WrongRightsException { + this.fio = fio; + this.haveRights = haveRights; + this.stazh = stazh; + if (transport == null) { + throw new WrongRightsException(); + } else { + this.transport = transport; + }; + } + + public void startMoving(){ + transport.startMoving(); + } + public void stopMoving(){ + transport.stopMoving(); + + } + public void refill(){ + System.out.println("водитель "+fio+" управляет автомобилем "+transport.getBrand()+" "+transport.getModel()+" и будет участвовать в заезде"); + } +} diff --git a/src/ru/skypro/transport/DriverB.java b/src/ru/skypro/transport/DriverB.java new file mode 100644 index 0000000..2b3b583 --- /dev/null +++ b/src/ru/skypro/transport/DriverB.java @@ -0,0 +1,9 @@ +package ru.skypro.transport; + +import ru.skypro.exceptions.WrongRightsException; + +public class DriverB extends Driver{ + public DriverB(String fio, Boolean haveRights, Integer stazh, Car transport) throws WrongRightsException { + super(fio, haveRights, stazh, transport); + } +} diff --git a/src/ru/skypro/transport/DriverC.java b/src/ru/skypro/transport/DriverC.java new file mode 100644 index 0000000..9ced660 --- /dev/null +++ b/src/ru/skypro/transport/DriverC.java @@ -0,0 +1,9 @@ +package ru.skypro.transport; + +import ru.skypro.exceptions.WrongRightsException; + +public class DriverC extends Driver{ + public DriverC(String fio, Boolean haveRights, Integer stazh, Truck transport) throws WrongRightsException { + super(fio, haveRights, stazh, transport); + } +} diff --git a/src/ru/skypro/transport/DriverD.java b/src/ru/skypro/transport/DriverD.java new file mode 100644 index 0000000..5d8bf8e --- /dev/null +++ b/src/ru/skypro/transport/DriverD.java @@ -0,0 +1,9 @@ +package ru.skypro.transport; + +import ru.skypro.exceptions.WrongRightsException; + +public class DriverD extends Driver{ + public DriverD(String fio, Boolean haveRights, Integer stazh, Bus transport) throws WrongRightsException { + super(fio, haveRights, stazh, transport); + } +} diff --git a/src/ru/skypro/transport/Transport.java b/src/ru/skypro/transport/Transport.java new file mode 100644 index 0000000..59f1a02 --- /dev/null +++ b/src/ru/skypro/transport/Transport.java @@ -0,0 +1,67 @@ +package ru.skypro.transport; + +import ru.skypro.exceptions.DiagnosticFailException; + +public abstract class Transport { + private String brand; + private String model; + private Double engineVolume; + + private final Enum type; + + public Transport(String brand, String model, Double engineVolume, Enum type) { + this.brand = brand == null || brand.equals("") ? "default" : brand; + this.model = model == null || model.equals("") ? "default" : model; + this.engineVolume = (engineVolume == null || engineVolume<0) ? 1.6 : engineVolume; + this.type = type; + } + + public void startMoving(){ + System.out.println(this.getClass() +" "+ this.brand +" "+ this.model + "Начал движение"); + } + public void stopMoving(){ + System.out.println(this.getClass() +" "+ this.brand +" "+ this.model + "Закончил движение"); + } + + @Override + public String toString() { + return "Transport{" + + "brand='" + brand + '\'' + + ", model='" + model + '\'' + + ", engineVolume=" + engineVolume + + '}'; + } + + public String getBrand() { + return brand; + } + + public String getModel() { + return model; + } + + public void setBrand(String brand) { + this.brand = brand; + } + + public void setModel(String model) { + this.model = model; + } + + public Double getEngineVolume() { + return engineVolume; + } + + public void setEngineVolume(Double engineVolume) { + this.engineVolume = engineVolume; + } + + public Boolean diagnostic() { + System.out.println("Автобус … … … в диагностике не требуется"); + return true; + } + + public String getType() { + return type == null ? "Данных недостаточно": type.name(); + } +} diff --git a/src/ru/skypro/transport/Truck.java b/src/ru/skypro/transport/Truck.java new file mode 100644 index 0000000..ebbc46c --- /dev/null +++ b/src/ru/skypro/transport/Truck.java @@ -0,0 +1,40 @@ +package ru.skypro.transport; + +import ru.skypro.exceptions.DiagnosticFailException; + +public class Truck extends Transport implements Competitive{ + + public Truck(String brand, String model, Double engineVolume, TruckBody type) { + super(brand, model, engineVolume, type); + } + + @Override + public void startMoving() { + System.out.println(super.getBrand() +" "+ super.getModel() + " Начал движение"); + } + + @Override + public void stopMoving() { + System.out.println(super.getBrand() +" "+ super.getModel() + " Закончил движение"); + } + + @Override + public void pitStop() { + System.out.println("true"); + } + + @Override + public void maxSpeed() { + System.out.println("330"); + } + + @Override + public void bestTime() { + System.out.println("6.00"); + } + + @Override + public Boolean diagnostic() { + return this.getEngineVolume() >= 2; + } +} diff --git a/src/ru/skypro/transport/TruckBody.java b/src/ru/skypro/transport/TruckBody.java new file mode 100644 index 0000000..e1d2abc --- /dev/null +++ b/src/ru/skypro/transport/TruckBody.java @@ -0,0 +1,5 @@ +package ru.skypro.transport; + +public enum TruckBody { + N1,N2,N3 +}