Задание 2
Изменить программу, созданную на Java на основе задания 2 лабораторной работы № 5. В класс индивидуального варианта добавить метод diskIn(), который записывает поля объекта в файл и метод diskOut(), который читает поля объекта из файла. В метод main() добавить запись массива объектов класса индивидуального варианта в файл и чтения их из файла с использованием методов diskIn() и disk() .
Пример 2
В листинге 2 представлена программа, в которой формируется исходный список студентов, список студентов с минимальным рейтингом, а также осуществляется поиск информации о рейтинге студента по его фамилии. Исходный список студента сортируется по фамилии в алфавитном порядке. В программе имеется возможность записи списка студентов в текстовый файл и чтение списка студентов из текстового файла.
Для создания программы использовалась среда разработки NetBeans IDE 8.0. На рисунке 3 показан состав проекта программы.
Рисунок 3 – Состав проекта программы
Создание проекта в NetBeans: Файл -> Создать проект -> Java -> Приложение Java.
Компиляция, сборка и выполнение проекта: Выполнить -> Запустить проект.
На рисунке 4 показан результат выполнения программы.
Листинг 2
// Student.java
package primer2;
import java.util.*;
import java.io.*;
class Student implements Comparable
{ private String fam;
private String name;
private int grade; //рейтинг
public Student(String fam, String name, int grade)
{ this.fam = fam;
this.name = name;
this.grade = grade;
}
public Student(){};
public String getfam(){ return fam;}
public String getname(){ return name;}
public int getgrade(){ return grade;}
public void input()throws Exception
{ Scanner in = new Scanner(System.in);
System.out.print("Фамилия: "); fam = in.nextLine();
System.out.print("Имя: "); name = in.nextLine();
System.out.print("Рейтинг: "); grade = in.nextInt();
if (grade < 0 || grade > 100)
throw new Exception("Ошибка: Рейтинг должен быть от 0 до 100!");
}
public void output()
{ System.out.printf("%-10s%-10s %d\n",fam,name,grade);
}
public void diskOut(BufferedWriter bw) throws Exception
{ bw.write(fam + "\r\n");
bw.write(name + "\r\n");
bw.write(grade + "\r\n");
}
public void diskIn(BufferedReader br) throws Exception
{fam = br.readLine();
name = br.readLine();
grade = Integer.parseInt(br.readLine());
if (grade < 0 || grade > 100)
throw new Exception("Ошибка в содержимом файла: Рейтинг должен быть от 0 до 100!");
}
@Override
public int compareTo(Object obj)
{ Student tmp = (Student)obj;
return fam.compareTo(tmp.getfam());
}
}
// Primer2.java
package primer2;
import java.util.*;
import java.io.*;
class Primer2 {
public static void main(String[] args) {
Scanner in; int p; int n; Student[] st = null;
boolean ff = true;
try
{do
{
System.out.println("Введите: ");
System.out.println("1 - Ввод списка студентов и запись в файл");
System.out.println("2 - Чтение списка студентов из файла");
System.out.print(">");
in = new Scanner(System.in);
p = in.nextInt();
if (p == 1)
{ ff = false;
System.out.print("Введите кол-во студентов: ");
in = new Scanner(System.in);
n = in.nextInt();
st = new Student[n];
for (int i = 0; i<st.length; i++)
{ st[i] = new Student();
st[i].input();
}
BufferedWriter bw = new BufferedWriter(new FileWriter("E:\\Student.txt"));
bw.write(n + "\r\n");
for(int i = 0; i<n; i++)
st[i].diskOut(bw);
bw.close();
}
if (p == 2)
{ ff = false;
BufferedReader br = new BufferedReader(new FileReader("E:\\Student.txt"));
n = Integer.parseInt(br.readLine());
st = new Student[n];
for (int i = 0; i < n; i++)
{ st[i] = new Student();
st[i].diskIn(br);
}
br.close();
}
}while(ff);
Arrays.sort(st);
System.out.println("Список студентов: ");
System.out.printf("%-10s%-10s%-10s\n","Фамилия","Имя","Рейтинг");
for (Student st1 : st) {
st1.output();
}
int min = st[0].getgrade();
for (Student st1 : st) {
if (st1.getgrade() < min) {
min = st1.getgrade();
}
}
in = new Scanner(System.in);
System.out.print("Укажите фамилию студента: ");
String fam = in.nextLine();
String f; int fl = 0;
for (Student st1 : st) {
f = st1.getfam();
if (f.equals(fam)) {
System.out.println("Рейтинг студента "+ fam+" - " + st1.getgrade());
fl = 1;
}
}
if (fl == 0) System.out.println("Нет в списке студента "+fam);
System.out.println("Список студентов с минимальным рейтингом: ");
System.out.printf("%-10s%-10s%-10s\n","Фамилия","Имя","Рейтинг");
for (Student st1 : st) {
if (st1.getgrade() == min) {
st1.output();
}
}
}
catch (InputMismatchException e)
{ System.out.println("Это НЕ число!!!" + e);
}
catch (NumberFormatException e)
{ System.out.println("Ошибка чтения из файла " + e);}
catch (Exception e)
{ System.out.println(e);}
}
}
Рисунок 4 – Результат выполнения программы