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

Создание работоспособного модуля по работе с мобильными картами АЗС. Разработка базы данных в среде программирования Турбо Паскаль для работы с текстами и файловыми структурами. Описание методов алгоритмизации процессов сортировки и редактирования.

Рубрика Программирование, компьютеры и кибернетика
Вид курсовая работа
Язык русский
Дата добавления 05.12.2011
Размер файла 1,9 M

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

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

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

Содержание

Введение

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 символов, может хранить в себе номера карт начинающиеся с № 100000 и до №999999;

· 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> программа завершит свою работу:

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


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

  • Особенности использования графического режима в среде Турбо Паскаль. Типы драйверов. Инициализация графики. Построение изображения на экране. Графические примитивы и работа с текстом. Разработка и реализация программ в среде Турбо Паскаль "Графика".

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

  • Общая характеристика языка программирования Турбо Паскаль: операторы, циклы, файлы. Процедуры и функции модуля Crt. Структурная и функциональная схема программы учета учащихся, таблица идентификаторов. Список и описание использованных подпрограмм.

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

  • Особенности программирования на языке Паскаль в среде Турбо Паскаль. Линейные алгоритмы, процедуры и функции. Структура данных: массивы, строки, записи. Модульное программирование, прямая и косвенная рекурсия. Бинарный поиск, организация списков.

    отчет по практике [913,8 K], добавлен 21.07.2012

  • Освоение технологии структурного программирования и применения стандартных методов работы с одномерными массивами при разработке и создании программы на языке Турбо Паскаль. Разработка программы методом пошаговой детализации с помощью псевдокода.

    реферат [276,9 K], добавлен 27.02.2008

  • Разработка программы, создающей и управляющей базой данных, ее реализация на языке Turbo Pascal. Организация алгоритма программы. Вывод информации и возможность добавления информации в базу данных. Поиск информации в базе данных по заданному значению.

    курсовая работа [26,7 K], добавлен 19.06.2010

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

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

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

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

  • Сравнительный анализ языков программирования высокого уровня Си и Паскаль. Реализация алгоритма обработки данных. Тестирование и отладка программы или пакета программ. Структура программы на языке Турбо Паскаль. Указатели и векторные типы данных.

    курсовая работа [233,5 K], добавлен 14.12.2012

  • Приобретение теоретических и практических навыков программирования на языке Паскаль. Математическая формулировка задачи и выбор метода обработки информации. Разработка алгоритма и его описание. Описание программы. Форма представления исходных данных.

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

  • Создание базы данных и СУБД. Структура простейшей базы данных. Особенности языка программирования Турбо Паскаль. Описание типов, констант, переменных, процедур и функций. Описание алгоритма базы данных (для сотрудников ГИБДД), листинг программы.

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

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