ЛР / laba_java(5)
.docxФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ
«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»
Факультет информационных систем и технологий
Кафедра безопасности информационных систем
ОТЧЕТ
по практике №5
по дисциплине «Кросс-платформенное программирование»,
по теме: «Проектирование классов с наследованием».
|
Выполнил студент группы ИСТ-223: Хакова Ю.М.
|
|
|
|
|
|
Принял: Бородянский Ю. М. |
|
|
(подпись) |
|
|
|
|
|
|
|
Цель работы :
Получение практических навыков проектирования классов и использования статических методов, исследование механизмов наследования классов.
Задание:
В соответствии с индивидуальным заданием (Рис.1) разработать базовый класс и классы-наследники. Базовый класс должен включать в себя не менее двух свойств и двух методов. В классах-наследниках следует спроектировать собственные свойства и методы, включающие и статические. Создать несколько объектов. Разработать меню, обеспечивающее:
отображение свойств объектов на экране;
изменение свойств объектов;
вычисление заданного показателя;
выход из программы.
Рис.1. Вариант задания
Ход работы:
Созданный код представляет собой программу для управления информацией об устройствах, таких как клавиатуры и сканеры. Вот как работает код:
1. Суперкласс DeviceClass: Этот класс содержит общие свойства и методы для устройств. Он имеет две статические переменные: name и price, которые устанавливаются в конструкторе. Метод getPrice() возвращает цену устройства, а метод displayInfo() выводит информацию об устройстве. Метод DocumentCount() возвращает количество устройств в переданном массиве.
2.Подклассы Pasport и StudentID: Эти классы наследуют от DocumentClass и используют его конструктор для установки имени и цены.
3.Главный класс lab5: Этот класс содержит основной метод программы. Он предлагает пользователю меню с пятью опциями: ввод данных о документах, отображение информации о документах, изменение свойств, вычисление самой ранней даты выдачи и выход из программы (Рис.2)
Рис. 2. Интерфейс меню.
При выборе 1 пользователю предлагается ввести количество документов, а затем для каждого документа указать тип (паспорт или студенческий билет), имя и год выдачи и специфическую характеристику (Рис.3). Эта информация сохраняется в список documents.
Рис. 3. Добавление данных о документах.
При выборе 2 программа выводит информацию о всех документах в списке documents и общее количество документов (Рис.4).
Рис. 4. Отображение информации о документах.
При выборе 3 программа позволяет изменить свойства документа (пользователь сам выбирает какой именно документ изменить) (Рис.5).
Рис. 5. Изменение свойств документа.
При выборе 4 программа вычисляет и выводит самый ранний год выдачи всех документов в списке documents (Рис.6).
Рис. 6. Вывод самого раннего года выдачи документа.
При выборе 5 программа завершает работу.
Вывод:
Практическое применение данного кода может реализовываться в различных учебных заведениях, государственных органах, офисах и организациях для комфортного управления данными о документах.
Приложение.
Листинг кода:
import java.io.*;
import java.util.*;
// Суперкласс
class DocumentClass {
private String name; // Имя документа
private int date; // Год выдачи документа
public static int totalDocumentsCreated = 0; // Статическое поле для подсчёта созданных документов
// Конструктор с параметрами
public DocumentClass(String name, int date) {
this.name = name;
this.date = date;
totalDocumentsCreated++; // Увеличиваем счётчик созданных документов
}
// Метод получения года выдачи документа
public int getDate() {
return this.date;
}
// Метод отображения информации о документа
public void studentIDInfo(PrintWriter writer) {
writer.println("Документ: " + this.name + ", Дата выдачи: " + this.date);
}
// Статический метод для подсчёта количества документов в списке
public static int DocumentCount(ArrayList<DocumentClass> documents) {
if (documents != null) {
return documents.size();
} else {
return 0;
}
}
// Метод установки нового имени документа
public void setName(String newName) {
this.name = newName;
}
// Метод установки нового года выдачи документа
public void setDate(int newDate) {
this.date = newDate;
}
}
// Классы наследники
class Pasport extends DocumentClass {
private String country; // Гражданство
// Конструктор с параметрами
public Pasport(String name, int date, String country) {
super(name, date); // Вызов конструктора суперкласса
this.country = country;
}
// Метод отображения информации о паспорте
public void studentIDInfo(PrintWriter writer) {
super.studentIDInfo(writer); // Вызов метода отображения информации суперкласса
writer.println("Страна: " + this.country);
}
// Метод установки нового гражданства
public void setCountry(String newCountry) {
this.country = newCountry;
}
}
class StudentID extends DocumentClass {
private int number; // Номер студенческого билета
// Конструктор с параметрами
public StudentID(String name, int date, int number) {
super(name, date); // Вызов конструктора суперкласса
this.number = number;
}
// Метод отображения информации о студенческом билете
public void studentIDInfo(PrintWriter writer) {
super.studentIDInfo(writer); // Вызов метода отображения информации суперкласса
writer.println("Номер студенческого билета: " + this.number);
}
// Метод установки нового номера студенческого билета
public void setStudentID(int newNumber) {
this.number = newNumber;
}
}
public class lab5 {
public static void main(String[] args) throws IOException {
ArrayList<DocumentClass> documents = new ArrayList<>(); // Создание списка документов
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); // Поток ввода
PrintWriter writer = new PrintWriter(System.out, true); // Поток вывода
// Основной цикл программы
while (true) {
// Вывод меню на экран
writer.println("Меню:");
writer.println("1.Ввод данных о документах");
writer.println("2.Отображение информации о документах");
writer.println("3.Изменить свойства документа");
writer.println("4.Вычисление документа, выданного раньше всех");
writer.println("5.Выход");
writer.println("Выберите действие: ");
int choice = Integer.parseInt(reader.readLine()); // Считывание выбора пользователя
switch (choice) {
case 1:
writer.println("Введите количество документов: ");
int documentCount = Integer.parseInt(reader.readLine()); // Считывание количества документов
for (int i = 0; i < documentCount; i++) {
writer.println("Введите тип документа (1 - паспорт, 2 - студенческий билет): ");
int documentType = Integer.parseInt(reader.readLine()); // Считывание типа документа
writer.println("Введите название документа: ");
String name = reader.readLine(); // Считывание названия документа
writer.println("Введите год выдачи документа: ");
int date = Integer.parseInt(reader.readLine()); // Считывание года выдачи документа
if (documentType == 1) {
writer.println("Введите страну: ");
String country = reader.readLine(); // Считывание года выдачи для паспорта
documents.add(new Pasport(name, date, country)); // Создание и добавление паспорта в список
} else if (documentType == 2) {
writer.println("Введите номер студенческого билета: ");
int number = Integer.parseInt(reader.readLine()); // Считывание номера студенческого билета для студенческого билета
documents.add(new StudentID(name, date, number)); // Создание и добавление студенческого билета в список
} else {
throw new IllegalArgumentException("Неверный тип документа"); // Исключение при неверном типе документа
}
}
break;
case 2:
// Отображение информации об документах
if (documents != null) {
for (DocumentClass document : documents) {
document.studentIDInfo(writer);
}
writer.println("Количество документов: " + DocumentClass.totalDocumentsCreated);
} else {
writer.println("Введите данные о документах");
}
break;
case 3:
// Изменение свойств документа
if (documents != null && DocumentClass.DocumentCount(documents) > 0) {
writer.println("Выберите номер документа для изменения (1-" + DocumentClass.DocumentCount(documents) + "):");
int documentIndex = Integer.parseInt(reader.readLine()) - 1;
if (documentIndex >= 0 && documentIndex < DocumentClass.DocumentCount(documents)) {
DocumentClass document = documents.get(documentIndex);
writer.println("Введите новое название документа:");
String newName = reader.readLine();
document.setName(newName);
writer.println("Введите новую дату выдачи:");
int newDate = Integer.parseInt(reader.readLine());
document.setDate(newDate);
if (document instanceof Pasport) {
Pasport pasport = (Pasport) document;
writer.println("Введите новую страну:");
String newCountry = reader.readLine();
pasport.setCountry(newCountry);
} else if (document instanceof StudentID) {
StudentID studentID = (StudentID) document;
writer.println("Введите новый номер студенческого билета:");
int newStudentID = Integer.parseInt(reader.readLine());
studentID.setStudentID(newStudentID);
}
} else {
writer.println("Неверный номер документа.");
}
} else {
writer.println("Сначала введите данные о документах.");
}
break;
case 4:
// Поиск самого раннего года выдачи документа
if (documents != null && DocumentClass.DocumentCount(documents) > 0) {
int earliestDate = Integer.MAX_VALUE;
for (DocumentClass document : documents) {
int date = document.getDate();
if (date < earliestDate) {
earliestDate = date;
}
}
writer.println("Самый ранний год выдачи документа: " + earliestDate);
} else {
writer.println("Введите данные о документах.");
}
break;
case 5:
writer.println("Выход из программы");
return; // Выход из программы
default:
writer.println("Неверный выбор"); // Вывод сообщения об ошибке при неверном выборе
break;
}
}
}
}
Санкт-Петербург, 2024
