Разработка алгоритмов и их реализация

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


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

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

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

Содержание

Введение

1. Назначение и область применения

2. Постановка задачи

3. Используемые методы

4. Алгоритм программы

Заключение

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

Приложение

Введение

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

файловый алгоритмизация паскаль программирование

1. Назначение и область применения

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

2. Постановка задачи

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

3. Используемые методы

БД создается под именем CardsMK. dat в той же директории, где находится сама программа. Доступ к данным происходит напрямую из процедур или функции. При поиске или изменении записи создается временный файл с именем FTmp. dat, в него записываются результат поиска из файла CardsMK. dat, используемые в дальнейшем для определенных целей: вывод на экран, визуального контроля редактируемой или удаляемой записи. Для удаления так же создается временный файл temp. dat, для хранения отредактированной БД, затем файл CardsMK. dat удаляется, а файл temp. dat переименовывается в CardsMK. dat.

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

4. Алгоритм программы

Создадим новый тип записи TCards. Именно он будет определять формат нашей БД, в нашем случае состоящей из одной таблицы с полями:

· Client — поле строкового типа длинной не более 34 символов, предназначено для хранения Ф.И.О. владельца;

· CardNo — поле строкового тип длинной 6 символов, может хранить в себе номера карт начинающиеся с № 100 000 и до № 999 999;

· GoodType — поле строкового типа длинной 7 символов. Содержит в себе тип топлива используемого картой. Может принимать только 4 значения: «АИ-80», «АИ-92», «АИ-95» и «Дт»;

· ClientType — поле строкового типа длинной 10 символов. Содержит в себе тип клиента используемого картой. Может принимать только 2 значения: «Юр. лицо» и «Физ. лицо»;

· Passwd — поле строкового типа длинной 4 символа. Содержит в себе пароль из 4-х цифр, принимает значения от 0000 до 9999.

Создадим две константы строкового типа хранящие в себе названия выходных файлов:

· FileName = `CardsMK. dat' (файл БД);

· FileFTmp = `FTmp. dat' (временный файл);

Процедура PMenu — представляет собой окно Главного меню. Используя цикл Repeat и оператора выбора Case (в основе всех меню пользователя используются похожая связка цикла и оператора) программа запрашивает у пользователя следующие варианты для действия по нажатию клавиш

· `< 1> Список карт.' - вызывает процедуру ShowFile (FileName);

· < Esc> Выход из программы.

Для определения кода нажатой кнопки используем оператор ord (a: переменная типа char), возвращающий код нажатой клавиши типа integer.

{Процедура — Окно главного меню}

procedure PMenu; {объявление процедуры}

var{объявление переменных}

a: char; {необходимо для оператора Ord (а)}

b: integer; {для оператора Case}

begin {Начало процедуры}

repeat {оператор цикла}

begin {начало оператора цикла}

ClrScr; {очистка экрана, встроенная процедура}

WriteLn (' «Справочник выданных Мобильных карт» — Главное меню ');

WriteLn; {оператор вывода текста на экран с переводом курсора на следующую строку}

WriteLn ('< 1> Список карт. ');

WriteLn;

WriteLn ('< Esc> Выйти из программы. ');

a: =ReadKey; {присваиваем значение ReadKey — встроенная функция считывания кода нажатой клавиши типа Char}

b: =ord (a); {присваиваем переменной значение, возвращенное оператором ord-преобразует переменную типа Char в целочисленную — Integer}

case b of {начало оператора выборки по значению переменной b}

49: ShowFile (FileName); {если b=49 (клавиша «1»), то запускаем ShowFile (FileName)}

end; {конец оператора выборки}

end; {конец оператора цикла}

until b=27; {условие повторного запуска цикла: пока переменная не будет равна 27 (клавиша «Esc»)}

end; {конец процедуры}

Процедура ShowFile (AFileName: string{переменная строкового типа должна содержать имя файла БД}) — Проверяет существование файла БД посредством вызова функции FileExists (AFileName: string). Если таковой отсутствует, то процедура создает его. Далее вызывается функция вывода на экран файла БД — FshowFile (AFileName: string). Ниже прорисованной таблицы БД появляется меню пользователя:

· < 1>-«Поиск…» вызывает процедуру меню поиска: MPoisk;

· < 2>-«Выдать карту…» вызывает функцию: FAddCards (AFileName: string);

· < 3>-«Удалить карту…» вызывает функцию: FDelCardsNo (AFileName: string; AFTmp: string);

· < 4>-«Редактировать карту…» вызывает функцию: FEdit (AFileName: string; AFTmp: string);

· < 5>-«Сортировать список…» вызывает процедуру MSort;

· < Esc>-«ВЫХОД — Главное меню» конец работы текущей процедуры;

Процедура MPoisk — процедура представляющая собой не что иное, как меню пользователя где предлагается для выбора три условия поиска нужной (ых) записи: по клиенту, по номеру карты и по типу топлива (соответственно по клавишам < 1>,<2>,<3> для выхода < Esc>). Процедуры SelectCardsClient, SelectCardsNo, SelectCardsGoodType похожи по своей структуре и алгоритму работы и необходимым для работы входным параметрам (FileName{файл для поиска}, FileFTmp{файл для вывода найденных данных}). Алгоритм сводится к открытию окна с возможностью ввода (выбора) данных для поиска (выборки) из БД и вывода результата на экран, по окончании процедура возвращает пользователя в меню поиска.

Функция FAddCards (AFileName: string) — Предназначена для добавления записи в БД. Перед началом процедуры ведется проверка по наличию самого файла БД, в случае его отсутсвия программа сама создает его. Далее пользователю предлагается поэтапно ввести данные для одной записи, причем обязательным условием является заполнение всех полей!!! Алгоритм следующий:

А) Вводим №карты — программа проверяет на наличие данной карты в БД, в положительном случае выдаст сообщение о том что данная карта зарегистрирована и имеет своего владельца. Также ведется проверка на обязательные условия ввода №карты — 6 цифр. Проверка проводится функцией FIntTrue (ATCardid: string, ADlina: integer):boolean. Последняя функция использует встроенный оператор val (a, b, c), которая преобразовывает строковую переменную a в целочисленную переменную b, при этом возвращает код c=0 при положительном варианте. Далее вычисляется длинна строки посредством встроенного оператора length (a) возвращающий числовое значение равное числу символов в строке. FIntTrue — логическая функция и потому возвращает лишь два значения True (в случае соответствия условиям) или False (несоответствия условию).

FDelCardsNo (AFileName: string; AFTmp: string) — для поиска карты необходимой для удаления используем выше описанную функцию SelectCardsNo. В случае существования данной карты данная запись запишется во временный файл. Далее программа проверяет размер данного временного файла, и если оно равно нулю то выдается сообщение: «Внимание! Нет данных для удаления!!!» и завершает свою работу. Если данные все же найдены, то программа потребует повторного подтверждения для удаления найденных записей. Далее создается еще один временный файл Temp. dat, и туда переписываются все данные из файла БД кроме тех, что содержаться в FTmp. dat. После чего файл с БД удаляется, а Temp. dat переименовывается в файл БД — CardsMK. dat.

FEdit (AFileName: string; AFTmp: string) — функция редактирования данных. По номеру карты находим запись для редактирования (функция SelectCardsNo). Выводим на экран меню редактирования, выбор поля для редактирования определяется цифрой на клавиатуре:

< 1> - Изменить владельца карты.

< 2> - Изменить тип топлива.

< 3> - Изменить тип владельца карты.

< 4> - Изменить пароль.

< Esc> - Выйти…

Первые четыре строки соответствуют вызову функций FEditClient с параметрами: AFileName — файл БД, AFTmpFile — файл с результатом поиска, PoleId — номер поля для редактирования. В зависимости от выбора поля для редактирования предлагается выбрать новый тип или ввести новое значение данного поля (обязательно с проверкой условий ввода). Выполненные изменения записываются во вновь созданный файл Temp. dat, и туда переписываются все данные из файла БД кроме тех, что содержаться в FTmp. dat. После чего файл с БД удаляется, а Temp. dat переименовывается в файл БД — CardsMK. dat.

MSort — открывает меню пользователя «Сортировать». Так же с помощью цифр определяемся с выбором поля по которому будет выполняться сортировка таблицы БД:

< 1> - По клиенту.

< 2> - По номеру карты.

< 3> - По типу топлива.

< 4> - По типу владельца.

< Esc> - Выйти…

Типы сортировки разбиты на свои функции: FSortByClient (FileName), FSortByCardNo (FileName), FSortByGoodType (FileName), FSortByClientType (FileName). По своему алгоритму они ничем не отличаются, разница лишь в поле сортировки.

Заключение

файловый алгоритмизация паскаль программирование

Данная программа представляет собой работоспособный модуль по работе с мобильными картами АЗС. Имеет интуитивно понятный интерфейс и не должна вызывать затруднений в работе конечного пользователя. В программе использованы разные методы алгоритмизации похожих процессов (сортировки и редактирования).

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

1. «Основы алгоритмизации и программирование», Е. Н. Сафьянова, учебное пособие, Томск, 2000 г.

Приложение 1

Листинг программы

uses Crt;

type TCards = record {Создание нового типа определенного формата }

Client: string [34]; {Поле Клиент}

CardNo: string[6]; {Поле №карты}

GoodType: string [7]; {Поле Тип топлива}

ClientType: string [10]; {Поле Тип Клиент}

Passwd: string[4]; {Поле Пароль}

end;

CONST FileName: string = 'CardsMK. dat';{Файл БД}

CONST FileFTmp: string = 'FTmp. dat'; {Временный файл}

{Функция определяет существует ли файл с данным именем}

function FileExists (AFileName: String): boolean;

var t: File of TCards;

begin

FileExists := False;

Assign (t, AFileName);

{$I-} Reset (t); {$I+} {отключаем контроль ошибки доступа}

If IOResult = 0 then begin

Close (t);

FileExists: =True

end;

end;

{Функция выода на экран содержимого файла в виде таблицы}

Function FShowFile (AFileName: string):boolean;

Var

t, FTmp: File of TCards;

Cards: TCards;

n: integer;

begin

FShowFile: =True;

If NOT FileExists (AFileName) then begin

FShowFile: =False;

Exit;

end;

Assign (t, AfileName);

Reset (t);

n: =1;

WriteLn ('| № | Владелец карты | Карта | Топливо | Юр. / Физ. |Пароль|');

WriteLn ('|---|-----------------------------------|--------|---------|------------|------|');

While NOT EOF (t) do begin

Read (t, Cards);

Writeln ('|', n: 3,'|', Cards. Client:34,' | ', Cards. CardNo:6,' | ', Cards. GoodType:7,' | ', Cards. ClientType:10,' | ',

Cards. Passwd:4,' |');

n: =n+1;

end;

WriteLn ('--------------------------------------------------------------------------------');

Close (t);

WriteLn ('Количество записей: ', n-1);

end;

{Функция контроля: ввод числа с определенной длинной символов}

Function FIntTrue (ATCardid: string; ADlina: integer):boolean;

var

code, chislo, dlina: integer;

begin

FIntTrue: =True;

val (ATCardid, chislo, code);

dlina: =length (ATCardid);

if code< >0 then begin

FIntTrue: =False;

end

else begin

If dlina< >ADlina then FIntTrue: =False;

end;

end;

{Функция поиска FSelect (файл БД, файл вывода результата, поле поиска (0-клиент, 1-№карты, 2-тип топлива)) }

Function FSelect (AFileName: string; AFileFTmp: string; iskomoe: string; PoleId: integer):boolean;

var

FTmp, t: file of TCards;

Cards: TCards;

kursor: Longint;

b, n: integer;

Pole: string;

Begin

FSelect: =False;

Assign (t, AFileName);

Reset (t);

Assign (FTmp, AFileFTmp);

Rewrite (FTmp);

kursor: =0;

n: =1;

while NOT EOF (t) do begin

seek (t, kursor);

Read (t, Cards);

Case PoleId of

0: Pole: =Cards. Client;

1: Pole: =Cards. CardNo;

2: Pole: =Cards. GoodType;

end;

If pos (iskomoe, Pole)=1 then begin

write (FTmp, Cards);

FSelect: =True;

n: =n+1;

end;

inc (kursor);

end;

Close (FTmp);

Close (t);

end;

{Окно поиска по клиенту}

Function SelectCardsClient (AFileName: string; AFileFTmp: string):boolean;

var

t: file of TCards;

FTmp: file of TCards;

Cards, ftmps: Tcards;

iskomoe: string;

Begin

SelectCardsClient: =False;

{Проверка на существование файла БД}

ClrScr;

Assign (t, AFileName);

Reset (t);

Assign (FTmp, FileFTmp);

Rewrite (FTmp);

{Запрашиваем данные для поиска данных}

Write ('Введите полные или начальные параметры для поиска: ');

Readln (iskomoe);

Close (FTmp);

Close (t);

{Выполним поиск и запишем результат в файл FTmp. dat}

FSelect (AFileName, AFileFTmp, iskomoe, 0);

{Выводим на экран полученный результат}

ClrScr;

FShowFile (AFileFTmp);

WriteLn ('Для выхода нажмите любую клавишу… ');

ReadKey;

end;

{Окно поиска по № карты}

Function SelectCardsNo (AFileName: string; AFileFTmp: string):boolean;

var

FTmp, t: file of TCards;

Cards, ftmps: Tcards;

iskomoe: string;

v: boolean;

Begin

SelectCardsNo: =False;

{Проверка на существование файлов}

If Not FileExists (AFileName) then Exit;

ClrScr;

Assign (t, AFileName);

Reset (t);

Assign (FTmp, FileFTmp);

Rewrite (FTmp);

{Запрашиваем №карты для ее поиска с обязательной проверкой верности введенных данных}

Repeat

Write ('Введите точный номер карты (6 цифр): ');

Readln (iskomoe);

v:= FIntTrue (iskomoe, 6);

until v=True;

Close (FTmp);

Close (t);

{Выполним поиск и запишем результат в файл FTmp. dat}

FSelect (AFileName, AFileFTmp, iskomoe, 1);

{Выводим на экран полученный результат}

ClrScr;

FShowFile (AFileFTmp);

WriteLn ('Нажмите любую клавишу… ');

ReadKey;

end;

{Окно поиска данных по типу топлива}

Function SelectCardsGoodType (AFileName: string; AFileFTmp: string):boolean;

var

t: file of TCards;

FTmp: file of TCards;

Cards, ftmps: Tcards;

kursor, f_size: Longint;

a: char;

b, n: integer;

iskomoe: string;

v: boolean;

Begin

SelectCardsGoodType: =False;

{Проверка на существование файлов}

If Not FileExists (AFileName) then Exit;

ClrScr;

Assign (t, AFileName);

Reset (t);

Assign (FTmp, FileFTmp);

Rewrite (FTmp);

{Предлогаем выбрать тип топлива}

repeat

begin

ClrScr;

WriteLn (' Пожалуйста выберите тип топлива: ');

WriteLn;

WriteLn ('< 1> «АИ-80"');

WriteLn;

WriteLn ('< 2> «АИ-92"');

WriteLn;

WriteLn ('< 3> «АИ-95"');

WriteLn;

WriteLn ('< 4> «Дт"');

WriteLn;

WriteLn;

WriteLn ('< Esc> Выход. ');

a: =ReadKey;

b: =ord (a);

case b of

49: iskomoe: ='"АИ-80"';

50: iskomoe: ='"АИ-92"';

51: iskomoe: ='"АИ-95"';

52: iskomoe: ='"ДТ"';

27: Exit;

end;

end;

until (b=49) or (b=50) or (b=51) or (b=52) or (b=27);

Close (FTmp);

Close (t);

{Выполним поиск и запишем результат в файл FTmp. dat}

FSelect (AFileName, AFileFTmp, iskomoe, 2);

{Выводим на экран полученный результат}

ClrScr;

FShowFile (AFileFTmp);

WriteLn ('Для выхода нажмите любую клавишу… ');

ReadKey;

end;

{Функция удаления карты из БД}

Function FDelCardsNo (AFileName: string; AFTmp: string): boolean;

Var

t, FTmp, temp: File of TCards;

Cards: TCards;

kursor, n: integer;

iskomoe1,iskomoe2: string;

otvet: char;

begin

FDelCardsNo: =False;

SelectCardsNO (AFileName, AFTmp);

Assign (FTmp, FileFTmp);

Reset (FTmp);

If FileSize (FTmp)=0 then begin

WriteLn ('Внимание! Нет данных для удаления!!!');

Close (FTmp);

ReadKey;

Exit;

end

else begin

repeat

Write ('Вы действительно хотите их удалить? < 0>-ДА, < 1>-НЕТ: ');

readln (otvet);

if ord (otvet)=49 then EXIT;

until ord (otvet)=48;

end;

Assign (t, AFileName);

Reset (t);

Assign (temp,'Temp. dat');

Rewrite (temp);

kursor: =0;

Read (FTmp, Cards);

iskomoe1: =Cards. CardNo;

while NOT EOF (t) do begin

seek (t, kursor);

Read (t, Cards);

iskomoe2: =Cards. CardNo;

If iskomoe2< >iskomoe1 then begin

write (temp, Cards);

end;

inc (kursor);

end;

If FileSize (temp)< >0 then FDelCardsNo: =True;

Close (t);

Close (FTmp);

Close (temp);

Erase (t);

Rename (temp, AFileName);

WriteLn;

WriteLn ('Запись успешно удалена');

WriteLn;

WriteLn ('Нажмите любую клавишу… ');

ReadKey;

end;

{Функция добавления записи в файл БД, если его нет, то программа создаст его}

Function FAddCards (AFilename: string):boolean;

var

t: File of TCards;

Cards: TCards;

t_fuel, t_client, kursor, n: integer;

chislo: string;

v, s: boolean;

Begin

FAddCards: =False;

{Проверка на существование файла}

if NOT FileExists (AFilename) then begin

assign (t, AFilename);

Rewrite (t);

Close (t);

ReadKey;

end;

{Запрос данных для записи}

Assign (t, AFilename);

Reset (t);

While not Eof (t) do Read (t, Cards);

seek (t, 0);

ClrScr;

WriteLn ('Внимание все поля обязательны к заполнению!');

WriteLn ('Выдать карту: ');

WriteLn;

kursor: =0;

n: =1;

{Запрашиваем и проверяем формат ввода новой карты}

Repeat

Write ('Введите номер карты (6 цифр): ');

Readln (chislo);

v:= FIntTrue (chislo, 6);

If v=True then begin

while NOT EOF (t) do begin

seek (t, kursor);

Read (t, Cards);

If chislo=Cards. CardNo then begin

n: =n+1;

end;

inc (kursor);

end;

If n< >1 then begin

Writeln ('Данная карта уже имеет владельца!!! Введите другую карту');

ReadKey;

end

else begin

n: =0;

Cards. CardNo:=chislo;

end;

end;

until n=0;

{Запрашиваем и проверяем формат владельца карты}

repeat

begin

Write ('Введите Ф.И.О Клиента: ');

Readln (Cards. Client);

s: =True;

if length (Cards. Client)=0 then s: =False;

if pos (' ', Cards. Client)=1 then s: =False;

end;

until s=True;

{Запрашиваем тип топлива}

repeat

Write ('Выберите тип топлива: 1-«АИ-80», 2-«АИ-92», 3-«АИ-95», 4-«ДТ»: ');

readln (t_fuel);

case t_fuel of

1: Cards. GoodType:='"АИ-80"';

2: Cards. GoodType:='"АИ-92"';

3: Cards. GoodType:='"АИ-95"';

4: Cards. GoodType:='"ДТ"';

end;

until (t_fuel=1) Or (t_fuel=2) Or (t_fuel=3) Or (t_fuel=4);

{Запрашиваем тип владельца карты}

repeat

Write ('Выберите тип клиента: 1 — «Физ. лицо», 2 — «Юр. лицо: ');

ReadLn (t_client);

case t_client of

1: Cards. ClientType:='"Физ. лицо"';

2: Cards. ClientType:='"Юр. лицо"';

end;

until (t_client=1) Or (t_client=2);

{Запрашиваем и проверяем формат пароля карты}

Repeat

Write ('Введите пароль (4 цифры): ');

Readln (Chislo);

v:= FIntTrue (chislo, 4);

until v=True;

Cards. Passwd:=chislo;

Write (t, Cards);

Close (t);

FAddCards: =True;

writeln ('!!! Запись успешно добавлена в БД !!!');

writeln;

writeln ('Нажмите любую клавишу… ');

ReadKey;

end;

{Функция редактирования данных с номером карты}

Function FEditClient (AFileName: string;AFTmpFile:string; PoleId: integer):boolean;

var

FTmp, t, temp: File of TCards;

Cards: TCards;

b, kursor, t_fuel, t_client: integer;

iskomoe, NewName, chislo: string;

s, v: boolean;

begin

FEditClient: =False;

Assign (t, AFileName);

Reset (t);

Assign (FTmp, AFTmpFile);

Reset (FTmp);

Assign (temp,'temp. dat');

Rewrite (temp);

seek (FTmp, 0);

Read (FTmp, Cards);

{Запрашиваем и проверяем формат владельца карты}

If PoleId=0 then begin

repeat

begin

Write ('Введите нового клиента: ');

ReadLn (Cards. Client);

s: =True;

if length (Cards. Client)=0 then s: =False;

if pos (' ', Cards. Client)=1 then s: =False;

end;

until s=True;

end;

{Запрашиваем тип топлива}

If PoleId=1 then begin

repeat

Write ('Выберите тип топлива: 1-«АИ-80», 2-«АИ-92», 3-«АИ-95», 4-«ДТ»: ');

readln (t_fuel);

case t_fuel of

1: Cards. GoodType:='"АИ-80"';

2: Cards. GoodType:='"АИ-92"';

3: Cards. GoodType:='"АИ-95"';

4: Cards. GoodType:='"ДТ"';

end;

until (t_fuel=1) Or (t_fuel=2) Or (t_fuel=3) Or (t_fuel=4);

end;

{Запрашиваем новый тип владельца карты}

If PoleId=2 then begin

repeat

Write ('Выберите тип клиента: 1 — «Физ. лицо», 2 — «Юр. лицо: ');

ReadLn (t_client);

case t_client of

1: Cards. ClientType:='"Физ. лицо"';

2: Cards. ClientType:='"Юр. лицо"';

end;

until (t_client=1) Or (t_client=2);

end;

{Запрашиваем и проверяем формат пароля карты}

If PoleId=3 then begin

Repeat

Write ('Введите пароль (4 цифры): ');

Readln (Chislo);

v:= FIntTrue (chislo, 4);

until v=True;

Cards. Passwd:=chislo;

end;

Write (temp, cards);

Rewrite (FTmp);

Write (FTmp, cards);

{Переписываем оставшиеся записи}

seek (FTmp, 0);

Read (FTmp, Cards);

iskomoe: =Cards. CardNo;

kursor: =0;

While NOT EOF (t) do begin

seek (t, kursor);

Read (t, Cards);

If iskomoe< >Cards. CardNo then begin

write (temp, Cards);

end;

inc (kursor);

end;

Close (t);

Close (temp);

Close (FTmp);

Erase (t);

Rename (temp, AFileName);

FEditClient: =True;

end;

{Функция меню редактирования}

Function FEdit (AFileName: string;AFTmpFile:string):boolean;

var

b: integer;

a: char;

Begin

FEdit: =False;

{По номеру карты находим запись для редактирования}

SelectCardsNO (AFileName, AFTmpFile);

{Выводим на Экран Окно редактирования}

Repeat

begin

ClrScr;

FShowFile (AFTmpFile);

WriteLn ('< 1>-Изменить владельца карты. ');

WriteLn ('< 2>-Изменить тип топлива. ');

WriteLn ('< 3>-Изменить тип владельца карты. ');

WriteLn ('< 4>-Изменить пароль. ');

WriteLn ('< Esc>-Выйти… ');

a: =ReadKey;

b: =ord (a);

Case b of

49: FEditClient (AFileName, AFTmpFile, 0);

50: FEditClient (AFileName, AFTmpFile, 1);

51: FEditClient (AFileName, AFTmpFile, 2);

52: FEditClient (AFileName, AFTmpFile, 3);

27: Exit;

end;

end;

until b=27;

end;

{Процедура — Сортировки по имени}

Procedure FSortByClient (AFileName: string);

var

t: File of TCards;

Cards1,Cards2: TCards;

kursor1,kursor2, f_size: Longint;

begin

if NOT FileExists (AFileName) then Exit;

Assign (t, AfileName);

Reset (t);

kursor1: =0;

f_size: =FileSize (t)-1;

while kursor1 < f_size do begin

seek (t, kursor1);

Read (t, Cards1);

kursor2: =kursor1+1;

while kursor2 <= f_size do begin

seek (t, kursor2);

Read (t, Cards2);

if Cards1. Client>Cards2. Client then begin

seek (t, kursor1);

write (t, Cards2);

seek (t, kursor2);

write (t, Cards1);

Cards1: =Cards2;

end;

inc (kursor2);

end;

inc (kursor1);

end;

Close (t);

end;

{Процедура — Сортировки по номеру карты}

Procedure FSortByCardNo (AFileName: string);

var

t: File of TCards;

Cards1,Cards2: TCards;

kursor1,kursor2, f_size: Longint;

begin

if NOT FileExists (AFileName) then Exit;

Assign (t, AfileName);

Reset (t);

kursor1: =0;

f_size: =FileSize (t)-1;

while kursor1 < f_size do begin

seek (t, kursor1);

Read (t, Cards1);

kursor2: =kursor1+1;

while kursor2 <= f_size do begin

seek (t, kursor2);

Read (t, Cards2);

if Cards1. CardNo>Cards2. CardNo then begin

seek (t, kursor1);

write (t, Cards2);

seek (t, kursor2);

write (t, Cards1);

Cards1: =Cards2;

end;

inc (kursor2);

end;

inc (kursor1);

end;

Close (t);

end;

{Процедура — Сортировки по Типу топлива}

Procedure FSortByGoodType (AFileName: string);

var

t: File of TCards;

Cards1,Cards2: TCards;

kursor1,kursor2, f_size: Longint;

begin

if NOT FileExists (AFileName) then Exit;

Assign (t, AfileName);

Reset (t);

kursor1: =0;

f_size: =FileSize (t)-1;

while kursor1 < f_size do begin

seek (t, kursor1);

Read (t, Cards1);

kursor2: =kursor1+1;

while kursor2 <= f_size do begin

seek (t, kursor2);

Read (t, Cards2);

if Cards1. GoodType>Cards2. GoodType then begin

seek (t, kursor1);

write (t, Cards2);

seek (t, kursor2);

write (t, Cards1);

Cards1: =Cards2;

end;

inc (kursor2);

end;

inc (kursor1);

end;

Close (t);

end;

{Процедура — Сортировки по Типу клиента}

Procedure FSortByClientType (AFileName: string);

var

t: File of TCards;

Cards1,Cards2: TCards;

kursor1,kursor2, f_size: Longint;

begin

if NOT FileExists (AFileName) then Exit;

Assign (t, AfileName);

Reset (t);

kursor1: =0;

f_size: =FileSize (t)-1;

while kursor1 < f_size do begin

seek (t, kursor1);

Read (t, Cards1);

kursor2: =kursor1+1;

while kursor2 <= f_size do begin

seek (t, kursor2);

Read (t, Cards2);

if Cards1. ClientType>Cards2. ClientType then begin

seek (t, kursor1);

write (t, Cards2);

seek (t, kursor2);

write (t, Cards1);

Cards1: =Cards2;

end;

inc (kursor2);

end;

inc (kursor1);

end;

Close (t);

end;

{Процедура — Меню «Сортировать"}

Procedure MSort;

var

a: char;

b: integer;

begin

repeat

begin

ClrScr;

WriteLn (' «Справочник выданных Мобильных карт» — Меню «Сортировть"');

WriteLn;

WriteLn ('< 1> По клиенту');

WriteLn;

WriteLn ('< 2> По номеру карты');

WriteLn;

WriteLn ('< 3> По типу топлива');

WriteLn;

WriteLn ('< 4> По типу владельца');

WriteLn;

WriteLn ('< Esc> Выход. ');

a: =ReadKey;

b: =ord (a);

case b of

49: FSortByClient (FileName);

50: FSortByCardNo (FileName);

51: FSortByGoodType (FileName);

52: FSortByClientType (FileName);

end;

end;

until (b=27) or (b=49) or (b=50) or (b=51) or (b=52);

end;

{Процедура — Меню поиска}

Procedure MPoisk;

var

a: char;

b: integer;

begin

repeat

begin

ClrScr;

WriteLn (' «Справочник выданных Мобильных карт» — Меню поиска');

WriteLn;

WriteLn ('< 1> Поиск по клиенту');

WriteLn;

WriteLn ('< 2> Поиск по номеру карты');

WriteLn;

WriteLn ('< 3> Выборка по типу топлива');

WriteLn;

WriteLn ('< Esc> Выход. ');

a: =ReadKey;

b: =ord (a);

case b of

49: SelectCardsClient (FileName, FileFTmp);

50: SelectCardsNo (FileName, FileFTmp);

51: SelectCardsGoodType (FileName, FileFTmp);

end;

end;

until b=27;

end;

{Процедура вывода на экран БД}

Procedure ShowFile (AfileName: string);

Var

FTmp: File of TCards;

b: integer;

a: char;

Begin

Repeat

If Not FileExists (AFileName) then begin

Assign (FTmp, AFileName);

Rewrite (FTmp);

Close (FTmp);

ShowFile (AFileName);

end;

ClrScr;

FShowFile (AFilename);

WriteLn;

Write ('< 1>-«Поиск…» ');

Write ('< 2>-«Выдать карту…» ');

Writeln ('< 3>-«Удалить карту…» ');

Write ('< 4>-«Редактировать карту…» ');

Writeln ('< 5>-«Сортировать список… «');

Writeln ('----------------------------');

Writeln ('< Esc>-«ВЫХОД — Главное меню"');

a: =ReadKey;

b: =ord (a);

Case b of

49: MPoisk;

50: FAddCards (FileName);

51: FDelCardsNo (FileName, FileFTmp);

52: FEdit (FileName, FileFTmp);

53: MSort;

end;

until b=27;

{Удаляем FTmp. dat-файл}

If FileExists (FileFTmp) then begin

Assign (FTmp, FileFTmp);

Reset (FTmp);

Close (FTmp);

Erase (FTmp);

end;

end;

{Процедура — Окно главного меню}

procedure PMenu;

var

a: char;

b: integer;

begin

repeat

begin

ClrScr;

WriteLn (' «Справочник выданных Мобильных карт» — Главное меню ');

WriteLn;

WriteLn ('< 1> Список карт. ');

WriteLn;

WriteLn ('< Esc> Выйти из программы. ');

a: =ReadKey;

b: =ord (a);

case b of

49: ShowFile (FileName);

end;

end;

until b=27;

end;

{Тело программы}

begin

ClrScr;

PMenu;

end.

Приложение 2

Результат работы

Результат работы приведен в картинках:

Начало работы программы:

«< 1>-Список карт»

«< 1>-Список карт» -> «< 1>-Поиск…»

«< 1>-Список карт» -> «< 1>-Поиск…» -> «< 1>-Поиск по клиенту»

«< 1>-Список карт» -> «< 1>-Поиск…» -> «< 2>-Поиск по номеру карты»

«< 1>-Список карт» -> «< 1>-Поиск…» -> «< 3>-Выборка по типу топлива»

Результат поиска:

«< 1>-Список карт» -> «< 2>-Выдать карту…»

Результат добавление записи:

«< 1>-Список карт» -> «< 3>-Удалить карту…»

«< 1>-Список карт» -> «< 4>-Редактировать карту…»

«< 1>-Список карт» -> «< 5>-Сортировать список…»

«< 1>-Список карт» -> «< 5>-Сортировать список…» -> «< 1>-По клиенту»

«< 1>-Список карт» -> «< 5>-Сортировать список…» -> «< 2>-По номеру карты»

«< 1>-Список карт» -> «< 5>-Сортировать список…» -> «< 3>-По типу топлива»

«< 1>-Список карт» -> «< 5>-Сортировать список…» -> «< 3>-По типу владельца»

При нажатии < Esc> программа завершит свою работу:

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