Разработка справочника лекарственных препаратов аптекоуправления

Особенность использования баз данных в написании программы в среде визуального программирования BorlandC++ Builder 6.0. Исследование работы с файлами в реляционной модели. Анализ механизмов доступа приложения. Характеристика тестирования проекта.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 09.12.2017
Размер файла 2,3 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

Размещено на http://www.allbest.ru/

Минобрнауки России

«Юго-Западный государственный университет»

Кафедра Информационные системы и технологии

КУРСОВАЯ РАБОТА

по дисциплине Визуальное программирование

на тему «Справочник лекарственных препаратов аптекоуправления»

Автор работы

К.А. Редникова

Руководитель работы

Т.И.Лапина

Курск 2017 г

Минобрнауки России

«Юго-Западный государственный университет»

Кафедра Информационные системы и технологии

ЗАДАНИЕ НА КУРСОВУЮ РАБОТУ

Студентки Редниковой К.А. шифр 09.03.02 группа ИС-61б (фамилия, инициалы)

1.Тема "Справочник лекарственных препаратов аптекоуправления»"

2. Срок представления работы к защите «____» _________ 2017г.

3.Исходные данные: Разработать прикладную программу, позволяющую получать справки о наличии лекарственных препаратов в аптеках г. Курска и реализовать ее в среде BorlandC++ Builder.

4. Содержание работы (по разделам):

4.1. Введение

4.2.Анализ задач разработки средств информационного обеспечения

4.3 Выбор метода решения задачи

4.4 Организация данных приложения

4.3.Разработка форм и модулей приложения для автоматизации задачи: в работе должны быть представлены разработанные: модель базы данных, структура таблиц базы данных, схема базы данных, структура запросов на выборку информации из базы данных, пользовательские формы и формы запросов приложения, отчеты.

4.5. Тестирование приложения

4.6. Заключение

4.7. Список использованных источников

4.8. Приложения

Руководитель работы _____Т.И. Лапина (подпись, дата) (инициалы, фамилия)

Задание принял к исполнению _______________ (подпись, дата) (инициалы, фамилия) Минобрнауки России

«Юго-Западный государственный университет»

Кафедра Информационные системы и технологии

РЕЦЕНЗИЯ

на курсовую работу

Студентки Редниковой Карины Алексеевны группа ИС-61б

Направление 09.03.02 Информационные системы и технологии

Тема: «Справочник лекарственных препаратов аптекоуправления»

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

Курсовая работа написана грамотным литературным языком, автор свободно оперирует специфическими терминами, что говорит о владении темой. В оглавлении можно ознакомиться со всеми вопросами, представленными в работе. Теоретическая часть содержит основные аспекты, которые необходимо учитывать при разработке данного приложения. Практическая часть также способствует всем требованиям - создана база данных и разработано приложение для работы в ней. Внимания заслуживает и красивый интерфейс приложения.

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

Рецензент ___________________ доцент Лапина Т.И.

Минобрнауки России

«Юго-Западный государственный университет»

Кафедра Информационные системы и технологии

ОТЗЫВ

на курсовую работу

Студентки Редниковой Карины Алексеевны группа ИС-31б

Направление 09.03.02 Информационные системы и технологии

Тема: «Справочник лекарственных препаратов аптекоуправления»

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

В курсовой работе автору была поставлена задача создать справочник лекарственных препаратов аптекоуправления. Для достижения поставленной цели автором в работе выполнены следующие задачи: проведен системный анализ заданной предметной области, построена реляционная модель, создана база данных, разработано приложение для работы с базой данных. Функции приложение, оговоренные заданием на курсовую работу, выполнены. В процессе выполнения работы автор показал творческий подход к выполнению задания, умение самостоятельно решать возникающие задачи, работать с литературой и другими источниками, добросовестность и своевременность при выполнении этапов курсового проектирования. Курсовая работа заслуживает оценки « » и может быть представлена к защите.

Руководитель работы доцент кафедры ИСиТ ___________________ к.т.н., доцент Т.И.Лапина

Содержание

Введение

1. Теоретическая часть

1.1 Основы создания программы на BuilderC++

1.2 Компоненты Standard

1.3 События

1.4 Методы

1.5 Создание приложений в С++ Builder

1.6 Работа с файлами базы данных в C++Builder

2. Проектирование базы данных

2.1 Создание базы данных

2.2 Схема данных

3. Программная реализация приложения

3.1 Структура проекта

3.2 Разработка форм приложения

4. Тестирование программы

Заключение

Список использованных источников

Приложение

Введение

Программирование представляет собой такое понятие, которое для большинства людей не имеет абсолютно никакого значения. Конечно, практически каждый человек слышал это слово, но при этом многие даже не представляют себе, чем оно является.

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

Информационные технологии занимают все более значимую роль в человеческом обществе. Они проникли во все сферы деятельности. Для обслуживания общественных потребностей в автоматизации труда, хранения данных, связи и др.

В связи с этим развиваются языки программирования. Если раньше они использовались лишь для создания программ для автоматизации вычислительных процессов, то на сегодняшний день они используются для решения более разнообразных задач.

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

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

Следует также отметить и развитие языков программирования в сторону спецификации, когда определенные языки наиболее пригодны для решения узкого класса задач.

Еще одной особенностью является уход от очевидной формализации. Если первые языки отличались ярко выраженной формальностью, то с появлением объектно-ориентированного и логического подходов формальность перестала быть так уж очевидной

Объектно-ориентированный подход в последнее десятилетие стал одним из наиболее интенсивно развивающихся направлений программирования и наиболее популярным средством разработки программного обеспечения.

Язык Simula 67, который был разработан в конце 60-х годов в Норвегии, положил начало объектно-ориентированному походу в программировании. Этот язык намного опередил свое время, поэтому программисты 60-х годов оказались не готовы воспринять ценности языка Simula 67, и он не выдержал конкуренции с другими языками программирования (прежде всего, с языком Fortan).

В 70-е годы было разработано большое число экспериментальных объектно-ориентированных языков программирования: например, языки CLU, Alphard, ConcurrentPascal и др. Эти языки так и остались экспериментальными, но в результате их исследования были разработаны современные объектно-ориентированные языки программирования.

Наиболее распространенным объектно-ориентированным языком программирования является язык С++ [1,6,8]. Он возник на базе соединения языков С и Simula. С++ был разработан в начале 80-х годов Бьерном Страуструпом, который являлся сотрудником компании AT&T. Все эти годы язык интенсивно развивался, и, наконец, в августе 1998 года был принят международный стандарт языка С++.

С 1995 года стал широко распространяться объектно-ориентированный язык программирования Jawa, ориентированный на сети компьютеров и, прежде всего, на Internet.

В настоящее время компанией Microsoft разрабатывается новый объектно-ориентированный язык программирования C# (С Sharp), который во многом базируется на языке С++ и также ориентирован на разработку Internet-приложений.

По мнению Алана Кея, создателя языка Smalltalk, которого считают одним из «отцов-основателей» ООП, объектно-ориентированный подход заключается в следующем наборе основных принципов (цитируется по вышеупомянутой книге Т. Бадда).

- Всё является объектом.

- Вычисления осуществляются путём взаимодействия (обмена данными) между объектами, при котором один объект требует, чтобы другой объект выполнил некоторое действие. Объекты взаимодействуют, посылая и получая сообщения. Сообщение -- это запрос на выполнение действия, дополненный набором аргументов, которые могут понадобиться при выполнении действия.

- Каждый объект имеет независимую память, которая состоит из других объектов.

- Каждый объект является представителем класса, который выражает общие свойства объектов (таких, как целые числа или списки).

- В классе задаётся поведение (функциональность) объекта. Тем самым все объекты, которые являются экземплярами одного класса, могут выполнять одни и те же действия.

- Классы организованы в единую древовидную структуру с общим корнем, называемую иерархией наследования. Память и поведение, связанное с экземплярами определённого класса, автоматически доступны любому классу, расположенному ниже в иерархическом дереве.

При объектно-ориентированном подходе модель представляет собой модель некоторого реального процесса, которая содержит не все признаки и свойства, представляемой ею части реального мира, а только те, которые существенны для разрабатываемой программной системы. Также модель реального мира или его части может быть описана как совокупность взаимодействующих между собой объектов.

1. Теоретическая часть

1.1 Основы создания программы на BuilderC++

Borland C++ Builder - выпущенное недавно компанией Borland средство быстрой разработки приложений, позволяющее создавать приложения на языке C++, используя при этом среду разработки и библиотеку компонентов Delphi.

C++ Builder представляет собой SDI-приложение, главное окно которого содержит настраиваемую инструментальную панель (слева) и палитру компонентов (справа). Помимо этого, по умолчанию при запуске C++ Builder появляются окно инспектора объектов (слева) и форма нового приложения (справа). Под окном формы приложения находится окно редактора кода.

Риcунок 1 - Среда разработки C++ Builder

Формы являются основой приложений C++ Builder. Создание пользовательского интерфейса приложения заключается в добавлении в окно формы элементов объектов C++ Builder, называемых компонентами. Компоненты C++ Builder располагаются на палитре компонентов, выполненной в виде многостраничного блокнота. Важная особенность C++ Builder состоит в том, что он позволяет создавать собственные компоненты и настраивать палитру компонентов, а также создавать различные версии палитры компонентов для разных проектов.

1.2 Компоненты Standard

На этой вкладке располагаются компоненты (рис. 18.1), с помощью которых происходит подключение к программе стандартных интерфейсных элементов, имеющихся во всех версиях операционных систем Windows. Рассмотрим эти компоненты по порядку слева направо.
? Frame (Кадр) -- предназначен для создания контейнера (окна) для размещения других компонентов. Данный компонент очень похож на форму Form. Для размещения этого компонента на форме необходимо первый раз создать его с помощью команд File | New | Frame. Именно такое сообщение появляется при попытке размещения этого компонента стандартным образом (рис. 18.2).

Рисунок 2 - Палитра компонентов Standard

Рисунок 3 - Сообщение об ошибке размещения компонента Frame

Дело в том, что компонент Frame первый раз должен быть сконструирован через главное меню, поскольку является сложным компонентом. После его создания, или создания нескольких таких компонентов, можно пользоваться стандартным способом размещения их на форме путем выбора имеющихся фреймов в раскрывающемся списке. Для практики создайте компонент Frame2 с помощью команды File | New | Frame, а затем перейдите на форму и щелкните дважды по компоненту Frames на вкладке Standard панели визуальных компонентов. Перед вами должно открыться окно (рис. 18.3), из которого можно выбрать компонент Frame2.

Рисунок 4 - Окно выбора компонента Frame

? MainMenu (Главное меню) -- предназначен для создания главного меню программы. С этим и другими компонентами мы познакомимся поближе в процессе создания новых программ.

? PopupMenu (Всплывающее меню) -- предназначен для создания всплывающего меню некоторых компонентов. Обычно с помощью этого ком-понента создается контекстное меню.

? Label (Этикетка) -- создает на форме текстовую метку или надпись.

? Edit (Редактирование) -- создает на форме поле для редактирования тек-стовой строки.

? Memo (Поле) -- отображает на форме поле для редактирования текстовых строк. Обычно служит для создания редакторов и полей для вывода блоков данных.

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

? CheckBox (Ячейка состояния) -- позволяет создавать на форме приложения ячейку с двумя состояниями (без галочки и с галочкой) и строкой названия. Щелчок левой кнопкой мыши по этому компоненту во время работы программы вызывает изменение состояния компонента на противоположное. В программе всегда можно узнать состояние этого компонента и тем самым выполнять то или иное действие.

? RadioButton (Радиокнопка) -- создает круглое поле с двумя состояниями (с точкой и без точки) и текстовой строкой, поясняющей ее назначение в программе. Обычно несколько таких компонентов, расположенных на форме, позволяют переключить только один элемент из группы. Для наглядности сказанного и закрепления материала на практике создайте новое приложение и расположите на форме несколько компонентов RadioButton. После чего запустите приложение на выполнение и пощелкайте левой кнопкой мыши поочередно по каждому из них. Вы увидите, что можно изменить состояние только для одного из этих компонентов, так как остальные компоненты переключают при этом свое состояние автоматически.

? ListBox (Окно списка) -- создает прямоугольное поле для отображения текстовых строк с возможностью их выбора, добавления или удаления при работе программы.

? ComboBox (Комбинированный список) -- позволяет создавать на форме элемент, являющийся комбинацией строки ввода и выпадающего списка для выбора. Фактически объединяет в себе компоненты ListBox и Edit.

? ScrollBar (Линейка прокрутки) -- создает элемент, похожий на линейку с бегунком и кнопками для прокрутки окна, к которому относится этот элемент. Кроме того, с его помощью можно изменять в пределах некоторого заданного интервала значение величины какого-либо параметра.

? GroupBox (Окно группы) -- служит для создания области, визуально объединяющей на форме несколько интерфейсных элементов.

? RadioGroup (Группа радиокнопок) -- позволяет создавать на форме контейнер в виде прямоугольной рамки для объединения группы взаимоисключающих радиокнопок.

? Panel (Панель) -- создает пустую область, на которой можно разместить другие компоненты. Как правило, используется для создания панели инструментов в программе.

? ActionList (Список действий) -- осуществляет управление взаимодействием между интерфейсными элементами и логикой программы.

Рисунок 5 - Окно формы с компонентами

1.3 События

Страница событий (Events) инспектора объектов показывает список событий, распознаваемых компонентом (программирование для операционных систем с графическим пользовательским интерфейсом, в частности, для Windows 95 или Windows NT предполагает описание реакции приложения на те или иные события, а сама операционная система занимается постоянным опросом компьютера с целью выявления наступления какого-либо события). Каждый компонент имеет свой собственный набор обработчиков событий. В C++ Builder следует писать функции, называемые обработчиками событий, и связывать события с этими функциями. Создавая обработчик того или и ого события, вы поручаете программе выполнить написанную функцию, если это событие произойдет.

Для того, чтобы добавить обработчик событий, нужно выбрать на форме с помощью мыши компонент, которому необходим обработчик событий, затем открыть страницу событий инспектора объектов и дважды щелкнуть левой клавишей мыши на колонке з ачений рядом с событием, чтобы заставить C++ Builder сгенерировать прототип обработчика событий и показать его в редакторе кода. При этом автоматически генерируется текст пустой функции, и редактор открывается в том месте, где следует вводить код. Курсор позиционируется внутри операторных скобок { ... }. Далее нужно ввести код, который должен выполняться при наступлении события. Обработчик событий может иметь параметры, которые указываются после имени функции в круглых скобках.

Рисунок 6 - Прототип обработчика событий.

1.4 Методы

Метод является функцией, которая связана с компонентом, и которая объявляется как часть объекта. Создавая обработчики событий, можно вызывать методы, используя следующую нотацию: ->, например:

Edit1->Show();

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

1.5 Создание приложений в С++ Builder

Первым шагом в разработке приложения C++ Builder является создание проекта. Файлы проекта содержат сгенерированный автоматически исходный текст, который становится частью приложения, когда оно скомпилировано и подготовлено к выполнению. Чтобы создать новый проект, нужно выбрать пункт меню File/NewApplication.

Рисунок 7 - Файл проекта

C++ Builder создает файл проекта с именем по умолчанию Project1.cpp, а также make-файл с именем по умолчанию Project1.mak. При внесении изменений в проект, таких, как добавление новой формы, C++ Builder обновляет файл проекта.

Проект или приложение обычно имеют несколько форм. Добавление формы к проекту создает следующие дополнительные файлы:

· Файл формы с расширением.DFM, содержащий информацию о ресурсах окон для конструирования формы

· Файл модуля с расширением.CPP, содержащий код на C++.

· Заголовочный файл с расширением .H, содержащий описание класса формы.

Для того, чтобы просто откомпилировать текущий проект, из меню Compileнужно выбрать пункт меню Compile . Для тогоч, чтобы откомпилировать проект и создать исполняемый файл для текущего проекта, из меню Runнужно выбрать пункт меню Run.Компоновка проекта является инкрементной (перекомпилируются только изменившиеся модули).

Если для выполнения приложения возникает ошибка времени выполнения, C++ Builderделает паузу в выполнении программы и являющимся источником ошибки. Прежде чем делать необходимую коррекцию, следует перезапустить приложение, выбирая пункт меню Run из контектстного меню или из меню Run, закрыть приложение и лишь затем вносить изменения в проект. В этом случае уменьшается вероятность потери ресурсов Windows. [ Виктор Алексанкин, Наталия Елманова, Компьютер-Пресс, 2007, N 4. ].

1.6 Работа с файлами базы данных в C++Builder

Механизмы доступа приложения

Одно- и двухуровневые приложения в C++ Builder могут осуществлять доступ к локальным и удаленным БД с использованием следующих механизмов :

1) BDE (BorlandDatabaseEngine) - процессор баз данных фирмы Borland), представляющий развитый интерфейс API для взаимодействия с базами данных ;

2) ADO (ActiveXDataObjects - объекты данных ActiveX) осуществляет доступ к информации с помощью OLE DB (Object Linking and Embedding Data Base - связываниеивнедрениеобъектовбазданых) ;

a) dbExpress обеспечивает быстрый доступ к информации в базах данных с помощью набора драйверов;

b) InterBaseExpress реализует непосредственный доступ к базам данных сервера InterBase.

Варианты архитектуры для BDE

Локальные БД располагаются на том же компьютере, что и работающие с ними приложения. В этом случае говорят, что информационная система имеет локальную архитектуру. Работа с БД происходит, как правило, в однопользовательском режиме. При необходимости можно запустить на компьютере другое приложение, одновременно осуществляющее доступ к этим же данным. Для управления совместным доступом к БД необходимы специальные средства контроля и защиты. Эти средства могут понадобиться, например, в случае, когда приложение пытается изменить запись, которую редактирует другое приложение. Каждая разновидность БД осуществляет подобный контроль своими способами и обычно имеет встроенные средства разграничения доступа.

Для доступа к локальной БД процессор баз данных BDE использует стандартные драйверы, которые позволяют работать с форматами БД dBase, Paradox, FoxPro, а также с текстовыми файлами.

При использовании локальной БД в сети можно организовать многопользовательский доступ. В этом случае файлы БД и предназначенное для работы с ней приложение располагаются на сервере сети. Каждый пользователь запускает со своего компьютера это расположенное на сервере приложение, при этом у него запускается копия приложения. Такой сетевой вариант использования локальной БД соответствует архитектуре «файл-сервер». Приложение при использовании архитектуры «файл-сервер» также может быть записано на каждый компьютер сети, в этом случае приложению отдельного компьютера должно быть известно местонахождение общей БД.

При работе с данными на каждом пользовательском компьютере сети используется локальная копия БД. Эта копия периодически обновляется данными, содержащимися в БД на сервере.

Архитектура «файл-сервер» обычно применяется в сетях с небольшим количеством пользователей, для ее реализации подходят персональные СУБД, например, Paradox или dBase. Достоинствами этой архитектуры являются простота реализации, а также то, что приложение фактически разрабатывается в расчете на одного пользователя и не зависит от компьютера сети, на который оно устанавливается.

2. Проектирование базы данных

2.1 Создание базы данных

Для создания данное базы данных использовалось приложение MSAccess. Оно имеет широкий спектр функций, включая связанные запросы, связь с внешними таблицами и базами данных. Благодаря встроенному языку VBA, в самом Access можно писать приложение, работающие с базами данных. Данная база данных представлена на рис. 7.

2.2 Схема данных

Схема данных - объединенная по ключевым полям таблица, которая обеспечивает связь и целостность данных при их редактировании, добавлении и удалении. Схема данных данного курсового проекта представлена на рис. 8.

Рисунок 8 - Схема данных

3. Программная реализация приложения

В качестве среды реализации для программы «Справочник лекарственных препаратов аптекоуправления» была выбрана среда BorlandC++ Builder-как средство визуального программирования. Это обстоятельство является одним из основных преимуществ C++ Builder.

C++ Builder предлагает мощный инструментарий для создания интерфейса пользователя. Ни одно из инструментальных средств предыдущих поколений не представляло столь широких возможностей, и такого уровня удобства для программиста, как C++ Builder. Среда C++ Builder - это сложный механизм, обеспечивающий высокоэффективную работу программиста. Визуально она реализуется несколькими одновременно раскрытыми на экране окнами.

BorlandC++ BuilderотноситсякклассуRAD - систем (RapidApplicationDevelopment) - среда быстрой разработки приложений. Ядром визуальных средств программирования C++ Builder является VisualComponentLibrary (VCL) -объектно-ориентированная библиотека компонентов, предназначенная для создания пользовательского интерфейса и доступа к системным ресурсам как операционной системы ( DOS), так и графической оболочки (Windows), а также для работы с БД.

3.1 Структура проекта

Рисунок 9 - Структура проекта

Структура проекта «Справочник лекарственных препаратов аптекоуправления» представлена на рисунке 9.

3.2 Разработка форм приложения

Главная форма

С вкладки Data Access компонент DataSource. С вкладки Data Controls компоненты DBGrid и DBNavigator.

Щелкаем по DataSource1 ивDataSetвыбираем ADOTable1. Щелкаемпо ADOTable1 и в свойстве Connection выбираем ADOConnection1.Дважды щелкаем по ADOConnection1 и нажимаем кнопку Build...

Рисунок 10 - Свойства канала передачи данных (поставщик данных)

Выбираем как на картинке и нажимаем "Далее". И нажимаем "Ок".

Рисунок 11 - Свойства канала передачи данных (соединение)

Теперь, в ObjectInspector ставим Connected в true, в UserNameнапишем "Admin", поле пароля оставим пустым.

Чтобы больше не повторять эту процедуру, установите LoginPrompt в false.

Щелкаем по DBGrid и в DataSource выбираем DataSource1. Тоже самое повторяем и для DBNavigator.

Щелкаем по ADOTable1 в TableName выбираем нашу таблицу. Устанавливаем Active в true.

Результат показан на рисунке 12.

Рисунок 12 - База данных

Щелкаем дважды по DBGrid, в появившемся окошечке нажимаем на кнопку "AddAllFields".

Щелкая по полям,можно задать им другие имена для отображения, свойство FieldName и изменить ширину - Width.

Добавим на форму 6 кнопок Button, 1 кнопку BitBtn и компонентRichEdit1. (Рис. 13. )

В обрабочик события OnCellClick (щелчок по ячейке) DBGrid пишем следующий код:

void __fastcall TForm1::DBGrid1CellClick(TColumn *Column)

{

if(!(TBlobField*)ADOTable1->FieldByName("Description")->IsNull){

TMemoryStream* strm = new TMemoryStream;

((TGraphicField*)ADOTable1->FieldByName("Description"))->SaveToStream(strm);

strm->Seek(0,0);

RichEdit1->Lines->LoadFromStream(strm);

deletestrm;

Edit1->Text = ADOTable1->FieldByName("Code")->AsString;

Edit2->Text = ADOTable1->FieldByName("Name of the medicine")->AsString;

Edit3->Text = ADOTable1->FieldByName("Rresence")->AsString;

Edit4->Text = ADOTable1->FieldByName("Cost")->AsString;

}

Рисунок 13 - Форма после добавления некоторых компонентов

Далее выбираем компонент Image, выбираем свойство Stretch и там выбираем trye. Данное свойство поможет картинке растягиваться вместе с компонентом Image. Нажав на свойство Picture выберем картинку и растянем ее. Результат приведен на рисунке 14 .

Организуем сортировку лекарственных препаратов. Для этого расположим компонент ввода и нажмем на кнопку «Сортировка». Свяжем их в тексте приложения. Для этого два раза нажмем на кнопку и введем код.

Рисунок 14 - Главная форма приложения

void __fastcall TForm1::Button1Click(TObject *Sender)

{

if( !Form2->Visible )

Form2->Show();

}

Создадим Form2 , разместим 5 BitBtn, 2 Label и 2 Edit. Теперь напишем следующий код:

/---------------------------------------------------------------------------

#include<vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm2 *Form2;

//---------------------------------------------------------------------------

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm2::BitBtn1Click(TObject *Sender)

{

Edit1->Clear();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::BitBtn2Click(TObject *Sender)

{

Edit2->Clear();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::BitBtn3Click(TObject *Sender)

{

Edit2->Text = Edit2->Text + "AND";

}

//---------------------------------------------------------------------------

void __fastcall TForm2::BitBtn4Click(TObject *Sender)

{

Edit2->Text=Edit2->Text + "OR";

}

//---------------------------------------------------------------------------

void __fastcall TForm2::BitBtn5Click(TObject *Sender)

{

Form1->ADOTable1->Filter = Edit2->Text;

Form1->ADOTable1->Filtered = true;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction&Action)

{

Form1->ADOTable1->Filtered = false;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::ListBox1Click(TObject *Sender)

{

if(ListBox1->ItemIndex==0)

Edit2->Text = Edit2->Text + "Code" + "='" + Edit1->Text + "'";

if(ListBox1->ItemIndex==1)

Edit2->Text = Edit2->Text + "Name of the medicine" + "='" + Edit1->Text + "'";

if(ListBox1->ItemIndex==2)

Edit2->Text = Edit2->Text + "Presence" + "='" + Edit1->Text + "'";

if(ListBox1->ItemIndex==3)

Edit2->Text = Edit2->Text + "Cost" + "='" + Edit1->Text + "'";

}

//---------------------------------------------------------------------------

Рисунок 15 - Сортировка лекарств

Далее нажимаем на кнопку «На печать» , которая будет осуществлять печать чека. Вводимкод:

void __fastcall TForm1::BitBtn1Click(TObject *Sender)

{

Form4->Show();

}

//---------------------------------------------------------------------------

Создаем Form4 иразмещаемкомпоненты RichEdit1, PrintDialog1 иButten1. Нажимаемна Butten1 (печать) ивводимкод:

void __fastcall TForm4::Button1Click(TObject *Sender)

{

RichEdit1->Print("Печать");

} визуальный программирование реляционный приложение

//---------------------------------------------------------------------------

Теперь нажимаем на кнопку «Добавить запись» и создаем Form3. На данной форме размещаем следующие компоненты: ComboBox, 3 Edit, 3 Label, RichEdit и Butten.

Пишем следующий код:

//---------------------------------------------------------------------------

#include<vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm3 *Form3;

//---------------------------------------------------------------------------

__fastcall TForm3::TForm3(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm3::Button1Click(TObject *Sender)

{

if(ComboBox1->Text == "Наличие")

ShowMessage("Выберитезначениеналичия");

Form1->ADOTable1->Edit();

Form1->ADOTable1->Edit();

TMemoryStream* strm = new TMemoryStream();

RichEdit1->Lines->SaveToStream(strm);

((TGraphicField*)Form1->ADOTable1->FieldByName("Description"))->LoadFromStream(strm);

Form1->RichEdit1->Lines = RichEdit1->Lines;

deletestrm;

Form1->ADOTable1->FieldByName("Code")->AsString= Edit1->Text;

Form1->ADOTable1->FieldByName("Name of the medicine")->AsString= Edit2->Text;

Form1->ADOTable1->FieldByName("Rresence")->AsString = ComboBox1->Text;

Form1->ADOTable1->FieldByName("Cost")->AsString = Edit3->Text;

Form1->ADOTable1->Post();

Form3->Close();

}

//---------------------------------------------------------------------------

Рисунок 16 - Добавление лекарств в БД

Далее нажимаем на кнопку «Печать», которая будет печатать название и прочую информацию о лекарстве. Пишем код:

void __fastcall TForm1::Button3Click(TObject *Sender)

{

Form5->Show();

}

//---------------------------------------------------------------------------

Далее создаем Form5 и размещаем на нем RichEdit.

Форма об авторе

Далее создаем Form6, и нажимаем на кнопку «Об авторе».

Пишемкод:

void __fastcall TForm1::Button4Click(TObject *Sender)

{

Form6->Show();

}

//---------------------------------------------------------------------------

На 6 форме размещаем компоненты Image и Memo. Заполняем фотографией и информацией об авторе. Результат показан на рисунке 17.

Рисунок 17 - Информация об авторе

Форма справки

Нажимаем на кнопку «Справка» , создаем последнюю Form7, на которой размещаем компонент Memo. Заполняем нужной информацией. Пишем код:

void __fastcall TForm1::Button6Click(TObject *Sender)

{

Form7->Show();

}

//---------------------------------------------------------------------------

И заключительной кнопкой будет кнопка «Выход». Нажимаем на нее и пишем код:

void __fastcall TForm1::Button5Click(TObject *Sender)

{

Close();

}

//---------------------------------------------------------------------------

Рисунок 18 - Справка

4. Тестирование программы

После запуска программа «Справочник лекарственных препаратов аптекоуправления» отображает главную форму, содержащую меню программы (рисунок 19).

Рисунок 19 - Рабочая главная форма

При выборе любого лекарства в правом окне выдается информация о фармакологических свойствах выбранного лекарственного препарата (Рисунок 20).

Рисунок 20 - Фармакологические свойства лекарства

Если же необходимо посмотреть, в каких аптеках есть в наличии данное лекарство, мы должны пролистать фармакологические свойства вниз и посмотреть список аптек г. Курска, где есть данное лекарство (Рисунок 21)

Рисунок 21

Распечатать чек мы можем, нажав на красную клавишу «На печать» и появится следующее окно с чеком (Рисунок 22).

Рисунок 22 - Чек

Далее, чтобы добавить запись в базу данных мы нажимаем на кнопку «Добавить запись» и высветится окно, куда мы вводим информацию о лекарстве (Рисунок 23). После чего нажимаем кнопку «Сохранить и выйти».

Рисунок 23 - Добавление записи в бд

Далее, чтобы осуществить сортировку лекарств мы нажимаем на кнопку «Сортировка» и вводим данные в первый Edit. И выбираем справа в окне то свойство, что мы ввели, и нажимаем отфильтровать. (Рисунок 24).

Рисунок 24 - Фильтрация данных

Далее в базе данных выводится лекарство, которое мы отфильтровали (Рисунок 25).

Далее, чтобы напечатать заказ на лекарственное средство нужно выбрать лекарство и нажать на кнопку «Печать» и появится следующее окно (Рисунок 26).

Рисунок 25 - Отфильтрованное лекарство

Рисунок 26 - Печать заказа

Чтобы посмотреть информацию об авторе, нужно нажать на кнопку «Об авторе» и мы увидим следующее окно (Рисунок 27).

Рисунок 27 - Информация об авторе

Чтобы узнать информацию о программе, мы нажимаем на кнопку «Справка» и видим следующее окно (Рисунок 28).

Рисунок 28 - Справка

Мы рассмотрели все меню программы, и чтобы из нее выйти нужно нажать на кнопку «Выход».

Заключение

Реляционная модель данных в настоящее время приобрела наибольшую популярность и практически все современные субды ориентированы именно на такое представление данных.

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

Также в процессе выполнения работы были получены и закреплены практические навыки разработки программ с использованием баз данных в написании программ в среде визуального программирования BorlandC++ Builder 6.0.

Список использованных источников

1. Иванова, Г.С. Технология программирования [Текст] : учебник / Г. С. Иванова. - М. :Кнорус, 2011. - 336 с. - ISBN 978-5-406-005 19-4.

2. Лафоре, Роберт. Объектно-ориентированное программирование в С++ [Текст] / Р. Лафоре. - 4-е изд. - СПб. [и др.] : Питер, 2012. - 928 с. : ил. - (Классика ComputerScience). - ISBN 978-5-4237-00 38-6.

3. Лапина, Татьяна Ивановна. Методы и технологии объектно-ориентированного программирования [Текст] : учебное пособие / Юго-Западный гос. ун-т ; Министерство образования и науки Российской Федерации, Юго-Западный государственный университет. - Курск : ЮЗГУ, 2011. - 131 с.

4. Лапина, Татьяна Ивановна. Методы и технологии объектно-ориентированного программирования [Электронный ресурс] : учебное пособие / Юго-Западный гос. ун-т ; Министерство образования и науки Российской Федерации, Юго-Западный государственный университет. - Курск : ЮЗГУ, 2011. - 131 с.

5.Архангельский, А. Я. Программирование в C++Builder 5 [Текст] / А. Я. Архангельский. - М. : БИНОМ, 2000. - 1152 с. : ил. - Б. ц.

6.Архангельский, А. Я. Программирование в C++Builder 5 [Текст] / А. Я. Архангельский. - М. : БИНОМ, 2000. - 1152 с. : ил. - Б. ц.

7.Технология программирования [Текст]: учебник/Г.С. Иванова. - М.:Кнорус, 2011. - 336с.

8.Лафоре Р. Объектно-ориентированное программирование в С++. - 4-е изд. - СПб. : Питер, 2004. - 924 с.

Приложение

Unit 1:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

#include "Unit4.h"

#include "Unit5.h"

#include "Unit6.h"

#include "Unit7.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)

{

if( !Form2->Visible )

Form2->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button2Click(TObject *Sender)

{

ADOTable1->Insert();

if(!Form3->Visible)

Form3->Show();

Form3->Edit1->Clear();

Form3->Edit2->Clear();

Form3->ComboBox1->ItemIndex = -1;

Form3->ComboBox1->Text = "Наличие";

Form3->RichEdit1->Clear();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::DBGrid1CellClick(TColumn *Column)

{

if(!(TBlobField*)ADOTable1->FieldByName("Description")->IsNull){

TMemoryStream* strm = new TMemoryStream;

((TGraphicField*)ADOTable1->FieldByName("Description"))->SaveToStream(strm);

strm->Seek(0,0);

RichEdit1->Lines->LoadFromStream(strm);

delete strm;

Edit1->Text = ADOTable1->FieldByName("Code")->AsString;

Edit2->Text = ADOTable1->FieldByName("Name of the medicine")->AsString;

Edit3->Text = ADOTable1->FieldByName("Rresence")->AsString;

Edit4->Text = ADOTable1->FieldByName("Cost")->AsString;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::FormCreate(TObject *Sender)

{

String filename = "Database1.mdb";

if(!FileExists(ExtractFilePath(Application->ExeName)+filename))

{

AnsiString ds = "Файл бд не обнаружен\n\n\t" +filename;

}

else

{

String WayToBase=ExtractFilePath(Application->ExeName)+filename;

Form1->ADOConnection1->ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;User ID=Admin;Data Source="+WayToBase+";Mode=Share Deny None;Jet OLEDB:System database="";Jet OLEDB:Registry Path="";Jet OLEDB:Database Password="";Jet OLEDB:Engine Type=5;Jet OLEDB:Database Locking Mode=1;Jet OLEDB:Global Partial Bulk Ops=2;Jet OLEDB:Global Bulk Transactions=1;Jet OLEDB:New Database Password="";Jet OLEDB:Create System Database=False;Jet OLEDB:Encrypt Database=False;Jet OLEDB:Don't Copy Locale on Compact=False;Jet OLEDB:Compact Without Replica Repair=False;Jet OLEDB:SFP=False;";

Form1->ADOConnection1->Connected = true;

Form1->ADOTable1->Active = true;

Form1->ADOTable1->Open();

}

if(!(TBlobField*)ADOTable1->FieldByName("Description")->IsNull){

TMemoryStream* strm = new TMemoryStream;

((TGraphicField*)ADOTable1->FieldByName("Description"))->SaveToStream(strm);

strm->Seek(0,0);

RichEdit1->Lines->LoadFromStream(strm);

delete strm;

}

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button3Click(TObject *Sender)

{

Form5->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::BitBtn1Click(TObject *Sender)

{

Form4->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button5Click(TObject *Sender)

{

Close();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button4Click(TObject *Sender)

{

Form6->Show();

}

//---------------------------------------------------------------------------

void __fastcall TForm1::Button6Click(TObject *Sender)

{

Form7->Show();

}

//---------------------------------------------------------------------------

Unit 2:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm2 *Form2;

//---------------------------------------------------------------------------

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm2::BitBtn1Click(TObject *Sender)

{

Edit1->Clear();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::BitBtn2Click(TObject *Sender)

{

Edit2->Clear();

}

//---------------------------------------------------------------------------

void __fastcall TForm2::BitBtn3Click(TObject *Sender)

{

Edit2->Text = Edit2->Text + "AND";

}

//---------------------------------------------------------------------------

void __fastcall TForm2::BitBtn4Click(TObject *Sender)

{

Edit2->Text=Edit2->Text + "OR";

}

//---------------------------------------------------------------------------

void __fastcall TForm2::BitBtn5Click(TObject *Sender)

{

Form1->ADOTable1->Filter = Edit2->Text;

Form1->ADOTable1->Filtered = true;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)

{

Form1->ADOTable1->Filtered = false;

}

//---------------------------------------------------------------------------

void __fastcall TForm2::ListBox1Click(TObject *Sender)

{

if(ListBox1->ItemIndex==0)

Edit2->Text = Edit2->Text + "Код" + "='" + Edit1->Text + "'";

if(ListBox1->ItemIndex==1)

Edit2->Text = Edit2->Text + "Название лекарства" + "='" + Edit1->Text + "'";

if(ListBox1->ItemIndex==2)

Edit2->Text = Edit2->Text + "Наличие" + "='" + Edit1->Text + "'";

if(ListBox1->ItemIndex==3)

Edit2->Text = Edit2->Text + "Цена" + "='" + Edit1->Text + "'";

}

//---------------------------------------------------------------------------

Unit 3:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm3 *Form3;

//---------------------------------------------------------------------------

__fastcall TForm3::TForm3(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm3::Button1Click(TObject *Sender)

{

if(ComboBox1->Text == "Наличие")

ShowMessage("Выберите значение наличия");

Form1->ADOTable1->Edit();

Form1->ADOTable1->Edit();

TMemoryStream* strm = new TMemoryStream();

RichEdit1->Lines->SaveToStream(strm);

((TGraphicField*)Form1->ADOTable1->FieldByName("Description"))->LoadFromStream(strm);

Form1->RichEdit1->Lines = RichEdit1->Lines;

delete strm;

Form1->ADOTable1->FieldByName("Code")->AsString= Edit1->Text;

Form1->ADOTable1->FieldByName("Name of the medicine")->AsString= Edit2->Text;

Form1->ADOTable1->FieldByName("Rresence")->AsString = ComboBox1->Text;

Form1->ADOTable1->FieldByName("Cost")->AsString = Edit3->Text;

Form1->ADOTable1->Post();

Form3->Close();

}

//---------------------------------------------------------------------------

Unit 4:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

#include "Unit4.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm4 *Form4;

//---------------------------------------------------------------------------

__fastcall TForm4::TForm4(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm4::FormCreate(TObject *Sender)

{

RichEdit1->Clear();

}

//---------------------------------------------------------------------------

void __fastcall TForm4::Button1Click(TObject *Sender)

{

RichEdit1->Print("Печать");

}

//---------------------------------------------------------------------------

void __fastcall TForm4::FormShow(TObject *Sender)

{

RichEdit1->Lines->Add("Название лекарства: " + Form1->Edit2->Text);

RichEdit1->Lines->Add("Описание:");

RichEdit1->Lines->Add(Form1->RichEdit1->Text);

}

//---------------------------------------------------------------------------

Unit 5:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

#include "Unit4.h"

#include "Unit5.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm5 *Form5;

//---------------------------------------------------------------------------

__fastcall TForm5::TForm5(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

void __fastcall TForm5::FormCreate(TObject *Sender)

{

RichEdit1->Clear();

}

//---------------------------------------------------------------------------

void __fastcall TForm5::FormShow(TObject *Sender)

{

RichEdit1->Lines->Add("Лекарство: " + Form1->Edit2->Text);

RichEdit1->Lines->Add("Есть ли в наличии? " + Form1->Edit3->Text);

}

//---------------------------------------------------------------------------

void __fastcall TForm5::BitBtn1Click(TObject *Sender)

{

RichEdit1->Print("Печать");

}

//---------------------------------------------------------------------------

Unit 6:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit6.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm6 *Form6;

//---------------------------------------------------------------------------

__fastcall TForm6::TForm6(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

Unit 7:

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit7.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm7 *Form7;

//---------------------------------------------------------------------------

__fastcall TForm7::TForm7(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

Размещено на Allbest.ru


Подобные документы

  • Разработка приложения "Ведомость начисления заработной платы" в среде программирования C++Builder. Алгоритм и сценарий работы программы. Проектирование интерфейса пользователя. Написание программных модулей и результаты тестирования данной программы.

    курсовая работа [597,4 K], добавлен 31.01.2016

  • Разработка прикладной программы для операций создания и уничтожения объектов в системе визуального объектно-ориентированного программирования C++Builder. Алгоритм работы программы, набор функций и операторов, компонент и модулей, кнопки событий.

    дипломная работа [672,5 K], добавлен 16.08.2012

  • Разработка программы для сбора и анализа информации об автобусах на парковке. Назначение и область применения. Алгоритм в словесной форме. Состав технических и программных средств. Разработка приложения в среде визуального программирования C++Builder 6.

    курсовая работа [1,5 M], добавлен 06.09.2014

  • Описания объектов, свойств, методов, формы и основных модулей текста программы в среде Delphi. Создание Windows-приложения на алгоритмическом языке Object Pascal в среде визуального программирования. Анализ результатов тестирования программного продукта.

    курсовая работа [2,4 M], добавлен 27.08.2012

  • Особенность разработки алгоритмов для базы данных "Поэты". Анализ реализации анимации с помощью многофункциональной кроссплатформенной библиотеки SFML. Характеристика схемы алгоритма работы меню. Осуществление запуска программы через VisualStudio.

    курсовая работа [4,4 M], добавлен 10.05.2019

  • Реализация программного кода "Organizer 1.0". Разработка приложений баз данных с помощью Borland C++ Builder 6. Компоненты системы программирования для работы по технологии InterBase. Программный код и интерфейс "Organizer 1.0", структура приложения.

    курсовая работа [466,9 K], добавлен 28.07.2009

  • Разработка и анализ функциональной модели деятельности предприятия. Создание базы справочника. Использование трансферов для передачи данных между клиентом и сервером. Требования для работы приложения. Добавление, изменение, хранение и удаление данных.

    курсовая работа [396,4 K], добавлен 26.10.2014

  • Разработка приложения для работы с базой данных с использованием объектно-ориентированного и визуального программирования. Обзор языка элементов языка программирования Delphi. Проектирование базы данных автозаправки. Клиентская система приложения.

    курсовая работа [2,3 M], добавлен 31.01.2016

  • Создание и реализация программы в среде визуального программирования С++ Builder. Разработка ее алгоритма. Описание компонентов и их свойств, используемых в структуре приложения. Создание кнопок создания турниров по круговой системе и на выбывание.

    курсовая работа [4,6 M], добавлен 12.11.2013

  • Изучение основ программирования и создание полноценного приложения в среде программирования Delphi. Разработка эскизного и технического проектов программы. Внедрение выполнения программы. Разработка рабочего проекта, спецификация и текст программы.

    курсовая работа [560,1 K], добавлен 18.07.2012

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.