diff --git a/out/production/JavaCore/homeworks/homework01/Fahrenheit.class b/out/production/JavaCore/homeworks/homework01/Fahrenheit.class new file mode 100644 index 0000000..867477c Binary files /dev/null and b/out/production/JavaCore/homeworks/homework01/Fahrenheit.class differ diff --git a/out/production/JavaCore/homeworks/homework01/Task2.class b/out/production/JavaCore/homeworks/homework01/Task2.class new file mode 100644 index 0000000..b35daed Binary files /dev/null and b/out/production/JavaCore/homeworks/homework01/Task2.class differ diff --git a/out/production/JavaCore/homeworks/homework02/Task2.class b/out/production/JavaCore/homeworks/homework02/Task2.class new file mode 100644 index 0000000..81107c9 Binary files /dev/null and b/out/production/JavaCore/homeworks/homework02/Task2.class differ diff --git a/out/production/JavaCore/homeworks/homework02/Task3.class b/out/production/JavaCore/homeworks/homework02/Task3.class new file mode 100644 index 0000000..00b9c18 Binary files /dev/null and b/out/production/JavaCore/homeworks/homework02/Task3.class differ diff --git a/out/production/JavaCore/homeworks/homework07/App.class b/out/production/JavaCore/homeworks/homework07/App.class new file mode 100644 index 0000000..50f43b0 Binary files /dev/null and b/out/production/JavaCore/homeworks/homework07/App.class differ diff --git a/out/production/JavaCore/homeworks/homework07/DiscountProduct.class b/out/production/JavaCore/homeworks/homework07/DiscountProduct.class new file mode 100644 index 0000000..19b03e0 Binary files /dev/null and b/out/production/JavaCore/homeworks/homework07/DiscountProduct.class differ diff --git a/out/production/JavaCore/homeworks/homework07/Person.class b/out/production/JavaCore/homeworks/homework07/Person.class new file mode 100644 index 0000000..1581cbc Binary files /dev/null and b/out/production/JavaCore/homeworks/homework07/Person.class differ diff --git a/out/production/JavaCore/homeworks/homework07/Product.class b/out/production/JavaCore/homeworks/homework07/Product.class new file mode 100644 index 0000000..61fcb11 Binary files /dev/null and b/out/production/JavaCore/homeworks/homework07/Product.class differ diff --git a/out/production/JavaCore/homeworks/homework08/App.class b/out/production/JavaCore/homeworks/homework08/App.class new file mode 100644 index 0000000..2103056 Binary files /dev/null and b/out/production/JavaCore/homeworks/homework08/App.class differ diff --git a/out/production/JavaCore/homeworks/homework08/Person.class b/out/production/JavaCore/homeworks/homework08/Person.class new file mode 100644 index 0000000..8b737d7 Binary files /dev/null and b/out/production/JavaCore/homeworks/homework08/Person.class differ diff --git a/out/production/JavaCore/homeworks/homework08/Product.class b/out/production/JavaCore/homeworks/homework08/Product.class new file mode 100644 index 0000000..69d5714 Binary files /dev/null and b/out/production/JavaCore/homeworks/homework08/Product.class differ diff --git a/out/production/JavaCore/homeworks/homework09/App.class b/out/production/JavaCore/homeworks/homework09/App.class new file mode 100644 index 0000000..deb8a30 Binary files /dev/null and b/out/production/JavaCore/homeworks/homework09/App.class differ diff --git a/out/production/JavaCore/homeworks/homework09/Car.class b/out/production/JavaCore/homeworks/homework09/Car.class new file mode 100644 index 0000000..a34481a Binary files /dev/null and b/out/production/JavaCore/homeworks/homework09/Car.class differ diff --git a/out/production/JavaCore/homeworks/homework09/Garage.class b/out/production/JavaCore/homeworks/homework09/Garage.class new file mode 100644 index 0000000..3ad3877 Binary files /dev/null and b/out/production/JavaCore/homeworks/homework09/Garage.class differ diff --git a/out/production/JavaCore/homeworks/homework09/Race.class b/out/production/JavaCore/homeworks/homework09/Race.class new file mode 100644 index 0000000..acca8b4 Binary files /dev/null and b/out/production/JavaCore/homeworks/homework09/Race.class differ diff --git a/output.txt b/output.txt new file mode 100644 index 0000000..e69de29 diff --git a/src/main/java/attestations/App.java b/src/main/java/attestations/App.java new file mode 100644 index 0000000..4ee41a2 --- /dev/null +++ b/src/main/java/attestations/App.java @@ -0,0 +1,98 @@ +package attestations; + +import attestations.attestation01.model.User; + +import attestations.attestation01.repository.UsersRepository; + +import java.util.List; +import java.util.Optional; + +public class App { + public static void main(String[] args) { + UsersRepository usersRepository = new UsersRepository() { + @Override + public boolean addUser(User user) { + return false; + } + + @Override + public Optional getUser(String login) { + return Optional.empty(); + } + + @Override + public void create(User user) { + + } + + @Override + public Optional findById(String id) { + return Optional.empty(); + } + + @Override + public List findAll() { + return List.of(); + } + + @Override + public void update(User user) { + + } + + @Override + public void deleteById(String id) { + + } + + @Override + public void deleteAll() { + + } + }; // Создаем экземпляр + + // Создание пользователей + // Создание пользователей + User user1 = new User("f5a8a3cb-4ac9-4b3b-8a65-c424e129b9d2", "noisemc_99", "password_123", "password_123", + "Крылов", "Виктор", "Павлович", 25, true); + + usersRepository.create(user1); + System.out.println("Пользователь создан: " + user1.getLogin()); + + // Поиск по ID + Optional foundUser = usersRepository.findById("f5a8a3cb-4ac9-4b3b-8a65-c424e129b9d2"); + if (foundUser .isPresent()) { + System.out.println("Найден пользователь: " + foundUser .get().getLogin()); + } else { + System.out.println("Пользователь не найден."); + } + + // Выгрузка всех пользователей + List allUsers = usersRepository.findAll(); + System.out.println("Все пользователи: "); + for (User user : allUsers) { + System.out.println(user); + } + + // Обновление пользователя + user1.setAge(26); // Убедитесь, что метод setAge публичный + usersRepository.update(user1); + System.out.println("Обновленный пользователь: " + usersRepository.findById(user1.getId()).get().getAge()); + + // Удаление пользователя + usersRepository.deleteById(user1.getId()); + System.out.println("Пользователь удален."); + + // Проверка на наличие удаленного пользователя + foundUser = usersRepository.findById(user1.getId()); + if (foundUser .isPresent()) { + System.out.println("Пользователь все еще существует."); + } else { + System.out.println("Пользователь не найден."); + } + + // Удаление всех пользователей + usersRepository.deleteAll(); + System.out.println("Все пользователи удалены. Текущий список: " + usersRepository.findAll()); + } +} \ No newline at end of file diff --git a/src/main/java/attestations/attestation01/model/User.java b/src/main/java/attestations/attestation01/model/User.java new file mode 100644 index 0000000..dad8e66 --- /dev/null +++ b/src/main/java/attestations/attestation01/model/User.java @@ -0,0 +1,121 @@ +package attestations.attestation01.model; + +import java.time.LocalDateTime; + +public class User { + private String id; + private LocalDateTime dateAdded; + private String login; + private String password; + private String lastName; + private String firstName; + private String middleName; + private Integer age; + private boolean isWorker; + + public User(String id, String login, String password, String confirmPassword, + String lastName, String firstName, String middleName, + Integer age, boolean isWorker) { + this.id = id; + this.dateAdded = LocalDateTime.now(); + setLogin(login); + setPassword(password, confirmPassword); + setLastName(lastName); + setFirstName(firstName); + setMiddleName(middleName); + setAge(age); + this.isWorker = isWorker; + } + + public User(String validLogin, String validPassword) { + } + + public User(String number, LocalDateTime now, String user1, String password1, String password11, String иванов, String иван, Object o, int i, boolean b) { + } + + public String getId() { + return id; + } + + public LocalDateTime getDateAdded() { + return dateAdded; + } + + public String getLogin() { + return login; + } + + public String getPassword() { + return password; + } + + public String getLastName() { + return lastName; + } + + public String getFirstName() { + return firstName; + } + + public String getMiddleName() { + return middleName; + } + + public Integer getAge() { + return age; + } + + public boolean isWorker() { + return isWorker; + } + + public void setAge(Integer age) { + this.age = age; // Можно добавить валидацию, если нужно + } + + private void setFirstName(String firstName) { + if (!firstName.matches("[a-zA-Zа-яА-ЯёЁ]+")) { + throw new IllegalArgumentException("Имя должно содержать только буквы"); + } + this.firstName = firstName; + } + + private void setLastName(String lastName) { + if (!lastName.matches("[a-zA-Zа-яА-ЯёЁ]+")) { + throw new IllegalArgumentException("Фамилия должна содержать только буквы"); + } + this.lastName = lastName; + } + + private void setPassword(String password, String confirmPassword) { + if (password.length() > 20 || !password.matches(".*[a-zA-Z].*") || !password.matches(".*[0-9].*") || !password.matches(".*_.*")) { + throw new IllegalArgumentException("Пароль должен содержать буквы, цифры и знак подчеркивания, и быть менее 20 символов"); + } + this.password = password; + } + + + private void setLogin(String login) { + if (login.matches("\\d+")) { + throw new IllegalArgumentException("Логин не может состоять только из цифр"); + } + if (!login.matches("^[a-zA-Z0-9_]{1,20}$")) { + throw new IllegalArgumentException("Логин должен содержать буквы, цифры и знак подчеркивания, и быть менее 20 символов"); + } + this.login = login; + } + + private void setMiddleName(String middleName) { + if (middleName != null && !middleName.matches("[a-zA-Zа-яА-ЯёЁ]*")) { + throw new IllegalArgumentException("Отчество должно содержать только буквы"); + } + this.middleName = middleName; + } + + @Override + public String toString() { + return String.join(",", id, dateAdded.toString(), login, password, + lastName, firstName, middleName != null ? middleName : "", + age != null ? age.toString() : "", String.valueOf(isWorker)); + } +} diff --git a/src/main/java/attestations/attestation01/repository/Impl/UsersRepositoryFileImpl.java b/src/main/java/attestations/attestation01/repository/Impl/UsersRepositoryFileImpl.java new file mode 100644 index 0000000..b9d89de --- /dev/null +++ b/src/main/java/attestations/attestation01/repository/Impl/UsersRepositoryFileImpl.java @@ -0,0 +1,137 @@ +package attestations.attestation01.repository.Impl; + +import attestations.attestation01.model.User; +import attestations.attestation01.repository.UsersRepository; + +import java.util.List; +import java.util.Optional; +import java.io.*; +import java.util.*; +import static java.nio.file.Files.lines; +import static jdk.javadoc.internal.doclets.formats.html.markup.HtmlStyle.exceptions; + + + + +import java.util.ArrayList; + + +import java.io.*; +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.Optional; + +public class UsersRepositoryFileImpl implements UsersRepository { + private static final List USERS = new ArrayList<>(); + private static final String FILE_PATH = "users.txt"; // Укажите путь к файлу + + @Override + public boolean addUser(User user) { + return false; + } + + @Override + public Optional getUser(String login) { + return Optional.empty(); + } + + @Override + public void create(User user) { + USERS.add(user); + saveUsersToFile(); + } + + @Override + public Optional findById(String id) { + if (USERS.isEmpty()) { + findAll(); // Загружаем пользователей из файла, если список пуст + } + return USERS.stream() + .filter(user -> user.getId().equals(id)) + .findFirst() + .or(() -> { + throw new NoSuchElementException("Пользователь не найден!"); + }); + } + + @Override + public List findAll() { + if (USERS.isEmpty()) { + try (BufferedReader br = new BufferedReader(new FileReader(FILE_PATH))) { + List usersFromFile = br.lines() + .map(this::mapLineToUser ) + .toList(); + USERS.addAll(usersFromFile); + } catch (IOException e) { + System.out.println("Ошибка чтения файла: " + e.getMessage()); + } + } + return new ArrayList<>(USERS); // Возвращаем копию списка пользователей + } + + private User mapLineToUser (String line) { + String[] parts = line.split("\\|"); + return new User( + parts[0], + parts[2], + parts[3], + parts[4], + parts[5], + parts[6], + parts[7].isEmpty() ? null : parts[7], + parts[8].isEmpty() ? null : Integer.parseInt(parts[8]), + Boolean.parseBoolean(parts[9]) + ); + } + + @Override + public void update(User user) { + Optional existingUser = findById(user.getId()); + USERS.remove(existingUser .get()); + USERS.add(user); + saveUsersToFile(); + } + + @Override + public void deleteById(String id) { + User userToDelete = findById(id) + .orElseThrow(() -> new NoSuchElementException("Пользователь не найден!")); + USERS.remove(userToDelete); + saveUsersToFile(); + } + + @Override + public void deleteAll() { + USERS.clear(); + try (BufferedWriter bufferedWriter = new BufferedWriter(new FileWriter(FILE_PATH))) { + bufferedWriter.write(""); // Очищаем файл + } catch (IOException e) { + throw new RuntimeException(e); + } + } + + private void saveUsersToFile() { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(FILE_PATH))) { + for (User user : USERS) { + String userData = String.join("|", + user.getId(), + user.getDateAdded().toString(), // Предполагается, что у вас есть метод для получения даты + user.getLogin(), + user.getPassword(), + user.getPassword(), // confirmPassword + user.getLastName(), + user.getFirstName(), + user.getMiddleName() != null ? user.getMiddleName() : "", + user.getAge() != null ? user.getAge().toString() : "", + String.valueOf(user.isWorker()) + ); + writer.write(userData); + writer.newLine(); + } + } catch (IOException e) { + System.out.println("Ошибка записи файла: " + e.getMessage()); + } + } +} \ No newline at end of file diff --git a/src/main/java/attestations/attestation01/repository/UsersRepository.java b/src/main/java/attestations/attestation01/repository/UsersRepository.java new file mode 100644 index 0000000..6be06a8 --- /dev/null +++ b/src/main/java/attestations/attestation01/repository/UsersRepository.java @@ -0,0 +1,20 @@ +package attestations.attestation01.repository; + +import attestations.attestation01.model.User; + +import java.util.List; +import java.util.Optional; + + +public interface UsersRepository { + boolean addUser(User user); + + Optional getUser(String login); + + void create(User user); // Создание нового пользователя + Optional findById(String id); // Поиск пользователя по ID + List findAll(); // Получение списка всех пользователей + void update(User user); // Обновление данных пользователя + void deleteById(String id); // Удаление пользователя по ID + void deleteAll(); // Удаление всех пользователей +} diff --git a/src/main/java/homeworks/homework01/Fahrenheit.java b/src/main/java/homeworks/homework01/Fahrenheit.java new file mode 100644 index 0000000..19af621 --- /dev/null +++ b/src/main/java/homeworks/homework01/Fahrenheit.java @@ -0,0 +1,12 @@ +package homeworks.homework01; + +public class Fahrenheit { + public static void main(String[] args) { + double fahrenheit = 212.0; + double celsius = (fahrenheit - 32) * 5/9; { + + System.out.println(fahrenheit + " "+"градусов" + " " +"по Фаренгейту"+" равна"+ " "+ celsius + " по Цельсию"); + } + } + } + diff --git a/src/main/java/homeworks/homework03/App.java b/src/main/java/homeworks/homework03/App.java new file mode 100644 index 0000000..69cf7e7 --- /dev/null +++ b/src/main/java/homeworks/homework03/App.java @@ -0,0 +1,47 @@ +package homeworks.homework03; + +import java.util.Random; +import java.util.Scanner; + +public class App { + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + Random random = new Random(); + + // объект Television с случайными параметрами + Television tv = createTelevision(scanner, random); + + System.out.println("Созданный телевизор: " + tv); + + // Изменение параметров телевизора + tv.setColor("Silver"); + tv.setMark("LG"); + tv.setVolt(110); + + System.out.println("Обновленный телевизор: " + tv); + + Television tv1 = createTelevision(scanner, random); + Television tv2 = createTelevision(scanner, random); + Television tv3 = createTelevision(scanner, random); + + System.out.println("Созданный телевизор 1: " + tv1); + System.out.println("Созданный телевизор 2: " + tv2); + System.out.println("Созданный телевизор 3: " + tv3); + + } + + public static Television createTelevision(Scanner scanner, Random random) { + + System.out.print("Введите цвет телевизора: "); + String color = scanner.nextLine(); + + System.out.print("Введите марку телевизора: "); + String mark = scanner.nextLine(); + + // Генерация случайного напряжения от 100 до 240 + Integer volt = random.nextInt(141) + 100; + + // экземпляр телевизора + return new Television (color, mark, volt); + } + } diff --git a/src/main/java/homeworks/homework03/Television.java b/src/main/java/homeworks/homework03/Television.java new file mode 100644 index 0000000..3e97b6c --- /dev/null +++ b/src/main/java/homeworks/homework03/Television.java @@ -0,0 +1,47 @@ +package homeworks.homework03; + +public class Television { + public static void main(String[] args) { + } + + private Integer volt; // Напряжение + private String color; // Цвет + private String mark; // Марка + + // Конструктор по умолчанию + public Television () { + this.color = "Black"; + this.mark = "LG"; + this.volt = 240; + } + + // Конструктор с параметрами + public Television(String color, String mark, Integer volt ) { + this.color = color; + this.mark = mark; + this.volt = volt; + + } + + // Методы-сеттеры + public void setColor(String color) { + this.color = color; + } + + public void setMark(String mark) { + this.mark = mark; + } + + public void setVolt(Integer volt) { + this.volt = volt; + } + + @Override + public String toString() { + return "Television{" + + "volt=" + volt + + ", color='" + color + '\'' + + ", mark='" + mark + '\'' + + '}'; + } + } \ No newline at end of file diff --git a/src/main/java/homeworks/homework04/Alfavit.java b/src/main/java/homeworks/homework04/Alfavit.java new file mode 100644 index 0000000..0c89589 --- /dev/null +++ b/src/main/java/homeworks/homework04/Alfavit.java @@ -0,0 +1,25 @@ +package homeworks.homework04; + +import java.util.Scanner; + + public class Alfavit { + public static void main(String[] args) { + String alphabet = "qwertyuiopasdfghjklzxcvbnm"; + Scanner scanner = new Scanner(System.in); + System.out.print("Введите маленькую букву английского алфавита: "); + char inputChar = scanner.next().charAt(0); + + // маленькая буква + if (alphabet.indexOf(inputChar) == -1) { + System.out.println("введите маленькую букву английского алфавита."); + } else { + int index = alphabet.indexOf(inputChar); + // замкнутость + int leftIndex = (index - 1 + alphabet.length()) % alphabet.length(); + // Получаем букву слева + char leftChar = alphabet.charAt(leftIndex); + System.out.println("Буква слева: " + leftChar); + } + } + } + diff --git a/src/main/java/homeworks/homework04/Arrows.java b/src/main/java/homeworks/homework04/Arrows.java new file mode 100644 index 0000000..a171c8a --- /dev/null +++ b/src/main/java/homeworks/homework04/Arrows.java @@ -0,0 +1,26 @@ +package homeworks.homework04; + +import java.util.Scanner; +import java.util.regex.Matcher; +import java.util.regex.Pattern; + + public class Arrows { + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + System.out.println("Введите строку со стрелами: "); + String input = scanner.nextLine(); + + Pattern pattern = Pattern.compile(">>-->|<--<<"); + + + Matcher matcher = pattern.matcher(input); + + int counter = 0; + + while (matcher.find()) { + counter++; + } + System.out.println("Количество найденных стрел: " + counter); + } + } + diff --git a/src/main/java/homeworks/homework06/java/App.java b/src/main/java/homeworks/homework06/java/App.java new file mode 100644 index 0000000..a3f2dc4 --- /dev/null +++ b/src/main/java/homeworks/homework06/java/App.java @@ -0,0 +1,170 @@ +package homeworks.homework06.java; +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; + +class Product { + private String name; + private double price; + + public Product(String name, double price) { + if (name == null || name.trim().isEmpty()) { + throw new IllegalArgumentException("Название продукта не может быть пустым"); + } + if (price < 0) { + throw new IllegalArgumentException("Стоимость продукта не может быть отрицательной"); + } + this.name = name; + this.price = price; + } + + public String getName() { + return name; + } + + public double getPrice() { + return price; + } + + @Override + public String toString() { + return name + " (Цена: " + price + " рублей)"; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + Product product = (Product) obj; + return Double.compare(product.price, price) == 0 && name.equals(product.name); + } + + @Override + public int hashCode() { + return 31 * name.hashCode() + Double.hashCode(price); + } +} + +class Person { + private String name; + private double money; + private List basket; + + public Person(String name, double money) { + if (name == null || name.trim().isEmpty()) { + throw new IllegalArgumentException("Имя не может быть пустым"); + } + if (money < 0) { + throw new IllegalArgumentException("Деньги не могут быть отрицательными"); + } + this.name = name; + this.money = money; + this.basket = new ArrayList<>(); + } + + public String getName() { + return name; + } + + public double getMoney() { + return money; + } + + public List getBasket() { + return basket; + } + + public boolean buyProduct(Product product) { + if (product.getPrice() <= money) { + basket.add(product); + money -= product.getPrice(); + System.out.println(name + " купил " + product.getName()); + return true; + } else { + System.out.println(name + " не может позволить себе " + product.getName()); + return false; + } + } + + @Override + public String toString() { + return name + (basket.isEmpty() ? " - Ничего не куплено" : " - " + basket); + } +} + +public class App { + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + List customers = new ArrayList<>(); + List products = new ArrayList<>(); + + customers.add(new Person("Павел Андреевич", 10000)); + customers.add(new Person("Анна Петровна", 2000)); + customers.add(new Person("Борис", 10)); + + products.add(new Product("Хлеб", 40)); + products.add(new Product("Молоко", 60)); + products.add(new Product("Торт", 1000)); + products.add(new Product("Кофе растворимый", 879)); + products.add(new Product("Масло", 150)); + + // Процесс выбора продуктов + int currentCustomerIndex = 0; + + while (true) { + Person currentCustomer = customers.get(currentCustomerIndex); + System.out.println(currentCustomer.getName() + ", выберите продукт (или введите 'END' для завершения):"); + for (Product product : products) { + System.out.println(product); + } + + String input = scanner.nextLine(); + if (input.equalsIgnoreCase("END")) { + break; + } + + // Найти выбранный продукт + boolean productFound = false; + for (Product product : products) { + if (product.getName().equalsIgnoreCase(input)) { + currentCustomer.buyProduct(product); + productFound = true; + break; + } + } + + if (!productFound) { + System.out.println("Продукт не найден. Попробуйте снова."); + } +// Переход к следующему покупателю + currentCustomerIndex = (currentCustomerIndex + 1) % customers.size(); + } + + // Вывод содержимого пакета для каждого покупателя + for (Person customer : customers) { + System.out.println(customer); + } + + // Обработка случаев + testAdditionalCases(scanner); + } + + private static void testAdditionalCases(Scanner scanner) { + // Тестовые случаи + try { + Person zhenya = new Person("Женя", 0); + Product iceCream = new Product("Мороженое", 200); + zhenya.buyProduct(iceCream); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + } + + try { + Person sveta = new Person("Света", -3); + Product pasta = new Product("Макароны", 800); + sveta.buyProduct(pasta); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + } + } +} diff --git a/src/main/java/homeworks/homework07/App.java b/src/main/java/homeworks/homework07/App.java new file mode 100644 index 0000000..22bee84 --- /dev/null +++ b/src/main/java/homeworks/homework07/App.java @@ -0,0 +1,228 @@ +package homeworks.homework07; + +import java.util.ArrayList; +import java.util.List; +import java.util.Scanner; +import java.time.LocalDate; + +class Product { + private String name; + private double price; + + public Product(String name, double price) { + if (name == null || name.trim().isEmpty() || name.matches("\\d+") || name.length() < 3) { + throw new IllegalArgumentException("Недопустимое имя продукта!"); + } + if (price <= 0) { + throw new IllegalArgumentException("Стоимость продукта должна быть положительной!"); + } + this.name = name; + this.price = price; + } + + public String getName() { + return name; + } + + public double getPrice() { + return price; + } + + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (obj == null || getClass() != obj.getClass()) return false; + Product product = (Product) obj; + return Double.compare(product.price, price) == 0 && name.equals(product.name); + } + + @Override + public String toString() { + return "Product{" + + "name='" + name + '\'' + + ", price=" + price + + '}'; + } + + @Override + public int hashCode() { + return 31 * name.hashCode() + Double.hashCode(price); + } +} + +class DiscountProduct extends Product { + private double discount; // Размер скидки + private LocalDate expirationDate; // Срок действия скидки + + public DiscountProduct(String name, double price, double discount, LocalDate expirationDate) { + super(name, price); + if (discount <= 0 || discount >= price) { + throw new IllegalArgumentException("Скидка должна быть положительной и меньше цены продукта."); + } + this.discount = discount; + this.expirationDate = expirationDate; + } + + @Override + public double getPrice() { + if (LocalDate.now().isAfter(expirationDate)) { + return super.getPrice(); // Возвращаем обычную цену, если срок действия скидки истек + } + return super.getPrice() - discount; // Возвращаем цену со скидкой + } + + @Override + public String toString() { + return super.toString() + " (Скидка: " + discount + " рублей, Срок действия: " + expirationDate + ")"; + } +} + +class Person { + private String name; + private double money; + private List basket; + + public Person(String name, double money) { + if (name == null || name.trim().isEmpty()) { + throw new IllegalArgumentException("Имя не может быть пустым"); + } + if (money < 0) { + throw new IllegalArgumentException("Деньги не могут быть отрицательными"); + } + this.name = name; + this.money = money; + this.basket = new ArrayList<>(); + } + + public String getName() { + return name; + } + + public double getMoney() { + return money; + } + + public List getBasket() { + return basket; + } + + public boolean buyProduct(Product product) { + if (product.getPrice() <= money) { + basket.add(product); + money -= product.getPrice(); + System.out.println(name + " купил " + product.getName()); + return true; + } else { + System.out.println(name + " не может позволить себе " + product.getName()); + return false; + } + } + + @Override + public String toString() { + return name + (basket.isEmpty() ? " - Ничего не куплено" : " - " + basket); + } +} + +public class App { + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + List customers = new ArrayList<>(); + List products = new ArrayList<>(); + + customers.add(new Person("Павел Андреевич", 10000)); + customers.add(new Person("Анна Петровна", 2000)); + customers.add(new Person("Борис", 10)); + + products.add(new Product("Хлеб", 40)); + products.add(new Product("Молоко", 60)); + products.add(new DiscountProduct("Торт", 1000, 200, LocalDate.now().plusDays(5))); // Скидка 200 + products.add(new DiscountProduct("Кофе растворимый", 879, 432, LocalDate.now().plusDays(3))); // Скидка 432 + products.add(new Product("Масло", 150)); + + // Процесс выбора продуктов + int currentCustomerIndex = 0; + + while (true) { + Person currentCustomer = customers.get(currentCustomerIndex); + System.out.println(currentCustomer.getName() + ", выберите продукт (или введите 'END' для завершения):"); + for (Product product : products) { + System.out.println(product); + } + + String input = scanner.nextLine(); + if (input.equalsIgnoreCase("END")) { + break; + } + + // Найти выбранный продукт + boolean productFound = false; + for (Product product : products) { + if (product.getName().equalsIgnoreCase(input)) { + currentCustomer.buyProduct(product); + productFound = true; + break; + } + } + + if (!productFound) { + System.out.println("Продукт не найден. Попробуйте снова."); + } + + // Переход к следующему покупателю + currentCustomerIndex = (currentCustomerIndex + 1) % customers.size(); + } + + // Вывод содержимого пакета для каждого покупателя + for (Person customer : customers) { + System.out.println(customer); + } + + // Обработка случаев + testAdditionalCases(scanner); + } + + private static void testAdditionalCases(Scanner scanner) { + // Тестовые случаи + try { + Person zhenya = new Person("Женя", 0); + Product iceCream = new Product("Мороженое", 200); + zhenya.buyProduct(iceCream); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + } + + try { + Person sveta = new Person("Света", -3); + Product pasta = new Product("Макароны", 800); + sveta.buyProduct(pasta); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); + } + + // Тестирование недопустимых имен и цен + try { + Product invalidProduct1 = new Product("88", 100); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); // Недопустимое имя продукта! + } + + try { + Product invalidProduct2 = new Product("Т", 100); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); // Недопустимое имя продукта! + } + + try { + Product invalidProduct3 = new Product("Шоколадка", -1); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); // Стоимость продукта должна быть положительной! + } + + try { + DiscountProduct invalidDiscountProduct = new DiscountProduct("Чипсы", 100, 150, LocalDate.now().plusDays(5)); + } catch (IllegalArgumentException e) { + System.out.println(e.getMessage()); // Скидка должна быть положительной и меньше цены продукта. + } + } +} diff --git a/src/main/java/homeworks/homework08/App.java b/src/main/java/homeworks/homework08/App.java new file mode 100644 index 0000000..3dd9923 --- /dev/null +++ b/src/main/java/homeworks/homework08/App.java @@ -0,0 +1,164 @@ +package homeworks.homework08; + + +import java.io.BufferedReader; +import java.io.BufferedWriter; +import java.io.FileReader; +import java.io.FileWriter; +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +class Product { + private String name; + private double price; + + public Product(String name, double price) { + if (name == null || name.trim().isEmpty()) { + throw new IllegalArgumentException("Название продукта не может быть пустым"); + } + if (price < 0) { + throw new IllegalArgumentException("Стоимость продукта не может быть отрицательной"); + } + this.name = name; + this.price = price; + } + + public String getName() { + return name; + } + + public double getPrice() { + return price; + } +} + +class Person { + private String name; + private double money; + private List basket; + + public Person(String name, double money) { + if (name == null || name.trim().isEmpty()) { + throw new IllegalArgumentException("Имя не может быть пустым"); + } + if (money < 0) { + throw new IllegalArgumentException("Деньги не могут быть отрицательными"); + } + this.name = name; + this.money = money; + this.basket = new ArrayList<>(); + } + + public String getName() { + return name; + } + + public double getMoney() { + return money; + } + + public List getBasket() { + return basket; + } + + public boolean buyProduct(Product product) { + if (product.getPrice() <= money) { + basket.add(product); + money -= product.getPrice(); + return true; + } else { + return false; + } + } + + @Override + public String toString() { + if (basket.isEmpty()) { + return name + " - Ничего не куплено"; + } + StringBuilder result = new StringBuilder(name + " - "); + for (Product product : basket) { + result.append(product.getName()).append(", "); + } + return result.substring(0, result.length() - 2); + } +} + +public class App { + public static void main(String[] args) { + List customers = new ArrayList<>(); + List products = new ArrayList<>(); + List outputMessages = new ArrayList<>(); + + // Считывание данных из файла с использованием BufferedReader + try (BufferedReader br = new BufferedReader(new FileReader("data.txt"))) { + // Считывание покупателей + String line = br.readLine(); + String[] customerData = line.split("; "); + for (String data : customerData) { + String[] parts = data.split(" = "); + String name = parts[0]; + double money = Double.parseDouble(parts[1]); + customers.add(new Person(name, money)); + } + + // Считывание продуктов + line = br.readLine(); + String[] productData = line.split("; "); + for (String data : productData) { + String[] parts = data.split(" = "); + String name = parts[0]; + double price = Double.parseDouble(parts[1]); + products.add(new Product(name, price)); + } + + // Считывание покупок + while ((line = br.readLine()) != null) { + if (line.equals("END")) { + break; + } + String[] parts = line.split(" "); + String customerName = parts[0]; + String productName = parts[1]; + + // Поиск покупателя и продукта + Person customer = customers.stream() + .filter(c -> c.getName().equals(customerName)) + .findFirst() + .orElse(null); + Product product = products.stream() + .filter(p -> p.getName().equals(productName)) + .findFirst() + .orElse(null); + + // Пытаемся купить продукт + if (customer != null && product != null) { + boolean success = customer.buyProduct(product); + if (success) { + outputMessages.add(customerName + " купил " + productName); + } else { + outputMessages.add(customerName + " не может позволить себе " + productName); + } + } + } + } catch (IOException e) { + System.out.println("Ошибка при чтении файла: " + e.getMessage()); + } + + // Вывод результатов в файл + try (BufferedWriter bw = new BufferedWriter(new FileWriter("output.txt"))) { + for (String message : outputMessages) { + bw.write(message); + bw.newLine(); + } + for (Person customer : customers) { + bw.write(customer.toString()); + bw.newLine(); + } + } catch (IOException e) { + System.out.println("Ошибка при записи в файл: " + e.getMessage()); + } + } +} + diff --git a/src/main/java/homeworks/homework09/App.java b/src/main/java/homeworks/homework09/App.java new file mode 100644 index 0000000..4f690ff --- /dev/null +++ b/src/main/java/homeworks/homework09/App.java @@ -0,0 +1,34 @@ +package homeworks.homework09; + +public class App { + public static void main(String[] args) { + // Создаем автомобили + PerformanceCar pCar1 = new PerformanceCar("Ferrari", "488", 2020, 600, 3, 15, 100); + PerformanceCar pCar2 = new PerformanceCar("Lamborghini", "Huracan", 2021, 640, 3, 14, 90); + ShowCar sCar = new ShowCar("McLaren", "720S", 2020, 710, 2, 12, 80); + + // Создаем гараж + Garage garage = new Garage(); + + // Паркуем автомобили в гараже + garage.parkCar(pCar1); + garage.parkCar(pCar2); + garage.parkCar(sCar); + + // Выводим информацию о гараже + System.out.println("Гараж:"); + System.out.println(garage); + + // Создаем гонку + Race race = new Race("Monaco Grand Prix"); + + // Добавляем участников в гонку + race.addParticipant(pCar1); + race.addParticipant(pCar2); + race.addParticipant(sCar); + + // Выводим информацию о гонке + System.out.println("\nИнформация о гонке:"); + System.out.println(race); + } +} \ No newline at end of file diff --git a/src/main/java/homeworks/homework09/Car.java b/src/main/java/homeworks/homework09/Car.java new file mode 100644 index 0000000..839418b --- /dev/null +++ b/src/main/java/homeworks/homework09/Car.java @@ -0,0 +1,150 @@ +package homeworks.homework09; +import java.util.Arrays; +import java.util.Objects; + +public class Car { + private String brand; // Марка + private String model; // Модель + private int year; // Год выпуска + private int horsepower; // Мощность в лошадиных силах + private int acceleration; // Ускорение + private int suspension; // Подвеска + private int durability; // Долговечность + + public Car(String brand, String model, int year, int horsepower, int acceleration, int suspension, int durability) { + this.brand = brand; + this.model = model; + this.year = year; + this.horsepower = horsepower; + this.acceleration = acceleration; + this.suspension = suspension; + this.durability = durability; + } + + // Геттеры и сеттеры + public String getBrand() { + return brand; + } + + public void setBrand(String brand) { + this.brand = brand; + } + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + + public int getYear() { + return year; + } + + public void setYear(int year) { + this.year = year; + } + + public int getHorsepower() { + return horsepower; + } + + public void setHorsepower(int horsepower) { + this.horsepower = horsepower; + } + + public int getAcceleration() { + return acceleration; + } + + public void setAcceleration(int acceleration) { + this.acceleration = acceleration; + } + + public int getSuspension() { + return suspension; + } + + public void setSuspension(int suspension) { + this.suspension = suspension; + } + + public int getDurability() { + return durability; + } + + public void setDurability(int durability) { + this.durability = durability; + } + + @Override + public String toString() { + return String.format("Car [brand=%s, model=%s, year=%d, horsepower=%d, acceleration=%d, suspension=%d, durability=%d]", + brand, model, year, horsepower, acceleration, suspension, durability); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (!(o instanceof Car)) return false; + Car car = (Car) o; + return year == car.year && + horsepower == car.horsepower && + acceleration == car.acceleration && + suspension == car.suspension && + durability == car.durability && + Objects.equals(brand, car.brand) && + Objects.equals(model, car.model); + } + + @Override + public int hashCode() { + return Objects.hash(brand, model, year, horsepower, acceleration, suspension, durability); + } +} + +class PerformanceCar extends Car { + private String[] addOns; // Дополнения + + public PerformanceCar(String brand, String model, int year, int horsepower, int acceleration, int suspension, int durability) { + super(brand, model, year, horsepower + 50, acceleration, (int)(suspension * 0.75), durability); + this.addOns = new String[0]; // По умолчанию пустой массив + } + + public String[] getAddOns() { + return addOns; + } + + public void setAddOns(String[] addOns) { + this.addOns = addOns; + } + + @Override + public String toString() { + return "PerformanceCar " + super.toString() + ", addOns=" + Arrays.toString(addOns); + } +} + +class ShowCar extends Car { + private int stars; // Оценка популярности + + public ShowCar(String brand, String model, int year, int horsepower, int acceleration, int suspension, int durability) { + super(brand, model, year, horsepower, acceleration, suspension, durability); + this.stars = 0; // По умолчанию 0 + } + + public int getStars() { + return stars; + } + + public void setStars(int stars) { + this.stars = stars; + } + + @Override + public String toString() { + return "ShowCar " + super.toString() + ", stars=" + stars; + } +} + diff --git a/src/main/java/homeworks/homework09/Garage.java b/src/main/java/homeworks/homework09/Garage.java new file mode 100644 index 0000000..279d629 --- /dev/null +++ b/src/main/java/homeworks/homework09/Garage.java @@ -0,0 +1,28 @@ +package homeworks.homework09; + +import java.util.ArrayList; + +public class Garage { + private ArrayList cars; + + public Garage() { + cars = new ArrayList<>(); + } + + public void parkCar(Car car) { + cars.add(car); + } + + public void removeCar(Car car) { + cars.remove(car); + } + + @Override + public String toString() { + StringBuilder result = new StringBuilder("Garage:\n"); + for (Car car : cars) { + result.append(car.toString()).append("\n"); + } + return result.toString(); + } +} diff --git a/src/main/java/homeworks/homework09/Race.java b/src/main/java/homeworks/homework09/Race.java new file mode 100644 index 0000000..3ef64a8 --- /dev/null +++ b/src/main/java/homeworks/homework09/Race.java @@ -0,0 +1,27 @@ +package homeworks.homework09; + +import java.util.ArrayList; +import java.util.List; + +public class Race { + private String name; // Название гонки + private List participants; // Участники гонки + + public Race(String name) { + this.name = name; + this.participants = new ArrayList<>(); + } + + public void addParticipant(Car car) { + participants.add(car); + } + + @Override + public String toString() { + StringBuilder result = new StringBuilder("Race: " + name + "\nParticipants:\n"); + for (Car car : participants) { + result.append(car.toString()).append("\n"); + } + return result.toString(); + } +} diff --git a/src/main/java/homeworks/homework11/Car.java b/src/main/java/homeworks/homework11/Car.java new file mode 100644 index 0000000..f87bedd --- /dev/null +++ b/src/main/java/homeworks/homework11/Car.java @@ -0,0 +1,64 @@ +package homeworks.homework11; + +public class Car { + private String licensePlate; // Номер автомобиля + private String model; // Модель + private String colour; // Цвет + private int mileage; // Пробег + private double price; // Стоимость + + // Конструктор + public Car(String licensePlate, String model, String colour, double price, int mileage) { + this.licensePlate = licensePlate; + this.model = model; + this.colour = colour; + this.price = price; + this.mileage = mileage; + } + + // Геттеры и сеттеры + public String getLicensePlate() { + return licensePlate; + } + + public void setLicensePlate(String licensePlate) { + this.licensePlate = licensePlate; + } + + public String getModel() { + return model; + } + + public void setModel(String model) { + this.model = model; + } + + public String getColour() { + return colour; + } + + public void setColour(String colour) { + this.colour = colour; + } + + public int getMileage() { + return mileage; + } + + public void setMileage(int mileage) { + this.mileage = mileage; + } + + public double getPrice() { + return price; + } + + public void setPrice(double price) { + this.price = price; + } + + @Override + public String toString() { + return licensePlate + " " + model + " " + colour + " " + mileage + " " + price; + } +} \ No newline at end of file diff --git a/src/main/java/homeworks/homework11/CarRepository.java b/src/main/java/homeworks/homework11/CarRepository.java new file mode 100644 index 0000000..6474687 --- /dev/null +++ b/src/main/java/homeworks/homework11/CarRepository.java @@ -0,0 +1,47 @@ +package homeworks.homework11; + +import java.io.*; +import java.util.ArrayList; +import java.util.List; + +public class CarRepository { + + // Метод для сохранения данных в файл + public static void saveCarsToFile(List cars, String fileName) { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName))) { + for (Car car : cars) { + writer.write(car.getLicensePlate() + "|" + car.getModel() + "|" + car.getColour() + "|" + + car.getMileage() + "|" + car.getPrice()); + writer.newLine(); + } + System.out.println("Данные успешно сохранены в файл " + fileName); + } catch (IOException e) { + System.err.println("Ошибка при сохранении данных в файл: " + e.getMessage()); + } + } + + // Метод для загрузки данных из файла + public static List loadCarsFromFile(String fileName) { + List cars = new ArrayList<>(); + try (BufferedReader reader = new BufferedReader(new FileReader(fileName))) { + String line; + while ((line = reader.readLine()) != null) { + String[] parts = line.split("\\|"); + if (parts.length == 5) { + String licensePlate = parts[0]; + String model = parts[1]; + String colour = parts[2]; + int mileage = Integer.parseInt(parts[3]); + double price = Double.parseDouble(parts[4]); + cars.add(new Car(licensePlate, model, colour, price, mileage)); + } + } + System.out.println("Данные успешно загружены из файла " + fileName); + } catch (IOException e) { + System.err.println("Ошибка при загрузке данных из файла: " + e.getMessage()); + } catch (NumberFormatException e) { + System.err.println("Ошибка формата данных: " + e.getMessage()); + } + return cars; + } +} \ No newline at end of file diff --git a/src/main/java/homeworks/homework11/Main.java b/src/main/java/homeworks/homework11/Main.java new file mode 100644 index 0000000..90392b5 --- /dev/null +++ b/src/main/java/homeworks/homework11/Main.java @@ -0,0 +1,83 @@ +package homeworks.homework11; + +import java.util.ArrayList; +import java.util.Comparator; +import java.util.List; +import java.util.Optional; +import java.util.stream.Collectors; + +public class Main { + + public static void main(String[] args) { + // Создание списка автомобилей + List cars = new ArrayList<>(); + + // Заполнение списка автомобилей с использованием данных из задания + cars.add(new Car("a123me", "Mercedes", "White", 8300000, 0)); + cars.add(new Car("b873of", "Volga", "Black", 673000, 0)); + cars.add(new Car("w487mn", "Lexus", "Grey", 900000, 76000)); + cars.add(new Car("p987hj", "Volga", "Red", 704340, 610)); + cars.add(new Car("c987ss", "Toyota", "White", 761000, 254000)); + cars.add(new Car("o983op", "Toyota", "Black", 740000, 698000)); + cars.add(new Car("p146op", "BMW", "White", 850000, 271000)); + cars.add(new Car("u893ii", "Toyota", "Purple", 440000, 210900)); + cars.add(new Car("l097df", "Toyota", "Black", 780000, 108000)); + cars.add(new Car("y876wd", "Toyota", "Black", 1000000, 160000)); + + // Сохранение данных в файл + String fileName = "car_collection.txt"; + CarRepository.saveCarsToFile(cars, fileName); + + // Загрузка данных из файла + List loadedCars = CarRepository.loadCarsFromFile(fileName); + + // Вывод всех автомобилей + System.out.println("Автомобили в базе:"); + System.out.println("Number Model Color Mileage Cost"); + loadedCars.forEach(System.out::println); + + // Заданные параметры + String colorToFind = "Black"; // Цвет для поиска + int mileageToFind = 0; // Пробег для поиска + + // Номера всех автомобилей, имеющих заданный цвет или нулевой пробег + List filteredCars = loadedCars.stream() + .filter(car -> car.getColour().equalsIgnoreCase(colorToFind) || car.getMileage() == mileageToFind) + .map(Car::getLicensePlate) + .collect(Collectors.toList()); + + System.out.println("Номера автомобилей по цвету или пробегу: " + String.join(" ", filteredCars)); + + // Цвет автомобиля с минимальной стоимостью + Optional cheapestCar = loadedCars.stream() + .min(Comparator.comparingDouble(Car::getPrice)); + + if (cheapestCar.isPresent()) { + System.out.println("Цвет автомобиля с минимальной стоимостью: " + cheapestCar.get().getColour()); + } else { + System.out.println("Нет автомобилей в базе."); + } + + // Подсчет уникальных автомобилей + long uniqueCarsCount = loadedCars.stream().distinct().count(); + System.out.println("Уникальные автомобили: " + uniqueCarsCount + " шт."); + + // Средняя стоимость модели Toyota + double averagePriceToyota = loadedCars.stream() + .filter(car -> car.getModel().equalsIgnoreCase("Toyota")) + .mapToDouble(Car::getPrice) + .average() + .orElse(0.0); + + System.out.printf("Средняя стоимость модели Toyota: %.2f%n", averagePriceToyota); + + // Средняя стоимость модели Volvo + double averagePriceVolvo = loadedCars.stream() + .filter(car -> car.getModel().equalsIgnoreCase("Volvo")) + .mapToDouble(Car::getPrice) + .average() + .orElse(0.0); + + System.out.printf("Средняя стоимость модели Volvo: %.2f%n", averagePriceVolvo); + } +} \ No newline at end of file diff --git a/src/main/java/homeworks/homework12/Main.java b/src/main/java/homeworks/homework12/Main.java new file mode 100644 index 0000000..a7576d9 --- /dev/null +++ b/src/main/java/homeworks/homework12/Main.java @@ -0,0 +1,63 @@ +package homeworks.homework12; + +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Scanner; + +public class Main { + public static void main(String[] args) { + Scanner scanner = new Scanner(System.in); + String[] fields = {"Фамилия", "Имя", "Отчество", "Дата рождения", "Номер телефона", "Пол", "Возраст"}; + String[] inputs = new String[fields.length]; + + System.out.println("Введите данные (в произвольном порядке):"); + + for (int i = 0; i < fields.length; i++) { + System.out.print(fields[i] + ": "); + inputs[i] = scanner.nextLine(); + } + + // Проверка на количество полей + if (inputs.length != fields.length) { + throw new UnexpectedCountValueException("Количество введенных данных не совпадает с требуемым."); + } + try { + Person person = new Person(); + person.setSurname(getFieldValue(inputs, "Фамилия")); + person.setName(getFieldValue(inputs, "Имя")); + person.setPatronymic(getFieldValue(inputs, "Отчество")); + person.setBirthDate(getFieldValue(inputs, "Дата рождения")); + person.setPhoneNumber(Long.parseLong(getFieldValue(inputs, "Номер телефона"))); + person.setGender(getFieldValue(inputs, "Пол").charAt(0)); + person.setAge(Integer.parseInt(getFieldValue(inputs, "Возраст"))); + + String fileName = person.toString().split(" ")[0] + ".txt"; // Имя файла по фамилии + writeToFile(fileName, person); + System.out.println("Данные успешно записаны в файл: " + fileName); + } catch (IllegalArgumentException e) { + System.out.println("Ошибка: " + e.getMessage()); + } catch (IOException e) { + System.out.println("Ошибка при записи в файл: " + e.getMessage()); + e.printStackTrace(); + } finally { + scanner.close(); + } + } + + private static String getFieldValue(String[] inputs, String fieldName) { + for (String input : inputs) { + if (input.startsWith(fieldName)) { + return input.split(":")[1].trim(); // Получаем значение после ":" + } + } + return null; // Если поле не найдено + } + + private static void writeToFile(String fileName, Person person) throws IOException { + try (BufferedWriter writer = new BufferedWriter(new FileWriter(fileName, true))) { + writer.write(person.toString()); + writer.newLine(); + } + } +} \ No newline at end of file diff --git a/src/main/java/homeworks/homework12/Person.java b/src/main/java/homeworks/homework12/Person.java new file mode 100644 index 0000000..f4bb56d --- /dev/null +++ b/src/main/java/homeworks/homework12/Person.java @@ -0,0 +1,57 @@ +package homeworks.homework12; + +import java.io.BufferedWriter; +import java.io.FileWriter; +import java.io.IOException; +import java.util.Scanner; +class Person { + private String surname; + private String name; + private String patronymic; + private String birthDate; // формат dd.mm.yyyy + private long phoneNumber; // беззнаковое целое + private char gender; // 'f' или 'm' + private int age; + + public void setSurname(String surname) { + this.surname = surname; + } + + public void setName(String name) { + if (name == null || name.trim().isEmpty()) { + throw new IllegalArgumentException("Имя не может быть пустым"); + } + this.name = name; + } + + public void setPatronymic(String patronymic) { + this.patronymic = patronymic; + } + + public void setBirthDate(String birthDate) { + if (!birthDate.matches("\\d{2}\\.\\d{2}\\.\\d{4}")) { + throw new IllegalArgumentException("Дата рождения должна быть в формате dd.mm.yyyy"); + } + this.birthDate = birthDate; + } + + public void setPhoneNumber(long phoneNumber) { + this.phoneNumber = phoneNumber; + } + + public void setGender(char gender) { + if (gender != 'f' && gender != 'm') { + throw new IllegalArgumentException("Пол должен быть 'f' или 'm'"); + } + this.gender = gender; + } + + public void setAge(int age) { + this.age = age; + } + + @Override + public String toString() { + return surname + name + patronymic + birthDate + " " + phoneNumber + " " + gender; + } +} \ No newline at end of file diff --git a/src/main/java/homeworks/homework12/UnexpectedCountValueException.java b/src/main/java/homeworks/homework12/UnexpectedCountValueException.java new file mode 100644 index 0000000..4d92eec --- /dev/null +++ b/src/main/java/homeworks/homework12/UnexpectedCountValueException.java @@ -0,0 +1,8 @@ +package homeworks.homework12; + +public class UnexpectedCountValueException extends RuntimeException { + public UnexpectedCountValueException(String message) { + super(message); + } + +} diff --git a/src/main/test/attestations/attestation01/repository/UsersRepositoryFileImplTest.java b/src/main/test/attestations/attestation01/repository/UsersRepositoryFileImplTest.java new file mode 100644 index 0000000..39cb0af --- /dev/null +++ b/src/main/test/attestations/attestation01/repository/UsersRepositoryFileImplTest.java @@ -0,0 +1,78 @@ +package attestations.attestation01.repository; // Correct package declaration + +import attestations.attestation01.model.User; +import attestations.attestation01.repository.Impl.UsersRepositoryFileImpl; // Ensure this import is correct +import attestations.attestation01.repository.UsersRepository; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Nested; +import org.junit.jupiter.api.Test; + +import java.time.LocalDateTime; +import java.util.List; +import java.util.Optional; + +import static org.junit.jupiter.api.Assertions.*; + +@Nested +public class UsersRepositoryFileImplTest { + public static void main(String[] args) {} + private UsersRepository usersRepository; + + @BeforeEach + void setUp() { + usersRepository = new UsersRepositoryFileImpl(); // Assuming this is the correct implementation + usersRepository.deleteAll(); // Ensuring a clean state before each test + } + + @Test + void testCreateUser () { + User user = new User("1", LocalDateTime.now(), "user_1", "password1", "password1", "Иванов", "Иван", null, 30, false); + usersRepository.create(user); + + Optional foundUser = usersRepository.findById("1"); + assertNotNull(foundUser ); + assertEquals("user_1", foundUser .get().getLogin()); + } + + @Test + void testFindAllUsers() { + User user1 = new User("1", LocalDateTime.now(), "user_1", "password1", "password1", "Иванов", "Иван", null, 30, false); + User user2 = new User("2", LocalDateTime.now(), "user_2", "password2", "password2", "Петров", "Петр", null, 25, true); + + usersRepository.create(user1); + usersRepository.create(user2); + + List allUsers = usersRepository.findAll(); + assertEquals(2, allUsers.size()); + } + + @Test + void testUpdateUser () { + User user = new User("1", LocalDateTime.now(), "user_1", "password1", "password1", "Иванов", "Иван", null, 30, false); + usersRepository.create(user); + + user.setAge(31); + usersRepository.update(user); + + Optional updatedUser = usersRepository.findById("1"); + assertTrue(updatedUser .isPresent()); + assertEquals(31, updatedUser .get().getAge()); + } + + @Test + void testDeleteUser () { + User user = new User("1", LocalDateTime.now(), "user_1", "password1", "password1", "Иванов", "Иван", null, 30, false); + usersRepository.create(user); + + usersRepository.deleteById("1"); + + assertThrows(RuntimeException.class, () -> usersRepository.findById("1")); + } + + @Test + + void testFindUser () { + Optional foundUser = usersRepository.findById("999"); // Assuming "999" has not been created + assertFalse(foundUser .isPresent(), "User should not be found"); + } +} \ No newline at end of file