Скачиваний:
0
Добавлен:
07.06.2026
Размер:
393.08 Кб
Скачать

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ УНИВЕРСИТЕТ ТЕЛЕКОММУНИКАЦИЙ ИМ. ПРОФ. М.А. БОНЧ-БРУЕВИЧА»

Факультет информационных систем и технологий

Кафедра безопасности информационных систем

ОТЧЕТ

по практике №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

Соседние файлы в папке ЛР