Сегодня в начале 21 века, компьютеры можно встретить почти во всех сферах деятельности. Они достаточно прочно укрепились в нашей жизни и сознании. В настоящее время происходит стремительное развитие вычислительной техники и программного обеспечения ЭВМ.
Все большему числу специалистов в самых различных областях требуется доступ к вычислительной технике для решения стоящих перед ними задач. Хотя компьютеры создавались для численных расчетов, скоро оказалось, что они могут обрабатывать и другие виды информации – ведь практически все они могут быть представлены в числовой форме. Сейчас компьютеры превратились в универсальные средства для обработки всех видов информации, используемых человеком. С помощью компьютеров не только проводятся числовые расчеты, но и подготавливаются к печати книги, создаются рисунки, кинофильмы, музыка, осуществляется управление заводами и космическими кораблями, проводятся всевозможные тестирования, проверяющие знания людей в той или иной области и так далее.
В какой программе я работаю? Моделирование одежды.
Одной из значительных ниш, которую заняли ЭВМ, является автоматизация документооборота и хранение больших объемов данных. Информационные технологии и развитие возможностей самих компьютеров позволяет хранить огромное количество данных, обеспечивая при этом высокую (в некоторых случаях почти мгновенную) скорость доступа к информации, возможность корректировки и модификации, переносимости и множимости данных, а если требуется, то их защиту. Также работа с базой данных на ЭВМ обычно более проста и удобна, чем работами с бумажными и другими носителями информации. Все вышеперечисленные возможности реализуются с помощью систем управления базами данных. Сфера применения СУБД практически безгранична. трудно представить себе область интересов человека, которая не требовала бы хранения информации для дальнейшего использования.
Из этого вытекает вывод, что СУБД, в том или ином виде будут существовать всегда. Поэтому можно смело говорить об их актуальности.
1. Постановка задачи
Разработать и написать СУБД склада, при помощи которой можно будет работать с информацией о поступающей продукции и корректировать данные.
Носитель для хранения данных: НЖМД или ГМД компьютера (данные хранятся в файле).
1.1 Входные данные
Строки символов и числа (вводятся с помощью клавиатуры).
1.2 Выходные данные
Считываются из файла и отображаются на экране монитора.
2. Вычислительная система
2.1 Основные характеристики выбранного ПК и внешних устройств
Для комфортной работы программы наличие высоких характеристик ПК не обязательно. СУБД успешно работала на Р-166 с 8 Мв ОЗУ, и должна работать на ПК с ещё более низкими характеристиками.
2.2 Основные характеристики программных средств
При решении задачи я использовал интегрированную среду разработки Borland C++ 3.0. Она позволяет легко писать программы под ОС МS DOS и
Windows. Разработанная программа ориентирована под MS DOS, что делает её нетребовательной к ресурсам компьютера и позволяет вести работу даже при отсутствии современных ОС.
Обзор программы САПР «Грация»
Язык С++ — это язык программирования общего назначения, очень хорошо известный своей эффективностью, экономичностью, и переносимостью.
Указанные преимущества С++ обеспечивают хорошее качество разработки почти любого вида программного продукта. Использование С++ в качестве языка программирования позволяет получать быстрые, компактные и легко читаемые программы. При этом они имеют хорошую наглядность и их более просто сопровождать.
С++ сочетает эффективность и мощность в относительно малом по размеру языке. Хотя С++ не содержит встроенных компонент языка, выполняющих ввод — вывод, распределение памяти, манипуляций с экраном или управление процессами, тем не менее, системное окружение С++ располагает очень большой библиотекой модулей, в которой реализованы все подобные функции. Библиотека поддерживает многие, если не все, функции, которые требуются в работе.
Это решение позволяет программам, написанным на этом языке, быть независимыми от конфигурации конкретного компьютера, а строгое определение языка делает его независимым от любых деталей операционной системы или машины. В то же время программисты могут добавить в библиотеку специфические системные программы, чтобы более эффективно использовать конкретные особенности машины.
Перечислим некоторые существенные особенности языка С++:
С++ обеспечивает полный набор операторов структурного программирования.
С++ поддерживает указатели на переменные и функции. Указатель на объект программы соответствует машинному адресу этого объекта. Посредством разумного использования указателей можно создавать эффективно выполняемые программы, так как указатели позволяют ссылаться на объекты тем же самым путем, как это делает машина. С++ поддерживает указатели, и тем самым позволяет осуществлять непосредственный доступ и манипуляции с адресами памяти.
В своем составе С++ содержит препроцессор, который обрабатывает текстовые файлы перед компиляцией. Среди его наиболее полезных приложений при написании программ на С++ являются: определение программных констант, замена вызовов функций аналогичными, но более быстрыми макросами, условная компиляция.
С++ — гибкий язык, позволяющий принимать в конкретных ситуациях самые разные решения. Тем не менее, С++ налагает незначительные ограничения в таких, например, действиях, как преобразование типов. Во многих случаях это является достоинством, однако, программисты должны хорошо знать язык, чтобы понимать, как будут выполняться их программы.
С++ — это универсальный язык программирования, задуманный так, чтобы сделать программирование более приятным для серьезного программиста. За исключением второстепенных деталей С++ является надмножеством языка программирования C. Помимо возможностей, которые дает C, С++ предоставляет гибкие и эффективные средства определения новых типов.
Используя определения новых типов, точно отвечающих концепциям приложения, программист может разделять разрабатываемую программу на легко поддающиеся контролю части. Такой метод построения программ часто называют абстракцией данных. Информация о типах содержится в некоторых объектах типов, определенных пользователем.
Такие объекты просты и надежны в использовании в тех ситуациях, когда их тип нельзя установить на стадии компиляции. Программирование с применением таких объектов часто называют объектно-ориентированным. При правильном использовании этот метод дает более короткие, проще понимаемые и легче контролируемые программы.
Источник: kazedu.com
3.2. Конструирование программ
Одной из основных задач проектирования является декомпозиция системы, т. е. разделение системы в целом на совокупность взаимосвязанных элементов. При декомпозиции последовательно меняется уровень детализации системы.
По направлению процесса декомпозиции принято выделять три основных метода проектирования.
При нисходящем проектировании (проектировании «сверху вниз») проектирование начинается с верхнего уровня. Система иерархически разбивается на подсистемы и т.д. вплоть до компонентов нижнего уровня. Это метод общего назначения, с его помощью можно проектировать любую систему.
При восходящем проектировании (проектировании «снизу вверх») сразу выделяются необходимые компоненты нижнего уровня реализации, на основе которых строятся подсистемы уровня выше и т.д. до верхнего уровня. Этот метод используют для относительно небольших систем, как правило, инструментального назначения. В таких системах обычно четко прослеживается большое количество инструментальных компонентов нижнего уровня, а на верхнем уровне, практически, реализуется только интерфейс к ним.
При проектировании методом расширения ядра (проектировании «от центра») выделяется базовый процесс или объект (ядро), на котором основана вся система. Проектирование ведется одновременно «вниз» (для реализации ядра на низком уровне) и «вверх» (для использования ядра на верхнем уровне). Примером может служить реализация реляционной системы управления базами данных (СУБД).
В ней четко прослеживается базовое понятие записи. Проектирование «вниз» нацелено на реализацию понятия записи, типов полей, операций над полями и т.д. Проектирование «вверх» предназначено для реализации собственно СУБД, т. е. таблиц, запросов и т.д.
Наиболее часто используется смешанный подход к проектированию, при котором основное проектирование ведется сверху вниз, однако используются элементы проектирования от центра и снизу вверх.
Проектирование средних и тем более крупных систем есть столь сложный и длительный процесс, что его стремятся также вести параллельно несколькими группами проектировщиков. При этом декомпозиция системы органично приводит к декомпозиции самого процесса проектирования.
Объектно-ориентированное программирование
В настоящее время наиболее привлекательные для программистов языки базируются на так называемой объектной модели, которая имеет четыре главных элемента: абстрагирование, инкапсуляция, модульность, иерархия.
Абстрагирование — выделения абстракций (abstraction), под которыми понимаются существенные характеристики объекта, которые отличают его от всех других объектов и четко определяют его концептуальные границы для наблюдателя.
Инкапсуляция (encapsulation) — разделение элементов абстракции, которые образуют ее структуру и поведение.
Модульность (modularity) — разделение системы на модули (module), под которыми понимаются единицы кода, служащие блоками физической структуры системы.
Иерархия (hierarchy) — подчинение или упорядочение абстракций. Две типичных иерархии в сложной системе — иерархия наследования «общее/частное», присущая, обычно, типам (классам) и иерархия агрегирования «целое/часть», присущая, обычно, элементам (объектам). Иерархия присуща также модулям и другим частям системы.
Наиболее явно эти черты присутствуют в языках, реализующих концепции объектно-ориентированного программирования. Под последним понимается методология реализации, при которой программа организуется как совокупность сотрудничающих объектов, каждый из которых является экземпляром какого-либо класса, а классы образуют иерархию наследования. При этом классы обычно статичны, а объекты очень динамичны, что поощряется динамическим связыванием и полиморфизмом.
Для ООП характерны понятия наследования и полиморфизма.
Наследование (inheritance) — отношение между классами, при котором класс использует структуру или поведение другого (одиночное наследование) или других (множественное наследование). Наследование вводит иерархию «общее/частное».
Полиморфизм (polymorphism) — положение теории типов, согласно которому имена (например, переменных) могут обозначать объекты разных (но имеющих общего родителя) классов. Следовательно, любой объект (метод), обозначаемым полиморфным именем, может по-своему реагировать на некий общий набор операций (аргументов).
Модульное программирование
Понятие модуля является в значительной степени аксиоматичным и трудно поддается формальному определению, общему для всех языков. Обычно под модулем понимают компонент программной системы, оформляемый, как правило, в виде отдельного файла с целью раздельной компиляции.
Модуль в программных проектах также является единицей описания и администрирования и, как правило, кодируется на этапе программирования одним программистом. Модульное программирование является воплощением в процессе разработки программ обоих общих методов борьбы со сложностью и обеспечение независимости компонент системы, и использование иерархических структур. Для воплощения первого метода формулируются определенные требования, которым должен удовлетворять программный модуль, т.е. выявляются основные характеристики «хорошего» программного модуля. Для воплощения второго метода используют древовидные модульные структуры программ (включая деревья со сросшимися ветвями).
Оценка программного модуля осуществляется на основании следующих конструктивных характеристик: размер модуля, прочность модуля, сцепление с другими модулями, рутинность модуля.
Размер модуля измеряется числом содержащихся в нем операторов или строк. Модуль не должен быть слишком маленьким или слишком большим. Маленькие модули приводят к громоздкой модульной структуре программы и могут не окупать накладных расходов, связанных с их оформлением. Большие модули неудобны для изучения и изменений, они могут существенно увеличить суммарное время повторных трансляций программы при отладке программы. Обычно рекомендуются программные модули размером от нескольких десятков до нескольких сотен операторов.
Прочность модуля это мера его внутренних связей. Чем выше прочность модуля, тем больше связей он может спрятать от внешней по отношению к нему части программы и, следовательно, тем больший вклад в упрощение программы он может внести. Самой слабой степенью прочности обладает модуль, прочный по совпадению.
Это такой модуль, между элементами которого нет осмысленных связей. Такой модуль может быть выделен, например, при обнаружении в разных местах программы повторения одной и той же последовательности операторов, которая и оформляется в отдельный модуль. Функционально прочный модуль это модуль, выполняющий (реализующий) одну какую-либо определенную функцию. Информационно прочный модуль это модуль, выполняющий (реализующий) несколько операций (функций) над одной и той же структурой данных (информационным объектом), которая считается неизвестной вне этого модуля. Для каждой из этих операций в таком модуле имеется свой вход со своей формой обращения к нему.
Сцепление модуля это мера его зависимости по данным от других модулей. Характеризуется способом передачи данных. Чем слабее сцепление модуля с другими модулями, тем сильнее его независимость от других модулей. Для оценки степени сцепления используется упорядоченный набор из шести видов сцепления модулей.
Худшим видом сцепления модулей является сцепление по содержимому. Таким является сцепление двух модулей, когда один из них имеет прямые ссылки на содержимое другого модуля (например, на константу, содержащуюся в другом модуле). Не рекомендуется использовать также сцепление по общей области это такое сцепление модулей, когда несколько модулей используют одну и ту же область памяти. Единственным видом сцепления модулей, который рекомендуется для использования современной технологией программирования, является параметрическое сцепление это случай, когда данные передаются модулю либо при обращении к нему как значения его параметров, либо как результат его обращения к другому модулю для вычисления некоторой функции. Такой вид сцепления модулей реализуется на языках программирования при использовании обращений к процедурам (функциям).
Рутинность модуля это его независимость от предыстории обращений к нему. Модуль будем называть рутинным, если результат (эффект) обращения к нему зависит только от значений его параметров (и не зависит от предыстории обращений к нему). Модуль будем называть зависящим от предыстории, если результат (эффект) обращения к нему зависит от внутреннего состояния этого модуля, изменяемого в результате предыдущих обращений к нему.
Насколько возможно, все модули:
- должны быть связаны друг с другом иерархическим образом, причем структура связей, по возможности, должна представлять собой дерево;
- должны иметь небольшие размеры (не более 100 операторов языка программирования высокого уровня);
- должны быть функционально простыми (чем меньше число получаемых модулем управляющих признаков, которые им анализируются, тем он более функционально прост);
- должны иметь четко выраженное функциональное назначение;
- по возможности не должны использовать общие блоки данных (глобальные переменные), т. е. должны получать входные данные в форме параметров вызова и возвращать выходные данные вызывающему модулю в явном виде.
Источник: studfile.net
Конструирование программы
После того, как задача в целом поставлена, выполняется этап кон-струирования программы. Традиционно конструирование программы связывается с созданием блок-схомы. Однако фактически блок-схемы более полезны при документировании, чем при проектировании.
Несмотря на призывы многих авторов книг* только немногие программисты сначала составляют подробную блок-схему, а затем пишут по ней программу. Обычно программисты полагают, что разработка подробной блок-схемы такая же трудоемкая работа, как описание первоначального варианта работающей программы, причем более бесполезная. Техника разработки блок-схем полезна при описании структуры программы и объяснении ее работы. Однако на этапе разработки программы более эффективны другие методы проектирования программ. К ним относятся:
.1. Модульное программирование. Это метод, при котором длинные программы расчленяются на короткие, которые называются модулями и могут быть спроектированы, закодированы и отлажены отдельно с привлечением минимальных сведений о других программах.
1. Нисходящее проектирование. Это метод, при котором разраба-тываемая задача расчленяется сначала на несколько обобщенных под-задач, которые затем, в свою очередь, детализируются далее. Этот про цесс продолжается сверху вниз до тех пор» пока, получаемые подзадачи не оказываются поставленными в таком виде, что их можно просто реализовать на ЭВМ.
Противоположным данному методу является метод проектирования программ снизу вверх, при котором сначала кодируются все подзадачи, а затем происходит их объединение в более крупные части общего проекта.
2. Структурное программирование. Согласно этому методу про-граммы пишутся по специально разработанным правилам. Эти правила позволяют использовать только определенные типы программных опе-раторов, хотя для описания сложных процессов допускается включе ние одних операторов внутрь других. Структурное программирование часто определяют как метод разработки программ, при котором каждый блок программы имеет только один вход и один выход.,
Рис. 6.3. Обобщенная (а) и де тальная (б) блок-схема
Методы структурного программирования первоначально были разработаны для составления очень длинных программ, но их можно использовать и при создании более коротких программ, которые обычно разрабатываются для микропроцессоров. Сначала рассмотрим технику разработки блок-схемы, а затем остальные, методы проектирования программ.
Преимущество блок-схем перед листингами программ-состоит в том, что они: ,
а) ясно указывают порядок выполнения операций и взаимосвязь блоков программы; l
б) выделяют ключевые» точки принятия решений;
в) не зависят от конкретной ЭВМ или языка программирования;
г) используют стандартный набор символов (рис. 6.2).
Блок-схема Подтверждает утверждение, что образы выразительнее
слов. Несмотря на то что блок-схемы имеют ограниченное применение, они остаются хорошей иллюстрацией, облегчающей процесс программирования. Кроме того, они являются эффективным посредником при общении программистов с непрограммистами.
Обычно желательно иметь блок-схемы двух типов: 1) дающие представление об общей структуре программы и 2) сообщающие подробности, представляющие главный интерес для программистов. На рис. 6.3 приведен пример типичной блок-схемы, описывающей алгоритм работы программы-редактора. Слишком большое число деталей затрудняет составление и восприятие блок-схемы.* Слишком подробная блок- схема не имеет особых преимуществ перед листингом программы.
Блок-схемы полезны только тогда, когда они имеют достаточно обобщенный характер. Однако разработка блок-схем связана с дополнительными затратами и они не содержат информации о структуре обрабатываемых данных или используемых аппаратных средств. Блок- схемы описывают только последовательность выполнения операции в программе; они не отражают связи со структурой данных или с аппаратными элементами.
Источник: incpu.ru