Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Текст классов

Отчет

По лабораторной работе №2

ПРОГРАММИРОВАНИЕ

ВЗАИМОДЕЙСТВИЯ ПРОСТЫХ ОБЪЕКТОВ, СВЯЗАННЫХ

ИЕРАРХИЧЕСКИ

по дисциплине:

«Программирование. Языки высокого уровня»

 

 

Выполнил:

студент группы ИВТб-11о

Бахарев Александр

Проверил:

доцент Волкова Т.В.

 

Севастополь 2016

 

Цель работы

Целью данной работы является получение навыков программирования иерархических структур данных на Java, закрепление навыков программирования классов и взаимодействия объектов.

Постановка задачи

Разработать программу, реализующую взаимодействие объектов, образующих иерархическую структуру данных. Для создания объектов, определенных вариантом задания разработать соответствующие классы.

 

Офис. Поля: int id_офиса (ключевое), String адрес, double площадь, int число_комнат. Методы: конструктор с параметрами. Фирма. Поля: String название_фирмы, Офис [ ] список_офисов, int число_офисов. Методы: конструктор с параметрами, геттеры для всех полей, сеттер для поля название_фирмы, добавить офис с учетом уникальности id_офиса, удалить офис с заданным id_офиса, возвратить среднюю площадь для списка офисов, возвратить список офисов, в которых площадь превышает среднюю, возвратить список офисов, у которых площадь находится в заданном интервале, вывод списка офисов в окно терминала с сортировкой заданного типа, сортировка списка офисов по полю площадь с учетом типа сортировки.   Ограничения: Фирме может принадлежать не более 20 офисов.

Структура проекта

Текст классов

Класс – Office

public class Office {

public int idOffice;

public String adress;

public double square; // м^2

public int numberRooms;

 

public Office (int idOffice, String adress, double square, int numberRooms) {

this.idOffice = idOffice;

this.adress = adress;

this.square = square;

this.numberRooms = numberRooms;

}

}

Класс – Firm

public class Firm {

private String nameFirm; //Имя фирмы

private int numberOffice; //Количество офисов

private Office [] listOffices; //Список офисов

 

public Firm(String nameFirm, int MaxnumberOffice) {

this.nameFirm = nameFirm;

this.numberOffice = 0; //

listOffices = new Office[MaxnumberOffice]; //выделяется память под

// максимально возможное число офисов

}

 

public String getNameFirm() {

return nameFirm;

}

 

public void setNameFirm(String nameFirm) {

this.nameFirm = nameFirm;

}

 

public int getNumberOffice() {

return numberOffice;

}

 

public Office [] getListOffice(){

Office [] A = new Office[numberOffice];

// получаем копию массива ссылок

for (int i=0; i< A.length; i++)

A[i]=listOffices[i];

return A;

}

 

public boolean addOffice(Office office){//добавить офис в список группы

//офис нельзя вставить, если

//уже вставлено максимально возможное

//количество офисов или

//его id уже упомянут в списке

if (numberOffice == listOffices.length) return false;

for (int i=0; i < numberOffice; i++)

if (listOffices[i].idOffice == office.idOffice) return false;

listOffices[numberOffice] = office;

numberOffice = numberOffice + 1;

return true;

}

 

public boolean delStud(int idOffice){ //удалить офис из списка группы

int i;

for (i=0; i< numberOffice; i++)

if (listOffices[i].idOffice==idOffice)break;

if (i==numberOffice)

return false; //если офиса с таким id нет

for (i=i+1; i< numberOffice; i++)

listOffices[i-1]=listOffices[i]; //удалить

listOffices[i-1]=null;

// в массиве стало на 1 офис меньше

numberOffice=numberOffice-1;

return true;

}

 

public double avgSquare(){ //запрос: вернуть среднюю площадь среди офисов

double avg=0;

for (int i=0; i < numberOffice; i++)

avg = avg + listOffices[i].square;

return avg / numberOffice;

}

 

 

public Office[] aboveAvgSquare(){ //запрос:

//вернуть офисы, у которых площадт выше средней

//создаем локальный массив ссылок на офисы

Office[]X = new Office[numberOffice];

int j=0; //индекс локального массива

double avg = avgSquare();

for (int i=0; i< numberOffice; i++)

if (listOffices[i].square > avg){

X[j]=listOffices[i];

//ссылка X[j] теперь равна ссылке listOffices[i];

//число объектов типа Office не увеличивается,

//т.к. работаем со ссылками

j=j+1;

} //if

//j содержит количество ccылок на офисы в массиве X

//остальные (numberOffice-j)ссылок в массиве X равны null

Office [] Y=new Office[j]; // в массиве Y не будет null-ссылок

for (int i=0; i< j; i++) Y[i]=X[i];

return Y;

}

 

 

public Office[] betweenSquare(float s1, float s2){ // запрос:

//вернуть офисы с баллом в диапазоне [Square1, Square2]

//алгоритм аналогичен использованному в предыдущем методе

// создаем локальный массив офисов

Office[]X = new Office[numberOffice];

int j=0; //индекс вспомогательного массива

for (int i=0; i< numberOffice; i++)

if ((listOffices[i].square > = s1)& & (listOffices[i].square < = s2)){

X[j]=listOffices[i];

//ссылка X[j] теперь равна ссылке listOffices[i];

//число объектов типа Office не увеличивается,

//т.к. работаем со ссылками

j=j+1;

} //if

//j содержит количество ccылок на студентов в массиве X

//остальные (numberOffice-j)ссылок в массиве X равны null

Office [] Y=new Office[j]; // в массиве Y не будет

// null-ссылок

for (int i=0; i< j; i++) Y[i]=X[i];

return Y;

}

 

private Office[] sortSquare (Office [] arr, int typeSort){

//возвращает ссылку на отсортированный

//массив ссылок на объекты Office

//исходный массив, адрес которого передан

//в локальную переменную arr не сортируется

Office [] A=new Office[arr.length];

// получаем копию массива ссылок

for (int i=0; i< A.length; i++)

A[i]=arr[i];

//сортировка по баллу методом пузырька

//используется в методе putlistOffices

// если typeSort> 0 - по возрастанию,

// иначе если typeSort< 0 - по убыванию

// иначе (при S=0) - без сортировки,

boolean flag;

if (typeSort> 0)

for (int m=A.length-1; m> 0; m--){

flag=true;

for (int j=0; j< m; j++)

if (A[j].square> A[j+1].square) {

Office b=A[j];

A[j]=A[j+1];

A[j+1]=b;

flag=false;

}

if (flag) break;

}

else if (typeSort< 0)

// тот же алгоритм, но меняем условие на A[j].Square< A[j+1].Square

for (int m=A.length-1; m> 0; m--){

flag=true;

for (int j=0; j< m; j++)

if (A[j].square< A[j+1].square) {

Office b=A[j];

A[j]=A[j+1];

A[j+1]=b;

flag=false;

}

if (flag) break;

}

return A;

} // sort

 

public void putListOffices(Office [] arr, int typeSort){

//выводит отсортированный по баллу заданным способом

//массив офисов в окно терминала

Office [] A=sortSquare(arr, typeSort);

System.out.printf(" %s %s %s %s %s\n", " Номер", " id_офиса", " Адресс", " Площадь", " Количество комнат");

for (int i=0; i< A.length; i++)

System.out.printf(" %d %d %s %-10.2f %d\n", i+1, A[i].idOffice, A[i].adress, A[i].square, A[i].numberRooms);

} // ListOffices

}

Класс – FirmOfficeDemo

public class FirmOfficeDemo {

 

public static void main(String[] args) {

 

Firm f1 = new Firm(" BrainHands", 20);

 

int j=0; //индекс массива args добавление офисов в фирму

 

for (int i=0; i< 5; i++){

int idOffice = Integer.valueOf(args[j]); j++;

String adress = String.valueOf(args[j]); j++;

double square = Double.valueOf(args[j]); j++;

int numberRooms = Integer.valueOf(args[j]); j++;

//добавить студента

f1.addOffice(new Office(idOffice, adress, square, numberRooms));

}

 

Firm f2 = new Firm(" StrongQuickSense", 20);

for (int i=0; i< 5; i++){

int idOffice =Integer.valueOf(args[j]); j++;

String adress = args[j]; j++;

double square = Double.valueOf(args[j]); j++;

int numberRooms = Integer.valueOf(args[j]); j++;

//добавить студента

f2.addOffice(new Office(idOffice, adress, square, numberRooms));

}

 

//выборка данных о офисах

System.out.println(" Состав фирмы " +f1.getNameFirm() + " (по возрастанию площади офисов): ");

 

f1.putListOffices(f1.getListOffice(), 1);

 

System.out.println(" Средний площадь офисов: " +f1.avgSquare());

 

System.out.println (" Офисы, у которых плозадь выше" + " средней (по возрастанию балла): ");

 

f1.putListOffices(f1.aboveAvgSquare(), 1);

 

System.out.println(" Офисы, у которых площадь в диапазоне" + " [400, 900] м^3 (по убыванию площади): ");

f1.putListOffices(f1.betweenSquare(400, 900), -1);

 

System.out.println(" Состав фирмы " +f2.getNameFirm() + " (по возрастанию площади офисов): ");

 

f2.putListOffices(f2.getListOffice(), 1);

 

System.out.println(" Средний площадь офисов: " +f2.avgSquare());

 

System.out.println (" Офисы, у которых плозадь выше" + " средней (по возрастанию балла): ");

 

f2.putListOffices(f2.aboveAvgSquare(), 1);

 

System.out.println(" Офисы, у которых площадь в диапазоне" + " [400, 900] м^3 (по убыванию площади): ");

f2.putListOffices(f2.betweenSquare(400, 900), -1);

}

 

}

 

 

<== предыдущая лекция | следующая лекция ==>
Перспективы развития индустрии красоты в России | Постановка задачи. По лабораторной работе №1




© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.