Створення довідника Парфумерний магазин за допомогою програми 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 Виведення інформації у файл
Інформація в файл виводиться при створенні файлу звіту. Звіт створюється за двома критеріями:
- По поточному товару;
- По поточному підрозділу.
Дана опція доступна тільки за умови, що користувач перебуває в режимі роботи з товарами. Тобто користувач вибрав потрібний підрозділ і натиснув Enter.
При натисканні в режимі роботи з товарами кнопки 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 - Схема послідовності обробки даних.
Початок
Висновок на екран розмітки, схема 100
Вибір режиму роботи, схема 1000
Висновок на екран розділів і підрозділів схема 100
Операції над товарами, схема 1000
Кінець


Схема 1 - Загальна схема
Висновок ліній розмітки
Висновок кнопок управління
Висновок заголовка
Висновок підказок
Кінець
Початок


Схема 2 - Розмітка екрану
Початок
Відкриття файлу для читання
Зчитування доступних розділів і підрозділів
Закриття файлу
Операції над товарами
Висновок елементів меню
Кінець


Схема 3 - висновок розділів і підрозділів
Початок
Висновок розділів і підрозділів схема 10000
Збереження поточного рядка
Вибір напрямку


Вгору
Вниз
Забарвлення пунктів відповідаючи натискання клавіші вниз
Забарвлення пунктів відповідаючи натискання клавіші вниз
Кінець


Схема 4 - Переміщення по меню
Початок
Вибір режиму роботи


Enter F1


F3
Кінець
Події після натискання Enter схема 10000
Пошук схема 10000
Допомога схема 10000


Схема 5 - Вибір режиму роботи
Початок
Відкритий чи розділ


немає


Так
Вибір операції
Висновок підрозділів
Висновок на екран товарів схема 100


Вхід
Вниз
Кінець


Схема 6 - Події за натисненню Enter
Початок
Вибір критерій пошуку


3 січня



2
Введення умови пошуку
Блок-схема: дані: Введення умови пошуку



Пошук в БД
Є збігаючись.


немає


Так
Висновок на екран товарів схема 100
Блок-схема: дані: Висновок на екран товарів схема 100



Шукати далі


Так



немає
Кінець


Схема 7 - Пошук
Початок
Виведення частини файлу довідки на екран
Далі


Так


Ні
Кінець
Блок-схема: знак завершення: Кінець


Схема 8 - Допомога
Початок
Вважати перший товар схема 1000
Додати код товару в список схема 1000
Вважати останній товар зі списку схема 1000
Висновок загального кол-ва товарів схема 1000
Висновок на екран інформації про товар, схема 1000


Пошук наступного товару, схема 1000

Операції
Вибір операції
Блок-схема: рішення: Вибір операції з товарами
Додати товар схема, 100
Видалити товар схема 100
Звіт по товарах, схема 10



Пересування
Напрямок
Видалення товару, схема 1000
Блок-схема: рішення: Напрямок





PageDown PageUp


ESC
Кінець
Блок-схема: знак завершення: Кінець


Схема 9 - Виведення товару на екран
Початок
Відкривається файл БД для читання
Пошук товару відповідних розділу та підрозділу
Підрахунок кількості товарів в підрозділі
Кінець


Схема 10 - Висновок загальної кількості товарів
Початок
Відкривається файл БД для читання
Додавання коду товару до списку
Пошук товару відповідних розділу та підрозділу
Висновок на екран інформації про товар, схема 1000
Відкривається файл БД для читання
Пошук товару відповідних розділу та підрозділу



Кінець


Схема 11 - Знайти перший товар
Початок
Виділення пам'яті для нового елемента
Занесення коду товару до списку
Установлення покажчика для підтримки цілісності списку
Кінець


Схема 12 - Додати код товару до списку
Початок
Відкривається файл БД для читання
Пошук товару відповідних розділу та підрозділу
Чи є код знайденого товару в списку


Так

немає
Кінець
Додається код товару в список, схема 100
Висновок на екран інформації про товар, схема 1000


Схема 13 - Пошук наступного товару
Початок
Висновок на екран форми для заповнення інформації про товар
Введення інформації про товар
Зчитується останній збережений код товару
Збільшується на 1 і додається у файл кодів товару
Зберегти товар


Ні


Так
Відкриття БД в режимі додавання
Введення в БД інформації про товар
Кінець


Схема 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: \ prog \ razdel.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: \ prog \ bd.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: \ prog \ bd.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: \ prog \ bd.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: \ prog \ bd.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: \ prog \ bd.dat');
assign (fDel, 'e: \ prog \ bdvr.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 ('і натисніть Enter. Файл звіту знаходиться в кореневій папці');
GoToXY (10,19); readln (fname2);
assign (fotchet, fname1 + fname2 + fname3);
assign (f, 'e: \ prog \ bd.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 ('Заповніть форму. Після заповнення чергового пункту натисніть Enter');
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: \ prog \ kod.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: \ prog \ bd.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 ('Запис збережена для продовження натисніть Enter');
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 ('і натисніть Enter');}
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 ('Введіть термін та натисніть Enter');
GoToXY (12,16); readln (nsp);
assign (f, 'e: \ prog \ bd.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 ('Більше збігів немає, для продовження роботи натисніть Enter')
else writeln ('Cовпаденій немає, для продовження роботи натисніть Enter');
readln;
break;
end;
until ord (ch) = 52;
clrscr;
Text1: = 'Рухайтеся курсором';
Text2: = 'до потрібного розділу'; {Підказка}
Text3: = 'і натисніть ENTER';
Text4: = 'Для повернення <-';
Shapka;
podRazdel;
end;
procedure help;
var k: string;
n: integer;
begin
clrscr;
n: = 0;
assign (f, 'e: \ prog \ help.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: = 'і натисніть ENTER';
Text4: = 'Для повернення <-';
shapka; {Процедура виводить розмітку на екран}
GoToXY (79,1);
perem; {Процедура переміщення курсором в розділах і підрозділах}
until (ord (ch) = 68); {До тих пір поки не натиснутий пункт EXIT}
end.
Додати в блог або на сайт

Цей текст може містити помилки.

Програмування, комп'ютери, інформатика і кібернетика | Курсова
147.5кб. | скачати


Схожі роботи:
Програми в середовищі Turbo Pascal
Написання програми телеграф на Turbo Pascal
Рішення математичних задач за допомогою алгоритмічної мови Turbo Pascal Microsoft Excel
Розробка в середовищі Turbo Pascal програми сортування елементів рядків матриці
Основні відомості про алгоритмічну мову Turbo Pascal Графіка Pascal
Створення програми з використанням програмного продукту Turbo Assembler
Створення банерів за допомогою програми Adobe PhotoShop 70
Turbo Pascal
Оператори Turbo Pascal 7
© Усі права захищені
написати до нас