
Курсовая_работа_ГоловковИЕ_12002108
.pdf
Рисунок 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