- •Курсовая работа
- •Пояснительная записка
- •Содержание
- •Задание
- •Структурное описание разработки
- •Функциональное описание
- •Класс tList
- •Класс BigInt
- •Класс Elm
- •Класс window
- •Класс MainClass
- •Интерфейс object
- •Приложение Класс MainClass
- •Класс window
- •Класс tList
- •Класс Elm
- •Класс BigInt
- •Интерфейс object
Класс 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);
}
}
}