Курсы программирования с нуля

Формула программиста
основатель — Волосатов Евгений Витольдович
1-2-3 мая - Создай online игру!

Базы данных - Управление отелем

Практическое знакомство с базами данных на примере создания программы «Hotel - управление комнатами и клиентами» - планирование и проектирование базы данных, проектирование интерфейса и создание полноценного программного продукта, с использованием базы данных MySQL и MS-SQL.



Хочу купить!

Купить в рассрочку за мегахеши

Цена: 2000 p.


Список уроков | фото | видео

# Название видеоурока Решило Рейтинг Доступ
1 Вступление 00:08:49 63 чел. ★ 4.9 Done
  Мы начинаем создание базы данных для гостиницы.
Твоя задача - самому подумать и создать описание
сущностей проекта, для каждой выписать атрибуты.
Отчёт отправил: 8005. Александр Выполнено за 20 мин. [Показать отчёт]
Научился: Представлять , что требуется чтобы управлять отелем. 
Сложности: пытаться хотя бы мысленно не допустить повторяющихся данных, и увязать одну таблицу с другой 
Комментарии: продолжаем 
2 Таблицы клиентов и заказов 00:25:03 61 чел. ★ 4.9 Done
  На этом уроке мы перечислим поля таблиц Client и Book.
Каждое поле этих таблиц потребует подробных
комментариев, почему так, как можно сделать
иначе, какие могут быть ошибки и так далее.
Отчёт отправил: 8005. Александр Выполнено за 30 мин. [Показать отчёт]
Научился: Думать, наперёд. Исключать в голове наличие повторяющихся данных в таблицах 
Сложности: Придумать что-то, что действительно мы опустили :) 
Комментарии: Я понимаю ,что большинство основного функционала мы не добавили, чтобы не утяжелять проект. Пытался придумать что-то без чего бы точно "минимум" не существовал и не смог. Поэтому те записи , что я добавил, лишь как хотелось бы мне, что бы БД казалась полнее :) 
3 Таблицы комнат и дней 00:22:47 58 чел. ★ 4.9 Done
  На этом уроке мы перечислим поля трёх таблиц:
Room, Calendar, Map.
В конце урока распишем типы
каждого поля нашей базы данных.
Подумай и напиши, какие ещё поля
можно добавить в эти таблицы.
Отчёт отправил: 8005. Александр Выполнено за 20 мин. [Показать отчёт]
Научился: снова думать наперёд 
Сложности: По правде говоря, я даже испугался, ведь я бы действительно скорее сделал Первичный ключ для комнаты ее номер. А оказывается сколько может изменится потом, и сколько потом переделывать из - за такой оплошности. И ведь всего не предусмотришь, к сожалению. 
Комментарии: НА данном этапе я не понимаю , почему в таблице Map мы сделали составной первичный ключ из трёх полей - book_id , room_id, calendar_day. Если к примеру мы занесли запись из заказа 1 с номером комнаты 1 и на 1 число, то таблица позволит нам внести и такую запись - номер заказа 2 номер комнаты 1 на 1 число и получится , что два человека попали на одно число в одну комнату. Если убрать book_id из ключа то вроде бы всё норм. Дальше погляжу! 
4 Создание базы в MS Access 00:26:28 54 чел. ★ 5 Done
  На этом уроке мы создадим нашу базу данных в MS Access.
Там же нарисуем схему базы данных и
создадим связи между таблицами.
Необходимо будет распечатать схему базы данных
и прикрепить её на своём рабочем месте.
Отчёт отправил: 8005. Александр Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Сделал в MS SQL все таблицы. Научился создавать первичные и внешие ключи 
Сложности: ничего 
Комментарии: Создал все таблицы в субд MS SQL Server. Там можно создать диаграмму где все таблицы сами свяжутся нужными связями в зависимости от их ключей. У рабочего стола колоть некуда листок. Уверяю, что данное дело не забудится :) 
5 Установка сервера MySQL 00:08:39 35 чел. ★ 4.9 Demo
  На этом уроке мы установим MySQL Community Server
и программу HeidiSQL для подключения к нему.
6 SQL запросы для создания Базы 00:24:00 53 чел. ★ 5 Done
  На этом уроке мы напишем SQL запросы
для создания нашей базы данных отеля.
Отчёт отправил: 8005. Александр Выполнено за 10 мин. [Показать отчёт]
Научился: Вроде бы сделал задание этого урока на прошлом уроке 
Сложности: ничего 
Комментарии: Ответь пож-та, я создал ранее таблицу с помощью management studio MS SQL Server. Я смогу продолжать далее проект если буду работать с этим инструментом, а не с MySQL и консолью ? 
7 Модель. Планирование. 00:04:53 53 чел. ★ 4.8 Done
  На этом уроке самостоятельное задание -
сформулировать все задачи, которые решает программа.
Это будет своеобразное проектирование бизнес-модели проекта.
Подсказка: смотрим на схему базы данных,
на каждую таблицу по отдельности, и задаём себе несколько раз вопросы:
что это? для чего? что можно с этим сделать? как это можно обработать?
Отчёт отправил: 8005. Александр Выполнено за 15 мин. [Показать отчёт]
Научился: представлять возможные задачи, которые должна решать будущая программа 
Сложности: ничего 
Комментарии: Задачи 1.Добавлять клиента в бд 2.Добавлять комнату в бд 3.Добавлять заказы клиентов 4. Устанавливать выходные, праздничные дни в календаре. 5. Заселять клиентов в комнаты с помощью добавления записи в map 6.Удалять клиента 7. Удалять комнату 8. Удалять заказ 9.Удалять праздничные, выходные дни 10. ВЫписывать клиентов из отеля, посредством удаления записей из map\ 11. Изменять данные клиента 12. Изменять данные комнаты 13. Изменять расселение в map 
8 Модель. Список задач. 00:23:02 51 чел. ★ 5 Done
  На этом уроке мы составим список задач.
Для каждой задачи нужно будет написать SQL запрос (или несколько),
который решает поставленную задачу.
Запросы нужно писать в таком виде,
в котором они сразу могут быть
выполнены в SQL-мониторе.
Каждый запрос необходимо проверить на работоспособность.
Отчёт отправил: 8005. Александр Выполнено за 30 мин. [Показать отчёт]
Научился: опыт в написании запросов 
Сложности: ничего 
Комментарии: Сначала подумал, что как то тяжело всё будет писать. а вроде всё легко вышло. ИМожет что-то не то понаписал 
9 Модель. SQL запросы для Client 00:20:17 50 чел. ★ 4.9 Done
  На этом уроке мы составим SQL запросы для
решения задач с таблицами Client и Calendar.
По аналогии создай SQL запросы для остальных задач.
Отчёт отправил: 8005. Александр Выполнено за 10 мин. [Показать отчёт]
Научился: добавил поиск по всем столбцам 
Сложности: в видеоуроке же тоже столбец ID интовый с автоинкрементом? Почему тогда проходит такой запрос ....OR ID = 'G' 
Комментарии: у меня выдало вот такую ошибку. Msg 245, Level 16, State 1, Line 11 Conversion failed when converting the varchar value 'P' to data type int. может кто знает как добавить проверку на возможность приведения типов ? 
10 Модель. SQL запросы для Room 00:12:04 50 чел. ★ 4.9 Done
  На этом уроке мы составим SQL запросы для
решения задач с таблицей Room.
По аналогии создай SQL запросы для остальных задач.
Отчёт отправил: 8005. Александр Выполнено за 10 мин. [Показать отчёт]
Научился: подвёл свои ранее написанные запросы под те, что в видеоуроки. а именно сортировку добавил в выводе всех комнат , а также заполнение поля Step значениями ID 
Сложности: ничего 
Комментарии: ничего 
11 Модель. SQL запросы для Book и Map 00:26:03 50 чел. ★ 4.9 Done
  На этом уроке мы составим SQL запросы
для всех остальных задач, для таблиц Book и Map.
В отчёте напиши мини-отзыв о созданных запросах.
Отчёт отправил: 8005. Александр Выполнено за 10 мин. [Показать отчёт]
Научился: практика в запросах 
Сложности: на этом уроке снова же. у Вас позволяет целочисленные поля приравнивать к 'pattern'. У меня ошибка. Может это разность в MySQL и MS SQl ? 
Комментарии: Не понятно всё таки как в видеоуроке добавилось значение в book с Client_ID равным NULL. Это поле является внешним ключем таблицы Client поля ID. и по идее ему не на что ссылаться, т.к. в данном поле значения NULL не может быть. Сами по себе запросы оказались очень простыми, надеюсь что в своих программах сильно тяжелее не пойдет. Язык SQL начал изучать недавно. Очень понравился. Делаю упражнения может sql-ex. Там я сейчас не могу решить задачи с уровнем сложности 3 и 4. Над 2-ым уровнем сложности приходится голову поломать. Боялся в некой степени что будет что-то такое навороченное 
12 Модель. Имена методов. 00:26:12 49 чел. ★ 4.9 Done
  На этом уроке мы пройдёмся ещё раз по списку
составленных задач и дадим названия классам
и методам, которые эти задачи будут выполнять.
Отчёт отправил: 8005. Александр Выполнено за 20 мин. [Показать отчёт]
Научился: придумывать адекватные названия 
Сложности: ничего 
Комментарии: продолжаем 
13 Класс MySQL. Драйвер и конструктор. 00:28:30 49 чел. ★ 5 Done
  На этом уроке мы наконец-таки создадим проект.
Установим Mysql DotNet Connector и начнём
создавать класс MySQL для подключения к базе данных.
Мы напишем конструктор и три метода.
Отчёт отправил: 8005. Александр Выполнено за 2 час. 00 мин. [Показать отчёт]
Научился: Мало того, что научился подключать бд в Студии и делать простейший запрос, также пришлось научиться создаать нового пользователя в Management Studio, разрешать удаленные подключения и прочее 
Сложности: Самое сложное было создать пользователя с паролем, который может подключиться к данному серверу хотя бы в той же Management Studio 
Комментарии: Классный урок. Вот она -вот она рыба моей мечты. Понял, что знать нужно очень много чтобы координировать работу БД и основной программы, пока гуглил множество вопросов для решения возникающих проблем. 
14 Класс MySQL. Получение таблицы. 00:23:55 47 чел. ★ 5 Done
  На этом уроке мы создадим ещё несколько полезных методов
в классе MySQL для считывания, изменения и добавления записей.
Отчёт отправил: 8005. Александр Выполнено за 40 мин. [Показать отчёт]
Научился: узнал о функциях получающих таблицу 
Сложности: в MS SQL у класса SqlCommand нет функции LastInsertedID(). Печаль - беда.примерно почитал как люди берут ID последней вставки , подделаю когда пойму для чего нам нужен будет этот самый ID. 
Комментарии: Не понял для чего нужна функции addslashes. Что она экранировать будет? 
15 Класс MySQL. Обработка ошибок. 00:13:22 46 чел. ★ 5 Done
  На этом уроке мы создадим функцию SqlError()
для удобной обработки ошибок во время тестирования.
Отчёт отправил: 8005. Александр Выполнено за 20 мин. [Показать отчёт]
Научился: узнал о таком удобном решении, на моменте отладки, да и не только отладки 
Сложности: ничего 
Комментарии: продолжаем 
16 Модульный тест 00:16:02 45 чел. ★ 5 Done
  На этом уроке мы создадим модульный тест (UnitTest)
для тестирования класса MySQL, который мы создали ранее.
В уроке приводится только знакомство, без полного покрытия
тестами нашего проекта, но в будущем мы к ним ещё вернёмся.
В комментариях необходимо написать,
использовал ли ты ранее модульные тесты.
Полезная ссылка: https://msdn.microsoft.com/ru-ru/library/hh694602.aspx
Отчёт отправил: 8005. Александр Выполнено за 20 мин. [Показать отчёт]
Научился: вспомнил простейшие знания о UnitTests. 
Сложности: ничего 
Комментарии: Двигаемся дальше 
17 Отображение таблицы 00:06:18 45 чел. ★ 5 Done
  На этом уроке мы визуализируем созданное,
через отображение в компоненте DataGridView.
Заголовки столбцов можно поменять двумя разными способами.
1. sql.Select("SELECT id as Nr, client as Surname FROM Client");
2. dataGridView1.Columns[0].HeaderText = "№";
Отчёт отправил: 8005. Александр Выполнено за 10 мин. [Показать отчёт]
Научился: научился выводить таблицу в датаГридВью 
Сложности: ничего 
Комментарии: Вот она крутотень. Короткий урок, но такой хорошей вещи учит. Всё таки хочется теперь чтоб мы могли редактировать поля в бд всё сохранялось.  
18 Модель. Класс Клиента 00:24:57 44 чел. ★ 5 Done
  На этом уроке мы наконец-таки начнём
создавать первый класс Бизнес Модели Отеля.
Это класс Model.Client, для подготовки которого
потребуется ещё некоторые вспомогательные работы.
Отчёт отправил: 8005. Александр Выполнено за 30 мин. [Показать отчёт]
Научился: получаю опыт в связывании SQL и С# 
Сложности: всё таки понять, для чего нужна AddSlashes 
Комментарии: Люди добрый посмотрите , кто разбирается, Валерий ты в тот раз откликался на мой вопрос про AddSlashes. НА скрине видно, что я добавил информацию , содержащую " ' ". В получившийся таблицу у нас эти самые кавычки разумеется заменились на слэши. Так и должно быть? у всех же будет меняться запись в БД если пользователь будет пытаться ввести строку с кавычкой одинарной ? И для поясните , кто может каким образом эта функция защищает от инъекции. Т.е. как пользователь может что-то нарушить. Заранее спасибо 
19 Модель. Всё про Клиента 00:35:00 43 чел. ★ 5 Done
  На этом уроке мы допишем класс Client.
Реализуем четыре метода и слегка потестируем их.
Написать свои впечатления о созданном классе модели.
Отчёт отправил: 8005. Александр Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: Опыт в работе С БД 
Сложности: придумать нормальную реализацию метода UpdateClient :) 
Комментарии: Сделал по-своему метод UpdateClient. Реагирует на изменение ячейки в датагридвью. По ячейке определяет ID клиента и новое значение. Эти данные передает в метод и происходит изменение. Я понимаю, что на данном этапе никак не задействованы свойства полей. Потом элементарные проверки добавлю обязательно. 
20 Модель - Календарный год 00:29:48 39 чел. ★ 5 Done
  На этом уроке мы начнём создавать модель календаря.
Поработаем с запросами, напишем метод InsertDays(int year).
Создадим тест для этого метода и немного доработаем класс тестов.
Отчёт отправил: 8005. Александр Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: практика в работе бд и с# 
Сложности: нет в Transact - SQL оператора IGNORE. Не доделывает майкрософт почему то такие мелочи. Пришлось сделать сначала запрос на содержание текущего дня в таблице и только потом его добавление 
Комментарии: продолжаем 
21 Модель - Календарные праздники 00:20:00 37 чел. ★ 5 Done
  На этом уроке мы добавим в модель календаря методы
для создания дней, пометки их праздничными/обычными.
Также добавим ещё несколько тестов, чтобы они представляли
из себя логически завершённую последовательность
для тестирования календаря.
Отчёт отправил: 8005. Александр Выполнено за 30 мин. [Показать отчёт]
Научился: опыт в написании запросов, юнит тестов 
Сложности: ничего 
Комментарии: Тесты - классная штука.  
22 Модель. Класс комнаты 00:16:39 37 чел. ★ 5 Done
  На этом уроке мы создадим модель на комнат, класс Room.
Чтобы сделать это быстро - мы воспользуемся заготовками
из класса Client.cs. В этом уроке мы не пишем тестов,
поэтому класс создали в рекордно короткое время, 15 мин.
Однако, создание тестов никто не отменял - это самостоятельное задание.
Отчёт отправил: 8005. Александр Выполнено за 50 мин. [Показать отчёт]
Научился: в этом уроке всё таки пришлось разобраться и найти аналог LastInsertedID() MySQL. Если мы хотим получить айдишник последней вставки нужно сделать такой - SELECT @@IDENTITY или такой - SELECT SCOPE_IDENTITY() запрос 
Сложности: придумать как можно сделать unit test на вставку данных попроще, ведь мы портачим инкремент в таблице Room тестовыми добавлениями комнат 
Комментарии: двигаемся дальше 
23 Модель. Удаление комнат. 00:14:41 35 чел. ★ 4.9 Done
  На этом уроке мы добавим метод для удаления комнат.
Исправим логическую ошибку метода Update в классах Room и Client.
Подготовим функцию для теста созданного класса.
Рекомендую эти тесты создать самостоятельно.
Отчёт отправил: 8005. Александр Выполнено за 30 мин. [Показать отчёт]
Научился: на этот раз точно запомнил как сбивать автоинкремент в MS SQL 
Сложности: ничего 
Комментарии: сделал совокупный тест, который добавляет комнату, выбирает в таблице комнат ID по номеру комнаты и Step по номеру комнаты. Сравнивает их на равенство. После Этого удаляет эту комнату и Воззвращает счетчик автоинкремента в нормальное положение 
24 Модель. Тестирование комнат. 00:30:31 32 чел. ★ 5 Done
  На этом уроке мы создадим TestRoom() для класса Room.
Это будет одна функция, в которой мы последовательно
будем вызывать все методы класса Room и проверять,
на сколько правильно и корректно они отработали.
В конце урока мы выполним тест пошагово.
Отчёт отправил: 8005. Александр Выполнено за 30 мин. [Показать отчёт]
Научился: практика в написании тестов 
Сложности: ничего 
Комментарии: Добавил в тест проверку на удаление. На редактирование информации проверял также как и с клиентами. Вывод информации в таблице по кнопке, и возможность переписывать поля в таблице сразу с сохранением, кроме автоинкремента. Он кстати сам блокируется, что очень круто 
25 Модель. Бронирование. 00:29:40 32 чел. ★ 5 Done
  На этом уроке мы посмотрим картинки красивых комнат.
И начнём создавать модуль бронирования Book.
Создадим конструктор, методы InsertBook(),
SelectBook() и UpdateBook().
В конце поговорим о том, что нужно отдыхать ДО того, как устанешь.
Отчёт отправил: 8005. Александр Выполнено за 1 час. 30 мин. [Показать отчёт]
Научился: практика в работе бд с С# 
Сложности: как то всё подзапуталось, с входными переменными у некоторых методов, вовзращаемыми значениями. Думаю всё встанет на свои места , когда появится интерфейс и станет понятно, каким образом мы будем добавлять новые записи, как будет происходить редактирование и что вообще можно будет редактировать 
Комментарии: продолжаем 
26 Модель. Статусы заказов. 00:14:52 31 чел. ★ 5 Done
  На этом уроке мы поговорим о статусах заказа.
Создадим методы изменения статуса и дней заезда/выезда.
Отчёт отправил: 8005. Александр Выполнено за 20 мин. [Показать отчёт]
Научился: практика в написании запросов 
Сложности: ничего 
Комментарии: Нужно еще проверять даты, чтоб к примеру From_day не было позже Till_Day. Book_Date сюда же 
27 Модель. Список заказов. 00:13:17 30 чел. ★ 5 Done
  На этом уроке мы допишем два последних метода в класс Book.
Методы для получения списка заказов по фильтру и без.
В конце урока выведем результаты в грид,
чтобы убедиться, что код работает.
Отчёт отправил: 8005. Александр Выполнено за 20 мин. [Показать отчёт]
Научился: практика в написании запросов 
Сложности: ничего 
Комментарии: два этих метода были уже написаны имною на прошлых уроках. Переделал их с соединением таблицы Clinet и добавлением поля Client в результирующий набор 
28 Модель. Карта отеля 1 00:22:41 29 чел. ★ 5 Done
  На этом уроке мы начнём создавать модель управления комнатами.
Пока мы создадим только конструктор, поля и метод
void SelectMap (long room_id, long book_id, DateTime calendar_day)
Отчёт отправил: 8005. Александр Выполнено за 25 мин. [Показать отчёт]
Научился: практика в написании запросов 
Сложности: ничего 
Комментарии: продолжаем 
29 Модель. Карта отеля 2 00:18:56 29 чел. ★ 5 Done
  На этом уроке мы создадим методы InsertMap() и InsertMapNone().
Также добавим в класс MySQL метод DateToString()
и пробежимся по всему проекту, убирая yyyy-MM-dd.
Отчёт отправил: 8005. Александр Выполнено за 30 мин. [Показать отчёт]
Научился: практика в написании запросов 
Сложности: ничего 
Комментарии: продолжаем 
30 Модель. Карта отеля 3 00:16:56 29 чел. ★ 5 Done
  На этом уроке мы создадим оставшиеся методы класса Map:
SelectMap(), UpdateMap() и DeleteMap().
Пока без тестирования.
Отчёт отправил: 8005. Александр Выполнено за 20 мин. [Показать отчёт]
Научился: практика в написании запросов 
Сложности: ничего 
Комментарии: для меня всё под конец модели запуталось. Нужен интерфейс управления, чтобы разобраться. но ничего скоро 
31 Вид. Список форм. 00:12:00 18 чел. ★ 4.9 Done
  На этом уроке мы приступаем к следующему этапу создания программы - Представления (вид). Наша задача - составить список форм, которые будут в проекте, и для каждой формы нарисовать, как она будет выглядеть.
Отчёт отправил: 8005. Александр Выполнено за 1 час. 00 мин. [Показать отчёт]
Научился: продумывать интерфейс. что потребуется для управления программой 
Сложности: таблица map. как наиболее легко добавить туда запись. Да и таблица новой резервации тоже. Знать ID клиента не очень удобно. Логичнее всего , конечно к примеру нажать на кллиенте и в выпадающем меню повесить на него новую бронь. Главное начать рисовать, всё дорисуется само потом 
Комментарии: Ждём след. уроков 
  Итого:   31 видеоурок общей продолжительностью 10 час. 16 мин. 16 чел. ★ 4.97  
  Финалисты:   Денис,   Иван,   Николай Миролюбов,   Валентин,   Кирилл Шмойлов,   Frank,   Rita,   Ludmila,   Станислав,   Сергей Зулкарнаев,   kalobyte,   Tekashnik,   egresr,   Новопашин Владимир,   Роман,   Yefim .

Начинаем практику по языку C#




Чтобы стать хорошим программистом — нужно писать программы. На нашем сайте очень много практических упражнений.

После заполнения формы ты будешь подписан на рассылку «C# Вебинары и Видеоуроки», у тебя появится доступ к видеоурокам и консольным задачам.

Несколько раз в неделю тебе будут приходить письма — приглашения на вебинары, информация об акциях и скидках, полезная информация по C#.

Ты в любой момент сможешь отписаться от рассылки.
Я бы добавил следующие функции: Клиент: - добавление нового клиента - удаление клиента - редактирование клиента - поиск в клиентах - выгрузка списка клиентов для почтовой рассылки - выгрузка клиентов для рассылки смс по акциям - получение списка клиента по фильтрам и без фильтра Комнаты: - добавление, удаление и редактирование комнат; - поиск комнат по фильтру; - получение списка свободных комнат; - общий план комнат; Календарь - добавление, редактирование и удаление календарных дней; - получение списка дней в году; - получение списка праздничных и выходных дней; Книга клиента: - добавление, удаление и редактирование дат заезда клиентов; - получение списка активных клиентов; Карта -Добавление, удаление и редактирование занятости жилищного фонда.
Научился: повторил уже пройденное
все уже сделал, так как этот урок был задан в дз на предыдущем.