Е. Буткевич Пишем программы и игры



страница15/15
Дата22.06.2019
Размер2.79 Mb.
ТипКраткое содержание
1   ...   7   8   9   10   11   12   13   14   15

Приложение 3

Полный листинг программы «AdressBook»

// Пример программы "AdressBook"

//

// Реализован в рамках книги

// "Программируем игры для мобильных телефонов"

//

// (с) Voolkan

import javax.microedition.midlet.MIDlet:

import javax.microedition.lcdui. Command;

import javax.microedition.lcdui.CommandListener;

import javax.microedition.lcdui .Display;

import javax.microedition.lcdui.Displayable;

import javax.microedition.lcdui.Form;

import javax.microedition.lcdui.List;

import javax.microedition.lcdui.TextField;

import javax.microedition.lcdui.DateField;

import javax.microedition.lcdui.TextBox;

import java.util.Date:



import java.util.Calendar;

import java.io.ByteArrayOutputStream;

import java.io.ByteArraylnputStream;

import java.io.DataOutputStream:

import java.io.DatalnputStream:

import java.io.IOException;

import javax.microedition.rms.RecordStore;

import javax.microedition.rms.RecordEnumeration:

import javax.microedition.rms.RecordComparator:

import javax.microedition.rms.RecordF i Her :

import javax.microedition.rms.RecordStoreException;

public class AddressBook extends MIDlet implements CommandListener

196 Приложение 3. Полный листинг программы «AdressBook»

private Display display;

private RecordStore recordStore;

private List nameList;

private int redndexes[]:

private Command add,ok,next,back; private TextBox tbName.tbPhone.tbEMail: private Form dateForm: private DateField dateField;

public void destroyApp(boolean destroy) { notifyOestroyedO;



it менеджер дисплея

// хранилище записей

// список имен

// массив ID записей.

// соответствующий списку имен

// команды переходов между экранами

// экраны ввода параметров записи

//форма ввода дня рождения

// поле ввода дня рождения


public void pauseAppO {}

public void startAppO { try {

// открыть хранилище записей с именем "Address-Book" recordStore = RecordStore.openRecordStoreC"Address-Book", true): } catch (RecordStoreException rse) {}

// получить ссылку на менеджер дисплея display - Display.getDisplay(this);

// создание объектов команд ok = new Command("Ok". Command.OK. 1); add " new CommandC'Add". Command.BACK, 1); next • new Command("Next". Command.OK. 1); back - new CommandC'Back", Command.BACK. 1):

// поле ввода имени

tbName » new TextBox("Name:"."".15,TextField.ANY);

tbName. addCommand(next);

tbName. addCommand( back):

tbName. setCommandListener(this);

// поле ввода номера телефона

tbPhone - new TextBox( "Number: 11."". 15. TextField.PHONENUMBER):

tbPhone. addCommand(next):

tbPhone.addCommand(back):

tbPhone.setCommandListener(this):



// поле ввода электронной почты tbEMail - new TextBox("E-Mail:".

".35,TextField.EMAILADDR):



Полный листинг программы «AdressBook» 197

tbEMai1.addCommand(next): tbEMail.addCommand(back); tbEMail.setCommandLi£tener(this):



// экран ввода дня рождения

dateField * new DateField("Birthday",DateField.DATE);

dateForm = new FormC"');

dateForm.append(dateField);

dateForm.addCommand ( next):

dateForm.addCommand(back);

dateForm.setCommandListener(this):

// создать список имен

BuildNameListO;

// поиск именинника

String name • SearchBirthdayO:

// если имя найдено

if(name!=null) {

// создать форму напоминания

Form remindForm = new Form( "Reminder");

// добавить напоминание в форму

remindForm.appendСname + " has a birthday today!");

// добавить команду возврата

remindForm. addCommand(ok);

remindForm. setCommandLi stener(this);

// отобразить форму

displ ay.setCurrent(remi ndForm): ) else

// отобразить список имен на экране

di spl ay.setCurrent (nameList):

// нетод SearchBirthday. возвращает строку с именем именинника // если в этот день именинников нет, то возвращает null private String SearchBirthday(j { String name » null; try {

// создать объект фильтра по дню рождения

BirthdayFilter filter = new BirthdayFilterO;

// получить список записей с подходящим днем рождения

RecordEnumeratiop. re - recordStore.enumerateRecords(fiHer. null.

false):

// получить ID записи int id - re.nextRecordldO: // получить запись по ID

198 Приложение 3. Полный листинг программы «AdressBook»

byte[] record • recordStore.getRecord(id):

// преобразовать запись в байтовый поток

ByteArraylnputStream bais = new ByteArraylnputStream(record);

// создать поток, поддерживающий чтение по типу

DatalnputStream dis • new DataInputStream(bais);

// считать из потока строку с именем

name -dis.readllTFO;

)

catctKRecordStoreException rse) {}



■ catchdOException ioe) {}

// вернуть имя именинника

return name:

// метод BuildNameList; создает список имен из адресной книги private void BuildNameListО { // создать объект списка

nameList = new ListC'Address-Book", List.IMPLICIT): nameLi st. setCommandLi stener( thi s): // команда добавления записи nameList.addCommand(add): // команда получения параметров записи nameList.addCommand(ok) : try {

// получить количество записей

int size = recordStore.getNumRecordsO;

// создать массив для хранения Ш записей

reclndexes - new int[size];

// создать объект компаратора в алфавитном порядке

Alphabetical Ordering comparator = new AlphabeticalOrderingO:

// получить список записей хранилища

RecordEnumeration re - recordStore.enumerateRecords(null , comparator.

false),:


// индекс массива хранения ID записей int i=0:

// бесконечный цикл; выход из цикла происходит по // формированию исключения получения'ID следующей записи. П после того как было получено ID последней записи while(true) {



II получить ID следующей записи

int id = re.nextRecordldO;

// записать ID в массив

reclndexes[i++]=id;

// получить запись по Ш

byte[] record - recordStore.getRecord(id);

Полный листинг программы «AdressBook» 199

// преобразовать запись в байтовый поток

ByteArraylnputStream bais=new ByteArraylnputStream(record);

// создать поток, поддерживающий чтение по типу

Data lnputStream dis - new DatalnputStream(bais):

// считать из потока первую строку и добавить в список

nameList.append(dis.readUTF().null):

catch(RecordStoreException rse) catch( IOException ioe) {}

// блок прослушивания команд

public void commandAction(Command с Displayable d) { // команда Add отображает экран ввода имени if(c==add)

di splay.setCurrent(tbName); // команда Ok if(c-ok) {

// если команда вызвана из экрана со списком имен if(d==namel_ist) { try {

// получить в массиве reclndexes ID,необходимой записи

int id - recIndexes[nameList.getSelectedIndex()]:

// считать необходимую запись

byte[] record - recordStore.getRecord(id);

// преобразовать запись в байтовый поток

ByteArraylnputStream bais=new ByteArrayInputStream(record);

// создать поток, поддерживающий чтение по типу

DatalnputStream dis = new DatalnputStream(bais);

// создать форму для отображения параметров

Form infoForm = new Form(""):

// считать строки с параметрами и добавить в форму

infoForm.append(dis.readUTF()+"\n"): . infoForm.append(dis.readUTF()+"\n");

infoForm.append(dis.readUTFO);

// создать объект даты рождения

Date birthday = new Date(dis.readLongO):

// создать объект поля ввода даты

DateField df = new DateField("".DateField.DATE);

// установить дату рождения в поле ввода даты

df.setDate(birthday):

// добавить даты рождения в форму отображения параметров

1nfoForm.append(df);

// добавить команду возврата к списку имен



200 Приложение 3. Полный листинг программы «AdressBook»

infoForm.addCommand(ok); infoForm.setCommandListener(this): // отобразить форму на экране di spl ay. setCurrent(infoForm);

)

catch(RecordStoreException rse) {}



catch(lOException 1oe) {}

) else { // если команда вызвана из формы параметров записи

// вернуться к списку имен

display.setCurrent(namelist);

// команда Next: перейти к следующему полю ввода if(c==next) {

// из поля ввода имени - к полю ввода номера телефона

i f (d==tbName) di spl ay. setCurrent (tbPhone);

// из поля ввода номера телефона - к полю ввода e-mail

if(d==tbPhone) display.setCurrentCtbEMail):

// из поля ввода e-mail - к дню рождения

if(d== tbEMai1) display.setCurrent(dateForm);

// из поля ввода дня рождения

if(d==dateForm) {

// создать байтовый поток вывода

ByteArrayOutputStream baos - new ByteArrayOutputStreamО; // создать поток вывода, поддерживающий запись по типу DataOutputStream dos = new DataOutputStream(baos); try {

// записать введенные параметры в поток вывода

dos. wri teUTF (tbName.getString()):

dos.writeUTF(tbPhone.getStringO);

dos.writeUTF(tbEMail .getStringO);

dos.writeLong(dateField.getDate().getTime());

// добавить запись в хранилище

recordStore.addRecord(baos.toByteArray(). 0. baos.sizeO);

]

catchdOException ioe) {}



catch (RecordStoreException rse) {}

// создать список имен

euildNameListO:

// отобразить список имен на экране

display.setCurrent(nameLi st);

// команда Back: возврат к предыдущему полю ввода

Полный листинг программы «AdressBook» 201

if(c==back) {

// из поля ввода имени - к списку имен

if(d==tbName) display.setCurrent(nameList);

// из поля ввода номера телефона - к полю ввода имени

if(d==tbPhone) di splay.setCurrent(tbName);

// из поля ввода e-mail - к полю ввода номера телефона

if(d—-tbEMail) display.setCurrent(tbPhone):

// из поля в-вода даты рождения - к полю ввода e-mail

if(d==dateForm) display.setCurrent(tbEMai1):

// класс фильтра записей по дням рождения

private class BirthdayFilter implements RecordFilter {

// метод сравнения записей public boolean matches(byte[] candidate) { // преобразовать запись в байтовый поток

ByteArraylnputStream bais = new ByteArraylnputStream(candidate); // создать поток поддержиающие чтение по типу DatalnputStream dis - new DatalnputStream(bais): // день рождения Date birthDate « new Date'O; try {

// считать строковые параметры записи

dis.readUTFO;

dis.readUTFO;

dis.readUTFO:

// считать дату рождения

birthDate.setTime(dis.readLong());

}

catch (IOExcepti.on ioe) { return false: }



// получить два календаря с текущей датой

Calendar rightNow • Calendar.getlnstanceO :

Calendar birthday = Calendar.getlnstanceO:

// установить дату рождения именинника

bi rthday.setTimef ЫrthDate);

// сравнить день и месяц рождения с текущей датой

if (rightNow. get(Calendar. DAY_OF_MONTH)==

birthday.get(Calendar.DAY_OF_MONTH) &&

ri ghtNow. get (Ca 1 endar. MONTH )—

bi rthday.get( Ca1enda r.MONTH))

return true; else

202 Приложение 3. Полный листинг программы «AdressBook»

return fa he:

// класс компаратора записей по алфавиту

private class AlphabeticalOrdering implements RecordComparator { // метод сравнения записей public int compare(byte[] reel. byte[] rec2) { // преобразовать записи в байтовый поток ByteArraylnputStream baisl = new ByteArraylnputStream(recl); ByteArraylnputStream bais2 = new ByteArrayInputStream(rec2): // создать потоки, поддерживающие чтение по типу DatalnputStream disl = new DataInputStream(baisl); DatalnputStream dis2 = new DataInputStream(bais2); // строки имен String namel = null: String name2 » null: ■ try {

// считать строки с именами namel = disl .readUTF О: name2 - dis2.readUTF 0;

}

catch (IOException ioe) {} // лексикографическое сравнение строк int result = namel.compareTo(name2): if (result < D)



// первая запись предшествует второй return RecordComparator . PRECEDES; else

if {result — 0)

// записи содержат идентичные имена return RecordComparator.EQUIVALENT; else

// вторая запись предшествует первой return RecordComparator.FOLLOWS;

} // class AddressBook

Литература


  • БрюсЭккель. Философия Java. 3-е изд. СПб.: Питер, 2003.

  • Жерздев С. B.Java 2 Micro Edition. ИТЛаб, ННГУ, ВМК, 2003.

  • Вартан Пирумян. Платформа программирования J2ME для портативных уст­
    ройств. КУДИЦ-Образ, 2002.

  • Кен Арнольд, Джеймс Гослинг. Язык программирования JAVA. СПб.: Питер,
    1997.

Использованы материалы порталов и форумов:

  • java.sun.com/j2me/docs

  • www.juga.ru

  • www.javagu.ru

Евгений Леонидович Буткевич Пишем программы и игры для сотовых телефонов

Главный редактор £ Строганова

Заведующий редакцией А. Кривцов

Руководитель проекта А. Крузенштерн

Литературный редактор Е. Бурнашова

Иллюстрации . В. Демидова, С. Романов

Художник С. Мапикова
Корректоры И. Смирнова, Н. Шелковникова

Верстка С. Романов

Лицензия ИД№05784 от 07.09.01. Подписано впечать 18. 11.05. Формат 70X100/1 6. Усл. п. л. 16,77. Тираж 3000 экз. Заказ № 6647.

ООО «Питер Принт». 194044, Санкт-Петербург, Б. Сампсониевский пр., 29а.

Налоговая льгота — общероссийский классификатор продукции ОК 005-93, том 2; 953005 —литература учебная.

Отпечатано с готовых диапозитивов в ФГУП «Печатный двор» им. A. M. Горького

Федераль ного агентства по печати и массовым коммуникациям.

197110, Санкт-Петербург, Чкаловский пр., 15.





КЛУБ П НО/ ШС С И О Н А Л




В1997 году по инициативе генерального директора Издательского дома «Питер» Валерия Степанова и при поддержке деловых кругов города в Санкт-Петербурге был основан «Книжный клуб Профессионал». Он собрал под флагом клуба про­фессионалов своего дела, которых объединяет постоянная тяга к знаниям и любовь к книгам. Членами клуба являются лучшие студенты и известные практики из раз­ных сфер деятельности, которые хотят стать или уже стали профессионалами в той или иной области.

Как и все развивающиеся проекты, с течением времени книжный клуб вырос в «Клуб Профессионал». Идею клуба сегодня формируют три основные «клубные» функции:



  • неформальное общение и совместный досуг интересных людей;

  • участие в подготовке специалистов высокого класса
    (семинары, пакеты книг по специальной литературе);

  • формирование и высказывание мнений современного профессионала
    (при встречах и на страницах журнала).

КАК ВСТУПИТЬ В КЛУБ?

Для вступления в «Клуб Профессионал» вам необходимо:



  • ознакомиться с правилами вступления в «Клуб Профессионал»
    на страницах журнала или на сайте www.piter.com;

  • выразить свое желание вступить в «Клуб Профессионал»

по электронной почте postbook@piter.com или по тел. (81 2) 103-73-74;

• заказать книги на сумму не менее 500 рублей в течение любого времени


или приобрести комплект «Библиотека профессионала».

«БИБЛИОТЕКА ПРОФЕССИОНАЛА»

Мы предлагаем вам получить все необходимые знания, подписавшись на «Библио­теку профессионала». Она для тех, кто экономит не только время, но и деньги. Покупая комплект - книжную полку ((Библиотека профессионала», вы получаете:



  • скидку 15% от розничной цены издания, без учета почтовых расходов;

  • при покупке двух или более комплектов - дополнительную скидку 3%;

  • членство в «Клубе Профессионал»;

  • подарок-журнал «Клуб Профессионал».


Закажите бесплатный журнал Ist^ПНТЕ!Р

«КлубПрофессионал». 'О^0 www!р\гв "

П ЗЛАТЕПЬСКПП ПОМ



ЗАКАЗАТЬ КНИГИ ИЗДАТЕЛЬСКОГО ДОМА «ПИТЕР» МОЖНО ЛЮБЫМ УДОБНЫМ ДЛЯ ВАС СПОСОБОМ:

  • по телефону: (812) 103-73-74;

  • по электронному адресу: postbook@piter.com;

  • на нашем сервере: www.piter.com;

  • по почте: 197198, Санкт-Петербург, а/я 619,
    ЗАО «Питер Пост».

ВЫ МОЖЕТЕ ВЫБРАТЬ ОДИН ИЗ ДВУХ СПОСОБОВ ДОСТАВКИ И ОПЛАТЫ ИЗДАНИЙ:

Наложенным платежом с оплатой заказа при получении посылки на ближайшем почтовом отделении. Цены на издания приведены ориентиро­вочно и включают в себя стоимость пересылки по почте (но без учета авиатарифа). Книги будут высланы нашей службой «Книга-почтой» в течение двух недель после получения заказа или выхода книги из печати. Оплата наличными при курьерской доставке (для жителей Москвы и Санкт-Петербурга). Курьер доставит заказ по указанному адресу в удобное для вас время в течение трех дней.



ПРИ ОФОРМЛЕНИИ ЗАКАЗА УКАЖИТЕ:

  • фамилию, имя, отчество, телефон, факс, e-mail;

  • почтовый индекс, регион, район, населенный пункт,
    улицу, дом, корпус, квартиру;

  • название книги, автора, код, количество заказываемых
    экземпляров.

Вы можете заказать бесплатный журнал «Клуб Профессионал»

пзалтвпьскнй пом

WWW.PI7ER.COM

ИЗДАТЕЛЬСКИЙ ПОМ
(\^ПМ1ТЙ2П СПЕЦИАЛИСТАМ


Ш ШШШ Ш ШшшШ*" КНИЖНОГО БИЗНЕСА!

WWW.PITER.COM



ПРЕДСТАВИТЕЛЬСТВА ИЗДАТЕЛЬСКОГО ДОМА «ПИТЕР»

предлагают эксклюзивный ассортимент компьютерной, медицинской,

психологической, экономической и популярной литературы

РОССИЯ

Москва м. «Павелецкая», 1-й Кожевнический переулок, д. 10; тел./факс (095) 234-38-15, 255-70-67, 255-70-68; e-mail: sales@piter.msk.ru

Санкт-Петербург м. «Выборгская», Б. Сампсониевский пр., д. 29а; тел./факс (812) 703-73-73, 703-73-72; e-mail: sales@piter.com

Воронеж ул. 25 января, д. 4; тел./факс (0732) 39-43-62, 39-61-70; e-mail: pitervrn@comch.ru

Екатеринбург ул. 8 Марта, д. 2676, офис 203, 205; тел./факс (343) 225-39-94, 225-40-20;

e-mail: piter-ural@isnet.ru



Нижний Новгород ул. Совхозная, д. 13; тел. (8312) 41-27-31; e-mail: piter@infonet.nnov.ru

Новосибирск ул. Немировича-Данченко, д. 104, офис 502; тел./факс (383) 354-13-09, 211-27-18; e-mail: piter-sib@risp.ru

Ростов-на-Дону ул. Ульяновская, д. 26; тел. (863) 269-91-22, 269-91-30; e-mail: jupiter@rost.ru

Самара ул. Молодогвардейская, д. 33, литер А2, ком. 225; тел. (846) 77-89-79; e-mail: pitvolga@samtel.ru

УКРАИНА

Харьков ул. Суздальские ряды, д. 12, офис 10-11; тел./факс (10-38-057) 712-27-05, 751-10-02, (0572) 58-41-45; e-mail: piter@kharkov.piter.com

Киев пр. Московский, д. 6, кор. 1, офис 33; тел./факс (10-38-044) 490-35-68, 490-35-69;

e-mail: office@piter-press.kiev.ua



БЕЛАРУСЬ

Минск ул. Бобруйская, д. 21, офис 3; тел./факс (10-375-17) 226-19-53; e-mail: office@minsk.piter.com

Ищем зарубежных партнеров или посредников, имеющих выход на зарубежный рынок. Телефон для связи: (812) 703-73-73. E-mail: grigorjan@piter.com

Издательский дом «Питер» приглашает к сотрудничеству авторов. Обращайтесь по телефонам: Санкт-Петербург (812) 703-73-72, Москва - (095) 974-34-50.

Заказ книг для вузов и библиотек: (812) 703-73-73.

Специальное предложение - e-mail: kozin@piter.com





.PITEft.COM

ПЗДАТЕПЬСКПЙ ПОМ

УВАЖАЕМЫЕ ГОСПОДА!

КНИГИ ИЗДАТЕЛЬСКОГО ДОМА «ПИТЕР»

ВЫ МОЖЕТЕ ПРИОБРЕСТИ

ОПТОМ И В РОЗНИЦУ У НАШИХ РЕГИОНАЛЬНЫХ ПАРТНЕРОВ.


Башкортостан

Уфа, «Азия», ул. Гоголя, д. 36, офис 5, тел./факс (3472) 50-39-00,51-85-44. E-mail: asiaufa@ufanet.ru



Дальний Восток

Владивосток, «Приморский торговый дом книги» тел./факс (4232) 23-82-12. E-mail: bookbase@mail.primorye.ru

Хабаровск, «Мире»,

тел. (4212) 30-54-47, факс 22-73-30.

E-mail: salebook@ bookmirs.khv.ru

Хабаровск, «Книжный мир»,

тел. (4212) 32-85-51, факс 32-82-50.

E-mail: postmaster@worldbooks.kht.ru



Европейские регионы России

Архангельск, «Дом книги»,

тел. (8182)65-41-34, факс 65-41 -34.

E-mail: book@atnet.ru

Калининград, «Вестер», тел./факс (0112) 21 -56-28,21 -62-07. E-mail: nshibkova@vester.ru http://www.vester.ru

Северный Кавказ

Ессентуки, «Россы», ул. Октябрьская, 424, тел./факс (87934) 6-93-09. E-mail: rossy@kmw.ru



Сибирь

Иркутск, «ПродаЛитЪ»,

тел. (3952) 59-13-70, факс 51-30-70.

E-mail: prodalit@irk.ru

http://www.prodalit.irk.ru

Иркутск,«Антей-книга», тел./факс (3952) 33-42-47. E-mail: antey@irk.ru

Красноярск, «Книжный мир»,

тел./факс (3912) 27-39-71.



E-mail: book-world@ public. krasnet.ru

Нижневартовск, «Дом книги»,

тел. (3466) 23-27-14, факс 23-59-50.

E-mail: book@nvartovsk.wsnet.ru

Новосибирск, «Топ-книга»,

тел. (3832) 36-10-26, факс 36-10-27.

E-mail: office@top-kniga.ru

http://www.top-kniga.ru

Тюмень, «Друг», тел./факс (3452) 21-34-82. E-mail: drug@tyumen.ru

Тюмень, «Фолиант»,

тел. (3452) 27-36-06, факс 27-36-11.

E-mail: foliant@tyumen.ru

Челябинск, ТД «Эврика», ул. Барбюса, д. 61, тел./факс (3512) 52-49-23. E-mail:evrika@chel.sumet.ru

Татарстан

Казань, «Таис»,

тел. (8432) 72-34-55, факс 72-27-82.

E-mail: tais@bancorp.ru



Урал

Екатеринбург, магазин № 14, ул. Челюскинцев, д. 23, тел./факс (3432) 53-24-90. E-mail: gvardia@mail.ur.ru



Екатеринбург, «Валео-книга», ул. Ключевская, д. 5, тел./факс (3432) 42-56-00. E-mail: valeo@etel.ru

Каталог: Техника -> Информационные%20технологии
Информационные%20технологии -> Методические рекомендации по построению систем защиты узлов интернет 1 требования к системе защиты узла интернет 2
Техника -> Учебная программа для специальности: 1-23 01 73 Средства массовой информации
Техника -> Ремонт китайских телефонов
Техника -> Для профилактики и лечения насморка Зачем промывать нос во время насморка?
Техника -> Учебная программа для специальности: 1-23 01 73 Средства массовой информации


Поделитесь с Вашими друзьями:
1   ...   7   8   9   10   11   12   13   14   15


База данных защищена авторским правом ©vossta.ru 2019
обратиться к администрации

    Главная страница