10 Б

Программирование


Структуры данных

ArrayList Java в решении должна быть одна пара квадратных скобок
Очереди, стеки, деки просто
Очереди, стеки, деки сложно


Список
Напишите двусвязный список, сравните его эффективность с ArrayList и LinkedList.


Куча просто
Куча сложно


Контест "Двоичное дерево поиска"


Реляционные базы данных. Язык SQL

Результаты
Получить таблицы *одним запросом*:
1. Фамилия лектора, предмет, который он ведет.
2. Названия университетов, рейтинг которых выше среднего
3. ID и фамилии студентов, сдавших более трех экзаменов
4. Количество университетов, в которых учится более 100 студентов
5. Количество экзаменов, сданных каждым студентом (ID, Фамилия, количество).


Таблица для сдачи


Для работы (обучения) удобно использовать SQLite. Почему?
0. Soft
Удобно работать при помощи SQLite Browser. Установите его.
1. Создание таблиц
Какие типы данных есть в SQLitе? (ДО п. 2)
Изучите синтаксис SQL для создания и удаления таблиц


Создайте базу данных из след. таблиц (какие поля можно и нужно сделать ключевыми?)


STUDENT : ID, SURNAME, NAME, STIPEND, KURS, CITY, BIRTHDAY, UNIV_ID
LECTURER : ID, SURNAME, NAME, CITY, UNIV_ID
SUBJECT : ID, NAME, HOUR, SEMESTER
UNIVERCITY : ID, UNIV_NAME, RAITING, CITY
EXAM_MARKS : EXAM_ID, STUDENT_ID, SUBJ_ID, MARK, EXAM_DATE
SUBJ_LECT : LECTURER_ID, SUBJECT_ID


2. Наполнение данными
Изучите синтаксис команды INSERT.


В каждой таблице должно быть не менее 100 записей.
Для того, чтобы сделать это быстро, стоит использовать скрипты – программы, генерирующие команды INSERT


3. Запросы а выборку из одной таблицы
Простейшие варианты
Условие WHERE
Дополнительные возможности SELECT
Вычисляемые поля


Задачи на простой SELECT


Совсем просто


1. Напишите запрос для вывода идентификатора (номера) предмета
обучения, его наименования, семестра, в котором он читается,
и количества отводимых на этот предмет часов для всех строк таблицы SUBJECT.


2. Напишите запрос, выбирающий все данные из таблицы STUDENT,
расположив столбцы таблицы в следующем порядке: KURS, SURNAME, NAME, STIPEND.


3. Напишите запрос, позволяющий получить из таблицы EXAM_MARKS
значения столбца MARK (экзаменационная оценка) для всех студентов, исключив из списка повторение одинаковых строк.


4. Напишите запрос, выбирающий данные о фамилии, имени и номере курса для студентов, получающих стипендию больше 140.


5. Напишите запрос, который выполняет вывод списка университетов, рейтинг которых превышает 300 баллов.


6. Напишите запрос на вывод находящихся в таблице EXAM_MARKS
номеров предметов обучения, экзамены по которым сдавались между 10 и 20 января 1999 года.


7. Напишите запрос на вывод названий предметов обучения, начинающихся на букву «И».


8. Напишите запрос для выбора из таблицы EXAM_MARKS записей,
в которых отсутствуют значения оценок (поле MARK).


Вычисления в запросах SELECT


1. Составьте запрос для таблицы STUDENT таким образом, чтобы выходная таблица содержала один столбец, содержащий последовательность разделенных символом «;» (точка с запятой) значений
всех столбцов этой таблицы, и при этом текстовые значения должны отображаться прописными символами (верхний регистр),
то есть быть представленными в следующем виде: 10;КУЗНЕЦОВ;БОРИС;0;БРЯНСК;8/12/1981;10.


2. Составьте запрос для таблицы STUDENT таким образом, чтобы выходная таблица содержала всего один столбец в следующем виде:
б.кузнецов;место жительства-брянск;родился:8-дек-1981.


3. Вывести фамилии, имена студентов и величину получаемых ими
стипендий, при этом значения стипендий должны быть увеличены
в 100 раз.


4. Составьте запрос для таблицы UNIVERSITY таким образом, чтобы
выходная таблица содержала всего один столбец в следующем виде: Код-10;ВГУ-г. ВОРОНЕЖ;Рейтинг=296.


UPDATE

Изменение данных

Измените некоторые данные в таблицах на значения NULL


Агрегирующие функции
Группировка в запросах


Агрегирующие функции


1. Посчитайте количество записей по таблице с NULL значениями по какому-нибудь полю, включая и не включая их.
2. Напишите запрос для подсчета количества студентов, сдававших
экзамен по предмету обучения с идентификатором, равным 20.
3. Напишите запрос, который выполняет выборку для каждого студента значения его идентификатора и минимальной из полученных им оценок.
4. Напишите запрос, выполняющий вывод фамилии первого в алфавитном порядке (по фамилии) студента, фамилия которого начинается на букву «И».
5. Напишите запрос, который выполняет вывод данных для каждого
конкретного дня сдачи экзамена о количестве студентов, сдававших экзамен в этот день.
6. Напишите запрос для получения среднего балла для каждого студента.
7. Напишите запрос для определения количества студентов, сдававших каждый экзамен.


Группировка и сортировка


1. Предположим, что стипендия всем студентам увеличена на 20%.
Напишите запрос к таблице STUDENT, выполняющий вывод номера студента, фамилию студента и величину увеличенной стипендии. Выходные данные упорядочить: а) по значению последнего
столбца (величине стипендии); б) в алфавитном порядке фамилий
студентов.
2. Напишите запрос, выполняющий вывод списка предметов обучения в порядке а) убывания семестров и б) возрастания отводимых
на предмет часов. Поле семестра в выходных данных должно быть
первым, за ним должны следовать имя предмета обучения и идентификатор предмета.
3. Напишите запрос, который выполняет вывод а) среднего, б) минимального, в) максимального баллов всех студентов для каждой даты сдачи экзаменов и который представляет результаты в порядке
убывания этих значений.


Связанные подзапросы

1. Напишите запрос с подзапросом для получения данных обо всех оценках студента с фамилией «Иванов». Предположим, что его персональный номер неизвестен. Всегда ли такой запрос будет корректным?
2. Напишите запрос, выбирающий данные об именах всех студентов,
имеющих по предмету с идентификатором 101 балл выше общего среднего балла.
3. Напишите запрос, который выполняет выборку имен всех студентов, имеющих по предмету с идентификатором 102 балл ниже общего среднего балла
4. Напишите запрос, выполняющий вывод количества предметов, по которым экзаменовался каждый студент, сдававший более 20 предметов.
5. Напишите команду SELECT, использующую связанные подзапросы и выполняющую вывод имен и идентификаторов студентов, у которых стипендия совпадает с максимальным значением стипендии для города, в котором живет студент.
6. Напишите запрос, который позволяет вывести имена и идентификаторы всех студентов, для которых точно известно, что они проживают в городе, где нет ни одного университета.
7. Напишите два запроса, которые позволяют вывести имена и идентификаторы всех студентов, для которых точно известно, что он проживают не в том городе, где расположен их университет.
8. Напишите запрос, позволяющий вывести данные обо
всех студентах, обучающихся в вузах, которые имеют рейтинг выше 300
9. Напишите запрос, выбирающий сведения обо всех студентах, для которых в том же городе, где живет студент, существуют университеты, в которых он не учится.
10. Напишите запрос, выбирающий из таблицы SUBJECT данные о названиях предметов обучения, экзамены по которым сданы более чем
одним студентом.

JDBC

Подключение драйвера, начало работы
Драйвер JDBC


Таблица в swing


Узнать количество и название столбцов


ResultSet rs = stmt.executeQuery("SELECT ...");
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();


// The column count starts from 1
for (int i = 1; i <= columnCount; i++ ) {

String name = rsmd.getColumnName(i);
// Do stuff with name

}


Написать GUI-программу c полем ввода и кнопкой
Пишем в поле ввода запрос SELECT, при нажатии на кнопку – результат отображается в таблице.

Протокол HTTP 1.0 на практике


Броузер шлет обычно запрос по по версии 1.1, но отвечать ему можно и нужно по протоколу 1.0.


0. Prerequisites
Практика:
Клиент – putty
a) Открыть серверный сокет,
передать клиенту строку символов,
забрать от клиента строку символов
b) То же, несколько строк.
с) Переподключение: сделать так, чтобы несколько клиентов могли подключаться последовательно.


1. Основы HTTP
a) Основные ссылки по HTTP-протоколу
b) Виды запросов
c) Синтаксис GET-запроса
d) Структура ответа, основные коды ответа
e) Значимые заголовки


2. Практика. Простой GET-запрос
a) Получение браузером от сервера простой статичной Web-страницы


3. Практика. Работа с файлами
a) Вывод содержимого файла из текущего каталога в консоль
б) То же из подкаталога текущего каталога
в) Скопировать бинарный, например, графический файл.


4. Практика. Передача файлов по HTTP
a) Получение браузером конкретного HTML-файла, путь которого жестко прописан в коде сервера
b) Получение браузером картинки, путь которой жестко прописан в коде сервера.


5. Практика. GET-запрос
a) Выделить путь из GET-запроса – отдать браузеру требуемый файл с правильным Content-type
b) Обработать ошибку 404.


6. Теория. Web-формы HTML
a) Устройство HTML формы (тег FORM атрибут ACTION, атрибут METHOD, Submit)
b) Пользовательский ввод (поле ввода, поле для ввода пароля, checkbox, radiobutton, выпадающий список)


7. Практика. Web-формы HTML
a) Создать форму со всеми элементами с GET запросом на localhost


8. Практика. Web-формы GET
a) Проанализировать получаемые данные браузера по GET запросу формы
б) Сформировать ответ браузеру, передав полученные данные в HTML


9. Практика. Web-формы POST
a) Проанализировать получаемые данные браузера по POST запросу формы
б) Сформировать ответ браузеру, передав полученные данные в HTML


Менеджеры компоновки
вторая ссылка


Java SDK
Инструкция по установке
Документация по строкам
1. Контесты по основам
2. Вывести в консоль ровный треугольник Паскаля