Использование STL. Часть первая.

Стандартная библиотека С++ и ее достаточно важная часть стандартная библиотека шаблонов призвана выполнять две основные задачи. Прежде всего – это набор стандартных типов данных и функций готовых к употреблению. И в тоже время – это среда разработки для создания и сохранения новых библиотечных компонентов.
Стандартная библиотека С++ в действительности состоит из 10 небольших библиотек:

  1. Библиотека языковой поддержки, которая содержит типы и функции, непосредственно связанные с работой компилятора С++. В частности сюда входят константы, определяющие диапазоны и уровень точности вычислений.
  2. Библиотека диагностики, содержит классы исключений и сообщения о ошибках
  3. Библиотека общего пользования, содержит большой набор средств, которые трудно отнести к какой нибудь специализированной библиотеке.
  4. Библиотека строк, содержит средства манипулирования текстовыми строками
  5. Библиотека локализаций – содержит наборы национальных и международных символов и форматов, необходимых для работы с датами, временем и валютой.
  6. Библиотека контейнеров.
  7. Библиотека итераторов.
  8. Библиотека алгоритмов.
  9. Библиотека чисел – представляет пользователям средства для работы с комплексными числами, специальные числовые массивы и алгоритмы вычислений.
  10. Библиотека ввода-вывода.

В данном цикле статей все части стандартной библиотеки мы охватить не сможем. Мы будем работать с библиотекой строк, контейнеров, итераторов, алгоритмов и библиотекой ввода-вывода.
В качестве цели мы будем разрабатывать маленькую электронную записную книжку(SmallPIM – Small Personal Information Meneger). В данной статье мы рассмотрим основные вопросы связанные с формулированием требований к проекту, следующая статье мы рассмотрим планирование классов – а написание кода – это будет уже темой следующей статьи.

Объектно-ориентированный анализ проекта

Формулирование требований

  1. Программа должна объединять в себе возможности адресной книги и календаря контактов. Адресная книга позволит пользователям сохранять и редактировать адреса и номера телефонов, просматривать и выбирать записи по именам, а так же осуществлять простой поиск записи по ключевому слову. Пользователь должен иметь возможность выбирать запись из общего списка и открывать ее для просмотра и редактирования.
  2. Календарь контактов позволит пользователям записывать и редактировать свединия о деловых контактах и событиях в хронологической последовательности. Нужно позволить просматривать список событий по месяцам, неделям и дням. В любом режиме просмотра пользователь должен иметь возможность выбрать запись и открыть ее для просмотра или редактирования
  3. Первая версия программы реализует работу через командную строку
  4. Первая версия программы сохраняет данные в файл в собственном формате.
  5. Программа должна иметь возможность дальнейшей модернизации:
    • заменить интерфейс командной строки на графический или веб;
    • добавить дополнительные функции обработки списков данных;
    • добавить дополнительные функции по работе со временем.
  6. Программа будет создаваться в первую очередь с целью демонстрации различных возможностей стандартной библиотеки.

Анализ ситуаций использования

Ситуации ввода данных

  1. Пользователь хочет ввести новую запись адреса. Программа предлагает ввести ФИО, номер телефона, емайл, адрес. Обязательным является только ввод имени – все остальные данные пользователь вводит по желанию.
  2. Пользователь хочет изменить запись. Для этого он должен выбрать ее либо из списка, либо найти в поиске, после чего получает возможность изменить данные в любом из полей
  3. Пользователь хочет удалить запись. Для этого пользователь выбирает запись из списка, либо при помощи функции поиска и дает команду на удаление.
  4. Пользователь хочет создать контакт. Программа предлагает ввести конечную и начальную даты, а так же описание. Обязателен клонтроль времени – конечная дата не может быть меньше или раной начальной.
  5. Пользователь хочет изменить контакт. Для этого он выбирает его из списка или при помощи поиска и дает команду для редактирования. Обязателен контроль времени.
  6. Пользователь хочет удалить контакт. Для этого он выбирает его из списка или при помощи поиска и дает команду на удаление.

Ситуации поиска и отображения записей

  1. Пользователь хочет найти одну или несколько записей по имени или фамилии. Программа предлагает ввести имя (допускается частичный ввод)и/или фамилию. Если точное соотвествие не обнаружено, программа должна возвратить список записей для выбора пользователем, имена которых начинаются с введеной пользователем комбинации букв. Если несколько записей сосуществуют критерию – все они должны быть выведены.
  2. Пользователь хочет найти запись содержащую ключевое слово (комбинацию слов). Программа должна возвратить все записи соотвествующие критерию.
  3. Пользователь хочет просмотреть все контакты, назначенные на определенный день. Программа должна возвратить первые строки описаний всех контактов соответствующих указанной дате.
  4. Пользователь хочет просмотреть все контакты назначенные на определенную неделю. Программа должна возвратить первые строки описаний всех контактов соответствующих указанной дате.
  5. Пользователь хочет просмотреть на какие дни месяца у него назначены контакты. Программа должна возвратить календарь, в котором дни с контактами отмечены особым образом.
  6. Пользователь хочет посмотреть назначенные контакты на следующий день или следующую неделю. Программа должна обеспечить возможность быстрого возвращения подобной информации в хронологическом порядке с выводом первых строк описаний назначенных контактов.
  7. Пользователь хочет просмотреть все контакты назначенные им на некоторый промежуток времени. Программа должна предоставить возможность пользователю указать временной диапазон в днях, неделях или месяцах для возвращения всех соответствующих записей в хронологической последовательности.

Ситуации возникновения ошибок

  1. Пользователь ошибочно ввел запись с одинаковым именем и фамилией. Программа должна предупредить пользователя о существовании подобной записи и пердложить подтвердить ввод или отменить его.
  2. Пользователь пытается ввести контакт с временем начала раньше текущего. Программа должна предупредить его о этом.
  3. Пользователь пытается ввести контакт с временем окончания раньше времени начала. Программа должна предложить изменить время или отменить ввод.

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

(с)2009 Константин Малахов. При перепечатке ссылка на ресурс обязательна.