Модераторы: javastic, AntonSaburov

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Помогите перенести программу с Java SE на ME 
V
    Опции темы
bncom
Дата 20.9.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



День добрый!

Начал изучать Java недавно, а тут уже дали задание сделать программу на ME, реализующую принципы ООП.

Сделал программу на Java SE (точнее, позаимствовал пример из книги Хорстманна, но сути не меняет, главное, что разобрался во всем):

Код

import java.util.*;

public class JavaTest
{
    public static void main(String[] args)
    {
        //Создаем объект Manager
        Manager boss = new Manager("Карл Петрович", 40000, 1987, 12, 15);
        boss.setBonus(5000); //Устанавливаем размер премии для менеджера

        Employee[] staff = new Employee[3];

        //Заполнение массива staff объектами Manager и Employee
        staff[0] = boss;
        staff[1] = new Employee("Ван Ваныч", 27750, 1989, 10, 1);
        staff[2] = new Employee("Марь Ванна", 23500, 1990, 3, 15);

        //Вывод информации (зарплаты) обо всех объектах (сотрудниках) Employee
        System.out.println("Ниже представлена зарплата для трех сотрудников компании \"Штингерльтон и Ко\" ");
        for (Employee e : staff)
            // e.getSalary - пример принципа полиморфизма
            System.out.println("Имя: " + e.getName() + ", зарплата: " +e.getSalary() + " рублей");
    }
}

/* Создадим суперкласс (он же родительский)
 */
class Employee
{
    public Employee(String n, double s, int year, int month, int day)
    {
        name = n;
        salary = s;
        GregorianCalendar calendar = new GregorianCalendar(year, month -1, day);
        hireDay = calendar.getTime();
    }

    public String getName()
    {
        return name;
    }

    public double getSalary()
    {
        return salary;
    }

    public Date getHireDay()
    {
        return hireDay;
    }

    public void raiseSalary(double byPercent)
    {
        double raise = salary * byPercent / 100;
        salary += raise;
    }

    private String name;
    private double salary;
    private Date hireDay;
}

/*
* Пораждаем класс Manager из класс Employee (принцип наследования)
* Менеджер - тоже сотрудник, но хороший, а хороший сотрдник должен получать премию.
*/
class Manager extends Employee
{
    //Создадим конструктор класса
    public Manager(String n, double s, int year, int month, int day)
    {
        super(n, s, year, month, day);
        bonus = 0;
    }

    //Переопределим метод getSalary, присутствующий в суперклассе Employee
    public double getSalary()
    {
        double baseSalary = super.getSalary();
        return baseSalary + bonus;
    }

    public void setBonus(double b)
    {
        bonus = b;
    }

    private double bonus;
}


Теперь нужно написать эту программу в ME.

Есть стандартный шаблон (который Хеллоу Ворд выводит), но как отталкиваться дальше, я не знаю.

Код

/*************************************/
package hello;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
/*************************************/

public class HelloMIDlet extends MIDlet implements CommandListener {

    //Команда выхода из программы
    private Command exitCommand = new Command("Выход", Command.EXIT, 0);
    //Дисплей телефона
    private Display display;

    public HelloMIDlet() {
        display = Display.getDisplay(this);
    }

    //Входная точка приложения
    public void startApp() {
        TextBox t = new TextBox("Lab #1", "Hello, World!", 256, 0);



        //Добавляем команду выхода
        t.addCommand(exitCommand);
        //Устанавливаем обработчик событий для команды выхода
        t.setCommandListener(this);
        //Отражаем текущий экран телефона
        display.setCurrent(t);
    }

    //Пауза в работе приложения
    public void pauseApp() {}
    //Выход из программы
    public void destroyApp(boolean unconditional) {}
    //Обработчик собтий для команд приложения
    public void commandAction(Command c, Displayable s) 
    {
        //Обработка команды выход
        if (c == exitCommand) {
            //Освобождение ресурсов и выгрузка из памяти модлета
            destroyApp(false);
            notifyDestroyed();
        } 
    }

}


Буду благодарен, если поможете оформить программу в стандартах ME, чтобы уже дальше я мог тоже посмотреть, как это делается.

Это сообщение отредактировал(а) bncom - 20.9.2009, 16:40
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
Galaran
Дата 20.9.2009, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 91
Регистрация: 25.5.2009

Репутация: нет
Всего: 2



Язык тот же. Только библиотека другая
Т.е. тут только System.out.print() и GregorianCalendar, Date заменить на ME аналоги
PM MAIL   Вверх
bncom
Дата 20.9.2009, 19:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



Мне бы поподробнее, на примере. С ME я вообще не знаком (хоть и это и один язык, однако все же немного тут по-другому).
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
W0LF
Дата 21.9.2009, 11:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



wtk/apps
там есть куча примеров


--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
Dancer
Дата 21.9.2009, 13:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

Репутация: 33
Всего: 37



bncom,  ты же сам написал, что тебе дали задание, чтобы ты лучше разобрался, то есть самостоятельно, если я правильно понимаю smile.
Вот и разбирайся.
Тебя тут уже все, кто как смог - направили.
Дай и мне, мои 2 цента в копилку бросить smile.

1) Поставивь WTK от SUN, и смотри javadocs которые там идут, по началу тебе нужно будет MIDP API. 
javax.microedition.*

2) Фишки, которые юзаются в 1.5/1.6 в ME не прокатят, так что "Employee : e" забываем smile
for(int i = 0; i < staff.length; i++) {} // что-то вроде этого

3) Шаблон мидлета у тебя есть, там есть Display на который ты и выводишь свои элементы типа TextBox (TextBox t = new TextBox("Lab #1", "Hello, World!", 256, 0);)
Значит, тебе нужно организовать код, который будет выводить что-то на экран мобилки, а не в кносоль, как ты делал в SE (System.out.prinln(....))
Ну и выводи smile, создаёшь свой элемент, пусть будет форма. Эту форму нужно будет заполнить. То есть накидать на неё элементов:
Элементы могут быть StringItem, TextField, собственно писанные.....
Form form = new Form("Title");
for(int i = 0; i < staff.length; i++) {
    form.append(new StringItem("Name: ", staff[i].getName() + " rub", Item.PLAIN);
    form.append(new StringItem("Name: ", staff[i].getSalary() + " rub", Item.PLAIN);
}
.... 
display.setCurrent(form);

4) Остальные классы у тебя есть, так что вперёд - дерзай! smile


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
bncom
Дата 21.9.2009, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



Ок, сейчас буду попробую реализовать.
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
bncom
Дата 21.9.2009, 16:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



Дерзанул, возникло пару вопросов.

Во-первых, я решил свои три класса разместить в трех файлах. Так, по-идеи, правильнее и понятнее выглядит.

Во-вторых, почему-то при создании дочернего класса, наследующего свойства суперкласс, у меня вылезает Warning.

Код

class Manager extends Employee {}

Warning: Exporting non-public type through public API

В-третьих, 

Код

form.append(new StringItem("Name: ", staff[i].getName() + " rub", Item.PLAIN);
form.append(new StringItem("Name: ", staff[i].getSalary() + " rub", Item.PLAIN);

у меня лично вызывает ошибку, спасает только более тривиальный подход:

Код

StringItem s1 = new StringItem("Имя: ", staff[i].getName() + " руб.", Item.PLAIN);
StringItem s2 = new StringItem("Имя: ", staff[i].getSalary() + " руб.", Item.PLAIN);


Однако почему-то строка StringItem hello = new StringItem... в куске кода:

Код

StringItem hello = new StringItem("Ниже представлена зарплата для трех сотрудников компании \"Штингерльтон и Ко\" ");
        for(int i = 0; i < staff.length; i++)
        {
            //e.getSalary - пример принципа полиморфизма
            StringItem s1 = new StringItem("Имя: ", staff[i].getName() + " руб.", Item.PLAIN);
            StringItem s2 = new StringItem("Имя: ", staff[i].getSalary() + " руб.", Item.PLAIN);
        }

Вызывает ошибку Cannot find symbol. Какой символ он найти не может, не пойму.

В четвертых, помогите разобраться с классом GregorianCalendar. Ему, как я понимаю, соответсвует в МЕ класс Calendar.

Прописал:

Код

import java.util.Calendar;
import java.util.Date;


Получил:

Код

public Employee(String n, double s, int year, int month, int day)
    {
        name = n;
        salary = s;
        Calendar calendar = new Calendar(year, month -1, day);
        hireDay = calendar.getTime();
    }


В итоге ошибка следующего характера:

Implement all abstract methods
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
eugine_s
Дата 21.9.2009, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 581
Регистрация: 14.11.2007
Где: Киев

Репутация: 17
Всего: 17



Цитата(bncom @  21.9.2009,  16:21 Найти цитируемый пост)
Во-вторых


public class != class

Цитата(bncom @  21.9.2009,  16:21 Найти цитируемый пост)
В-третьих,


Телепаты в отпуске. Какая ошибка? 


Что-то я не вижу где используются StringItem-ы (s1, s2 - создаются, но не добавляются на форму).

Кажется так: 
Calendar calendar = Calendar.getInstance();
PM MAIL   Вверх
bncom
Дата 21.9.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



Цитата(eugine_s @  21.9.2009,  16:50 Найти цитируемый пост)
public class != class
Это еще что значит? Публичный класс не класс ))

class Manager extends Employee {} - так в книжке написано было.



Цитата(eugine_s @  21.9.2009,  16:50 Найти цитируемый пост)
Что-то я не вижу где используются StringItem-ы (s1, s2 - создаются, но не добавляются на форму).
Ммм... Ну я же сказал, что с ME еще не особо знаком, кажется надо так продолжить:

Код

myform.append(s1)


С календарем поподробнее, пожалуйста, а еще лучше показать на моем примере, как реализовать его в ME.
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
Dancer
Дата 21.9.2009, 18:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 537
Регистрация: 29.4.2005
Где: Nizhniy Novgorod

Репутация: 33
Всего: 37



bncom, ну ты блин и лентяй!!!! smile
Код компилиться, запускать - не запускал, не где.
Код для MIDP 2.0, если нужно для 1.0, то там нету поддержки плавающей точки, то есть убрать придётся всякие double.

Не забудь, что в твоём мидлете прописан package - hello, то есть, исходники у тебя так же должны быть в папке hello.
Что-то вроде src/hello/*.java (HeloMIDlet.java, Employee.java, Manager.java)

Вот твои классы:
HelloMIDlet.java 
Код

package hello;

import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;

public class HelloMIDlet extends MIDlet implements CommandListener {

    //Команда выхода из программы
    private Command exitCommand = new Command("Exit", Command.EXIT, 0);
    //Дисплей телефона
    private Display display;
    private static Form mainForm = null;

    public HelloMIDlet() {
        display = Display.getDisplay(this);
    }

    private void init() {
        mainForm = new Form("Title: MIDlet");

        //Создаем объект Manager
        Manager boss = new Manager("Karl Petrovich", 40000, 1987, 12, 15);
        boss.setBonus(5000); //Устанавливаем размер премии для менеджера

        Employee[] staff = new Employee[3];

        //Заполнение массива staff объектами Manager и Employee
        staff[0] = boss;
        staff[1] = new Employee("Van Vanych", 27750, 1989, 10, 1);
        staff[2] = new Employee("Mariya Vanna", 23500, 1990, 3, 15);

        //Вывод информации (зарплаты) обо всех объектах (сотрудниках) Employee
        mainForm.append(new StringItem("Company \"Roga i Kopyta\": ", "3 emploees salary:", Item.PLAIN));
        for (int i=0; i < staff.length; i++) {
            StringItem s1 = new StringItem("Name: ", staff[i].getName(), Item.PLAIN);
            StringItem s2 = new StringItem("Salary: ", 
                                           Double.toString(staff[i].getSalary()) + " rub.", 
                                           Item.PLAIN);
            mainForm.append(s1);
            mainForm.append(s2);
        }

        //Добавляем команду выхода
        mainForm.addCommand(exitCommand);
        //Устанавливаем обработчик событий для команды выхода
        mainForm.setCommandListener(this);
    }

    //Входная точка приложения
    public void startApp() {
        if(mainForm == null) {
            init();
        }
        display.setCurrent(mainForm);
    }

    //Пауза в работе приложения
    public void pauseApp() {}

    //Выход из программы
    public void destroyApp(boolean unconditional) {
        notifyDestroyed();
    }

    //Обработчик собтий для команд приложения
    public void commandAction(Command c, Displayable s) 
    {
        //Обработка команды выход
        if (c == exitCommand) {
            //Освобождение ресурсов и выгрузка из памяти модлета
            destroyApp(true);
        } 
    }

}


Employee.java
Код

package hello;

import java.util.*;

/* Создадим суперкласс (он же родительский)
 */
class Employee
{
    public Employee(String n, double s, int year, int month, int day)
    {
        name = n;
        salary = s;
        Calendar calendar = Calendar.getInstance();
        calendar.set(Calendar.YEAR, year);
        calendar.set(Calendar.MONTH, month -1);
        calendar.set(Calendar.DATE, day);
        hireDay = calendar.getTime();
    }

    public String getName()
    {
        return name;
    }

    public double getSalary()
    {
        return salary;
    }

    public Date getHireDay()
    {
        return hireDay;
    }

    public void raiseSalary(double byPercent)
    {
        double raise = salary * byPercent / 100;
        salary += raise;
    }

    private String name;
    private double salary;
    private Date hireDay;
}


Manager.java 
Код

package hello;

/*
* Пораждаем класс Manager из класс Employee (принцип наследования)
* Менеджер - тоже сотрудник, но хороший, а хороший сотрдник должен получать премию.
*/
class Manager extends Employee
{
    //Создадим конструктор класса
    public Manager(String n, double s, int year, int month, int day)
    {
        super(n, s, year, month, day);
        bonus = 0;
    }

    //Переопределим метод getSalary, присутствующий в суперклассе Employee
    public double getSalary()
    {
        double baseSalary = super.getSalary();
        return baseSalary + bonus;
    }

    public void setBonus(double b)
    {
        bonus = b;
    }

    private double bonus;
}


Это сообщение отредактировал(а) Dancer - 21.9.2009, 18:35


--------------------
У программистов есть великая тайна: всё, что только можно, было давно кем-то когда-то написано. Разработчику только нужно знать в какое место кода какие строчки вставить! smile
PM MAIL   Вверх
bncom
Дата 21.9.2009, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



Dancer, спасибо, помог.

В принципе, у меня уже и так все было сделано, единственное, с классом календаря не разобрался.


Код

    public void startApp() {
        if(mainForm == null) {
            init();
        }
        display.setCurrent(mainForm);
    }

Интересный подход, в книжке у меня такого вообще нет  smile 

Почему-то в профиле MIDP-2.1 запускаться программа не захотелась у меня, поменял на MIDP-2.0 - все заработало.

Сейчас буду пробывать прикрутить возможность ввода зарплаты, а потом их вывод с фамилиями.
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
susanin
Дата 21.9.2009, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 587
Регистрация: 7.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 7



Цитата(Dancer @  21.9.2009,  18:33 Найти цитируемый пост)
bncom, ну ты блин и лентяй!!!! 

Вот это уж точно!! smile 
PM MAIL   Вверх
bncom
Дата 22.9.2009, 13:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



У меня наверно сейчас голова лопнет. Сижу уже какое время, пытаюсь реализовать переход с одного экрана на другой.

Экран #1: выводится TextField. Туда заносится процентная надбавка для зарплаты.
Экран #2: отображается на Form список служащих с увеличенной зарплатой.

Начал тут кумекать:

Код

public class MainTest extends MIDlet implements CommandListener
{
    //Команда выхода из программы
    private Command exitCommand = new Command("Выход", Command.EXIT, 0);
    //Команда ввода процентной надбавки к зарплате (Ok)
    private Command perexodMain = new Command("Ok", Command.SCREEN, 1);
    //Дисплей телефона
    private Display display;


Код

//Входная точка приложения
    private void init()
    {
        //Создаем объект класса Form
        myform = new Form("Лабораторная #1 - Принципы ООП");
        //Добавляем команду выхода из программы
        myform.addCommand(exitCommand);
        //Добавляем команду перехода в основной экран
        myform.addCommand(perexodMain);
        //Устанавливаем обработчик событий для команды команд объекта класса Form
        myform.setCommandListener(this);
        //Отображаем текущий экран телефона
        //display.setCurrent(myform);

        myform.append(new TextField("Введите надбавку:", "", 20, TextField.ANY));

Вот дальше я не понимаю, где мне располагать "Создаем объект Manager", цикл для вывода инфы о зарплате? 
Если я оставлю его в private void init() - то это скорее всего будет неправильно, т.к. на экране отобазится:

1. кнопка ВЫХОД
2. кнопка ПЕРЕХОД (она же ОК)
3. Текст "Введите надбавку"
4. Список служащих с зарплатой

А ведь надо список служищих в новом окне разместить, уже после ввода надбавки.

Иду в обработчки событий:

Код

public void commandAction(Command c, Displayable s)
    {
        //Обработка команды выход
        if (c == exitCommand)
        {
            //Освобождение ресурсов и выгрузка из памяти модлета
            destroyApp(true);
        }
        //Обработка команды ввода процентной надбавки к зарплате (Ok)
        if (c == perexodMain)
        {
           ....
        }

    }


Вот что надо в if (c == perexodMain) прописывать?
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
W0LF
Дата 22.9.2009, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


alexander lonsky
***


Профиль
Группа: Участник
Сообщений: 1164
Регистрация: 9.2.2006
Где: Ukraine.Dnepropet rovsk

Репутация: 19
Всего: 20



модлет - такого нет, есть мидлет.
по хорошему, нужно создавать несколько классов, наследоваться от Form, в них прописывать какую-то логику, а потом делать переход между ними. чтоб сделать переход, нужно делать в классе, наследуемом от мидлета статический метод который будет устанавливать дисплей. и я уже писал, что в wtk/apps есть примеры, насколько я помню.
Dancer не напишет Вам все Ваши лабораторные(хотя по себе в свое время помню что он оччень терпеливый =) ) и никто особо этим заниматься не будет... это время..
спишите лучше у однокурсников, переименовывая имена классов и интерфейс, если Вы не собираетесь заниматься в будущем этой профессией =)




--------------------
iOS developer
PM MAIL WWW Skype GTalk   Вверх
bncom
Дата 22.9.2009, 16:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 170
Регистрация: 2.11.2005

Репутация: нет
Всего: 1



Цитата(W0LF @  22.9.2009,  15:21 Найти цитируемый пост)
Dancer не напишет Вам все Ваши лабораторные
Да а я разве говорил, что надо писать за меня лабораторные?

Я понимаю, если бы пришел с пустыми руками, а попросил бы за меня написать. Вот это я понимаю был бы наглежь. А тут я просто прошу показать, КАК надо, т.к. в книжке про это хоть и на писано, но для меня лично не очень понятно. Ведь не зря же говорят, что один раз лучше показать, чем сто раз говорить...

Цитата(W0LF @  22.9.2009,  15:21 Найти цитируемый пост)
модлет - такого нет, есть мидлет.
Очачатался я очачатался =)


Цитата(W0LF @  22.9.2009,  15:21 Найти цитируемый пост)
что в wtk/apps есть примеры
wtk у меня не стоит, а установлено java Platform ME SDK.

APPS - это что такое?


Это сообщение отредактировал(а) bncom - 22.9.2009, 16:56
--------------------
"Мы никогда не живем, мы лишь надеемся, что будем жить." Вольтер 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса

  • Прежде чем задать вопрос прочтите это!
  • Литература по Java находится здесь.
  • Литературу по Java обсуждаем здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда

  • FAQ раздела лежит здесь!
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java ME (J2ME) | Следующая тема »


 




[ Время генерации скрипта: 0.1276 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.