Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Курсовая_работа_ГоловковИЕ_12002108

.pdf
Скачиваний:
2
Добавлен:
26.06.2024
Размер:
1.48 Mб
Скачать

Рисунок 3.5 – Демонстрация изменения параметров животного

При выборе удаления животного вводятся текущие значения его параметров, а затем выводится сообщение о том, что оно было удалено (рисунок 3.6):

21

Рисунок 3.6 – Демонстрация удаления животного

В меню методы записи или чтения XML-файла работают с используемым XML-файлом. Для просмотра их результата работы потребуется вывести текущие данные с помощью раннее описанной функции вывода или открыть используемый XML-файл. После выбора функции в консоли выводится уведомление о завершении её работы. Выбор функций представлен на рисунке 3.7:

Рисунок 3.7 – Выбор функций записи и чтения

22

Завершить работу программы можно не только с помощью закрытия программы или её принудительной остановки, но и с помощью соответствующей функции меню (рисунок 3.8):

Рисунок 3.7 – Завершение работы программы

В данном разделе было протестировано консольное приложение.

23

ЗАКЛЮЧЕНИЕ

В ходе выполнения курсовой работы были решены поставленные задачи: анализ предметной области, программная реализация изменяемого хранилища информации о животных и тестирование созданного приложения.

Разработан и рассмотрен алгоритм решения поставленной задачи, разобраны включённые в алгоритм функции на языке программирования.

Была разработана программная реализация на языке программирования Java с использованием среды IntelliJ IDEA для создания консольного меню.

Было приведено тестирование программного приложения с рассмотрением встроенного предотвращения ошибок в программе.

Таким образом, поставленные задачи решены, и цель работы достигнута.

24

СПИСОК ИСПОЛЬЗОВАННЫХ ИСТОЧНИКОВ

1.Животный мир Росиии // Википедия [Электронный ресурс] – Режим доступа: https://ru.wikipedia.org/wiki/Животный_мир_России,

свободный.

2.Позвоночные // Википедия [Электронный ресурс] – Режим доступа: https://ru.wikipedia.org/wiki/Позвоночные, свободный.

3.Исключения: checked, unchecked и свои собственные // Javarush [Электронный ресурс] – Режим доступа: https://javarush.com/groups/posts/1944-iskljuchenija-checked-unchecked-i- svoi-sobstvennihe, свободный.

4.Курс Java Collections – Лекция: Сложная сериализация в XML, JAXB (вложенные классы и т. д.) // Javarush [Электронный ресурс] – Режим доступа: https://javarush.com/quests/lectures/questcollections.level03.lecture09,

свободный.

5.Отношения классов — от UML к коду // Хабр [Электронный ресурс] –

Режим доступа: https://habr.com/ru/post/150041 свободный.

25

ПРИЛОЖЕНИЕ А

Исходный код Main.java

package main.java;

import javax.xml.bind.annotation.*; import javax.xml.bind.*;

import java.io.*;

@XmlRootElement public class Main {

public static void main(String[] args) { System.out.println("Животный мир. Пользовательское меню"); doAnimals menu = new doAnimals();

menu.showMenu();

}

static public void writeToXML() {

AnimalsXML animalsXML = new AnimalsXML(); animalsXML.allAnimals.addAll(Bird.birds); animalsXML.allAnimals.addAll(Mammal.mammals); animalsXML.allAnimals.addAll(Reptile.reptiles); animalsXML.allAnimals.addAll(Amphibian.amphibians); animalsXML.allAnimals.addAll(Fish.fish);

String filePath = "infoXMl.xml"; try {

JAXBContext context = JAXBContext.newInstance(Main.class, Bird.class, Mammal.class, Reptile.class, Amphibian.class, Fish.class, AnimalsXML.class);

Marshaller marshaller = context.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,

Boolean.TRUE);

marshaller.marshal(animalsXML, new File(filePath)); } catch (JAXBException e) {

e.printStackTrace();

}

System.out.println("Данные сохранены в XML-файл");

}

static public void readFromXML() { AnimalsXML animalsXML;

String filePath = "infoXMl.xml"; try {

JAXBContext context = JAXBContext.newInstance(Main.class, Bird.class, Mammal.class, Reptile.class, Amphibian.class, Fish.class, AnimalsXML.class);

Unmarshaller unmarshaller = context.createUnmarshaller(); animalsXML = (AnimalsXML) unmarshaller.unmarshal(new

File(filePath));

} catch (JAXBException e) {

throw new RuntimeException(e);

}

for (Object obj : animalsXML.allAnimals) { if (obj instanceof Bird) {

Bird.birds.add((Bird) obj);

}

if (obj instanceof Mammal) { Mammal.mammals.add((Mammal) obj);

}

if (obj instanceof Reptile) {

26

Reptile.reptiles.add((Reptile) obj);

}

if (obj instanceof Amphibian) { Amphibian.amphibians.add((Amphibian) obj);

}

if (obj instanceof Fish) { Fish.fish.add((Fish) obj);

}

}

System.out.println("Получены данные из XML-файла"); System.out.println("Используейте функцию №4 для вывода");

}

}

ПРИЛОЖЕНИЕ Б

Исходный код Animals.java

package main.java;

import javax.xml.bind.annotation.*; import java.util.*;

//Абстрактный класс животные

@XmlRootElement

public abstract class Animals {

static Scanner read = new Scanner(System.in); private String name;

private double sizeCentimeter; public boolean predatory; private String predatoryYN;

//Конструктор c параметрами

public Animals(String name, double sizeCentimeter, String predatoryYN) { this.name = name;

this.sizeCentimeter = sizeCentimeter; this.predatoryYN = predatoryYN;

try {

if (predatoryYN.equals("Да") || predatoryYN.equals("да")) this.predatory = true;

else if (predatoryYN.equals("Нет") || predatoryYN.equals("нет")) this.predatory = false;

else throw new IllegalArgumentException("Неправильно введено хищничество");

} catch (IllegalArgumentException e) { System.out.println("Введённый параметр хищничества не

соответствует да/нет");

System.out.println("Измените параметр с помощью команды меню

№3");

}

}

//Конструктор без параметров public Animals() {

this.name = ""; this.sizeCentimeter = 0.0; this.predatory = false; this.predatoryYN = "Нет";

}

@XmlElement

public String getName() {

27

return name;

}

public void setName(String name) { this.name = name;

}

@XmlElement

public double getSizeCentimeter() { return sizeCentimeter;

}

public void setSizeCentimeter(double sizeCentimeter) { this.sizeCentimeter = sizeCentimeter;

}

@XmlElement

public String getPredatoryYN() { return predatoryYN;

}

public void setPredatoryYN(String predatoryYN) throws IllegalArgumentException {

try {

if (predatoryYN.equals("Да") || predatoryYN.equals("да")) { this.predatoryYN = predatoryYN;

this.predatory = true;

} else if (predatoryYN.equals("Нет") || predatoryYN.equals("нет")) {

this.predatoryYN = predatoryYN; this.predatory = false;

} else throw new IllegalArgumentException("Введён неправильный аргумент хищничества");

} catch (IllegalArgumentException e) {

System.out.println("Введён неправильный аргумент хищничества"); System.out.println("Введите хищничество заново (да/нет)"); setPredatoryYN(read.nextLine());

}

}

@Override

public String toString() {

return "Название: " + name + ", Размер животного, см: " + sizeCentimeter + ", Хищное: " + predatoryYN;

}

}

//Птицы

@XmlRootElement

class Bird extends Animals {

public static List<Bird> birds = new ArrayList<>();

//Конструктор с параметрами

public Bird(String name, double sizeCentimeter, String predatoryYN) { super(name, sizeCentimeter, predatoryYN);

try {

if (sizeCentimeter < 5.7 || sizeCentimeter > 363.0) {

throw new IllegalArgumentException("Введён неправильный

28

размер");

}

} catch (IllegalArgumentException e) { System.out.println("Введённый размер не соответствует размеру

настоящей птицы");

System.out.println("Измените размер с помощью команды меню №3");

}

}

//Конструктор без параметров public Bird() {

super("", 0, "Нет");

}

}

//Млекопитающие

@XmlRootElement

class Mammal extends Animals {

public static List<Mammal> mammals = new ArrayList<>();

//Конструктор c параметрами

public Mammal(String name, double sizeCentimeter, String predatoryYN) throws IllegalArgumentException {

super(name, sizeCentimeter, predatoryYN); try {

if (sizeCentimeter < 3.8 || sizeCentimeter > 2450.0) { throw new IllegalArgumentException("Введён неправильный

размер");

}

} catch (IllegalArgumentException e) { System.out.println("Введённый размер не соответствует размеру

настоящего млекопитающего");

System.out.println("Измените размер с помощью команды меню №3");

}

}

//Конструктор без параметров public Mammal() {

super("", 0, "Нет");

}

}

//Пресмыкающиеся

@XmlRootElement

class Reptile extends Animals {

public static List<Reptile> reptiles = new ArrayList<>();

//Конструктор c параметрами

public Reptile(String name, double sizeCentimeter, String predatoryYN) throws IllegalArgumentException {

super(name, sizeCentimeter, predatoryYN); try {

if (sizeCentimeter < 1.8 || sizeCentimeter > 600.0) {

throw new IllegalArgumentException("Введён неправильный

размер");

}

} catch (IllegalArgumentException e) { System.out.println("Введённый размер не соответствует размеру

настоящего пресмыкающегося (рептилии)");

System.out.println("Измените размер с помощью команды меню №3");

}

}

29

//Конструктор без параметров public Reptile() {

super("", 0, "Нет");

}

}

//Земноводные

@XmlRootElement

class Amphibian extends Animals {

public static List<Amphibian> amphibians = new ArrayList<>();

//Конструктор c параметрами

public Amphibian(String name, double sizeCentimeter, String predatoryYN) throws IllegalArgumentException {

super(name, sizeCentimeter, predatoryYN); try {

if (sizeCentimeter < 0.8 || sizeCentimeter > 180.0) {

throw new IllegalArgumentException("Введён неправильный

размер");

}

} catch (IllegalArgumentException e) { System.out.println("Введённый размер не соответствует размеру

настоящего земноводного (амфибии)");

System.out.println("Измените размер с помощью команды меню №3");

}

}

//Конструктор без параметров public Amphibian() {

super("", 0, "Нет");

}

}

//Рыбы

@XmlRootElement

class Fish extends Animals {

public static List<Fish> fish = new ArrayList<>();

//Конструктор c параметрами

public Fish(String name, double sizeCentimeter, String predatoryYN) throws IllegalArgumentException {

super(name, sizeCentimeter, predatoryYN); try {

if (sizeCentimeter < 0.79 || sizeCentimeter > 2000.0) { throw new IllegalArgumentException("Введён неправильный

размер");

}

} catch (IllegalArgumentException e) { System.out.println("Введённый размер не соответствует размеру

настоящей рыбы");

System.out.println("Измените размер с помощью команды меню №3");

}

}

//Конструктор без параметров public Fish() {

super("", 0, "Нет");

}

}

30