Програма відомостей про кінські забіги

Створення програми "Items", яка містить відомості про кінські забіги, на мові Паскаль у компіляторі Delphi 7. Реалізація зчитування з текстового файлу і збереження даних у типізованому файлі. Використання лінійних списків, особливості використання стеку.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык украинский
Дата добавления 24.06.2013
Размер файла 721,6 K

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

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

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

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

Зміст

  • Вступ
  • 1. Використання лінійних списків
    • 1.1 Загальні відомості
    • 1.2 Особливості використання cтеку
    • 1.3 Застосування черги у програмі курсової роботи
  • 2. Розробка багатомодульної програми
    • 2.1 Модулі у Pascal
    • 2.2 Стандартні модулі
    • 2.3 Модулі користувача
  • 3. Опис програми
    • 3.1 Технічні характеристики програми
    • 3.2 Структурна схема програми
    • 3.3 Розробка режимів роботи із архівом
    • 3.4 Опис роботи з програмою для користувача
      • 3.4.1 Основна форма та її можливості
      • 3.4.2 Головне меню
      • 3.4.3 Таблиця даних
      • 3.4.4 Режим управління
      • 3.4.5 Повідомлення про помилки
  • Висновок
  • Список використаної літератури
  • Додаток А

Вступ

Завдання виконано на мові Паскаль у компіляторі Delphi 7 (з урахуванням особливостей синтаксиса Delphi). Програма, що містить відомості про кінські забіги, має назву «Items».

У програмі використано лінійний список - стек. Програма є багатомодульною та складається з п'яти модулів.

Важливою частиною програми є реалізація зчитування з текстового файлу та збереження даних у типізованому файлі із розширенням *.dat. Також можливе зчитування з типізованого файлу та створення нового архіву «з нуля» заповнюванням пустої таблиці.

програма стек кінський забіг

1. Використання лінійних списків

1.1 Загальні відомості

Лінійний список - це множина елементів зберігання із заданим відношенням суворого порядку, що визначає слідування елементів у множині. Вимогу суворого порядку визвано тим, що з кожним елементом лінійного списку при зберіганні пов'язана певна фізична адреса. Прикладом лінійного списку може бути склад студентів навчальної групи чи розклад екзаменів під час сесії. У залежності від місця знаходження списку (внутрішня чи зовнішня пам'ять комп'ютера) він може бути організований як одномірний масив (у першому випадку) або як файл (у другому). Тоді елементом списку може бути елемент масиву або запис файлу.

Елемент списку може мати структуру. У цьому разі він складається з окремих полів (це складові елемента). Наприклад, елемент списку, що відповідає складу навчальної групи, може складатися з наступних полів: прізвище, ім'я, по батькові студента, номер залікової книжки, домашня адреса (Табл. 1.1).

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

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

Поле, що визначає місцезнаходження елементу списку, називається ключовим полем, або ключем. Ключ зазвичай використовується для виконання усіх можливих дій над даними.

У залежності від метода доступу до елементів лінійного списку розрізняють різновиди лінійних списків, що мають назву стек, черга та дек (двостороння черга).

Черга-це лінійний список, у якому усі включення робляться на одному кінці списку, а виключення - на іншому. Принцип організації черги: «Перший прийшов - перший вийшов», що скорочено позначаютьFIFO (`Firstin - firstout').

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

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

ВказівникиRтаL (рис. 1.1) визначають правий (Right) та лівий (Left) кінці черги. ВказівникиNext, що входять до складу кожного елементу, визначають адресу наступного праворуч елементу в черзі. Отже, зліва можна добавити та видалити елемент, як і у стеці. ВказівникNextостаннього праворуч елементу пустий. Цьому елементу невідомо, де знаходиться попередній елемент. Тому справа можна лише додавати нові елементи. Отже, у черзі додавання елементу має робитися справа, а видалення - зліва.

Для прикладу використаємо наступний опис:

TypePoinType = ^DynType;

DynType = record

Inf: integer;

Next: PoinType;

end;

Var L, R, Run: PoinType;

k: integer;

ТутDynType -упний елемент; PoinType - адресний тип, що вказує на поле пам'ятітипуDynType; L, R - вказівники початку й кінця черги, Run - тимчасовий вказівник, k - деяка інформаційна частина елементу.

Так, для додавання нового елементу в кінець черги може бути використано процедуру:

Read(k);

New(Run); Run^.Inf:=k;

Run^.Next:=nil;

If L=nilthen

L:=Run

Else

R^.Next:=Run;

R:=Run;

А для видалення останнього елементу:

Run:=L; L:=L^.Next;

Dispose(Run).

Дек -цедвонаправлений список, у якому включеннята виключення елементів робляться на обох кінцях (рис. 1.2).

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

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

У даному курсовому проекті для роботи з даними було використано стек. Зупинимося детальніше на цьому типі списків.

1.2 Особливості використаннястеку

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

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

Стек - це лінійний список, у якому усі включення та виключення елементів робляться на одному боці. Принцип організації стеку: «Останній прийшов - перший вийшов», що скорочено позначають також LIFO (`LastIn - FirstOut'). Стеки досить широко застосовуються у програмуванні.

Стек можна представити у вигляді коробки, у яку складаються аркуші картону, рівні за розміром коробці. Поклавши у цю коробку Nаркушів, ми не можемо витягти перший до тих пір, поки не буде витягнено попередні N - 1 аркушів.

Зв'язок між елементами стеку показаний на рис. 1.1. ТутBeg - вказівник початкового елемента стеку,nil- константа уPascal,що вказує на невизначеність змінної адресного типу.

1.3 Застосування стека у програмі курсової роботи

У даному проекті використано наступний тип запису:

CatalType = record

Nazv: string[10];

Number: string[4];

Kolvo: integer;

Year: integer;

Srok:Integer;

Strana: string[7];

end;

PointerCatal = ^DynCatal;

DynCatal = record

Inf: CatalType;

Next: PointerCatal;

end;

Тут у одному запису поєднані усі інформаційні частини (шифр,прізвисько, кількість років, рейтингтакількістьперемог) та вказівник.

Для обробки стека використовуються вказівникRun.

2. Розробка багатомодульної програми

2.1 Модулі уPascal

Модуль - це автономна програмна одиниця, що включає себе різноманітні компоненти розділу описів (типи, константи, змінні, процедури та функції) та, можливо, деякі виконувані оператори.

Модульне програмування - це організація програми як сукупності невеликих незалежних блоків, що називаються модулями, структура тап поведінка котрих підкоряється визначеним правилам.

Використання модульного програмування дозволяє спростити тестування програми та знаходження помилок. Апаратно-залежні підзадачі можуть бути суворо відділені від інших під задач, що покращує мобільність створюваних програм.

Важлива особливість модулів полягає в тому, що компілятор розміщує їх програмний код в окремому сегменті пам'яті. Довжина сегменту не може перевищувати 64 Кбайт, однак кількість одночасно використовуваних модулів обмежується лише доступною пам'яттю, що дозволяє створювати великі програми.

2.2 Стандартні модулі

Турбо Паскаль забезпечує доступ до великої кількості вбудованих констант, типів даних, змінних, процедур і функцій. Ці елементи розділені на зв'язкові групи, звані стандартними модулями, що дозволяє використовувати в конкретній програмі лише ті з них, які необхідні для її роботи.

У Турбо Паскалі є шість основних стандартних модулів: System, Crt, Dos, Printer, Overlay, Graph. Перші п'ять знаходяться у файлі Turbo.tpl (TurboPascalLibrary), модуль Graph - у файлі Graph.tpu (TurboPascalUnit). Текст стандартних модулів представлений в об'єктному коді, тому машинний час на їх компіляцію не потрібен.

Щоб уключити стандартний модуль в програму, його ім'я потрібно вказати в реченні використання Uses:

UsesCrt, Printer, Dos

РеченняUses записується після заголовку програми.

Модуль System - це системний модуль, що забезпечує операції введення-виведення, обробку рядків, програмну реалізацію операцій з плаваючою комою, динамічний розподіл пам'яті, реалізацію математичних функцій (sin, cos, pred, odd та ін.) Модуль System автоматично включається в кожну програму, він вважається попередньо оголошеним. Останнє означає, що цей модуль не потрібно вказувати у реченні Uses.

Модуль Crt дозволяє використовувати всі можливості дисплея і клавіатури, включаючи управління режимами екрану, розширені коди клавіатури, колір, вікна та звукові ефекти.

За допомогою модуля Dos реалізується ряд програм операційної системи для роботи з датою і часом, а також програми обробки файлів. Модуль Printer - це невеликий модуль, створений для полегшення використання в програмі пристрою друку. Він описує текстовий файл Lst і пов'язує його з пристроєм Lpt1. Модуль Graph реалізує бібліотеку з більш ніж 50 графічними підпрограмами, що виконують викреслювання, зафарбовування і штрихування графічних зображень (точка, пряма, окружність і т.д.). Модуль Overlay використовується для формування оверлейних програм великих розмірів, що перевищують ємність доступної оперативної пам'яті.

2.3 Модулі користувача

Модулі користувача - це інструмент для створення великих програм, що визначається такими їх властивостями:

· Кожен модуль, що входить до складу програми, може мати обсяг до 64 Кбайт.

· Модуль являє собою окремо збережену і незалежно компілюєму одиницю.

· Кількість модулів не обмежується, вона визначається лише доступним об'ємом вільної пам'яті.

Модуль поділяється на три частини: секція інтерфейсу, секція реалізації та секція ініціалізації.

Загальна структура модулю:

Заголовок модулю складається з зарезервованого слова Unit і наступного за ним ідентифікатора, що є ім'ям модуля.

Інтерфейсна частина починається зі службового слова Interface. Інтерфейсна частина може містити описи констант, типів, змінних, процедур і функцій. Ці описи вважаються глобальними, їх може використовувати будь-який інший модуль, у фразі Uses якого вказано ім'я даного модуля.

У інтерфейсній частині розміщують лише заголовки процедур і функцій, що мають значення при їх глобальному використанні. Повний опис процедур і функцій переноситься до секції реалізації, що починається зі службового слова Implementation.

У секції реалізації можуть бути свої описи констант, типів і змінних, використовуваних тільки при роботі цього модуля. Тут можуть міститися також процедури і функції, заголовки яких відсутні в секції інтерфейсу; ці процедури і функції недоступні для інших модулів і можуть бути активізовані тільки при роботі даного модуля.

Секція ініціалізації є необов'язковою, її наявність визначає слово Begin. Секції ініціалізації всіх модулів викликаються перед запуском основного тіла програми. Цю секцію зазвичай використовують для установки початкових значень змінних даного модуля, для відкриття файлів, автовизначення типу монітору та ін. Секція ініціалізації може бути порожньою, а за відсутності слова Begin відповідний модуль не містить цю секцію.

У курсовому проекті використано програму з п'яти модулів користувача, три з яких використовують форми, один - модуль перевірки даних, та останній - проект Delphi 7, що компілює усімодулі разом. Детальніше про багатомодульність програми проекту написано у розділі 3.2.

3. Опис програми

3.1 Технічні характеристики програми

Об'єм вихідних файлів модулів:

Unit1.dcu (26,1 КБ),Unit2.dcu (10,3 КБ), Unit3.dcu (5,86 КБ), Unit4.dcu (3,92 КБ),Unit5.dcu (3,39 КБ).

Об'єм готового файлу програми Items.exe: 475 КБ.

Необхідні мінімальні системні вимоги:

ОЗУ: 16 КБ;

ОС: Windows 95 та пізніші;

Пам'ять на диску: 1 МБ;

Пристрої: клавіатура, миша.

3.2 Структурна схема програми

Дана програма складається з п'яти основних файлів: 4 модулі та головний файл проекту. Усі модулі у секції інтерфейсу використовують низку передописаних модулів Delphi: Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Menus, ExtCtrls, Grids, XPMan.

I. Модуль головної форми Unit1.

Головний модуль програми, що містить головну форму для роботи з таблицею погодних даних. У модулі описано процедури натискання кнопок, що знаходяться на головній формі. У секції реалізації модуль використовує чотири інших модулі.

II. Модуль форми редагування Unit2.

Модуль, що визивається при редагуванні певної комірки таблиці. При натисканні кнопки «Додати» в розділі меню «Функції»головної форми відкривається форма Form2. Модуль містить п'ятьпроцедур: натискання кнопки підтвердження редагування та перевірку правильності вводу даних.

III. Модуль видалення Unit3.

Викликає форму Form3 за натисканням кнопки «Видалити» меню «Функції». Форма містить одну процедуру, яка видаляє елемент за шифром. Використовує лише головний модуль.

IV. Модуль виводу найкращих коней Unit4.

МодульUnit4лише виводить данні найкращих коней с таблиці модуля Unit1.

V. Модуль Unit5.

Використовуєтьсямодулем Unit1 для виведення таблиці, у якій зазначено помилки при формуванні таблиці з файлу.

Загалом, відношення модулів можна проілюструвати схемою на рис. 3.1. Напрям стрілки вказує на модуль, який використовує даний.

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

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

3.3 Розробка режимів роботи із архівом

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

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

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

I. Зчитування з текстового файлу реалізується процедурою TForm1.N1Click(Sender: TObject). Процедура викликається натисканням на кнопку «Відкрити» у панелі меню (Рис. 3.2). Додавання з текстового файлу відбувається при повторному відкриті текстового файлу. Помилки текстового файлу виводяться у таблиці п`ятої форми. Процедура такожігнорує пусті рядки файлу. В OpenDialog можна обирати розширення файлу з якого будуть зчитуватися данні: dat(типізований файл), txt (текстовий файл);Зчитування робиться з файлу по строкам; строка розбивається на шість слів, які за допомогою оператора “caseof”розподіляються кожен у своє поле в record.

II. При будь-яких змінах в таблиці, данні з таблиці обробляються процедуроюTForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer; constValue: String) та вводяться за форматом маски, якщо данні коректні, то данні записуються до стеку та типізованого файла. Маска не дозволяє ввести недопустимий символ або число, чи слово, що може визвати аварійне закриття програми.

III. За допомогою процедури procedure TForm2.Button1Click(Sender: TObject) можливе додавання до стеку та таблиці даних безпосередньо самому, а не з файлу. Тут все легко: створюється новий елемент стека, в інформаційну частину в кожне поле вводяться дані з MaskEdit. СамеMaskEditзабезпечує правильність введених даних.

IV.Індивідуальним завданням є вивести список речей, строк придатності яких найбільший. Цю функцію виконує процедура TForm1.N11Click(Sender: TObject), сортирує стек за строком придатності. Сортування робиться через третю змінну, яка міняє місцями елементи стека за зростанням.

V. Друге індивідуальне завдання: вивести список речей,строк придатності яких вже вийшов. Виведення відбувається за кнопкою «списаныевещи» за допомогою процедури TForm1.N13Click(Sender: TObject).

VI. Таким чином загальну структуру взаємодії файлів, стека та таблиці можна представити у вигляді схеми, як показано на рис. 3.4. Напрям стрілки вказує, звідки куди можна зчитати інформацію. Бачимо, що без змін стека ніякі інші зміни не можуть бути зафіксовані.

Рисунок 3.4 Структура взаємодії файлів

3.4 Опис роботи з програмою для користувача.

3.4.1 Основна форма та її можливості

При запуску програми перед користувачем виникає головна форма (Рис. 3.5), що містить наступні елементи:

1 - Головне меню;

2 - Таблиця даних;

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

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

Робота починається або додаванням нового рядка до пустої таблиці, або відкриванням архіву з файлу.

3.4.2 Головне меню

Основним розділом головного меню є розділ «Файл» (Рис. 3.6), що виконує операції з файлами та програмою.

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

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

Виклик «Відкрити» дозволяє почати роботу з новим архівомaбо текстовим файлом, також якщо в нас вже є відкрита або заново відтворена база даних, то ми будемо додавати до неї, данні з нового файлу.«Відкрити…» викликає діалогове вікно, де користувач обирає файл архіву. До діалогового вікна відкривання застосований фільтр за текстовими (*.txt) та типізованими (*.dat) файлами.

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

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

Самі процедури відкриття та збереження описані у попередньому підрозділі. Кнопка «Вихід» завершує роботу із програмою.

У розділі «Функції» (Рис. 3.8) є три пункти, що дозволяють додати самому дані у архів, видалити предмет за номером, та функції сортування.

3.4.3 Таблиця даних

Таблиця складається з шести стовпців, одного фіксованого рядка для заголовків та необхідної кількості рядків з інформацією.

Користувач може редагувати тільки вагу, рейтинг та кількість перемог.

3.4.4 Режими управління.

Режим додавання вмикається, якщо обрати пункт меню «Функції» >«Додати» (Рис. 3.9).

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

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

Щоб додати нові данні, треба заповнити всі поля, та нажати кнопку «Додати»

Режим видаленнявмикається, якщо обрати меню «Функції» >«Видалення» (Рис. 3.10) Якщо ввести номер речі та її данні будуть видалені з БД.

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

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

Режим сортування проходить в автоматичному режимі, якщо обрати один із видів сортування в розділі меню «Функції»>«Сортування».

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

3.4.5 Повідомлення про помилки

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

Зайві пробіли у таблиці, пусті рядки та зайві реквізити у файлах редагуються та не викликають помилок. Під час роботи з таблицею усі дані підводяться під суворий формат. Але є ряд неприпустимих помилок.

Усі помилки в текстовому файлі будуть виведені на екран після його відкриття.

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

Також, якщо ви будете неправильно додавати данні, або видаляти - ви також побачите помилки.

Висновок

Програма працює коректно. Виникнення програмних помилок попереджено перевіркою введених даних, тому робота програми не буде перервана аварійно.

Було реалізовано зчитування з текстового файлу, запис у типізований файл, сортування майже за всіма реквізитами, додавання у таблиці та додавання з файлу, видалення рядків та редагування реквізитів (вага, рейтинг, кількість перемог). Індивідуальне завдання з виведенням найкращих коней виконано.

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

Додаток А

Текст програми

Project1

program Project1;

uses

Forms,

Unit1 in 'Unit1.pas' {Form1},

Unit2 in 'Unit2.pas' {Form2},

Unit3 in 'Unit3.pas' {Form3},

Unit4 in 'Unit4.pas' {Form4},

Unit5 in 'Unit5.pas' {Form5};

{$R *.res}

begin

Application.Initialize;

Application.CreateForm(TForm1, Form1);

Application.CreateForm(TForm2, Form2);

Application.CreateForm(TForm3, Form3);

Application.CreateForm(TForm4, Form4);

Application.CreateForm(TForm5, Form5);

Application.Run;

end.

Unit1:

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Grids, StdCtrls, XPMan, Menus;

type

TForm1 = class(TForm)

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

MainMenu: TMainMenu;

XPManifest1: TXPManifest;

StringGrid1: TStringGrid;

Af1: TMenuItem;

N1: TMenuItem;

N4: TMenuItem;

N5: TMenuItem;

N6: TMenuItem;

N7: TMenuItem;

N8: TMenuItem;

Label1: TLabel;

N9: TMenuItem;

N10: TMenuItem;

N11: TMenuItem;

N12: TMenuItem;

N13: TMenuItem;

procedure N1Click(Sender: TObject);

procedure StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer;

const Value: String);

procedure StringGrid1SelectCell(Sender: TObject; ACol, ARow: Integer;

varCanSelect: Boolean);

procedure StringGrid1GetEditText(Sender: TObject; ACol, ARow: Integer;

var Value: String);

procedure StringGrid1KeyDown(Sender: TObject; var Key: Word;

Shift: TShiftState);

procedure N6Click(Sender: TObject);

procedure N7Click(Sender: TObject);

procedure N9Click(Sender: TObject);

procedure N10Click(Sender: TObject);

procedure N11Click(Sender: TObject);

procedure N12Click(Sender: TObject);

procedure N13Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure StringGrid1DrawCell(Sender: TObject; ACol, ARow: Integer;

Rect: TRect; State: TGridDrawState);

procedure StringGrid1GetEditMask(Sender: TObject; ACol, ARow: Integer;

var Value: String);

private

{ Private declarations }

public

{ Public declarations }

end;

constNmax=10000;

type

CatalType = record

Nazv: string[10];

Number: string[4];

Kolvo: integer;

Year: integer;

Srok:Integer;

Strana: string[7];

end;

PointerCatal = ^DynCatal;

DynCatal = record

Inf: CatalType;

Next: PointerCatal;

end;

String66=string[66];

StringArray=array[1..Nmax] of string66;

var

Form1: TForm1;

np: word; { кол-вокомпонентовархива }

SignArchive: boolean; { признак создания архива }

Reply: char; { символ ответа на запрос программы }

Catal: CatalType; { компонент архива }

Run: PointerCatal; { текущий указатель очереди архива }

head:PointerCatal; { файл результатов }

FileOut { архивный файл записей }

: file of CatalType;

Zapr:set of Byte;

ABC:set of byte;

n,k,k1,k2,c,b,Bukva,Shifr2,cc:Byte;

St,St1,St2:StringArray;

Before,S,S1,Slovo,Slovo1,Slovo11,Shifr1:String66;

Separs:set of Char;

Cond,Flag,Cond1:Boolean;

Baza,Nazv,Strana:TextFile;

nm,i,x,z,y,v,error,redx,redy,o,z1,m,z2:Integer;

ABCD:set of Char;

chisla:set of char;

keys:Word;

implementation

uses Unit2, Unit3, Unit4, Unit5;

{$R *.dfm}

procedure Vivod;

begin

y:=1; run:=head;

while Run <> NIL do

begin

Form1.StringGrid1.Cells[0,y]:=run^.Inf.Nazv;

Form1.StringGrid1.Cells[1,y]:=run^.Inf.Number;

Form1.StringGrid1.Cells[2,y]:=IntToStr(run^.Inf.Kolvo);

Form1.StringGrid1.Cells[3,y]:=IntToStr(run^.Inf.Year);

Form1.StringGrid1.Cells[4,y]:=IntToStr(run^.Inf.Srok);

Form1.StringGrid1.Cells[5,y]:=run^.Inf.Strana;

Inc(y);

run:= run^.next;

if y >form1.StringGrid1.RowCount then

Form1.StringGrid1.RowCount:=Form1.StringGrid1.RowCount+1;

end;

end;

procedure TForm1.N1Click(Sender: TObject);

var elm,elm1:PointerCatal;

Flag:boolean;ii,jj,j:Byte;klm,kk1,kk2,oo:integer;

Function SignBegin(S:string66; k:byte):byte;

{ Поиск начала слова в строке S }

Vari: byte;

x,y:Integer;

Begin

SignBegin:=0;

For i:=k to length(S) do

If not (S[i] in Separs) then

Begin

SignBegin:=i; Exit

End;

End { SignBegin };

{ ----------------------------------------------------------- }

Function SignEnd(S:string66; k:byte):byte;

{ Поиск конца слова в строке S }

Vari: byte;

Begin

SignEnd:=0;

For i:=k to length(S) do

If S[i] in Separs then

Begin

SignEnd:=i; Exit

End;

End { SignEnd };

{ ----------------------------------------------------------- }

Begin

ABCD:=['a'..'z','а'..'я','A'..'Z','А'..'Я'];

chisla:=['0'..'9'];

Separs:=[' ',';',',','.','|','-','_'];

jj:=1;

If (OpenDialog1.Execute) and (Copy(OpenDialog1.FileName,Length(OpenDialog1.FileName)-3,4)='.dat') and (cc=0) then

begin

AssignFile(FileOut,OpenDialog1.FileName);

Reset(FileOut);

run:=head;

While not eof(FileOut) do

begin

New(run);

run^.Next:=head;

head:=run;

read(FileOut,run^.inf);

run:=run^.Next;

end;

run:=head;elm:=run^.Next;

while Run<>nil do

begin

elm:=run^.Next;

while elm<>nil do

begin

if run^.Inf.Number=elm^.Inf.Number then

begin

elm1:=run;

while elm1<>NIL do

begin

if elm1^.next=elm then

Break;

elm1:=elm1^.Next;

end;

elm1^.Next:=elm^.Next;

Dispose(elm);

elm:=elm1;

end;

elm:=elm^.Next;

end;

run:=run^.Next;

end;

OpenDialog1.FreeOnRelease;

Inc(cc);

StringGrid1.Enabled:=True;

N8.Enabled:=True;

StringGrid1.FixedRows:=1;

Vivod;

end

Else

if Copy(OpenDialog1.FileName,Length(OpenDialog1.FileName)-3,4)='.txt' then

begin

OpenDialog1.FreeOnRelease;

AssignFile(Baza,OpenDialog1.FileName);

{ ???????? ???????????? ?????? }

Reset(Baza);

{ ???? ? ?????? ???????? ?????? }

n:=0;

While not eof(Baza) do

Begin

Inc(n);

Readln(Baza,St[n]);

End;

AssignFile(FileOut,'C:\Users\user\Desktop\Курсовая_вещь\catal.dat');

Rewrite(FileOut);

Reset(FileOut);

AssignFile(Nazv,'C:\Users\user\Desktop\Курсовая_вещь\nazv.dat');

Reset(Nazv);

m:=0;

While not eof(Nazv) do

Begin

Inc(m);

Readln(Nazv,St1[m]);

End;

AssignFile(Strana,'C:\Users\user\Desktop\Курсовая_вещь\strana.dat');

Reset(Strana);

oo:=0;

While not eof(Strana) do

Begin

Inc(oo);

Readln(Strana,St2[oo]);

End;

jj:=1;

for i:=1 to n do

begin

S:=St[i]; k2:=0; Cond:=true;

z:=0;

if S<>'' then

begin

New(run);

run^.Next:=head;

head:=run;

While Cond do

begin

k1:=SignBegin(S,k2+1);

If k1=0 then

Cond:=false

Else

Begin

k2:=SignEnd(S,k1+1);

If k2=0 then

Begin

k2:=length(S)+1;Cond:=false;

End;

Unit2:

unit Unit2;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Mask, xpman;

type

TForm2 = class(TForm)

Button1: TButton;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Label4: TLabel;

Label5: TLabel;

Label6: TLabel;

MaskEdit1: TMaskEdit;

MaskEdit3: TMaskEdit;

MaskEdit4: TMaskEdit;

MaskEdit5: TMaskEdit;

MaskEdit6: TMaskEdit;

MaskEdit2: TMaskEdit; procedure Button1Click(Sender: TObject);

procedure MaskEdit1Click(Sender: TObject);

procedure MaskEdit3Click(Sender: TObject);

procedure MaskEdit4Click(Sender: TObject);

procedure MaskEdit5Click(Sender: TObject);

procedure MaskEdit6Click(Sender: TObject);

procedure FormCreate(Sender: TObject);

procedure MaskEdit2Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form2: TForm2;

keys:Word;

ABC:set of Byte;

DEF:set of Byte;

implementation

uses Unit1;

{$R *.dfm}

procedure TForm2.Button1Click(Sender: TObject);

varFlag:Boolean;S:string;i:integer;elm:PointerCatal;

begin

AssignFile(FileOut,'C:\Users\user\Desktop\Курсовая_работа\catal.dat');

Rewrite(FileOut);

Reset(FileOut);

Flag:=False;

if (MaskEdit1.text='') or (MaskEdit2.text='') or (MaskEdit3.text='') or (MaskEdit4.text='') or (MaskEdit5.text='')

or (MaskEdit6.text='') then

MessageBox(Handle,PChar('Вызаполнилиневсеполя'),PChar('Добавление_ERROR'),MB_ICONERROR+MB_OK)

else

begin

if (Length(MaskEdit1.Text)>10)or(Length(MaskEdit2.text)<>4)or(Length(MaskEdit3.Text)>3)or(Length(MaskEdit4.text)>4)

or (Length(MaskEdit5.Text)>3) or (Length(MaskEdit6.Text)>7) then

MessageBox(Handle,PChar('Отредактируйтеданные'),PChar('Ошибкаввода'),MB_ICONERROR+MB_OK)

else

begin

Flag:=True;

with Form1 do

begin

New(run);run^.Next:=head; head:=run;

run^.Inf.Nazv:=form2.MaskEdit1.Text;

run^.Inf.Number:=form2.MaskEdit2.Text;

run^.Inf.Kolvo:=strtoint(form2.MaskEdit3.Text);

run^.Inf.Year:=strtoint(form2.MaskEdit4.Text);

run^.Inf.Srok:=StrToInt(form2.MaskEdit5.Text);

run^.Inf.Strana:=form2.MaskEdit6.Text;

run:=head;elm:=head^.Next;

while elm<>nil do

begin

if run^.Inf.Number=elm^.Inf.Number then

begin

head:=head^.Next;

Dispose(Run);

run:=head;

MessageBox(Handle,PChar('Данныйномеружесуществует'),PChar('Ошибкаввода'),MB_ICONERROR+MB_OK)

end;

elm:=elm^.Next;

end;

end;

end;

end;

y:=1; run:=head;

while Run <> NIL do

begin

Form1.StringGrid1.Cells[0,y]:=run^.Inf.Nazv;

Form1.StringGrid1.Cells[1,y]:=run^.Inf.Number;

Form1.StringGrid1.Cells[2,y]:=IntToStr(run^.Inf.Kolvo);

Form1.StringGrid1.Cells[3,y]:=IntToStr(run^.Inf.Year);

Form1.StringGrid1.Cells[4,y]:=IntToStr(run^.Inf.Srok);

Form1.StringGrid1.Cells[5,y]:=run^.Inf.Strana;

Inc(y);

run:= run^.next;

if y >form1.StringGrid1.RowCount then

Form1.StringGrid1.RowCount:=Form1.StringGrid1.RowCount+1;

end;

run:=head;

while run<>nil do

begin

Seek(FileOut,FileSize(FileOut));

write(FileOut,run^.inf);

run:=run^.Next;

end;

if Flag then

begin

MaskEdit1.Text:='';

MaskEdit2.Text:='';

MaskEdit3.Text:='';

MaskEdit4.Text:='';

MaskEdit5.Text:='';

MaskEdit6.Text:='';

Close;

end;

end;

procedure TForm2.MaskEdit1Click(Sender: TObject);

begin

MaskEdit1.SelStart:=0;

end;

procedure TForm2.MaskEdit3Click(Sender: TObject);

begin

MaskEdit3.SelStart:=0;

end;

procedure TForm2.MaskEdit4Click(Sender: TObject);

begin

MaskEdit4.SelStart:=0;

end;

procedure TForm2.MaskEdit5Click(Sender: TObject);

begin

MaskEdit5.SelStart:=0;

end;

procedure TForm2.MaskEdit6Click(Sender: TObject);

begin

MaskEdit6.SelStart:=0;

end;

procedure TForm2.FormCreate(Sender: TObject);

begin

Maskedit1.width:=120;

Maskedit2.width:=120;

Maskedit3.width:=120;

Maskedit4.width:=120;

Maskedit5.width:=120;

Maskedit6.width:=120;

MaskEdit1.Left:=56;

MaskEdit2.Left:=56;

MaskEdit3.Left:=56;

MaskEdit4.left:=356;

MaskEdit5.left:=356;

MaskEdit6.left:=356;

MaskEdit1.Top:=40;

MaskEdit2.Top:=100;

MaskEdit3.Top:=160;

MaskEdit4.Top:=40;

MaskEdit5.Top:=100;

MaskEdit6.Top:=160;

Label1.Top:=20;

Label2.Top:=80;

Label3.Top:=140;

Label4.Top:=20;

Label5.Top:=80;

Label6.Top:=140;

end;

procedure TForm2.MaskEdit2Click(Sender: TObject);

begin

MaskEdit2.SelStart:=0;

end;

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


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

  • Використання програми в мові Delphi як одної з найпоширеніших засобів створення додатків баз даних. Створення, заповнення, обновлення і ліквідація БД. Можливі неполадки при роботі програм та методи їх усунення. Розрахунок вартості розробки програми.

    курсовая работа [617,3 K], добавлен 28.04.2015

  • Види списків, особливості їх створення, застосування та можливості удосконалення роботи користувача персонального комп’ютера. Керування та аналіз груп споріднених даних у середовищі програми MS Excel 2010. Опрацювання спискiв за допомогою форми даних.

    дипломная работа [2,7 M], добавлен 18.06.2014

  • Засоби організації збереження і обробки даних для графічних програм. Операції зі списками при послідовному збереженні, при зв'язному збереженні. Реалізація стеков і черг у програмі. Стиснуте й індексне збереження лінійних списків. Основний модуль golf.c.

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

  • Архітектура Web-баз даних. Загальні відомості про мову SQL. Створення таблиць баз даних. Використання бібліотеки для пошуку інформації. Аутентифікація за допомогою РНР й MySQL. Зберігання паролів в окремому файлі на сервері, використання бази даних.

    курсовая работа [913,8 K], добавлен 12.01.2010

  • Теорія складання та використання розкладів. Проектування бази даних "Расписание", що містить інформацію про вільні аудиторії, в Microsoft Office Access з подальшим її використанням в середовищі програмування Borland Delphi та розробка програми до неї.

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

  • Основні переваги програмування на мові Delphi. Використання стандартних операторів при створенні інтерфейсу користувача. Вибір складу технічних і програмних засобів, організація вхідних і вихідних даних. Розробка програми, блок-схеми та тексту програми.

    реферат [316,1 K], добавлен 22.01.2013

  • Загальні відомості про мову програмування, історія створення та використовування. Програма мовою Паскаль складається з лексем і символів – розділювачів. Робота з масивами, створення алгортимів. Складання програм з використанням процедур та функцій.

    реферат [18,3 K], добавлен 22.10.2010

  • Використання математичного сопроцесора або його емулятора при програмуванні на мові асемблера з використанням дробових чисел. Створення програми на мові ASM-86, яка реалізує функції [x], {x}, |X|. Алгоритм перетворення цілого числа в дійсне та навпаки.

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

  • Програми, які виводять на екран характеристики комп'ютера. Розробка програми "Монітор використання ресурсів комп’ютера" на мові програмування ASM-86. Алгоритм програми та її реалізація. Системні вимоги, інструкція для користувача, лістинг програми.

    курсовая работа [22,2 K], добавлен 08.08.2009

  • Розробка візуальної програми, яка містить головне меню та забезпечує введення-виведення даних у діалоговому вікні. Створення панелі інструментів, рядку стану. Реалізація функції мовою Assembler. Створення та підключення бібліотеки Dll. Робота з файлами.

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

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