![]() Главная страница Случайная страница КАТЕГОРИИ: АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника |
Текст классов
Отчет По лабораторной работе №2 ПРОГРАММИРОВАНИЕ ВЗАИМОДЕЙСТВИЯ ПРОСТЫХ ОБЪЕКТОВ, СВЯЗАННЫХ ИЕРАРХИЧЕСКИ по дисциплине: «Программирование. Языки высокого уровня»
Выполнил: студент группы ИВТб-11о Бахарев Александр Проверил: доцент Волкова Т.В.
Севастополь 2016
Цель работы Целью данной работы является получение навыков программирования иерархических структур данных на Java, закрепление навыков программирования классов и взаимодействия объектов. Постановка задачи Разработать программу, реализующую взаимодействие объектов, образующих иерархическую структуру данных. Для создания объектов, определенных вариантом задания разработать соответствующие классы.
Структура проекта Текст классов Класс – 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); }
}
|