Public Student(int num_z,String name
double ball, String hobby){
this.num_z=num_z; this.name=name;
this.ball=ball; this.hobby=hobby;
}
//возвращает строку описания объекта
//(экземпляра класса Student)
public String toString(){
return "Студент: "+num_z+", "+name+", "+ball+
", предпочитает "+hobby;
}
} //class
public class Group { //Сущность - Студенческая группа
//поля
private String name; //шифр группы
private Student [ ] studArr; // список студентов
private int num; //количество студентов в группе
// конструктор
public Group(String name, int numMax){
//с учетом numMax - максимально возможного
//числа студентов
this.name=name;
num=0; //пока список не заполнен
studArr = new Student[numMax]; //выделяется
//память под максимально возможное число
// студентов – реализация списка на основе
//массива фиксированной длины
}
//метод-сеттер – меняет шифр группы
public void setGroupName(String name) {
this.name=name;}
//методы-геттеры
// возвращает шифр группы:
public String getGroupName() {return name;}
// возвращает число студентов в группе:
public int getStudNum(){return num;}
// возвращает студента с заданным номером зачетки (id):
public Student getStud (int id){
int i;
for (i=0; i<num; i++)
if (studArr[i].num_z == id) break;
if (i == num) return null; //студент с заданным id не найден
else return studArr[i]; //возвращаем ссылку на объект
}
//геттер − возвращает список студентов:
public Student [ ] getStudArr(){
Student [ ] A=new Student[num];
// получаем копию массива ссылок для
// реального, а не максимального числа
// студентов в группе
for (int i=0; i<A.length; i++)
A[i]=studArr[i];
return A; //возвращаем ссылку на массив ссылок на объекты
}
// другие методы
// вывести список студентов
public void putStudArr(){
for (int i=0; i<num; i++)
System.out.println(studArr[i]); // используется метод
// toString() студента
}
//добавить студента в список группы:
public boolean addStud(Student stud){
//студента нельзя вставить, если
//уже вставлено максимально возможное
//количество студентов или
//его id уже упомянут в списке
if (num == studArr.length) return false;
for (int i=0; i<num; i++)
if (studArr[i].num_z == stud.num_z) return false;
studArr[num]=stud;
num=num+1;
return true;
}
//удалить студента из списка группы:
public boolean delStud(int id){
int i;
for (i=0; i<num; i++)
if (studArr[i].num_z == id) break;
if (i==num)
return false; //если студента с таким id нет
for (i=i+1; i<num; i++)
studArr[i-1]=studArr[i]; //удалить студента
studArr[i-1]=null;
// в массиве стало на 1 студента меньше
num=num-1;
return true;
}
} //class Group
public class GroupStudentDemo{ // Взаимодействие студентов и групп
public static void main (String[ ] args){
//создаем группы
Group gr1=new Group ("ИВТБ-11д",25);
Group gr2=new Group ("ИВТБ-12д",25);
// добавляем студентов в первую группу
gr1.addStud(new Student (25534, "Журавлев",4.5,"баскетбол"));
gr1.addStud(new Student (25535, "Лебедев",4.3,"плавание"));
gr1.addStud(new Student (25536, "Орлов",5.0,"литература"));
gr1.addStud(new Student (25537, "Воробьев",3.5,"театр"));
gr1.addStud(new Student (25538, "Синицын",4.4,"плавание"));
// добавляем студентов во вторую группу
gr2.addStud(new Student (25539, "Иванов",4.5,"волейбол"));
gr2.addStud(new Student (25540, "Ветров",4.3,"плавание"));
gr2.addStud(new Student (25541, "Солнцев",5.0,"театр"));
gr2.addStud(new Student (25542, "Туманов",3.5,"театр"));
gr2.addStud(new Student (25543, “Петров",4.4,"скалолазание"));
//возвращаем и выводим студентов
int n=25534;
Student s1=gr1.getStud(n);
if (s1==null) System.out.println ("В группе "+gr1.getGroupName()+
" нет студента с номером зачетки "+n);
else System.out.println(s1);
n=25600;
s1=gr1.getStud(n);
if (s1==null) System.out.println ("В группе "+gr1.getGroupName()+
" нет студента с номером зачетки "+n);
else System.out.println(s1);
n=25540;
s1=gr2.getStud(n);
if (s1==null) System.out.println ("В группе "+gr2.getGroupName()+
" нет студента с номером зачетки "+n);
else System.out.println(s1);
n=25700;
s1=gr2.getStud(n);
if (s1==null) System.out.println ("В группе "+gr2.getGroupName()+
" нет студента с номером зачетки "+n);
else System.out.println(s1);
// выводим списки групп
System.out.println("Список группы "+gr1.getGroupName()+":");
gr1.putStudArr();
System.out.println("Список группы "+gr2.getGroupName()+":");
gr2.putStudArr();
//отчисление студентов
gr1.delStud(25536);
gr2.delStud(25541);
// выводим списки групп
System.out.println("После отчисления студентов:");
System.out.println("Список группы "+gr1.getGroupName()+":");
gr1.putStudArr();
System.out.println("Список группы "+gr2.getGroupName()+":");
gr2.putStudArr();
}
}
Заметим, что метод addStud() класса Group возвращает значение простого типа boolean (true, если студент успешно добавлен к группе и false, если не добавлен). При этом мы не можем указать причину, почему не добавлен, хотя таких причин может быть две. Если стоит задача вернуть в вызывающий метод не только результат добавления (добавлен/не добавлен), но и текстовое сообщение, возвращать нужно не простой тип, а объектный.
Усовершенствуем проект, добавив в него еще один класс – Status (проект 10_9).
public class Status{ //код завершения метода
//поля
public boolean flag; //флаг завершения
public String msg; //сообщение
// конструкторы
public Status () {flag=true; msg="";}
public Status (boolean flag, String msg){
this.flag=flag; this.msg=msg;}
}
Перепишем метод addStud() класса Group
//добавить студента в список группы:
public Status addStud(Student stud){
//студента нельзя вставить, если
//уже вставлено максимально возможное
//количество студентов или
//его id уже упомянут в списке
if (num==studArr.length)