РефератыИнформатикаСоСоздание справочника Парфюмерный магазин при помощи программы Turbo Pascal

Создание справочника Парфюмерный магазин при помощи программы Turbo Pascal

Содержание


1. Введение


2. Содержательная постановка и описание задачи


3. Атрибуты объекта и предоставление данных в программ


4. Описание программы создания набора данных


5. Описание программы формирование выходного документа


6. Описание программы формирование списковой структуры


7. Технология обработки данных


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


9. Список литературы


Приложение 1 - Графическое описание данных


Приложение 2 - Представление данных в памяти ЭВМ


Приложение Рисунок списковой структуры


Приложение 4 – Формат выходного документа


Приложение 5 – Схема последовательности обработки данных


Приложение 6 Листинг программы


1.
Введение


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


Действительно при помощи Turbo Pascal достаточно не просто создать программу, которая бы демонстрировала работу с базами данных (далее БД). Для этого в настоящий момент существует огромное количество специализированных программ. Но все-таки основу и саму сущность формирования БД при помощи Turbo Pascal, реализовать, возможно.


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


2.
Содержательная постановка и описание задачи


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


Программа должна обладать следующими функциями:


– Удобная справочная система и система подсказок;


– Возможность добавление в БД нового товара;


– Возможность поиска по выбранным критериям;


– Возможность удобной сортировки товаров;


– Возможность создания отчетности;


– Возможность удаления ненужного товара.


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


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


3.
Атрибуты объекта и предоставление данных в программе


Определим необходимый набор атрибутов. Условно их можно разделить на 3 части:


– Сортировка – деление на разделы и подразделы;


– Интерфейс – создание удобного и функционального интерфейса;


– Функции программы – добавление и удаления товара, поиск и отчетность.


3.1 Сортировка.


Наиболее сложной задачей при создании программы – справочника «Парфюмерный магазин» является создание сортировки товаров.


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


Условно все товары парфюмерного (косметического) магазина, можно разделить на 9 разделов:


– Уход за лицом;


– Уход за кожей;


– Детские товары;


– Маникюр;


– Парфюмерия;


– Уход за телом;


– Товары для мужчин;


– Уход за волосами;


– Другие товары.


3.1.1 Уход за лицом;


В данном разделе представляются товары, предназначенные непосредственно для ухода за лицом. Условно данный раздел можно разделить на 13 подразделов:


– Гель;


– Лосьоны и пена;


– Молочко;


– Бальзам;


– Крем;


– Масло;


– Маска, скраб;


– Подводка, карандаш;


– Румяна, тушь


– Тени пудра;


– Помада, маска;


– Блеск;


– Другие товары.


3.1.2 Уход за кожей;


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


– Гель;


– Лосьоны и пена;


– Молочко;


– Бальзам;


– Крем;


– Масло;


– Другие товары.


3.1.3 Детские товары;


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


– Ароматы;


– Крема и мази;


– Другие товары.


3.1.4 Маникюр;


В данном разделе представляются товары, предназначенные непосредственно для ухода за ногтями. Условно данный раздел можно разделить на 4 подраздела:


– Крем;


– Лак;


– Масло;


– Другие товары.


3.1.5 Парфюмерия;


В данном разделе представляются парфюмерные товары:


– Туалетная вода;


– Духи;


– Дезодорант;


– Одеколон;


– Другие товары.


3.1.6 Уход за телом;


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


– Гель;


– Лосьоны и пена;


– Молочко;


– Мыло;


– Бальзам;


– Крем;


– Масло;


– Другие товары


3.1.7 Товары для мужчин;


В данном разделе представляются товары, предназначенные непосредственно для мужчин. Условно данный раздел можно разделить на 8 подразделов:


– Дезодорант;


– Одеколон;


– Гель;


– Лосьоны и пена;


– Шампунь;


– Бальзам;


– Крем;


– Другие товары.


3.1.8 Уход за волосами;


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


– Гель;


– Мыло;


– Шампунь;


– Кондиционер;


– Бальзам;


– Спрей;


– Лак;


– Блеск;


– Другие товары.


3.1.9 Другие товары.


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


– Бижутерия;


– Технические средства;


– Другие товары.


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


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


3.2 Интерфейс


При создании вышеуказанной сортировки необходимо создать интерфейс пользователя, обладающий следующими свойствами:


- Удобство;


- Простота;


- Интуитивно понятная навигация;


- Отсутствие «захламленности».


Поставленную задачу можно решить следующим образом:


- Создание разметки экрана – линии, которые должны разделять экран, для его целесообразного размещения;


- Создание кнопок управления – как у большинства подобных справочников внизу экрана отображаются кнопки управления, доступные в определенный момент;


- Создание меню разделов и подразделов, при чем так чтоб пользователь при помощи курсора мог осуществить навигацию по разделам и подразделам, а не нажимать цифры меню;


- Создание справочной системы и системы подсказок;


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


3.3 Функции программы


Данная программа – справочник должна обладать следующими функциями (помимо сортировки и навигации, которые описаны ранее):


- Добавление нового товара в БД;


- Поиск нужного товара по заданным критериям;


- Создание отчетности по заданным критериям;


- Удаление ненужного товара;


3.4 Поля объекта


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


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


- Код товара – целое число, которое должно быть уникальное для каждого товара, т.е. не повторятся;


- Раздел – целое число, которое свидетельствует о принадлежности к определенному разделу, каждое из которых имеет свой уникальный номер;


- Подраздел - целое число, которое свидетельствует о принадлежности к определенному подразделу, каждое из которых имеет свой уникальный номер;


- Название – строковое данное, характеризует общее название товара;


- Серия – это строковое данное, характеризует принадлежность товара к определенной серии;


- Производитель - строковое данное, описывает название производителя;


- Описание - строковое данное, которое описывает товар более подробно;


- Цена товара – это строковое данное указывает цену товара. Цена товара будет именно строковым данным, сделано это для того, чтоб не указывать валюту (рубли, У.Е., евро, доллар США и т.д.) и деление на рубли и копейки.


4.
Описание программы создания набора данных


В данной программе записью будет являться товар, а полями записи будет информация о товаре. Поля товаров описаны в п. 3.4.


4.1 Программная организация записи


Программная организация записи описывается следующим образом:


Baza:record


FKod:integer;


FRazdel;


FPodRazdel;


FName:string;


FSeria:string;


FProizvod:string;


FOpisan:string;


FMany:string;


FSim:string; - символ разделитель в БД


End;


4.2 Файлы данных


Файлов данных работающих с программой можно разделить на основные и вспомогательные.


К основным относятся:


- bd.dat;


- Razdel.dat.


К вспомогательным относятся:


- Kod.dat;


- help.dat;


- BDVR.DAT.


4.2.1 bd.dat – это основной файл БД. В данном файле хранится информация о товарах. Каждая позиция товаров хранится в отдельной строке, и товары разделены символом «*».


Пример хранение информации о товаре:


1
– код товара;


1
– раздел «Уход за лицом»;


1
– подраздел «Гель»;


Гель для лица
– название товара;


Власть над временем
– Серия товара;


Oriflame
– производитель;


Гель для лица, замедляющий процесс старения кожи. Почувствуйте моментальный эффект лифтинга.
– Описание товара;


200.25
– цена товара;


*
- символ разделитель.


4.2.2 Razdel.dat – это файл, хранящий разделы и подразделы. В первой строке стоит код раздела и подраздела, а за ней стоит название раздела и подраздела и т.д.


Пример:


7


Дезодорант


Это запись означает, что в седьмом разделе есть подраздел «Дезодорант»


4.2.3 Kod.dat – это файл, хранящий коды товара. При создании нового товара программа считывает последний код, увеличивает на единицу и сохраняет в файле. Таким образом, код каждого товара уникален.


4.2.4 help.dat – файл справки.


4.2.5 BDVR.DAT – это файл временной БД. Этот файл необходим при удалении товара, когда товары переносятся во временный файл. За исключением удаленного товара, а затем основной файл БД перезаписывается.


5.
Описание программы формирование выходного документа


К выходным документам относятся:


- Вывод информации на экран;


- Вывод информации в файл.


5.1 Вывод информации на экран


Пример формирования выходного документа на экран см. в приложении 4 рис. 2


Экран в данной программе состоит из пяти частей:


– Заголовок. Заголовок находится в верхней части экрана и показывает, в каком разделе пользователь находится в настоящий момент. Так же при выборе пользователем подраздела в правой части заголовка выводится количество позиций (товаров) в данном подразделе.


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


– Подсказка. Подсказки находятся в левой части экрана под Меню. Здесь отображается клавиши управления для навигации по программе.


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


1) Помощь F1;


2) Новый F2;


3) Поиск F3;


4) Отчет F4;


5) Удалить F5;


6) Назад PageUp;


7) Далее PageDown;


8) Выход F10.


– Окно. Окно занимает основную часть экрана. Здесь отображается информация о товаре и сообщение, что товаров нет, если таковые отсутствуют в выбранном пользователем подразделе.


5.2 Вывод информации в файл


Информация в файл выводится при создании файла отчета. Отчет создается по двум критериям:


– По текущему товару;


– По текущему подразделу.


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


При нажатии в режиме работы с товарами кнопки F4 пользователю предлагается выбрать варианты отчета, по текущему товару или по текущему подразделу. После выбора условия отчета, пользователю предлагается ввести имя файла, в который будет сохранен отчет. Файл будет иметь расширение txt и находится в корневой папке с программой. Данные в файле будут отформатированы и неплохо оформлены.


Пример формирования выходного документа в файл см. в приложении 4 рис. 7.


6 Описание программы формирование списковой структуры


6.1 Область применения списковой структуры


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


6.2 Принцип работы


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


– Когда пользователь выбирает нужный ему подраздел, программа ищет в файле БД первый товар, если таковой вообще существует, который удовлетворяет выбранному пользователем разделу и подразделу и код этого товара добавляется в динамический список – стек.


– Далее программа выводит на экран информацию о товаре, код которого находится в вершине стека.


– При нажатии пользователем клавиши PageDown, вновь осуществляется поиск товара в БД, который соответствует выбранному пользователем разделу и подразделу, но уже программа проверяет, не находится ли код этого товара уже в стеке. Если нет, то код товара добавляется в стек и на экран выводится товар, код которого находится в вершине стека, т.е. зашедший в стек последний. При повторном нажатии на PageDown, проделывается все то же самое.


– Если нажата клавиша PageUp, то код товара, который является вершиной стека, просто удаляется и вершиной стека становится, уже предыдущий код товара, если, конечно же, это был не первый товар. А далее, как и в случае с PageDown выводится товар, код которого находится в вершине стека.


Подводя итог можно сказать, что фактически перемещение происходит в стеке, а на экран выводится лишь товар с кодом товара из вершины стека.


6.3 Процедуры, используемые при работе со списком.


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


При работе со списком используются следующие функции:


– Чтение элемента из списка;


– Добавление элемента в список;


– Поиск элемента в списке;


– Удаление элемент из списка.


6.3.1 Описание списка


Type


Integ=^integer;


Int:integer; {код товара}


Next:integ; {ссылка на следующий элемент}


end;


6.3.2 Чтение элемента из списка


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


6.3.3 Добавление элемента в список


Добавление кода товара в список происходит в процедуре AddSpisok, алгоритм которой заключается в следующем (Приложение 5, схема 12):


– Создается новый элемент;


– Записывается код товара из файла в список;


– Устанавливается указатель для поддержания целостности списка;


6.3.4 Поиск элемента в списке


Поиск осуществляется в процедуре PoiskFPR. Алгоритм поиска заключается в следующем:


– Переход на последний элемент списка – вершину стека;


– До тех пор пока не конец стека делать;


– Если текущий код товара из файла БД равен коду товара из списка, то условие выполнено, если нет, то считывается следующий элемент из списка и т.д.


6.3.5 Удаление элемента из списка.


Удаления кода товара из списка происходит в процедуре DelSpisok, в данной процедуре удаляется только последний элемент, который являлся вершиной стека, алгоритм данной процедуры заключается в следующем:


– Переход на последний элемент списка – вершина стека;


– Создание связи, со следующим элементом;


– Удаление элемента;


– Присваивание нового последнего элемента.


7 Технология обработки данных


Последовательность операций с данными заключается в следующем (приложение 5 схема 1):


– Создания разметки экрана (Приложение 4, рисунок 1);


– Создания и управление разделами и подразделами;


– Выбор режима работы;


– Вывод на экран товаров соответствующих разделу и подразделу;


– Операции над товарами;


7.1 Разметка экрана.


Разметка экрана реализуется при помощи процедуры Shapka. В данной процедуре реализуется следующее (приложение 5, схема 2):


– Создаются линии, которые разделяют экран;


– Создаются копки управления – кнопки управления с доступными функциями. Если на определенном этапе работы кнопка имеет серый цвет, то данная функция недоступна;


– Создается заголовок – раздел экрана, в котором выводится название раздела, в котором пользователь работает в настоящий момент;


– Создаются окно подсказки – в данном окне выводятся подсказки для пользователя, необходимые для работы в определенный момент.


7.2 Управление разделами и подразделами.


Управление разделами и подразделами реализовано в процедуре Perem, следующим образом:


– Вывод на экран разделов или подразделов;


– Перемещение внутри раздела или подраздела;


– Выбор режима работы.


7.2.1 Вывод на экран разделов или подразделов.


Данный раздел осуществляется при помощи процедуры PodRazdel. Реализация в данной процедуре происходит следующим образом (приложение 5, схема 3):


– Открытие файла razdel.dat для чтения. В данном файле содержится название всех разделов и подразделов и специальные коды для распознавания (структуру файла см. п. 4.2.2). Например, если стоит код 0, то данная позиция относится к разделу, и будет выводиться только, в случае отображение разделов. Если стоит единица, то это означает, что данный подраздел соответствует первому разделу и т.д.


– Программа, считывает доступные разделы и подразделы из файла, который находится в корневой папке с программой и добавляет их в массив PodRaz. Если программа только запущенна, то выводятся разделы из файла имеющие код 0, если, к примеру, выбран раздел «детские товары», то из файла разделов считываются подразделы, которым соответствует код 3.


– Закрытие файла.


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


7.2.2 Перемещение внутри раздела или подраздела.


Операции по перемещению заключаются в следующем (приложение 5, схема 4):


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


– Пользователю предлагается ввести при помощи курсора направления перемещения.


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


– При работе с разделами и подразделами у пользователя есть еще три допустимых операций: помощь, поиск и вход (см. п. 7.3).


7.3 Выбор режима работы.


Во время перемещения по позициям меню пользователю доступны три операции (Приложение 5, схема 5):


– Помощь;


– Поиск;


– Вход.


7.3.1 Помощь.


Вход в режим справки осуществляется по нажатию клавиши F1 (Приложение 4, рисунок 3).


Данная операция реализована в процедуре Help, следующим образом (приложение 5, схема 8):


– Открывается файл help.dat для чтения. Данный файл содержит справочную информацию о работе с программой.


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


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


7.3.2 Поиск.


В ход в режим поиска осуществляется по нажатию клавиши F3 (Приложение 4, рисунок 5).


Данная операция реализована в процедуре Poisk, следующим образом (приложение 5, схема 7):


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


– Далее пользователю предлагается ввести текст для поиска.


– После ввода текста поиска, программа открывает файл BD.dat для чтения.


– Далее происходит считывание каждой позиции из БД и сравнение с введенным текстом.


– Если очередная позиция товара соответствует условию поиска, то алгоритм приостанавливается и данный товар выводится на экран при помощи процедуры Tablo (см. п. 7.4.4), и поиск дальнейших товаров продолжается лишь, после того как будет нажата клавиша Page Down (Далее);


– После завершения поиска файл БД закрывается и на экран выводится сообщение, что больше совпадений не найдено.


– Далее на экран выводится разметка и элементы меню для дальнейшей работы.


7.3.3 Вход.


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


Обработка действий при нажатии клавиши Enter, осуществляется в процедуре Vhod. Алгоритм данной процедуры заключается в следующем (приложение 5, схема 6):


– Проверяется, если открыт подраздел, а не раздел, то выводится на экран товары данного подраздела. Данный пункт осуществляется при помощи процедуры Vivod (см. п. 7.4);


– Если открыт, радел, то программа считывает, какой раздел был выбран и в зависимости от выбора раздела программа определяет подразделы, которые соответствуют выбранному пользователем разделу. Реализуется данная операция при помощи процедуры Podrazdel (п. 7.2.1);


– Если открыт режим подразделов и нажата клавиша Backspace, то на экран выводятся разделы.


7.4 Вывод на экран товаров соответствующих разделу и подразделу.


Вывод товаров на экран осуществляется, после того как пользователь нажмет клавишу Enter на нужном подразделе (Приложение 4, рисунок 2). Данная операция реализована в процедуре Viviod, алгоритм которой заключается в следующем (приложение 5, схема 9):


– Считывается количество товаров в данном подразделе. Данная операция осуществляется в процедуре Schet (см. п. 7.4.1);


– Считывается первый товар из подраздела и код первого товара добавляется в список (см. в п. 6.3.3). Данная операция реализована в процедуре PR (см. п. 7.4.2);


– Вывод на экран товара соответствующего последнему, коду товара из списка, реализуется данная операция в процедуре WriteSpisok (см. в п. 7.4.4). Таким образом, на экране выводится первый товар из БД, соответствующий разделу и подразделу.


– Далее пользователю предлагается выбрать дальнейшие действия, которые можно разделить на передвижение и операции. Об операциях над товарами более подробно будет описано в п. 7.5, а передвижение, в случае, если товаров более одного, осуществляется при помощи клавиш Page Up (назад), Page Down (вперед);


– Если нажата клавиша Page Down, то программа ищет в БД следующий товар, который соответствует, разделу и подразделу (если они вообще существуют), но с условием, что ранее показанные товары отображаться не будут, т.е. те товары, коды которых находятся в списке. Данная операция реализована в процедуре PoiskFPR (см. п. 7.4.3, поиск в списке см. п. 6.3.4);


– После того как найден очередной товар, соответствующий разделу и подразделу и он ранее не был отображен, то код этого товара добавляется в список. Реализовано данная операция в процедуре AddSpisok (см. в п. 6.3.3);


– Далее на экран выводится товар с кодом товара, записанным последним в список. Реализована данная операция при помощи процедуры WriteSpisok (см. п. 7.4.4);


– Если нажата клавиша PageUp, то проверяется, не первый ли это товар, в данном разделе и подразделе. Если нет, то удаляется последний элемент из списка (процедура DelSpisok, см. в п. 6.3.5) и выводится товар, с кодом товара, который теперь уже стал первым (процедура WriteSpisok, см. п. 7.4.4);


– По мимо передвижения доступны и другие функции, которые будут описаны в п. 7.5.


7.4.1 Процедура Schet.


Данная процедура выводит общее количество товаров в выбранном пользователем разделе и подразделе. Реализована данная процедура следующим образом (приложение 5, схема 10):


– Обнуляется счетчик;


– Открываем файл БД для чтения;


– Считывается очередной товар;


– Если раздел и подраздел очередного товара, соответствуют выбранному пользователем разделу и подразделу, то счетчик увеличивается на единицу;


– Закрываем файл БД


7.4.2 Процедура PR.


Данная процедура добавляет код первого товара в список. Реализовывается данная процедура следующим образом (приложение 5, схема 11):


– Открывается файл для чтения;


– Считывается очередной товар;


– Если раздел и подраздел очередного товара, соответствуют выбранному пользователем разделу и подразделу, то добавляем код товара в список, используя процедуру AddSpisok (см. в п. 6.3.3).


7.4.3 Процедура PoiskFPR.


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


– Открывается файл БД;


– Считывается очередной товар;


– Если раздел и подраздел очередного товара, соответствуют выбранному пользователем разделу и подразделу, то проверяется, является ли код данного товара в списке, т.е. осуществляется поиск в списке (см.п. 6.3.4).


– Если код текущего товара из БД отсутствует в списке, то процедура прерывается. И затем код этого товара добавляется в список (процедура AddSpisok п. 6.3.3).


7.4.4 Процедура WriteSpisok.


Данная процедура выводит товар на экран. Реализована она следующим образом (приложение 5, схема 9):


– Выводит в верхнюю часть экрана общее количество товаров в подразделе;


– Открывается файл БД для чтения;


– Считывается последний код товара из списка;


– Поиск в БД и вывод на экран, товара с кодом из списка. Вывод на экран осуществляется при помощи процедуры Tablo. В данной процедуре отсутствуют, какие либо циклы или условия, там лишь вывод в необходимую координату экрана текста из БД, по этому останавливаться на данной процедуре нет смысла.


– Закрытие файла БД.


7.5 Операции над товарами.


При работе с товарами доступны следующие операции:


– Новый товар в текущий раздел и подраздел;


– Отчет;


– Удалить товар.


7.5.1 Новый товар в текущий раздел и подраздел.


Данная операция вносит информацию о новом товаре в текущий раздел и подраздел (Приложение 4, рисунок 4). Реализована данная операция при помощи процедуры NewTovar, алгоритм которой заключается в следующем (приложение 5, схема 4):


– На экране появляется форма для заполнения информации о товаре;


– После ввода информации у пользователя спрашивают, сохранить или нет.


– Если нажата, кнопка сохранить, то открывается файл для чтения kod.dat.


– Из выше указанного файла считывается последний внесенный код товара.


– Файл kod.dat, находящийся в режиме чтения, закрывается;


– Файл kod.dat открывается в режиме добавления;


– Последний считанный код товара увеличивается на единицу и последний сохраняется в файл;


– Файл kod.dat закрывается;


– Открывается файл БД в режиме добавления и в конец файла добавляется новый товар;


– Закрывается файл БД;


– На экран выводится разметка и подразделы.


7.5.2 Отчет.


Описание создание отчетов описано в п. 5.2. Реализована функция создания отчетов в процедуре PrintF, алгоритм которой заключается в следующем (приложение 5, схема 16):


– Выбор критерий отчета: по текущему товару или по текущему подразделу (Приложение 4, рисунок 6);


– Пользователю предлагается ввести имя файла, в который будет сохранен отчет (Файл будет сохранен в корневой каталог с программой, и будет иметь расширение txt);


– Создание файла с вышеуказанным именем и расширением;


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


– По окончании выводится последний, просматриваемый товар.


7.5.3 Удалить товар.


Реализована функция удаления товара в процедуре Del, алгоритм которой заключается в следующем (приложение 5, схема 15):


– У пользователя уточняется, действительно ли он хочет удалить товар;


– Если да то открывается файл БД для чтения и открывается временный файл в режиме перезаписи;


– Каждый элемент из БД копируется во временный файл, за исключением того которого, хотят удалить, т.е. того код, которого находится в вершине списка;


– Закрываются оба файла;


– Открытие файла БД в режиме перезаписи и временного файла в режиме чтения;


– Вся информация из временного файла, целиком копируется в файл БД;


– Файлы закрываются;


– Выводится сообщение, что запись удалена;


– Обновление информации на экране.


8
Заключение


Подведем итог того, что все-таки удалось в данном курсовом проекте:


– Удалось создать неплохую сортировку, что облегчает работу с товарами, на мой взгляд, эта основа любой БД;


– Удалось создать достаточно простой и интуитивно понятный интерфейс, без каких либо излишеств;


– В программе реализованы основные функции работы с БД – удаление, добавление, отчетность, поиск;


– Показано когда, какая функция доступна;


– Отражено, в каком разделе осуществляется работа, т.к. некоторые разделы содержат одинаковые подразделы и можно запутаться;


– Существует справочная система и система подсказок. Хотя над справкой можно было еще поработать;


– Достаточно простое управление товарами;


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


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


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


9
Список литературы


9.1 Учебное пособие. «Структуры и алгоритмы обработки данных в ЭВМ», А. Н. Горитов, г. Томск


9.2 Самоучитель. «Программирование в Turbo Pascal», Н. Культин.


9.3 Открытие Интернет источники.


Приложение 1 - Графическое описание данных


Разделы
















Подразделы у каждого раздела
















Товара у каждого подраздела





Схема 1 – Общая схема описания хранения данных


Каждый раздел имеет иерархическою структуру представленную на схеме 2






Раздел







Схема 2 – структура раздела


Прилож

ение 2 - Представление данных в памяти ЭВМ


nomer:integer; - 2 байта;


i:integer; - 2 байта;


ch:char; - 1 байт;


Rozd:string; - 2 байта;


nabor:integer; - 2 байта;


men:array[1..16] of integer; - 2х16 - 32 байта;


strok:integer; - 2 байта;


lom:integer; - 2 байта;


vof:boolean; - 1 байт;


Razdel:integer; - 2 байта;


PodRazd:integer; - 2 байта;


MRazdel:integer; - 2 байта;


ScetRP:integer; - 2 байта;


hod:integer; - 2 байта;


kolvo:integer; - 2 байта;


Text1:string[19]; - 2 байта;


Text2:string[19]; - 2 байта;


Text3:string[19]; - 2 байта;


Text4:string[19]; - 2 байта;


f1:integer; - 2 байта;


f2:integer; - 2 байта;


f3:integer; - 2 байта;


f4:integer; - 2 байта;


f8:integer; - 2 байта;


pd:integer; - 2 байта;


pu:integer; - 2 байта;


f10:integer; - 2 байта;


Prin:boolean; - 1 байт;


Fsim:string; - 2 байта;


FKod:integer; - 2 байта;


FRazdel:integer; - 2 байта;


FPodRazdel:integer; - 2 байта;


FName:String; - 2 байта;


FSeria:string; - 2 байта;


FProizvod:string; - 2 байта;


FOpisan:string; - 2 байта;


FMany:string; - 2 байта;


MainName:string; - 2 байта;


PodRaz:array[1..16] of string; - 2 х 16 – 32 байта;


z:integer; - 2 байта;


d:string; - 2 байта;


opis1:string; - 2 байта;


opis2:string; - 2 байта;


opis3:string; - 2 байта;


Good,Nal:boolean; - 1 байт;


zed:integer; - 2 байта;


fname1:string; - 2 байта;


fname2:string; - 2 байта;


fname3:string; - 2 байта;


kod:integer; - 2 байта;


hod:integer; - 2 байта;


punkt:integer; - 2 байта;


NSP:string; - 2 байта;


fol:integer; - 2 байта;


k:string; - 2 байта;


n:integer; - 2 байта;


В итоге 168 байт.


Приложение 3 - Рисунок списковой структуры



Рисунок – 1 - схема списковой структуры - стек


Приложение 4 – Формат выходного документа.



Рисунок 1 – Разметка экрана



Рисунок 2 – Просмотр товаров



Рисунок 3 – Помощь



Рисунок 4 – Добавление товара



Рисунок 5 – Критерии поиска



Рисунок 6 – Отчет



Рисунок 7 – Выходной документ в файл


Приложение 5 – Схема последовательности обработки данных.





Схема 1 – Общая схема





Схема 2 – Разметка экрана





Схема 3 – вывод разделов и подразделов





Вверх


Вниз



Схема 4 – Перемещение по меню



Enter F1






F3



Схема 5 – Выбор режима работы



нет



Да



Вход


Вниз



Схема 6 - События по нажатию Enter



1 3






2




нет



Да




Да



нет



Схема 7 - Поиск



Да



Нет



Схема 8 - Помощь







Поиск следующего товара, схема 1000




Операции


с товарами



Передвижение











PageDown PageUp



ESC



Схема 9 – Вывод товара на экран



Схема 10 – Вывод общего количества товаров




Схема 11 – Найти первый товар



Схема 12 – Добавить код товара в список



Да


нет



Схема 13 – Поиск следующего товара



Нет



Да



Схема 14 – Добавление нового товара



Нет



Да



Схема 15 – Удаление товара



По товару По подразделу



Схема 16 – Отчет по товарам


Приложение 6 Листинг программы


program parfum;


uses crt;


type {Список в котором содержатся код товаров}


integ=^int;


int=record


nomer:integer; {Код товара}


next:integ; {Ссылка на следующий элемент}


end;


var Nach:integ; {Начало списка}


tek:integ; {Текущий элемент списка}


d:integ; {Переменная для работы со списком}


i:integer; {Счетчик}


ch:char; {Ввод с клавиатуры}


Rozd:string; {Выбранный раздел}


nabor:integer; {Счетчик числа элементов меню}


men:array[1..16] of integer;{Массив вывода элементы Главного меню}


strok, stolb:integer;{Пункты меню}


lom:integer; {Переменная для работы с Главным меню}


vof:boolean; {Переменная указывает что массив цветов уже заполнен}


Razdel:integer;{Переменная которая указывает открытую главу}


PodRazd:integer; {Переменная которая указывает открыт подраздел}


MRazdel:integer; {Переменная которая указывает открыт раздел}


stek:text;{Файл в который добавляется код товара}


{KodStek:integer;}


ScetRP:integer; {Счетчик позиций в указанном разделе и подразделе}


hod:integer; {Ходы вверх вниз в списке}


kolvo:integer; {Количество элементов в списке}


Text1,Text2,Text3,Text4:string[19]; {Комментарии}


f:text; {Файловая переменная}


f1,f2,f3,f4,f8,pd,pu,f10:integer; {Цвета пунктов внизу экрана}


Prin:boolean;{логическая переменная для печать текущей позиции}


Baza:record {Переменные для работы с файлами}


Fsim:string; {Символ-разделитель}


FKod:integer; {Код товара}


FRazdel:integer; {Раздел}


FPodRazdel:integer; {Подраздел}


FName:String; {Название}


FSeria:string; {Серия}


FProizvod:string; {Производитель}


FOpisan:string; {Описание товара}


FMany:string; {Цена}


end;


procedure shapka; {Выводит разметку на экран, а именно горизонтальные и


вертикальные линии и кнопки управления внизу экрана,


а так же заголовок раздела и подраздела}


var MainName:string; {Название подраздела}


begin


GoToXY(30,1); Textcolor(14);


GoToXY(1,2); Textcolor(11); For i:=1 to 80 do write('-');


for i:=3 to 21 do


begin


GoToXY(20,i); Textcolor(11); writeln('|');


end;


GoToXY(1,22); For i:=1 to 80 do write('-');


GoToXY(1,23); Textcolor(F1); writeln('Помощь F1|');


GoToXY(11,23); Textcolor(F2); writeln('Новый F2|');


GoToXY(20,23); Textcolor(f3); writeln('Поиск F3|');


GoToXY(29,23); Textcolor(f4); writeln('Отчет F4|');


GoToXY(38,23); Textcolor(f8); writeln('Удалить F8|');


GoToXY(49,23); Textcolor(pu); writeln('Назад PUp|');


GoToXY(59,23); Textcolor(pd); writeln('Далее PDown|');


GoToXY(71,23); Textcolor(f10); writeln('Выход F10');


GoToXY(1,24); For i:=1 to 80 do write('-');


GoToXY(1,17); Textcolor(11); writeln('-------------------');


if rozd='0'Then MainName:='ПАРФЮМЕРНЫЙ МАГАЗИН';


if rozd='1'Then MainName:='УХОД ЗА ЛИЦОМ';


if rozd='2'Then MainName:='УХОД ЗА КОЖЕЙ';


if rozd='3'Then MainName:='ДЕТСКИЕ ТОВАРЫ';


if rozd='4'Then MainName:='МАНИКЮР';


if rozd='5'Then MainName:='ПАРФЮМЕРИЯ';


if rozd='6'Then MainName:='УХОД ЗА ТЕЛОМ';


if rozd='7'Then MainName:='ТОВАРЫ ДЛЯ МУЖЧИН';


if rozd='8'Then MainName:='УХОД ЗА ВОЛОСАМИ';


if rozd='9'Then MainName:='ДРУГИЕ ТОВАРЫ';


GoToXY(30,1); Textcolor(13);writeln(MainName);


GoToXY(1,18); Textcolor(12); writeln(Text1);


GoToXY(1,19); Textcolor(12); writeln(Text2);


GoToXY(1,20); Textcolor(12); writeln(Text3);


GoToXY(1,21); Textcolor(12); writeln(Text4);


end;


procedure podRazdel; {Считывает из файла разделы и подразделы в


зависимости от выбранного и выводит на экран}


var PodRaz:array[1..16] of string;{Массив разделов и под разделов}


z:integer; {Строка с которой начинается вывод пунктов меню}


f:text; {Файловая переменная}


d:string; {Переменная которой присваивается очередное считанное значение из файла}


begin


assign (f,'e:prograzdel.dat'); {Файл который содержит разделы и подразделы}


reset(f);


nabor:=0;


while not Eof(f) do


{До тех пор пока не конец файла делать


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


записать ее в массив}


begin


Readln(f,d);


if d=rozd then


begin


nabor:=nabor+1;


Readln(f,d);


PodRaz[nabor]:=d;


end


else Readln(f,d);


end;


close(f);


{Вывод на экран пунктов и подпунктов меню из массива, закрашенных цветами


из массива цветов}


z:=3;


for i:=1 to nabor do


begin


Textcolor(men[i]);


GoToXY(2,z);


writeln(PodRaz[i]);


z:=z+1


end;


end;


procedure ADDSpisok;{Добавляет в динамический список код товара, для


дальнейшего перемещения}


begin


new(tek); {создаем новый элемент}


tek^.nomer:=Baza.FKod;{записываем данное}


tek^.next:=nach;{устанавливаем указатели}


nach:=tek; {для поддержания целостности списка}


kolvo:=kolvo+1; {Увеличиваем количество добавленных элементов}


end;


procedure Tablo;


{Процедура выводит позиции товаров на экран}


var opis1,opis2,opis3:string; {Разбивает строку на три части т.к. не влезает}


begin


GoToXY(22,3);Textcolor(10);writeln('Kод товара ');


GoToXY(33,3);Textcolor(11);writeln(Baza.FKod);


GoToXY(43,3);Textcolor(10);writeln('Раздел ');


GoToXY(50,3);Textcolor(11);writeln(Baza.FRazdel);


GoToXY(60,3);Textcolor(10);writeln('Подраздел ');


GoToXY(70,3);Textcolor(11);writeln(Baza.FPodRazdel);


GoToXY(22,5);Textcolor(10);writeln('Название: ');


opis1:=copy(Baza.FName,1,58);


opis2:=copy(Baza.FName,59,117);


opis3:=copy(Baza.FName,118,126);


GoToXY(22,6);Textcolor(11);writeln(Opis1);


GoToXY(22,7);Textcolor(11);writeln(Opis2);


GoToXY(22,8);Textcolor(11);writeln(Opis3);


GoToXY(22,10);Textcolor(10);writeln('Серия:');


GoToXY(30,10);Textcolor(11);writeln(Baza.FSeria);


GoToXY(22,12);Textcolor(10);writeln('Производитель:');


GoToXY(22,13);Textcolor(11);writeln(Baza.FProizvod);


opis1:=copy(Baza.FOpisan,1,58);


opis2:=copy(Baza.FOpisan,59,117);


opis3:=copy(Baza.FOpisan,118,126);


GoToXY(22,15);Textcolor(10);writeln('Описание:');


GoToXY(22,16);Textcolor(11);writeln(Opis1);


GoToXY(22,17);Textcolor(11);writeln(Opis2);


GoToXY(22,18);Textcolor(11);writeln(Opis3);


GoToXY(22,20);Textcolor(10);writeln('Стоимость');


GoToXY(35,20);Textcolor(11);writeln(Baza.FMany);


end;


procedure writeSpisok; {Процедура вывода позиций товара чей код


последним записан в список}


var f:text;


begin


if ScetRP<>0 then


begin


tek:=nach;{Считать первый элемент списка и найти в файле товар с


таким кодом}


assign(f,'e:progbd.dat');


reset(f);


while not Eof(f) do {Считываем из файла бд}


begin


readln(f,Baza.FKod);


readln(f,Baza.FRazdel);


readln(f,Baza.FPodRazdel);


readln(f,Baza.FName);


readln(f,Baza.FSeria);


readln(f,Baza.FProizvod);


readln(f,Baza.FOpisan);


readln(f,Baza.FMany);


readln(f,Baza.FSim);


if Baza.FKod=tek^.nomer Then {Если код товара из списка = коду товара


из файла значит вывести на экран позиции товара}


begin


clrscr;


shapka; podRazdel;


GoToXY(1,1); {write ('MRazdel=',MRazdel,' Podrazd=',lom);}


GoToXY(60,1); Write('Всего позиций: ',ScetRP);


Tablo;


end;


end;


close(f);


end


else


begin


GoToXY(22,11);Textcolor(10);writeln('Товаров нет, для выхода из данной категории нажмите ESC');


f1:=7;f2:=11;f3:=7;f4:=7;f8:=7;pu:=7;pd:=7;f10:=7; {Цвета нижних кнопок}


Text1:='Двигайтесь кнопками';


Text2:='PageDown,PageUp '; {Подсказки}


Text3:='Для выхода нажмите ';


Text4:='ESC ';


shapka;podrazdel;


{writeln('Enter');


readln;}


end;


end;


procedure DelSpisok; {Удаляет последний элемент списка}


begin


tek:=nach; {Переходим в начало}


nach:=tek^.next; {Связываем}


dispose(tek); {Удаляем}


tek:=nach;


kolvo:=kolvo-1; {Уменьшаем количество элементов в списке на 1}


end;


procedure RP; {Считывает из файла первый товар соответствующий разделу


и подразделу}


{var lon:boolean;


{ f:text;}


begin


{lon:=false;{}


assign (f,'e:progbd.dat');


reset(f);


while (not Eof(f)) do


begin


readln(f,Baza.FKod);


readln(f,Baza.FRazdel);


readln(f,Baza.FPodRazdel);


readln(f,Baza.FName);


readln(f,Baza.FSeria);


readln(f,Baza.FProizvod);


readln(f,Baza.FOpisan);


readln(f,Baza.FMany);


readln(f,Baza.FSim);


{Если раздел из файла = выбранному разделу и подраздел


из файла=выбранному подразделу}


If (Baza.FRazdel=MRazdel) and (Baza.FPodRazdel=Podrazd) then


begin


addspisok; {Добавляем в список}


break;


end;


end;


end;


procedure PoiskFPR; {Поиск элемента соответствующей разделу и


подразделу в списке и в файле}


var {f:text;}


Good,Nal:boolean;


zed:integer;


begin


assign (f,'e:progbd.dat');


reset(f);


nal:=false;


while (not Eof(f)) or (nal=false) do {Считывает данные из файла бд}


begin


readln(f,Baza.FKod);


readln(f,Baza.FRazdel);


readln(f,Baza.FPodRazdel);


readln(f,Baza.FName);


readln(f,Baza.FSeria);


readln(f,Baza.FProizvod);


readln(f,Baza.FOpisan);


readln(f,Baza.FMany);


readln(f,Baza.FSim);


If ((Baza.FRazdel=MRazdel) and (Baza.FPodRazdel=Podrazd)) then


begin {Если очередной товар в бд соответствует разделу и


подразделу тогда проверяется есть ли очередной код товара


в списке, если есть то ищет в бд следующий товар, если


нет то добавляет в список}


zed:=0;


Good:=false;


d:=nil;


tek:=nach;


while (tek<>NIL) or (Good=false) do


begin


if tek^.nomer = Baza.FKod then Good:=true;


d:=tek;


tek:=tek^.next;


zed:=zed+1;


if zed=kolvo then break;


end;


if Good<>true then


begin


nal:=true;


break;


end;


end;


end;


close(f);


end;


procedure schet; {Процедура выводит количество позиций в выбранном разделе


и подразделе}


{var f:text;{}


begin


ScetRP:=0;


assign(f,'e:progbd.dat');


reset(f);


while not Eof(f) do


begin


readln(f,Baza.FKod);


readln(f,Baza.FRazdel);


readln(f,Baza.FPodRazdel);


readln(f,Baza.FName);


readln(f,Baza.FSeria);


readln(f,Baza.FProizvod);


readln(f,Baza.FOpisan);


readln(f,Baza.FMany);


readln(f,Baza.FSim);


if (Baza.FRazdel=MRazdel) and (Baza.FPodRazdel=Podrazd) then


ScetRP:=ScetRP+1;


end;


close(f);


end;


Procedure Del; {Процедура удаление товара}


var FDel:text;{Временный файл для не удаленных товаров}


begin


GoToXY(27,21);Textcolor(21);


writeln('Вы действительно хотите удалить файл Y/N');


ch:=readkey;


if (ord(ch)=121) or (ord(ch)=173) then


begin


assign(f,'e:progbd.dat');


assign(fDel,'e:progbdvr.dat');


reset(f);


rewrite(fdel);


while not Eof(f) do {Считывается очередной товар из бд}


begin


readln(f,Baza.FKod);


readln(f,Baza.FRazdel);


readln(f,Baza.FPodRazdel);


readln(f,Baza.FName);


readln(f,Baza.FSeria);


readln(f,Baza.FProizvod);


readln(f,Baza.FOpisan);


readln(f,Baza.FMany);


readln(f,Baza.FSim);


If Baza.FKod<>tek^.nomer then {Если текущая позиция в списке не


равно текущему коду товара то все позиции товара переносятся


во временный файл bddvr}


begin


writeln(fdel,Baza.FKod);


writeln(fdel,Baza.FRazdel);


writeln(fdel,Baza.FPodrazdel);


writeln(fdel,Baza.FName);


writeln(fdel,Baza.FSeria);


writeln(fdel,Baza.FProizvod);


writeln(fdel,Baza.FOpisan);


writeln(fdel,Baza.FMany);


writeln(fdel,Baza.FSim);


end


end;


close(f);


close(fDel);


reset(fDel);


rewrite(f);


while not Eof(fDel) do {После переноса во временный файл, но уже без


удаленного элемента происходит перезапись файла бд из временного}


begin


readln(fDel,Baza.FKod); writeln(f,Baza.FKod);


readln(fDel,Baza.FRazdel); writeln(f,Baza.FRazdel);


readln(fDel,Baza.FPodRazdel); writeln(f,Baza.FPodrazdel);


readln(fDel,Baza.FName); writeln(f,Baza.FName);


readln(fDel,Baza.FSeria); writeln(f,Baza.FSeria);


readln(fDel,Baza.FProizvod); writeln(f,Baza.FProizvod);


readln(fDel,Baza.FOpisan); writeln(f,Baza.FOpisan);


readln(fDel,Baza.FMany); writeln(f,Baza.FMany);


readln(fDel,Baza.FSim); writeln(f,Baza.FSim);


end;


close(fdel);


close(f);


GoToXY(27,21);Textcolor(21); writeln('Запись удалена для продолжения работы нажмите ESC');


end;


if ord(ch)=110 then begin


GoToXY(27,21);Textcolor(21); writeln('Удаление отменено для продолжения работы нажмите ESC');


end;


end;


Procedure PrintF; {Процедура Печать в файл}


var fname1,fname2,fname3:string; {Переменные указывающие путь к файлу}


fotchet:text; {переменная файла отчета}


begin


clrscr;


GoToXY(10,10); Textcolor(11);writeln('Для печати всех позиций текущего подраздела нажмите F3');


GoToXY(10,12);writeln('Для печати текущей позиций нажмите F5');


GoToXY(10,14);writeln('Для выхода нажмите Backspace');


repeat


ch:=readkey;


if (ord(ch)=61) or (ord(ch)=63) then {Вводится имя будущего


файла и создается шапка в файле отчета}


begin


fname1:='e:prog';


fname3:='.txt';


GoToXY(10,16);writeln('Введите имя файла в который необходимо сохранить отчет');


GoToXY(10,17);writeln('и нажмите ввод. Файл отчета находится в корневой папке');


GoToXY(10,19);readln(fname2);


assign(fotchet,fname1+fname2+fname3);


assign(f,'e:progbd.dat');


reset(f);


rewrite(fotchet);


end;


if ord(ch)=61 then {Если нажата F3 то создается отчет состоящий из


товаров текущего подраздела}


begin


writeln(fotchet,'Отчет по подразделу ');


writeln;


writeln(fotchet,'---------------------------------------------------------');


while not Eof(f) do


begin


readln(f,Baza.FKod);


readln(f,Baza.FRazdel);


readln(f,Baza.FPodRazdel);


readln(f,Baza.FName);


readln(f,Baza.FSeria);


readln(f,Baza.FProizvod);


readln(f,Baza.FOpisan);


readln(f,Baza.FMany);


readln(f,Baza.FSim);


if (Baza.FRazdel=MRazdel) and (Baza.FPodRazdel=Podrazd) then


begin


write (fotchet,'Код товара '); writeln(fotchet,Baza.FKod);


write (fotchet,'Название ');writeln(fotchet,Baza.FName);


write (fotchet,'Серия ');writeln(fotchet,Baza.FSeria);


write (fotchet,'Производитель ');writeln(fotchet,Baza.FProizvod);


write (fotchet,'Описание ');writeln(fotchet,Baza.FOpisan);


write (fotchet,'Цена ');writeln(fotchet,Baza.FMany);


writeln(fotchet,'-----------------------------------------');


end;


end;


close(fotchet);


close(f);


end;


if ord(ch)=63 then {Если нажата F5 то в файл отчета добавляется только


текущая позиция}


begin


tek:=nach;


writeln(fotchet,'Отчет по текущему товару');


writeln;


writeln(fotchet,'---------------------------------------------------------');


while not Eof(f) do


begin


readln(f,Baza.FKod);


readln(f,Baza.FRazdel);


readln(f,Baza.FPodRazdel);


readln(f,Baza.FName);


readln(f,Baza.FSeria);


readln(f,Baza.FProizvod);


readln(f,Baza.FOpisan);


readln(f,Baza.FMany);


readln(f,Baza.FSim);


if (Baza.FKod=tek^.nomer) then


begin


write (fotchet,'Код товара '); writeln(fotchet,Baza.FKod);


write (fotchet,'Название ');writeln(fotchet,Baza.FName);


write (fotchet,'Серия ');writeln(fotchet,Baza.FSeria);


write (fotchet,'Производитель ');writeln(fotchet,Baza.FProizvod);


write (fotchet,'Описание ');writeln(fotchet,Baza.FOpisan);


write (fotchet,'Цена ');writeln(fotchet,Baza.FMany);


writeln(fotchet,'-----------------------------------------');


end;


end;


close(fotchet);


close(f);


end;


until (ord(ch)=8) or (ord(ch)=61) or (ord(ch)=63);


{Закрыте файлов и вывод на прежнее место}


clrscr;


shapka;


writespisok;


end;


procedure NewTovar; {Процедура добавления нового товара}


var f1,f2,f3:text; {Файловые переменные}


kod:integer; {Переменная которой присваивается новый код товара}


begin


clrscr;


Baza.FRazdel:=MRazdel; Baza.FPodRazdel:=PodRazd;


{Форма заполнения данных о новом товаре}


GoToXY(10,1); Textcolor(10); Writeln('Заполните форму. После заполнение очередного пункта нажмите ввод');


GoToXY(3,4); writeln('Раздел ',Baza.FRazdel);


GoToXY(3,5); writeln('Подраздел ',Baza.FPodRazdel);


GoToXY(3,6); Writeln('Опешите назначение товара');


GoToXY(3,8); Writeln('Введите серию товара, если нет то введите символ "-" ');


GoToXY(3,10); Writeln('Введите производителя');


GoToXY(3,12); Writeln('Опешите товар подробнее');


GoToXY(3,22); Writeln('Цена товара');


GoToXY(3,5); Textcolor(11);


GoToXY(3,7);readln(Baza.FName);


GoToXY(3,9);readln(Baza.FSeria);


GoToXY(3,11);readln(Baza.FProizvod);


GoToXY(3,13);readln(Baza.FOpisan);


GoToXY(20,22);readln(Baza.FMany);


GoToXY(10,23);Textcolor(10); Writeln('Сохранить Y, Отмена N');


ch:=readkey;


if (ord(ch)= 121) or (ord(ch)= 173) then {Если нажата Y на английском


и Н на русском, то считывается из файла, который хранит коды товаров,


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


в файл кодов}


begin


clrscr;


assign(f2,'e:progkod.dat');


reset(f2);


while not Eof(f2) do readln(f2,Kod);


close(f2);


Baza.FKod:=Kod+1;


append(f2);


write(f2,'');


writeln(f2,Baza.FKod);


close(f2);


assign(f3,'e:progbd.dat');


{Записывает в БД информацию о новом товаре}


append(f3);


writeln(f3,Baza.FKod);


writeln(f3,Baza.FRazdel);


writeln(f3,Baza.FPodRazdel);


writeln(f3,Baza.FName);


writeln(f3,Baza.FSeria);


writeln(f3,Baza.FProizvod);


writeln(f3,Baza.FOpisan);


writeln(f3,Baza.FMany);


writeln(f3,'*');


close(f3);


GoToXY(18,12); writeln('Запись сохранена для продолжения нажмите ввод');


readln;


end;


clrscr;


shapka;


podRazdel;


GoToXY(27,21);Textcolor(21); writeln('Для продолжения работы нажмите ESC');


end;


procedure vivod; {Основная процедура вывода}


{Общий принцип: На экране появляется первый элемент выбранного раздела и подраздела


Далее пользователь при помощи кнопок PageUp PageDown перемещается по всем товарам}


var hod:integer; {Счетчик ходв}


begin


schet; {Считать общее количество позиций}


f1:=7;f2:=11;f3:=7;f4:=11;f8:=11;pu:=11;pd:=11;f10:=7; {Переменные цвета нижних кнопок}


Text1:='Двигайтесь кнопками';


Text2:='PageDown,PageUp'; {Подсказки}


Text3:='Для выхода нажмите';


Text4:='ESC';


RP; {Выводится первый товар}


hod:=1; {Сделан первый ход}


writeSpisok; {Вывести на экран товар соответствующий коду товара из списка}


repeat


ch:=readkey;


if (ord(ch)=81) and (ScetRP<>0) then {Если нажата PageDown}


begin


if ScetRP<>hod then


begin


hod:=hod+1;


PoiskFPR; {Считывается весь файл и проверяется соответствие каждого товара


разделу и подразделу и проверяет входит ли код товара в список


если входит то ищет дальше если нет то...}


addspisok; {Если нет то добавляет в список}


writeSpisok; {Выводит товар соответствующий коду товара из списка}


end;


end;


if (ord(ch)=73) and (ScetRP<>0) then {Если нажата PageUp}


begin


if hod<>1 then


begin


hod:=hod-1;


DelSpisok; {Удаляет последний элемент списка}


writeSpisok; {Выводит уже другой последний элемент}


end;


end;


if ord(ch)=60 then NewTovar; {Если нажата F2 то в данный раздел и подраздел ввести новый товар}


if (ord(ch)=66) and (ScetRP<>0) then Del;{Если нажата клавиша F8, то процедура удаление товара}


if (ord(ch)=62) and (ScetRP<>0) then PrintF;{Если нажата клавиша F4, то процедура создания отчета}


until ord(ch)=27;


end;


procedure Vhod; {Процедура обработки события по нажатию клавише ввод}


begin


Lom:=1;


if ord(ch)=13 then {Если нажат ввод}


begin


for i:=1 to nabor do


begin


if (men[i]=15) then {Если текущий цвет белый то... }


begin


if razdel=1 then {Если открыт подраздел...}


begin


podrazd:=Lom; {Присвоить подразделу его порядковый номер}


vivod; {Вывод на экран}


kolvo:=0;


end;


if (Lom=1) and (razdel=0) then


begin


rozd:='1'; {Номер раздела}


MRazdel:=1;{Номер подраздела}


razdel:=1; {Показывает что открыт подраздел, а не раздел}


end;{Далее аналогично}


if (Lom=2) and (razdel=0) then begin rozd:='2'; MRazdel:=2; razdel:=1; end;


if (Lom=3) and (razdel=0) then begin rozd:='3'; MRazdel:=3; razdel:=1; end;


if (Lom=4) and (razdel=0) then begin rozd:='4'; MRazdel:=4; razdel:=1; end;


if (Lom=5) and (razdel=0) then begin rozd:='5'; MRazdel:=5; razdel:=1; end;


if (Lom=6) and (razdel=0) then begin rozd:='6'; MRazdel:=6; razdel:=1; end;


if (Lom=7) and (razdel=0) then begin rozd:='7'; MRazdel:=7; razdel:=1; end;


if (Lom=8) and (razdel=0) then begin rozd:='8'; MRazdel:=8; razdel:=1; end;


if (Lom=9) and (razdel=0) then begin rozd:='9'; MRazdel:=9; razdel:=1; end;


end;


Lom:=Lom+1;


end;


end;


if ord(ch)=8 then {Если нажата <- то вернутся назад}


begin


rozd:='0'; {Открывает раздел}


razdel:=0; {Показывает что открыт раздел}


end;


podRazdel; {Процедура создание подразделов}


end;


procedure Poisk;


var punkt:integer; {Переменная ввода выбранного критерия поиска}


NSP:string; {Переменная условия поиска}


fol:integer; {Переменная счетчик}


begin


clrscr;


fol:=0; {Счетчик указывающий количество найденных позиций}


GoToXY(10,2); Textcolor(10); Writeln('Выберете критерии поиска');


{GoToXY(10,3); Writeln('и нажмите ввод');}


Textcolor(11); GoToXY(12,6); Writeln('1: Название');


GoToXY(12,8); Writeln('2: Серия');


GoToXY(12,10); Writeln('3: Производитель');


GoToXY(12,12); Writeln('4: Отмена');


repeat


ch:=readkey;


if (ord(ch)=49) or (ord(ch)=50) or (ord(ch)=51) then


begin


{GoToXY(12,14); readln(punkt);}


GoToXY(12,14);writeln('Введите условие и нажмите ввод');


GoToXY(12,16);readln(nsp);


assign(f,'e:progbd.dat');


reset(f);


while (not Eof(f)) do {Считывает очередной товар}


begin


readln(f,Baza.FKod);


readln(f,Baza.FRazdel);


readln(f,Baza.FPodRazdel);


readln(f,Baza.FName);


readln(f,Baza.FSeria);


readln(f,Baza.FProizvod);


readln(f,Baza.FOpisan);


readln(f,Baza.FMany);


readln(f,Baza.FSim);


If (Baza.FName=NSP) or (Baza.FSeria=Nsp) or (Baza.FProizvod=Nsp) then


begin


clrscr;


Tablo;


f1:=7;f2:=7;f3:=7;f4:=7;f8:=7;pu:=7;pd:=11; f10:=7; {Цвета нижних кнопок}


Text1:='Двигайтесь кнопкой';


Text2:='PageDown'; {Подсказка}


Text3:='Для выхода нажмите';


Text4:='ESC';


Shapka;


fol:=fol+1;


repeat


ch:=readkey;


until (ord(ch)=81) or (ord(ch)=27);


f1:=11;f2:=7;f3:=11;f4:=7;f8:=7;pu:=7;pd:=11;f10:=11; {Цвета нижних кнопок}


if ord(ch)=27 then break;


end;


end;


close(f);


clrscr;


GoToXY(15,12);Textcolor(4);


if fol>0 then writeln('Больше совпадений нет, для продолжения работы нажмите ввод')


else writeln('Cовпадений нет, для продолжения работы нажмите ввод');


readln;


break;


end;


until ord(ch)=52;


clrscr;


Text1:='Двигайтесь курсором';


Text2:='до нужного раздела'; {Подсказка}


Text3:='и нажмите ВВОД';


Text4:='Для возврата <-';


Shapka;


podRazdel;


end;


procedure help;


var k:string;


n:integer;


begin


clrscr;


n:=0;


assign(f,'e:proghelp.dat');


reset(f);


while not Eof(f) do {Считывает очередной товар}


begin


if (n=24) or (n=48) or (n=72) or (n=96) or (n=120) or (n=120) then readln;{ch:=readkey;}


readln(f,k);


writeln(k);


n:=n+1;


end;


readln;


close(f);


clrscr;


Shapka;


podRazdel;


end;


procedure perem; {Процедура перемещает элементы меню}


begin


{Массив цветов. Первый белый остальные зеленые}


men[1]:=15; men[2]:=2; men[3]:=2; men[4]:=2; men[5]:=2; men[6]:=2; men[7]:=2;


men[8]:=2; men[9]:=2; men[10]:=2;men[11]:=2;men[12]:=2;men[13]:=2; men[14]:=2; men[15]:=2;


repeat


podRazdel; {Процедура вывода подразделов}


strok:=1; {Текущая строка}


GoToXY(79,1);


ch:=readkey; {Просит ввести курсором направления движения}


if (ord(ch)=80) then {Если вниз тогда текущий становится белым,


а нижний становится зеленым}


begin


for i:=1 to nabor do


begin


if (men[i]=15) and (strok<>nabor) then


begin


men[strok]:=2;


men[strok+1]:=15;


end


else strok:=strok+1;


end;


end;


if ord(ch)=72 then {Если вверх, то текущий белым, а верхний зеленым}


begin


for i:=1 to nabor do


begin


if (men[i]=15) and (strok<>1)then


begin


men[strok]:=2;


men[strok-1]:=15;


end


else strok:=strok+1;


end;


end;


if ord(ch)=59 then Help; {Если нажата клавиша F1}


if ord(ch)=61 then Poisk;{Если нажата клавиша F3}


{До тех пор пока не нажат ввод или назад или выход}


until (ord(ch)=13) or (ord(ch)=8) or (ord(ch)=68);


vof:=true;


if (ord(ch)<>68) then vhod;{Если не нажат выход то вход в очередной раздел или подраздел}


end;


{Основная программа}


begin


rozd:='0'; {Подраздел не выбран, значит выводить главный раздел}


razdel:=0; {Показывает что открыт раздел, а не подраздел}


vof:=false; {Переменная показывает что перемещений не было}


repeat


clrscr;


f1:=11;f2:=7;f3:=11;f4:=7;f8:=7;pu:=7;pd:=7;f10:=11; {Цвета нижних кнопок}


Text1:='Двигайтесь курсором';


Text2:='до нужного раздела'; {Подсказка}


Text3:='и нажмите ВВОД';


Text4:='Для возврата <-';


shapka; {Процедура выводит разметку на экран}


GoToXY(79,1);


perem; {Процедура перемещения курсором в разделах и подразделах}


until (ord(ch)=68) ; {До тех пор пока не нажат пункт EXIT}


end.

Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Создание справочника Парфюмерный магазин при помощи программы Turbo Pascal

Слов:8244
Символов:77727
Размер:151.81 Кб.