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

Тип работы:
Курсовая
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

СОДЕРЖАНИЕ

Введение

1. Описание функциональной модели

2. Описание классов

Заключение

Список библиографических источников

Приложение

ВВЕДЕНИЕ

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

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

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

Задачи работы:

— построить функциональную модель автоматизированной системы;

— разработать основные классы в соответствии с объектно-ориентированным подходом;

— протестировать работу созданных классов.

В данной курсовой работе проектируется автоматизированная система учета медикаментов в аптеке.

Для построения функциональной модели будет использоваться CASE-средство BPWin (демоверсия).

Разработка и тестирование классов будет вестись в системе программирования Microsoft Visual Studio 2010.

1. Описание функциональной модели

Наша функциональная модель выполнена в BPwin, так как он имеет достаточно простой и понятный интерфейс пользователя, дающий возможность аналитику создавать сложные модели при минимальных усилиях. BPwin поддерживает три методологии — IDEF0, IDEF3 и DFD, каждая из которых решает свои специфические задачи. Наша контекстная диаграмма сделана по методологии IDEF0. Методология IDEFO предписывает построение иерархической системы диаграмм — единичных описаний фрагментов системы. Сначала проводится описание системы в целом и ее взаимодействия с окружающим миром (контекстная диаграмма), после чего проводится функциональная декомпозиция — система разбивается на подсистемы и каждая подсистема описывается отдельно (диаграммы декомпозиции). Затем каждая подсистема разбивается на более мелкие и так далее до достижения нужной степени подробности. После каждого сеанса декомпозиции проводится сеанс экспертизы: каждая диаграмма проверяется экспертами предметной области, представителями заказчика, людьми, непосредственно участвующими в бизнес-процессе. Такая технология создания модели позволяет построить модель, адекватную предметной области на всех уровнях абстрагирования.

Имя модели: учет медикаментов в аптеке

Цель моделирования (Purpose): разработка иерархии классов для автоматизированной системы учета медикаментов в аптеке.

Точка зрения (Viewpoint): мы считаем очень важным иерархию классов, так как она позволяет оптимизировать работу пользователя и систематизировать данные.

Контекстная диаграмма, построенная в среде BPwin, показана на рис. 1.

Рис. 1 — контекстная диаграмма в среде BPwin

Контекстная диаграмма является вершиной древовидной структуры диаграмм и представляет собой самое общее описание системы и ее взаимодействия с внешней средой.

На рисунке 1 мы видим контекстную диаграмму программы, которая с помощью иерархии классов обрабатывает информацию о медикаментах в аптеке.

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

Данные (медикаменты со склада, деньги клиента, запросы клиентов медикаментов на продажу) — это информация, пригодная для дальнейшей обработки. Как правило, данные предоставляются в структурированном виде, через заполнение какой-либо формы. [1]

Управлением (правила, стратегии, процедуры или стандарты, которыми руководствуется работа. Каждая работа должна иметь хотя бы одну стрелку управления. Стрелка управления рисуется как входящая в верхнюю грань работы. Управление влияет на работу, но не преобразуется работой.) (правила ТБ, устав предприятия, законы РФ) -- свод правил и положений, направленных на обеспечение условий безопасного труда и/или проведения каких-либо других работ. [2]

Методы и правила обработки информации о медикаментах в аптеке--систематизированная совокупность шагов, действий, которые необходимо предпринять, чтобы решить определенную задачу или достичь определенной цели. Условие, которое обязательно должно выполняться всеми участниками конкретного действия. [3]

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

Информация о продажах и остатках медикаментов, а так же аналитические отчеты — применение к результатам наблюдений математических методов для построения выводов об истинных значениях искомых величин. [4]

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

Персональный компьютер (ПК) — устройство, обрабатывающее данные (информацию), следуя ряду команд, который носит название компьютерной программы. 5];

Операционная система (ОС) — комплекс управляющих и обрабатывающих программ, которые, с одной стороны, выступают как интерфейс между аппаратными устройствами и прикладными программами, а с другой -- предназначены для управления аппаратными устройствами, управления вычислительными процессами, эффективного распределения вычислительных ресурсов между вычислительными процессами и организации надёжных вычислений. [6];

Система программирования (СП) -- это система для разработки новых программ на конкретном языке программирования [8], а так же сотрудники аптеки[9].

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

На рисунке 2 мы видим функциональную декомпозицию системы.

Рис. 2 — Функциональная декомпозиция системы

Диаграмма содержит 7 работ:

1. Учет поступления медикаментов со склада.

2. Учет продаж медикаментов.

3. Формирование отчетности документов.

4. Вывод результатов на экран.

5. Анализ результатов.

6. Сохранение результатов в файл.

7. Запрос на выход из программы.

Рассмотрим каждый из представленных на диаграмме процессов подробно.

Вид обработки — пользователь программы выбирает вид обработки согласно данному ему заданию и меню программы. Входной поток — данные. Механизмы — пользователь, ПК, ОС и СП. Управление — правила ТБ. Обратная связь по управлению (когда выход нижестоящей работы направляется на управление вышестоящей.) — продолжить обработку. Выходной поток — вид обработки.

Ввод исходных данных — пользователь программы вводит данные в ОП программы. Входной поток — вид обработки, данные. Механизмы — пользователь, ПК, ОС и СП. Выходной поток — данные из оперативной памяти.

Решение задачи — программа решает задачу, данную ей пользователем. Входной поток — данные из ОП. Управление — виды обработки, методы и правила обработки. Механизмы — пользователь, ПК, ОС и СП. Выходной поток — результаты.

Вывод результатов на экран — программа выводит на экран результаты решенной задачи. Входной поток — результаты. Механизмы — пользователь, ПК, ОС и СП. Выходной поток — результаты на экране.

Анализ результатов — пользователь анализирует работу программы и данные ей результаты, решая как дальше поступить с данными. Входной поток — результаты на экране. Управление — методы и правила обработки. Механизмы — пользователь, ПК, ОС и СП. Выходной поток — результаты обработки.

Сохранение результатов в файл — ели пользователь решил сохранить результаты обработки. Входной поток — результаты обработки. Механизмы — пользователь, ПК, ОС и СП.

Запрос на выход из программы — пользователь решил либо продолжить обработку, либо выйти из программы без сохранения результатов. Входной поток — результаты обработки. Механизмы — пользователь, ПК, ОС и СП. Выходной поток — запрос на продолжение обработки.

Стрелка печать — пользователь решил распечатать результаты обработки.

2. ОПИСАНИЕ КЛАССОВ

Класс — это фундаментальное понятие С++, с введением которого язык С++ становится объектно-ориентированным языком.

Класс — это тип, создаваемый программистом на основе уже существующих типов.

Можно дать и более развернутое определение класса:

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

При разработке программы к данной курсовой работе, был объявлен класс TPress, создающий тип — медикаменты в аптеке.

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

- наименование медикаментов

- тип медикаментов

- поступление медикаментов

Элементы класса получают атрибуты доступа, либо по умолчанию (в зависимости от ключа класса) либо при использовании спецификаторов доступа:

public (общедоступный),

private (собственный),

protected (защищенный).

Спецификатор public означает, что элементы общедоступны всем функциям, в том числе и не методам класса.

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

Спецификатор protected определяет те же права доступа, что и private, но дополнительно элементы могут быть использованы и методами- наследниками данного класса. Защищенные (protected) элементы классов нужны только в случае построения иерархии классов. Если наследование классов не используется в программе, то применение спецификатора protected эквивалентно использованию спецификатора private.

По умолчанию права доступа к элементам класса зависят от ключа класса:

— class-определяет право доступа как private;

— struct- определяет право доступа как public, но можно переопределить это умолчание при помощи спецификаторов доступа private и protected;

— union- определяет право доступа как public и переопределить его нельзя.

Объекты классов

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

Объекты классов могут быть присвоены (если не было запрещено копирование), переданы как аргументы функции и возвращены функцией.

Действия с объектами класса выполняются с помощью методов класса.

Методы классов

В данной работе так же нужно было написать функции — методы класса:

для ввода — вывода данных о учете медикаментов;

определения, относятся ли медикаменты к данным аптекам;

определения поступивших медикаментов в аптеки.

Функция создания и инициализации объектов данного класса называется конструктором.

тип_возврата имя_класса: :имя_функции ()

{ тело функции

}

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

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

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

Вызов метода класса осуществляется с помощью следующей конструкции:

имя_объекта. имя_метода ();

При вызове функция метод класса получает один скрытый аргумент -указатель на объект, для которого она вызвана. Этот указатель-this. В каждой функции класса этот указатель описан неявно как: имя класса *this;

this инициализируется так, что он указывает на объект, для которого была вызвана функция, в примере вызова метода d. mod () для объекта d this=&d.

Функция-метод класса может вызываться и через указатель на объект, например, если указатель, а инициализирован адресом объекта d, то вызов функции mod () может быть записан так: a-> mod ();

Конструкторы

Так же в программе были предусмотрены конструкторы класса:

по умолчанию;

получающий параметры;

копирования;

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

конструкторы имеют то же имя, что и класс;

не имеют объявлений возврата (даже void);

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

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

Конструкторы глобальных переменных вызываются до вызова функции main (). Локальные объекты создаются, как только становится активной сфера действия переменной.

Параметры конструктора

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

имя_класса (список формальных параметров)

{ операторы тела конструктора };

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

Примечание: Конструктор по умолчанию не принимает аргументов вообще, его не следует путать с конструктором, имеющим аргументы по умолчанию.

Конструктор копирования. Конструктор копирования для класса. Х — это такой конструктор, который может быть вызван с единственным аргументом типа Х:

Конструктор копирования запускается при копировании объекта данного класса, обычно в случае объявления с инициализацией объектом другого класса: Х x = y.

Если конструкторы в теле класса не были определены явно, то компилятор формирует по умолчанию конструктор без параметров и конструктор копирования.

Перегрузка конструкторов

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

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

Деструкторы

Деструктор — это функция уничтожения объекта данного класса. Деструктор представляет метод с именем, совпадающим с именем класса, перед которым стоит символ ~ (тильда). Это универсальный символ, обозначающий «не» («не конструктор»).

Деструктор не должен иметь параметров, и, как и конструктор — типа возврата.

Класс может иметь только один деструктор или не иметь вообще. Если деструктор не объявлен для класса явно, компилятор генерирует его автоматически.

Вызов деструктора выполняется неявно, когда объект выходит из своей объявленной сферы действия.

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

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

Перегрузка операций

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

.  — прямой выбор компонента структурированного объекта;

.* - обращение к компоненту через указатель на него;

: — операция указания области видимости;

?: — условная операция;

sizeof — операция вычисления размера в байтах;

# и ## - препроцессорные операции.

Перегрузка операций выполняется с помощью операций — функций.

Синтаксис объявления прототипа операции — функции:

Тип_возвращаемого значения operator знак_операции (список параметров операции-функции);

Если принять, что конструкция operator знак_операции есть имя некоторой функции, то прототип операции-функции подобен прототипу обычной функции языка С.

Перегрузка бинарных операций

При перегрузке бинарной операции именно объект слева от знака операции вызывает функцию — оператор. Объект, стоящий справа от знака операции, передается функции.

Перегрузка унарных операций

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

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

Замечание для постфиксной операции: она увеличивает значение элементов-данных объекта на единицу, но возвращает старое значение объекта.

Дружественная функция

Дружественной функцией класса называется функция, которая, не являясь методом класса, имеет право доступа к private и protected элементам класса.

Функция не может стать другом класса «без его согласия». Для получения прав друга функция должна быть описана в теле класса со спецификатором friend.

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

Дружественная функция при вызове не получает указателя this. Объекты классов должны передаваться дружественной функции только явно через аппарат параметров. При вызове дружественной функции нельзя использовать синтаксис вызова функций — методов класса:

имя объекта. имя_функции

и

указатель_на_объект -> имя_функции,

так как дружественная функция не является методом класса. Именно поэтому на дружественную функцию не распространяется и действие спецификаторов доступа (public, private, protected). Место размещения прототипа дружественной функции внутри определения класса безразлично. Права доступа дружественной функции не изменяются и не зависят от спецификаторов доступа.

Использование механизма дружественных функций позволяет упростить интерфейс между классами.

Перегрузка операций > >и < < для ввода-вывода встроенных типов

В файле < iostream. h> определены классы ostream и istream, в которых объявлены функции-операторы как методы классов, перегружающие действие побитовых операций > > и < < для организации неформатированного ввода и вывода данных базовых типов языка С++.

Перегрузка операций > > и < < для ввода, вывода типов, объявленных пользователем

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

ЗАКЛЮЧЕНИЕ

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

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

Так же были выполнены задачи работы:

— построение функциональной модели автоматизированной системы;

— разработка основных классов в соответствии с объектно-ориентированным подходом;

— тестирование работы созданных классов.

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

ПРИЛОЖЕНИЕ

ПРОГРАММНЫЙ КОД

#include < iostream>

#include < string>

#include < stdio. h>

#include < stdlib. h>

using namespace std;

class TPress

{

//private string name;

protected:

string name;

int type;

int tiraj;

public:

TPress ();

TPress (string, int, int);

TPress (TPress*);

bool Vvod ();

void Vyvod ();

bool isType (int);

bool vyshe (int);

friend istream & operator>>(istream&, TPress&);

friend ostream & operator<<(ostream&, TPress&);

int operator ==(TPress);

};

TPress: :TPress ()

{

name="";

type=0;

tiraj= 0;

}

TPress: :TPress (string initName, int initType, int initTiraj)

{

name= initName;

type= initType;

tiraj= initTiraj;

}

TPress: :TPress (TPress* t)

{

name= t-> name;

type= t-> type;

tiraj= t-> tiraj;

}

bool TPress: :Vvod ()

{

string initName;

int initType;

int initTiraj;

cout< <"Vvedite naimenovanie, typ (gazeta-1; jurnal-2), tiraj: «;

cin> >initName>>initType>>initTiraj;

if ((initType==1)||(initType==2))

{

name= initName;

type= initType;

tiraj= initTiraj;

}else

{

cout< <"Neverny vvod"< <endl;

return false;

}

return true;

}

void TPress: :Vyvod ()

{

cout< <"Name: «< <name<<endl;

cout< <"Type: «;

if (type==1)

{

cout< <"gazeta";

}else

{

cout< <"jurnal";

}

cout< <endl;

cout< <"Tiraj: «< <tiraj<<endl;

}

bool TPress: :isType (int t)

{

return type==t;

}

bool TPress: :vyshe (int tir)

{

return tiraj> tir;

}

istream & operator>>(istream & stream, TPress & obj)

{

obj. Vvod ();

return stream;

}

ostream & operator<<(ostream & stream, TPress & obj)

{

obj. Vyvod ();

return stream;

}

int TPress: :operator ==(TPress obj)

{

return (obj. name==name)&&(obj. type==type)&&(obj. tiraj==tiraj);

}

class ProTPress: TPress

{

public:

int price;

string tema;

ProTPress ()

{

TPress ();

}

bool isTematica (string t)

{

return t==tema;

}

bool Vvod ()

{

string initName;

int initType;

int initTiraj;

int initPrice;

string initTema;

cout< <"Vvedite naimenovanie, typ (gazeta-1; jurnal-2), tiraj, cena, tamatica:

";

cin> >initName>>initType>>initTiraj>>initPrice>>initTema;

if ((initType==1)||(initType==2))

{

name= initName;

type= initType;

tiraj= initTiraj;

price= initPrice;

tema= initTema;

}else

{

cout< <"Neverny vvod"< <endl;

return false;

}

return true;

}

void Vyvod ()

{

cout< <"Name: «< <name<<endl;

cout< <"Type: «;

if (type==1)

{

cout< <"apteka";

}

cout< <endl;

cout< <"Tiraj: «< <tiraj<<endl;

cout< <"Cena: «< <price<<endl;

cout< <"Tematica: «< <tema<<endl;

}

friend istream & operator>>(istream & stream, ProTPress & obj)

{

obj. Vvod ();

return stream;

}

friend ostream & operator<<(ostream & stream, ProTPress & obj)

{

obj. Vyvod ();

return stream;

}

};

int main ()

{

ProTPress *presses[100];

int n;

cout< <"Vvedite kol-vo med-ov: «;

cin> >n;

for (int i=0; i< n; i++)

{

presses[i]= new ProTPress ();

cin> >*presses[i];

}

string tema;

cout< <"Vvedite tamaticu: «;

cin> >tema;

for (int i=0; i< n; i++)

{

if (presses[i]-> isTematica (tema))

{

cout< <*presses[i];

}

}

system («pause»);

return 0;

}

ПоказатьСвернуть
Заполнить форму текущей работой