Разработка алгоритмов и их реализация
Создание работоспособного модуля по работе с мобильными картами АЗС. Разработка базы данных в среде программирования Турбо Паскаль для работы с текстами и файловыми структурами. Описание методов алгоритмизации процессов сортировки и редактирования.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 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