Задания

Л.р.№1 Классы

Есть информация о турпоездке:

  • название туристической фирмы;
  • страна пребывания;
  • дата отъезда, дата возвращения;
  • цена;
  • количество путевок.
Некоторое количество таких записей ("туров") хранится в коде программы (т.е. добавление, удаление, редактирование записей пользователем не предусмотрено).

1. Реализовать для пользователя следующие возможности:
  • просмотр информации обо всех имеющихся турах;
  • просмотр туров в заданную страну, начинающихся в заданном диапазоне дат, в порядке возрастания цены.
Для хранения даты можно использовать как стандартный, так и самодельный класс Date.

2. При проектировании классов предусмотреть возможность дальнейшего добавления в программу следующей функциональности: (кодить это не надо!)
  • хранение списка клиентов компании, которые в прошлом воспользовались одним или несколькими турами;
  • хранение отзывов этих клиентов о турах.

3. Совет: сделайте класс "хранилище туров" с методами добавления, поиска, редактирования, удаления... - и уже в main() добавляйте в него туры.

При сдаче лабы - объяснить, с помощью каких классов Вы считаете правильным реализовать описанную выше функциональность (и как эти классы будут устроены).

вопросы и комментарии писать тут

Л.р. №2 Коллекции

Написать программу-телефонный справочник. Программа хранит фамилии и соответствующие им номера телефонов. У каждой фамилии может иметься 1 домашний, 1 рабочий и несколько сотовых номеров телефонов. Конкретные данные (фамилии и телефоны) хранить прямо в коде программы.

Реализовать:

  • поиск номеров телефонов по фамилии;
  • поиск по фамилии только абонентов определенной "сотовой" компании (например, MTC);
  • поиск абонентов по первым n цифрам телефонного номера;
  • вывод на экран фамилий и рабочих телефонов всех абонентов;
  • вывод на экран фамилий тех абонентов, кто имеет несколько сотовых номеров.

вопросы и комментарии писать тут

Л.р. №3 Потоки

Реализовать многопоточную программу с якобы "тяжелыми вычислениями". В качестве "тяжелых вычислений" производить вычисление числа Пи с помощью ряда Лейбница: 4*(1-1/3+1/5-1/7+1/9-...). Примечание: этот ряд очень плохо сходится, поэтому чтобы достичь более-менее приличной точности, надо очень долго считать.

Программа предоставляет пользователю (в консоли) меню следующего вида:

  1. Продолжить вычисления.
  2. Приостановить вычисления.
  3. Посмотреть текущий результат.
  4. Узнать суммарное время, затраченное на вычисления.
  5. Выход.
Собственно вычисление ряда выполняет отдельный поток (в бесконечном цикле). Главный поток может его приостановить (для этого нужно заставить вычислительный поток выполнить вызов wait()), продолжить (notify()), показать текущий достигнутый результат вычислений (собственно, число Пи, но пока не очень точное). При приостановке загруженность процессора (в "диспетчере задач") должна падать  до небольшого значения около 0, при продолжении - возрастать до 100%. Когда вычисления приостановлены, операция "посмотреть текущий результат" при многократном ее выполнении должна показывать одно и то же (потому что текущее значение Пи не меняется); во время вычислений - соответственно - при каждом повторном просмотре Пи должно становиться все точнее и точнее.

Операция "узнать суммарное время" - показывает сколько секунд проработал вычислительный поток. Т.е., когда он "спит" в режиме паузы - эта величина не меняется; когда работает - увеличивается со скоростью "одна секунда в секунду".

В качестве примера см. ниже NewThread.jar (из консоли запускается командой "java -jar NewThread.jar"). Надо сделать такое же, но без окошек!

На что обратить внимание:
  • Разберитесь, какому классу принадлежат методы wait() и notify() и какой именно поток они приостанавливают/пробуждают. Что такое notifyAll()?
  • Что такое  synchronized, какую проблему оно решает. Помните, что бывают synchronized-методы и synchronized-секции. (примечание: IllegalThreadStateException - это не искомая проблема, это ее следствие).
  • Как правильно останавливать потоки. Метод join().
  • Литература - Шилдт и Хорстманн Т2.

вопросы и комментарии писать тут

Л.р. №4 Потоки-2

  1. Создать две группы потоков с двумя потоками в каждой группе. Потоки должны быть разного приоритета. Каждый поток в бесконечном цикле инкрементирует и выводит на экран переменную (каждый свою). В результате - на экране появляются строки со значениями этих 4-х переменных (снабженные информацией о владеющем потоке). Показать, что разные потоки "считают" с разной скоростью, и объяснить почему. Не забыть корректно завершить работу всех потоков при выходе.
  2. Закодить пример программы, моделирующей транзакции в банке, из 2-го тома Хорстманна без блокировок. Показать, что программа действительно работает неправильно, объяснить почему и как это исправить.

Инд.з. №1 "Гостиница" (потоки)

Разработать программу для моделирования работы гостиницы в (ускоренном) реальном времени.

Задание на 5 баллов

Класс "гостиница": характеризуется вместительностью (сколько всего постояльцев может принять) и помнит список людей, которые проживают в ней на данный момент. Класс "заявка на проживание" характеризуется фамилией постояльца и количеством миллисекунд проживания.

В "гостинице" имеются операции: поселения "заявки" (либо успешно поселяет и возвращает true, либо возвращает false в случае недостатка свободных мест), выселения заданной "заявки" (явно вызывается самой заявкой в нужный момент времени - гостиница не должна самостоятельно отсчитывать миллисекунды за каждого постояльца, т.к. тот потенциально может продлить свое проживание), поиска постояльца по фамилии.

"Заявка" самостоятельно поселяется в гостиницу, создавая для этого отдельный поток (это может происходить как автоматически в конструкторе, так и в специальном методе). В случае невозможности поселиться заявка переходит в режим ожидания появления свободных мест. После успешного поселения заявка отсчитывает (sleep) заданное количество миллисекунд - и выселяется, освобождая место в гостинице.

Функция main пытается "поселить" в гостиницу несколько заявок. Но не одновременно, а через некоторые промежутки времени - чтобы смоделировать ситуацию неодновременного их прихода.

Класс "гостиница" выводит на экран диагностические сообщения, сообщающие об операциях поселения (успешного и безуспешного) и выселения - с указанием времени, информации о заявке и количестве оставшихся мест. Требуется наглядно продемонстрировать безуспешное поселение, ожидание и последующее успешное поселение в гостиницу после чьего-то выселения.

Задание на 7 баллов

Предусмотреть наличие в гостинице номеров разных категорий ("эконом", "стандарт", "люкс" и др. на ваше усмотрение), в том числе одно-, двух- и трехместных. В "заявке" предусмотреть поселение сразу группы из нескольких человек, а не одного (т.е. одна заявка = группа приехавших вместе людей). При этом заявка не может быть удовлетворена частично, все члены одной группы поселяются в номера одной категории (категория "записана" в заявке), а "гостиница" работает без подселения: в один многоместный номер не селятся люди из разных "заявок" (групп); из одной - селятся.

Подсказка:

  1. Помните о правильном проектировании классов.
  2. При освобождении номера "люкс" нет смысла оповещать об этом тех, кто ждет освобождения номера "эконом"!

Задание на 8 баллов

Реализовать строгое соблюдейние очередности: освободившийся номер предлагается в первую очередь тому, кто дольше ждет.

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

Бонусные 2 балла

Создайте аккаунт и репозиторий на github и залейте туда свои исходники. Пришлите мне на почту ссылку на свой репозиторий.

Порядок сдачи

Сначала программа высылается мне на почту (либо в виде вложения, либо в виде ссылки на репозиторий), затем защищается на паре. Потом ее код проверяется на уникальность.

вопросы и комментарии писать тут

Л.р. №5+ Проектирование (бонусная)

Целей задания - две:

  1. Привыкнуть работать с проектами, содержащими много классов. Посмотреть, как они устроены (понадобится в курсовой).
  2. Научиться формулировать функциональные требования к программным проектам (понадобится в курсовой).

Само задание:

  • скачайте, скомпилируйте и разберитесь в исходниках программы j-ftp;
  • на основе работы с программой в качестве пользователя составьте список основных ее возможностей;
  • занесите все свои результаты в столбец "Контроль" .doc-файла с заданием;
  • внесите в программу немного изменений (как написано в .doc-файле с заданием);
  • чтобы сдать эту лабу, приносите с собой на пару проект с исходниками (с Вашими изменениями) и .doc-файл с заполненным столбцом "контроль".
  • Скачать .doc-файл с заданием можно тут:lab5plus_program.doc

Баллы:

  • программа собрана из исходников и составлен список основных возможностей ("1 Сборка из исходников в IDE" и "2 Анализ функциональности" в .doc-е): 3 балла;
  • проведен общий анализ исходников ("3 Анализ общей структуры кода" в .doc-е): еще 2 балла;
  • сделана часть 4 ("4 Читаем исходники"), в том числе задания на внесение изменений в программу: еще 3 балла.

Сроки:

  • лаба принимается до конца октября; лучше - в первой его половине!

вопросы и комментарии писать тут


Л.р. №5 Ввод-вывод

Изменить лабораторную работу 1 так, чтобы вся информация хранилась в файлах:

  • при запуске программы информация о турах загружается из файла;
  • при завершении программы - вся информация о турах сохраняется в (тот же) файл (на случай, если мы захотим добавить в программу возможность добавления/удаления/редактирования туров);
  • при поиске, после вывода результатов поиска на экран, пользователю предлагается ввести имя файла, в который сохранить эти результаты.

Протестировать на не менее 10 туристических фирмах, каждая из которых предлагает не менее 10 туров в разные страны на разные сроки.

Л.р. №6 Работа с графикой

Нарисовать грустного человечка (только смайлик: грустный взгляд и уголки губ опущены). Постепенно лицо должно преобразиться на веселое. Сделать все в апплете.

Л.р. №7 Компоненты GUI

1) На "фрейме", у верхнего края, статическая надпись, под ней - картинка. Еще ниже - 4 кнопки: «Доброе утро», «Добрый день», «Добрый вечер», «Доброй ночи».

При нажатии на одну из кнопкок - меняется надпись и картинка (в соответствии с тем, какую кнопку нажали).

2) Добавить к п.1 три CheckBox'а для изменения цвета панели (фон всего окна) и два RadioButton'а для изменения цвета текста надписи.

Л.р. №8 Калькулятор

Разработать программу "Калькулятор":

  • на 4 балла Ваш калькулятор должен понимать, что 2+2*2=6, а не 8;
  • и быть красивым, полнофункциональным и удобным в использовании;
  • реализовывать все кнопочки, показанные на картинке, не обязательно.
              

Л.р. №9. Связь и работа с базой данных. Работа с таблицей.

Создать с помощью MicrosoftAccess таблицы для хранения информации о соревнованиях в командных видах спорта:

  • Страна: код, название.
  • Соревнование: код, название соревнования.
  • Этап: (полуфинал, финал и т.д.).
  • Команда: код, название команды, страна.
  • Сводная таблица "игра": команда, дата, соревнование и его этап, результат.

Разработать GUI (используя компонент JTable). Уметь считывать данные из "сводной" таблицы и проводить различные виды поиска (по команде, этапу, по дате и др.). Уметь удалить информацию.

https://docs.oracle.com/javase/tutorial/uiswing/components/table.html

https://docs.oracle.com/javase/tutorial/uiswing/components/table.html

https://docs.oracle.com/javase/tutorial/jdbc/index.html

ċ
NewThread.jar
(4k)
Dima Litvinov,
20 сент. 2014 г., 5:13
ĉ
Dima Litvinov,
29 сент. 2014 г., 7:51
Comments