Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пояснительная записка-2.doc
Скачиваний:
29
Добавлен:
20.09.2019
Размер:
194.56 Кб
Скачать

Класс Elm

Данный класс предназначен для хранения объектов списка класса Tlist и осуществления связей между объектами в списке.

Класс наследует интерфейс java.io.Serializable.

В этом классе содержатся следующие переменные:

object obj – хранимый объект.

elm next, prev – указатели на следующий и предыдущий элемент списка.

Методы класса:

Конструкторы:

public elm( )

Конструктор по умолчанию, создающий пустой элемент списка.

public elm(object val)

Конструктор, создающий элемент списка с хранимым объектом.

Методы:

public void remove()

Метод удаления элемента из списка.

void after(object val)

Метод вставки объекта после текущего элемента списка.

void before(object val)

Метод вставки объекта перед текущим элементом списка.

String put()

Метод возвращает хранимый объект, преобразованный в строку.

Класс window

Этот класс реализует интерфейс с пользователем с помощью окна и визуальных компонентов.

В классе используются следующие переменные:

Tlist L – список;

TextField t – поле для ввода объектов списка

List ta – поле для вывода списка на экран

Choice C1 – выпадающее меню для выбора класса, к которому принадлежит объект

В классе использованы стандартные объекты и методы класса AWT.

Особенность использования именно таких визуальных компонентов состоит в следующем:

Класс List позволяет получать доступ к каждой своей записи. При двойном нажатии на какую-нибудь строку из поля данного класса выполняется событие и возвращается номер выбранной строки. Через это событие происходит связь с Choice объектом и с основным списком. Таким же образом осуществляется доступ к выбранному объекту.

В этом классе есть метод обновления визуального списка, который связывает список с визуальным списком: void refresh_list()

Класс MainClass

Этот класс представляет собой «точку входа» в программу. В нем есть только одна статическая функция: public static void main(String[] args), которая создает меню.

Интерфейс object

Интерфейс содержит набор методов, предназначенных для возможности управления объектами, классы которых наследует этот интерфейс. Методы:

int Get(String str)

Загрузка из текстовой строки (внешняя форма).

String Put()

Сохранение в текстовой строке (динамический массив).

int Load(InputStream I) throws Exception;

Загрузка из символьного потока.

void Save(OutputStream O) throws Exception;

Сохранение в символьный поток.

int BLoad(FileInputStream I) throws Exception;

Загрузка из двоичного потока.

int BSave(FileOutputStream O) throws Exception;

Сохранение в двоичный поток.

int Type();

Возвращение идентификатора класса.

String Name();

Возвращение имени класса.

int Cmp(object T);

Сравнение объектов класса.

object Copy();

Создание динамической копии объекта.

int Add(object T);

Сложение объектов.

Приложение Класс MainClass

class MainClass {

public static void main(String argv[])

{

new window();

}

}

Класс window

import java.awt.*;

import java.awt.event.ActionListener;

import java.awt.event.ActionEvent;

class window extends Frame implements ActionListener

{

TextField t=null;

List ta=null;

Tlist L=new Tlist();

Choice C1=new Choice();

Button B8=new Button("Сложить");

window()

{

setLayout(new FlowLayout());

Button B1=new Button("Добавить");

Cursor cur=new Cursor(Cursor.HAND_CURSOR);

B1.setBackground(new Color(255,200,150));

B1.setCursor(cur);

Button B2=new Button("Удалить");

B2.setBackground(new Color(255,200,150));

B2.setCursor(cur);

Button B3=new Button("Сохранить");

B3.setBackground(new Color(255,200,150));

B3.setCursor(cur);

Button B4=new Button("Загрузить");

B4.setBackground(new Color(255,200,150));

B4.setCursor(cur);

Button B5=new Button("Сортировать");

B5.setBackground(new Color(255,200,150));

B5.setCursor(cur);

Button B6=new Button("Максимальный");

B6.setBackground(new Color(255,200,150));

B6.setCursor(cur);

Button B7=new Button("Минимальный");

B7.setBackground(new Color(255,200,150));

B7.setCursor(cur);

Button B9=new Button("Выход");

B9.setBackground(new Color(255,200,150));

B9.setCursor(cur);

Button B10=new Button("Мультивыбор");

B10.setBackground(new Color(255,200,150));

B10.setCursor(cur);

B8.setCursor(cur);

B8.setBackground(new Color(255,200,150));

C1.setBackground(new Color(200,255,200));

integer qi=new integer(0);

cstring qc=new cstring();

BigInt qb=new BigInt();

C1.addItem(qi.Name());

C1.addItem(qc.Name());

C1.addItem(qb.Name());

B1.addActionListener(this);

B2.addActionListener(this);

B3.addActionListener(this);

B4.addActionListener(this);

B5.addActionListener(this);

B6.addActionListener(this);

B7.addActionListener(this);

B8.addActionListener(this);

B9.addActionListener(this);

B10.addActionListener(this);

ta=new List(10);

t=new TextField(40);

ta.setBackground(new Color(200,255,200));

t.setBackground(new Color(200,255,200));

ta.addActionListener(this);

B8.enable(false);

add(B1);

add(B2);

add(B3);

add(B4);

add(B5);

add(B6);

add(B7);

add(B8);

add(t);

add(C1);

add(ta);

add(B10);

add(B9);

MenuBar m=new MenuBar();

setMenuBar(m);

Menu F=new Menu("What to do?");

MenuItem s1=new MenuItem("Добавить");

s1.addActionListener(this);

MenuItem s2=new MenuItem("Сортировать");

s2.addActionListener(this);

MenuItem s3=new MenuItem("Выход");

s3.addActionListener(this);

F.add(s1);

F.add(s2);

F.add(s3);

m.add(F);

setForeground(new Color(0,0,200));

setBackground(new Color(200,230,255));

setBounds(100,100,400,310);

setTitle("Двусвязный циклический список");

show();

}

void refresh_list()

{

ta.clear();

if(L.head==null)

return;

ta.addItem(L.head.obj.Put());

elm p=L.head.next;

for(;p!=L.head;p=p.next)

ta.addItem(p.obj.Put());

}

public void actionPerformed(ActionEvent e){

if(e.getActionCommand().compareTo("Выход")==0)

System.exit(0);

else

if(ta.getSelectedItem()!=null && e.getActionCommand().compareTo(ta.getSelectedItem())==0)

C1.select(L.Get_obj(ta.getSelectedIndex()).Type()-1);

else

if(e.getActionCommand().compareTo("Добавить")==0)

{

object ob;

int k=C1.getSelectedIndex();

switch(k)

{

case 0: ob=new integer(Integer.parseInt(t.getText()));

break;

case 1: ob=new cstring(t.getText());

break;

case 2: ob= new BigInt(t.getText());

break;

default: ob=new cstring(); break;

}

L.insert_numb(0,ob);

ta.addItem(L.Get_obj(-1).Put());

}

else

if(e.getActionCommand().compareTo("Удалить")==0)

{

int N=ta.getSelectedIndex()+1;

L.del_numb(N);

refresh_list();

}

else

if(e.getActionCommand().compareTo("Сохранить")==0)

{

// L.Save_list("out.dat");

try {

L.BSave_list("outb.dat");

} catch (Exception e1) {

System.out.println("Ошибка ввода/вывода объекта: " + e1.getMessage());

}

}

else

if(e.getActionCommand().compareTo("Загрузить")==0)

{

//L.Load_list("out.dat");

try {

L.BLoad_list("outb.dat");

} catch (Exception e1) {

System.out.println("Ошибка ввода/вывода объекта: " + e.toString());

}

refresh_list();

}

else

if(e.getActionCommand().compareTo("Сортировать")==0)

{

L.sort();

refresh_list();

}

else

if(e.getActionCommand().compareTo("Максимальный")==0)

ta.select(L.find_max());

else

if(e.getActionCommand().compareTo("Минимальный")==0)

ta.select(L.find_min());

else

if(e.getActionCommand().compareTo("Сложить")==0)

{

object obj1,obj2;

int ind[]=new int[2];

ind=ta.getSelectedIndexes();

obj1=L.Get_obj(ind[0]).Copy();

obj2=L.Get_obj(ind[1]).Copy();

obj1.Add(obj2);

L.insert_numb(0,obj1.Copy());

ta.setMultipleMode(false);

B8.enable(false);

refresh_list();

}

else

if(e.getActionCommand().compareTo("Мультивыбор")==0)

{

ta.setMultipleMode(true);

if(B8.isEnabled())B8.enable(false);

else B8.enable(true);

}

}

}