Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {***************************************************************************}
- { Сибирский Государственный Университет Путей Сообщения (СГУПС) }
- { Кафедра "Информационные технологии транспорта" }
- { }
- { Лабораторная работа по теме "Записи". }
- { Тема: "База данных автомобилей". }
- { }
- { Структура должна включать не менее 10 столбцов, в том числе - строковые, }
- { числовые и дата. Всего в таблице должно быть не менее 30 строк. }
- { }
- { В программе должны реализовываться следующее: }
- { - загрузка и сохранение данных в типизированный файл; }
- { - ввод, редактирование, поиск, сортировка и удаление строк; }
- { - просмотр данных в табличной форме; }
- { - формирование отчетов в текстовый файл; }
- { - подсчет максимальных и минимальных значений, сумм и средних }
- { значений для числовых полей. }
- { }
- { Выполнила: }
- { Cтудентка группы МЛ-113, Рудыхина Ольга Вячеславовна }
- { Новосибирск, 2014 }
- {***************************************************************************}
- Program Ole4ka; uses crt, dos;
- {----- Описываем константы Start -----}
- const f_name_db=('Auto.dat'); {Имя файла Базы Данных}
- f_name_rept=('Auto.txt'); {Имя файла с отчетом}
- n_types=10; {11 типов кузова}
- n_fuel=3; {4 вида топлива}
- n_cylinders=4; {5 типов расположения цилиндров}
- n_transmission=3; {4 типа КПП}
- n_drive=2; {3 типа привода}
- n_color=122; {123 цвета автомобилей}
- c_types:array [0..n_types] of string = ('Седан','Хэтчбек','Универсал','Внедорожник',
- 'Кроссовер','Пикап','Купе','Кабриолет',
- 'Минивен','Фургон','Микроавтобус');
- c_fuel:array [0..n_fuel] of string = ('Безнзин','Дизель','Гибрид','Газ/Бензин');
- c_cylinders:array [0..n_cylinders] of string = ('Рядное','V-образное','W-образное',
- 'Роторный двигатель','Оппозитное');
- c_transmission:array [0..n_transmission] of string = ('МКПП','АКПП','РКПП','Вариатор');
- c_drive:array [0..n_drive] of string = ('Передний','Задний','Полный');
- c_color:array [0..n_color] of string = ('Авантюрин','Адриатика','Айсберг','Аквамарин','Аккорд',
- 'Альпийский снег','Аметист','Амулет','Антилопа','Атлантика',
- 'Афалина','Баклажан','Балтика','Бальзам','Бежевый','Белый',
- 'Бриз','Бургундия','Вавилон','Валентина','Валюта',
- 'Виктория','Вишня','Вишнёвый сад','Гейзер','Голубой',
- 'Гранат','Дефиле','Дюшес','Жасмин','Жемчуг','Жёлтый (Такси)',
- 'Зелёная','Зелёный сад','Золотая нива','Золотой лист',
- 'Игуана','Изумруд','Ирис','Искра','Капри','Кардинал',
- 'Кармен','Кварц','Кедр','Коралл','Кориандр','Корица',
- 'Корсика','Кристалл','Ла-Манш','Лаванда','Лагуна',
- 'Лазурит','Лазурно-синий','Лазурь','Ламинария','Магия',
- 'Майя','Мальборо','Медео','Миндаль','Мираж','Млечный путь',
- 'Мокрый асфальт','Монте-Карло','Моцарт','Мулен-Руж',
- 'Мурена','Нарцисс','Нептун','Нефертити','Ниагара',
- 'Океан','Оливин','Оливковый','Опал','Опатия','Осока',
- 'Папирус','Паприка','Петергоф','Пирано','Пицунда',
- 'Престиж','Приз','Примула','Рапсодия','Ривьера',
- 'Романс','Рубин','Сандаловый','Сапфир','Сафари',
- 'Светло-серый','Серебристая ива','Серебристый',
- 'Серо-бежевый','Серо-голубой','Серо-зелёный',
- 'Синяя полночь','Сирень','Сливочно-белый',
- 'Слоновая кость','Снежная королева','Снежно-белый',
- 'Сочи','Табак','Талая вода','Торнадо','Триумф',
- 'Тёмно-бежевая','Тёмно-коричневый','Тёмно-серый',
- 'Тёмно-синий','Фея (Лесная фея)','Фрегат','Цунами',
- 'Чайная роза','Чароит','Чёрный','Электрон','Юпитер');
- maxid=70; {Максимальное кол-во записей в БД}
- {----- Описываем константы Start -----}
- {----- Описываем типы Start -----}
- type Automobile=record {Структура БД Автомобилей}
- maker:string [15]; {Марка}
- model:string [15]; {Модель}
- grade:string [15]; {Комплектация}
- types:string [15]; {Тип кузова}
- engine:record {Характеристика двигателя}
- fuel_type:string [10]; {Вид топлива}
- power:word; {Мощность двигателя, л.с.}
- volume:word; {Объём двигателя, см^3}
- cylinders:string [20]; {Расположение цилиндров}
- end; {Record Engine}
- consumption:record {Расход топлива}
- city:real; {По городу}
- track:real; {По трассе}
- mixed:real; {Смешанный}
- end; {Record Consumption}
- transmission:string [10]; {Трансмиссия}
- drive:string [10]; {Тип привода}
- color:string [15]; {Цвет}
- year:word; {Год выпуска}
- price:longint; {Стоимость}
- end; {Record Automobile}
- TData=array [1..maxid] of Automobile; {Массив данных}
- TFile=file of Automobile; {Файл БД - f_name_db}
- {----- Описываем типы End -----}
- var data,sdata:TData;
- id:integer;
- ch,ch2:char;
- {----- Интерфейс программы Start -----}
- {----- Печатаем линию Start -----}
- Procedure PrintLine;
- var i:byte;
- Begin
- TextColor(White);
- for i:=1 to 80 do Write('-');
- end;
- {----- Печатаем линию End -----}
- {----- Вывод заголовка Start -----}
- Procedure PrintHead(color,x:byte; word:string); {Заголовок}
- Begin
- TextColor(Color); GotoXY(X,WhereY); Writeln(Word);
- end;
- {----- Вывод заголовка End -----}
- {----- Вывод основного меню Start -----}
- Procedure PrintMainMenu;
- const item=8; {Кол-во пунктов в меню}
- m_item:array [1..item] of string [80] = ('Работа с информацией',
- 'Просмотр информации',
- 'Формирование отчета',
- 'Поиск','Сортировка',
- 'Справка','Об авторе','Выход');
- var i:byte; {Счетчик}
- Begin clrscr;
- PrintLine;
- PrintHead(Yellow,28,'ОСНОВНОЕ МЕНЮ ПРОГРАММЫ');
- PrintHead(LightGreen,8,'Управление: для выбора нужного действия используйте клавиши (0-7)');
- PrintLine;
- for i:=1 to item-1 do
- Begin
- TextColor(Yellow); Write(' { ',i,' } '); TextColor(Cyan); Writeln(m_item[i]); PrintLine;
- end;
- TextColor(Yellow); Write(' { 0 } '); TextColor(Cyan); Writeln(m_item[item]); PrintLine;
- end;
- {----- Вывод основного меню End -----}
- {----- Возврат к основному меню Start -----}
- Procedure ReturnMainMenu;
- var ch:char;
- Begin
- PrintLine; GotoXY(15,WhereY);
- TextColor(Yellow); Writeln('Для возврата в главное меню нажмите клавишу "Enter"');
- PrintLine;
- Repeat
- Ch:=Readkey;
- Until (Ch = #13);
- PrintMainMenu; {Основное меню программы}
- end;
- {----- Возврат к основному меню End -----}
- {----- Вывод дополнительного меню #1 Start -----}
- Procedure PrintAdditionalMenu_1;
- const item=6; {Кол-во пунктов в меню}
- m_item:array [1..item] of string [80] = ('Добавить информацию',
- 'Удалить информацию',
- 'Изменить информацию',
- 'Сохранить информацию в файл',
- 'Загрузить информацию из файла',
- 'Возврат в главное меню');
- var i:byte; {Счетчик}
- Begin clrscr;
- PrintLine;
- PrintHead(Yellow,25,'ДПОЛНИТЕЛЬНОЕ МЕНЮ ПРОГРАММЫ');
- PrintHead(LightGreen,8,'Управление: для выбора нужного действия используйте клавиши (1-6)');
- PrintLine;
- for i:=1 to item do
- Begin
- TextColor(Yellow); Write(' { ',i,' } '); TextColor(Cyan); Writeln(m_item[i]); PrintLine;
- end;
- end;
- {----- Вывод дополнительного меню #1 End -----}
- {----- Вывод дополнительного меню #2 Start -----}
- Procedure PrintAdditionalMenu_2;
- const item=3; {Кол-во пунктов в меню}
- m_item:array [1..item] of string [80] = ('Просмотр краткой информации',
- 'Просмотр подробной информации',
- 'Возврат в главное меню');
- var i:byte; {Счетчик}
- Begin clrscr;
- PrintLine;
- PrintHead(Yellow,25,'ДПОЛНИТЕЛЬНОЕ МЕНЮ ПРОГРАММЫ');
- PrintHead(LightGreen,8,'Управление: для выбора нужного действия используйте клавиши (1-3)');
- PrintLine;
- for i:=1 to item do
- Begin
- TextColor(Yellow); Write(' { ',i,' } '); TextColor(Cyan); Writeln(m_item[i]); PrintLine;
- end;
- end;
- {----- Вывод дополнительного меню #2 End -----}
- {----- Вывод дополнительного меню #3 Start -----}
- Procedure PrintAdditionalMenu_3;
- const item=10; {Кол-во пунктов в меню}
- m_item:array [1..item] of string [80] = ('Поиск по марке автомобиля',
- 'Поиск по модели автомобиля',
- 'Поиск по типу кузова',
- 'Поиск по типу трансмиссии',
- 'Поиск по типу привода',
- 'Поиск по виду топлива',
- 'Поиск по цвету автомобиля',
- 'Поиск по году выпуска',
- 'Поиск по стоимости автомобиля',
- 'Возврат в главное меню');
- var i:byte; {Счетчик}
- Begin clrscr;
- PrintLine;
- PrintHead(Yellow,25,'ДПОЛНИТЕЛЬНОЕ МЕНЮ ПРОГРАММЫ');
- PrintHead(LightGreen,8,'Управление: для выбора нужного действия используйте клавиши (0-9)');
- PrintLine;
- for i:=1 to item-1 do
- Begin
- TextColor(Yellow); Write(' { ',i,' } '); TextColor(Cyan); Writeln(m_item[i]);
- PrintLine;
- end;
- TextColor(Yellow); Write(' { 0 } '); TextColor(Cyan); Writeln(m_item[item]);
- PrintLine;
- end;
- {----- Вывод дополнительного меню #3 End -----}
- {----- Вывод дополнительного меню #4 Start -----}
- Procedure PrintAdditionalMenu_4;
- const item=3; {Кол-во пунктов в меню}
- m_item:array [1..item] of string [80] = ('Сортировка данных в БД по году выпуска',
- 'Сортировка данных в БД по стоимости',
- 'Возврат в главное меню');
- var i:byte; {Счетчик}
- Begin clrscr;
- PrintLine;
- PrintHead(Yellow,25,'ДПОЛНИТЕЛЬНОЕ МЕНЮ ПРОГРАММЫ');
- PrintHead(LightGreen,8,'Управление: для выбора нужного действия используйте клавиши (1-3)');
- PrintLine;
- for i:=1 to item do
- Begin
- TextColor(Yellow); Write(' { ',i,' } '); TextColor(Cyan); Writeln(m_item[i]);
- PrintLine;
- end;
- end;
- {----- Вывод дополнительного меню #4 End -----}
- {----- Справка по программе Start -----}
- Procedure PrintHelpProgram; {Справка}
- Begin clrscr;
- PrintLine;
- PrintHead(Yellow,35,'СПРАВКА');
- PrintHead(LightGreen,22,'Информация о возможностях программы');
- PrintLine;
- TextColor(Cyan); Writeln(' Данная программа позволяет выполнять следующие действия:');
- TextColor(Yellow); Write(' { 1 } '); TextColor(Cyan); Writeln('Добавлять данные в БД');
- TextColor(Yellow); Write(' { 2 } '); TextColor(Cyan); Writeln('Загружать данные из БД');
- TextColor(Yellow); Write(' { 3 } '); TextColor(Cyan); Writeln('Изменять данные в БД');
- TextColor(Yellow); Write(' { 4 } '); TextColor(Cyan); Writeln('Удалять данные из БД');
- TextColor(Yellow); Write(' { 5 } '); TextColor(Cyan); Writeln('Осуществлять поиск в БД');
- TextColor(Yellow); Write(' { 6 } '); TextColor(Cyan); Writeln('Осуществлять сортировку БД ');
- TextColor(Yellow); Write(' { 7 } '); TextColor(Cyan); Writeln('Формировать файл с отчетом');
- ReturnMainMenu;
- end;
- {----- Справка по программе End -----}
- {----- Информация об авторе программы Start -----}
- Procedure PrintInfoAuthor; {Справка}
- Begin clrscr;
- PrintLine;
- PrintHead(Yellow,35,'ОБ АВТОРЕ');
- PrintHead(LightGreen,20,'Подробная информация об авторе программы');
- PrintLine;
- TextColor(Cyan); Write(' Университет: ');
- TextColor(Yellow); Writeln('Сибирский государственный университет путей сообщения (СГУПС)');
- TextColor(Cyan); Write(' Факультет: '); TextColor(Yellow); Writeln('Бизнес-информатика (ФБИ)');
- TextColor(Cyan); Write(' Кафедра: '); TextColor(Yellow); Writeln('Информационные технологии транспорта');
- TextColor(Cyan); Write(' Группа: '); TextColor(Yellow); Writeln('МЛ-113');
- TextColor(Cyan); Write(' Студентка: '); TextColor(Yellow); Writeln('Рудыхина Ольга Вячеславовна');
- ReturnMainMenu;
- end;
- {----- Информация об авторе программы End -----}
- {----- Интерфейс программы End -----}
- {----- Функционал программы Start -----}
- {$S-$M} {Отключаем проверку стека}
- {----- Сохранение Базы данных Start -----}
- Procedure SaveDataBase(data:TData; ns:integer);
- var id:integer;
- fdata:TFile;
- Begin clrscr;
- PrintLine;
- PrintHead(Yellow,31,'СОХРАНЕНИЕ ДАННЫХ');
- PrintHead(LightGreen,23,'Сохранение данных в файл '+f_name_db);
- PrintLine;
- Assign(FData,F_name_db); {Подключаем файл "F_name" к переменной F}
- Rewrite(FData); {Создаем файл "F_name" и открываем для записи}
- for id:=1 to ns do Write(FData,Data[id]); {Записываем информацию в Базу Данных}
- Close(FData); {Закрываем файл "F_name"}
- PrintHead(LightGreen,23,'База данных успешно сохранена...');
- ReturnMainMenu; {Возврат в основное меню}
- end;
- {----- Сохранение Базы данных End -----}
- {----- Чтение из Базы данных Start -----}
- Procedure ReadingDataBase(var data:TData; var id:integer; maxid:integer);
- var fdata:TFile;
- Begin clrscr;
- PrintLine;
- PrintHead(Yellow,32,'ЗАГРУЗКА ДАННЫХ');
- PrintHead(LightGreen,22,'Загрузка данных из файла '+f_name_db);
- PrintLine;
- Assign(FData,F_name_db); {Подключаем файл "F_name_db" к переменной FData}
- Reset(FData); {Открываем файл "F_name" для чтения}
- While ((not Eof(FData)) and (id <= MaxID)) do
- Begin
- Inc(id);
- Read(FData,Data[id]);
- end;
- Close(FData); {Закрываем файл "F_name_db"}
- PrintHead(LightGreen,23,'База данных успешно загружена...');
- ReturnMainMenu; {Возврат в основное меню}
- end;
- {----- Чтение из Базы данных End -----}
- {----- Выбор данных из массивов-констант Start -----}
- Function Selection(const value:array of string; item:integer):string;
- {Параметры: Value - массив-константа; item - кол-во элементов в массиве Value}
- var post:integer;
- ch:char;
- Begin
- GotoXY(30,WhereY); TextColor(White); Write('[ Для управления используйте стрелки "',#26, '" и "', #27,'" ]');
- TextColor(Yellow); GotoXY(30,WhereY);
- Post:=-1;
- Repeat
- Ch:=ReadKey;{Считываем ASCII код клавиши}
- {#13 - клавиша "Enter" / #75 - стрелка влево / #77 - стрелка вправо}
- Case Ch of
- #77:Begin {Стрелка вправо}
- Inc(Post); {Определяем номер элемента в массиве}
- {Если элемент был последним, то возвращаемся к первому}
- if (Post > High(Value)) then Post:=Low(Value);{Первый элемент массива}
- GotoXY(30,WhereY); ClrEol; Write(Value[Post]);
- end;
- #75:Begin {Стрелка влево}
- Dec(Post); {Определяем номер элемента в массиве}
- {Если элемент был первым, то возвращаемся к последнему}
- if (Post < Low(Value)) then Post:=High(Value);
- GotoXY(30,WhereY); ClrEol; Write(Value[Post]);
- end;
- #13:Selection:=Value[Post]; {Заоминаем выбранный элемент массива}
- end;{Case Ch}
- Until (Ch = #13); {Клавиша "Enter"}
- Writeln;
- end;
- {----- Выбор данных из массивов-констант End -----}
- {----- Ввод/изменение данных в БД Start -----}
- Procedure ChangeDataBase(var data:automobile);
- var ch:char; {ASCII код клавиши}
- Begin clrscr;
- PrintLine;
- PrintHead(Yellow,34,'ВВОД ДАННЫХ');
- PrintHead(LightGreen,14,'Управление: для ввода данных используйте клавиатуру');
- PrintLine;
- With Data do
- Begin
- TextColor(Cyan); Write(' Марка: '); TextColor(Yellow); GotoXY(30,WhereY); Readln(Maker);
- TextColor(Cyan); Write(' Модель:'); TextColor(Yellow); GotoXY(30,WhereY); Readln(Model);
- TextColor(Cyan); Write(' Комлектация: '); TextColor(Yellow); GotoXY(30,WhereY); Readln(Grade);
- TextColor(Cyan); Write(' Тип кузова: '); Types:=Selection(c_types,n_types);
- With Engine do
- Begin
- TextColor(Cyan); Write(' Вид топлива: '); Fuel_Type:=Selection(c_fuel,n_fuel);
- TextColor(Cyan); Write(' Мощность двигателя, л.с.: '); TextColor(Yellow); GotoXY(30,WhereY); Readln(Power);
- TextColor(Cyan); Write(' Объём двигателя, см^3: '); TextColor(Yellow); GotoXY(30,WhereY); Readln(Volume);
- TextColor(Cyan); Write(' Расположение цилиндров: '); Cylinders:=Selection(c_cylinders,n_cylinders);
- end;
- TextColor(Cyan); Writeln(' Расход топлива, л/100 км: ');
- With Consumption do
- Begin
- GotoXY(1,WhereY); TextColor(Cyan); Write(' По городу: '); TextColor(Yellow); Readln(City);
- GotoXY(32,WhereY-1); TextColor(Cyan); Write(' По трассе: '); TextColor(Yellow); Readln(Track);
- GotoXY(63,WhereY-1); TextColor(Cyan); Write(' Смешанный: '); TextColor(Yellow); Readln(Mixed);
- end;
- TextColor(Cyan); Write(' Трансмиссия: '); Transmission:=Selection(c_transmission,n_transmission);
- TextColor(Cyan); Write(' Тип привода: '); Drive:=Selection(c_drive,n_drive);
- TextColor(Cyan); Write(' Цвет: '); Color:=Selection(c_color,n_color);
- TextColor(Cyan); Write(' Год выпуска: '); TextColor(Yellow); GotoXY(30,WhereY); Readln(Year);
- TextColor(Cyan); Write(' Стоимость, руб.: '); TextColor(Yellow); GotoXY(30,WhereY); Readln(Price);
- end;
- ReturnMainMenu; {Возврат в основное меню}
- end;
- {----- Ввод/изменение данных в БД End -----}
- {----- Выбор номера Start -----}
- Function SelectionID(id:integer):integer;
- var num:integer;
- st:string;
- Begin clrscr;
- Repeat
- PrintLine;
- PrintHead(Yellow,34,'ВЫБОР ЗАПИСИ');
- Str(id,St); {ID - последней записи}
- PrintHead(LightGreen,24,'Выберите номер записи от 1 до '+St);
- PrintLine;
- TextColor(Cyan); Write(' Введите номер: '); TextColor(Yellow); Readln(Num);
- if ((Num < 1) or (id < Num)) then
- Begin
- PrintLine;
- PrintHead(Red,8,'ОШИБКА #003: Введенный ID не принадлежит допустимому диапазону');
- PrintHead(LightGreen,31,'Повторите ввод...');
- PrintLine;
- Delay(3000); {Задержка 3 сек} clrscr;
- end;
- Until ((1 <= Num) and (Num <= id));
- SelectionID:=Num; {Присваиваем...}
- PrintLine;
- TextColor(Yellow); GotoXY(19,WhereY); Writeln('Для продолжения нажмите клавишу "Enter"');
- PrintLine;
- Readln; clrscr;
- end;
- {----- Выбор номера End -----}
- {----- Удаление данных Start -----}
- Procedure DeleteDataBase(var data:TData; var id:integer; n:integer);
- var i:integer;
- Begin
- PrintLine;
- PrintHead(Yellow,33,'УДАЛЕНИЕ ЗАПИСИ');
- PrintHead(LightGreen,22,'Удаление записи с выбранным ID из БД');
- PrintLine;
- if (N in [1..id]) then
- Begin
- for i:=n to id-1 do Data[i]:=Data[i+1];
- Dec(id);
- end;
- PrintHead(LightGreen,29,'Запись успешно удалена');
- ReturnMainMenu; {Возврат в основное меню}
- end;
- {----- Удаление данных End -----}
- {----- Вывод краткой информации №1 из БД Start -----}
- Procedure ShortStory_1(data:TData; var id:integer; ns:integer);
- var count:integer;
- Begin clrscr;
- PrintLine;
- PrintHead(Yellow,32,'ПРОСМОТР ДАННЫХ');
- PrintHead(LightGreen,6,'Управление: клавиши "'+#24+'", "'+#25+'", "'+#26+'", "'+#27+'", Esc - выход в основное меню');
- PrintLine; Write('| № | Марка | Модель | Комлектация | КПП | Привод |'); PrintLine;
- Count:=0;
- Repeat
- Inc(id);
- Inc(Count);
- With Data[id] do {Печатаем таблицу}
- Begin
- GotoXY(1,WhereY); Write('|',id:2);
- GotoXY(5,WhereY); Write('| ',Maker);
- GotoXY(22,WhereY); Write('| ',Model);
- GotoXY(41,WhereY); Write('| ',Grade);
- GotoXY(59,WhereY); Write('| ',Transmission);
- GotoXY(67,WhereY); Write('| ',Drive);
- GotoXY(79,WhereY); Write(' |');
- end; {End With Data[id]}
- Until ((Count = 15) or (id = Ns));
- PrintLine;
- end;
- {----- Вывод краткой информации №1 из БД End -----}
- {----- Вывод краткой информации №2 из БД Start -----}
- Procedure ShortStory_2(data:TData; var id:integer; ns:integer);
- var count:integer;
- Begin clrscr;
- PrintLine;
- PrintHead(Yellow,32,'ПРОСМОТР ДАННЫХ');
- PrintHead(LightGreen,6,'Управление: клавиши "'+#24+'", "'+#25+'", "'+#26+'", "'+#27+'", Esc - выход в основное меню');
- PrintLine; Write('| № | Тип кузова | Топливо | Объём | Цвет | Год | Стоимость |'); PrintLine;
- Count:=0;
- Repeat
- Inc(id);
- Inc(Count);
- With Data[id] do {Печатаем таблицу}
- Begin
- GotoXY(1,WhereY); Write('|',id:2);
- GotoXY(5,WhereY); Write('| ',Types);
- GotoXY(18,WhereY); Write('| ',Engine.Fuel_type);
- GotoXY(31,WhereY); Write('| ',Engine.Volume);
- GotoXY(39,WhereY); Write('| ',Color);
- GotoXY(58,WhereY); Write('| ',Year);
- GotoXY(66,WhereY); Write('| ',Price);
- GotoXY(79,WhereY); Write(' |');
- end; {End With Data[id]}
- Until ((Count = 15) or (id = Ns));
- PrintLine;
- end;
- {----- Вывод краткой информации №2 из БД End -----}
- {----- Вывод краткой информации из БД Start -----}
- Procedure PrintShortStory(data:TData; ns:integer);
- var id:integer;
- ch:char;
- flag:boolean;
- Begin clrscr;
- id:=0;
- if (Ns = 0) then
- Begin
- PrintLine;
- PrintHead(Yellow,32,'ПРОСМОТР ДАННЫХ');
- PrintHead(LightGreen,6,'Управление: клавиши "'+#24+'", "'+#25+'", "'+#26+'", "'+#27+'", '+
- 'Esc - выход в основное меню');
- PrintLine;
- PrintHead(Red,6,'ОШИБКА #002: Файл базы данных не загружен или отсутствует информация');
- ReturnMainMenu; {Возврат в главное меню}
- end
- else
- Begin
- ShortStory_1(Data,id,Ns);
- Flag:=True; {По умолчанию стоит вывод первой таблицы}
- {----- Управление Start -----}
- Repeat
- Ch:=Readkey; {Считываем ASCII-код клавиши}
- {#72 - стрелка вверх / #75 - стрелка влево / #77 - стрелка вправо / #80 - стрелка вниз}
- Case Ch of
- #80:Begin {Стрелка вниз}
- {Если элемент был последним, то возвращаемся к первому}
- if (id >= Ns) then id:=0;{Первый элемент массива}
- {Выбираем таблицу для просмотра}
- if Flag then ShortStory_1(Data,id,Ns)
- else ShortStory_2(Data,id,Ns);
- end; {Case Ch #80}
- #72:Begin {Стрелка вверх}
- if (Ns > 15) then {Исправляем ошибку проверки диапазона}
- Begin
- if (id < Ns) and (id > 15) then Dec(id,30)
- else
- Begin
- if (id >= Ns) then
- Begin
- id:=Ns-(Ns mod 15);
- Dec(id,15);
- end
- else if (id <= 15) and (Ns > 15) then id:=Ns-(Ns mod 15)
- else Dec(id,15);
- end;
- {Определяем таблицу для просмотра}
- if Flag then ShortStory_1(Data,id,Ns)
- else ShortStory_2(Data,id,Ns);
- end;
- end; {Case Ch #72}
- #77:Begin {Стрелка вправо}
- if (id < 1) then id:=0
- else if (id = Ns) then Dec(id,(id mod 15))
- else Dec(id,15);
- ShortStory_2(Data,id,Ns);
- Flag:=False; {Выбрана вторая таблица}
- end; {Case Ch #77}
- #75:Begin {Стрелка влево}
- if (id < 1) then id:=0
- else if (id = Ns) then Dec(id,(id mod 15))
- else Dec(id,15);
- ShortStory_1(Data,id,Ns);
- Flag:=True; {Выбрана первая таблица}
- end; {Case Ch #75}
- end; {Case Ch}
- Until (Ch = #27); {Клавиша "Esc"}
- {----- Управление End -----}
- end;
- PrintMainMenu; {Возврат в основное меню}
- end;
- {----- Вывод краткой информации из БД End -----}
- {----- Вывод подробной информации из БД Start -----}
- Procedure FullStory(data:TData; ns:integer);
- var id:integer;
- ch:char;
- Begin clrscr;
- if (Ns = 0) then
- Begin
- PrintLine;
- PrintHead(Yellow,32,'ПРОСМОТР ДАННЫХ');
- PrintHead(LightGreen,11,'Управление: клавиши "'+#24+'", "'+#25+'", Esc - выход в основное меню');
- PrintLine;
- PrintHead(Red,6,'ОШИБКА #002: Файл базы данных не загружен или отсутствует информация');
- ReturnMainMenu; {Возврат в главное меню}
- end
- else
- Begin
- id:=1;
- Repeat clrscr;
- PrintLine;
- PrintHead(Yellow,32,'ПРОСМОТР ДАННЫХ');
- PrintHead(LightGreen,11,'Управление: клавиши "'+#24+'", "'+#25+'", Esc - выход в основное меню');
- PrintLine;
- With Data[id] do
- Begin
- TextColor(Cyan); Write(' Номер записи: '); TextColor(Yellow); GotoXY(30,WhereY); Writeln(id,' из ',ns);
- PrintLine;
- TextColor(Cyan); Write(' Марка: '); TextColor(Yellow); GotoXY(30,WhereY); Writeln(Maker);
- TextColor(Cyan); Write(' Модель:'); TextColor(Yellow); GotoXY(30,WhereY); Writeln(Model);
- TextColor(Cyan); Write(' Комлектация: '); TextColor(Yellow); GotoXY(30,WhereY); Writeln(Grade);
- TextColor(Cyan); Write(' Тип кузова: '); TextColor(Yellow); GotoXY(30,WhereY); Writeln(Types);
- With Engine do
- Begin
- TextColor(Cyan); Write(' Вид топлива: '); TextColor(Yellow); GotoXY(30,WhereY); Writeln(Fuel_Type);
- TextColor(Cyan); Write(' Мощность двигателя, л.с.: '); TextColor(Yellow);
- GotoXY(30,WhereY); Writeln(Power);
- TextColor(Cyan); Write(' Объём двигателя, см^3: '); TextColor(Yellow);
- GotoXY(30,WhereY); Writeln(Volume);
- TextColor(Cyan); Write(' Расположение цилиндров: '); TextColor(Yellow);
- GotoXY(30,WhereY); Writeln(Cylinders)
- end; {End with engine}
- Writeln;
- TextColor(Cyan); Writeln(' Расход топлива, л/100 км: ');
- With Consumption do
- Begin
- GotoXY(1,WhereY); TextColor(Cyan); Write(' По городу: '); TextColor(Yellow); Write(City:4:1);
- GotoXY(32,WhereY); TextColor(Cyan); Write(' По трассе: '); TextColor(Yellow); Write(Track:4:1);
- GotoXY(63,WhereY); TextColor(Cyan); Write(' Смешанный: '); TextColor(Yellow); Writeln(Mixed:4:1);
- end; {End with Consumption}
- Writeln;
- TextColor(Cyan); Write(' Трансмиссия: '); TextColor(Yellow); GotoXY(30,WhereY); Writeln(Transmission);
- TextColor(Cyan); Write(' Тип привода: '); TextColor(Yellow); GotoXY(30,WhereY); Writeln(Drive);
- TextColor(Cyan); Write(' Цвет: '); TextColor(Yellow); GotoXY(30,WhereY); Writeln(Color);
- TextColor(Cyan); Write(' Год выпуска: '); TextColor(Yellow); GotoXY(30,WhereY); Writeln(Year);
- TextColor(Cyan); Write(' Стоимость, руб.: '); TextColor(Yellow); GotoXY(30,WhereY); Writeln(Price);
- PrintLine;
- end; {End with data}
- {----- Управление Start -----}
- Ch:=Readkey; {Считываем ASCII-код клавиши}
- {#72 - стрелка вверх / #80 - стрелка вниз}
- Case Ch of
- #80:Begin {Стрелка вниз}
- Inc(id); {Определяем номер элемента в массиве}
- {Если элемент был последним, то возвращаемся к первому}
- if (id > Ns) then id:=1;{Первый элемент массива}
- end;
- #72:Begin {Стрелка вверх}
- Dec(id); {Определяем номер элемента в массиве}
- {Если элемент был первым, то возвращаемся к последнему}
- if (id < 1) then id:=Ns;
- end;
- end; {Case Ch}
- Until (Ch = #27); {Клавиша "Esc"}
- {----- Управление End -----}
- end; {end else}
- PrintMainMenu; {Возврат в основное меню}
- end;
- {----- Вывод подробной информации из БД End -----}
- {----- Файл с отчетом Start -----}
- Procedure OutputTxt(data:TData; ns:integer);
- var id:integer; {Счетчик}
- f_data:text; {Файл с отчетом}
- old_year,new_year:word; {Минимальный/максимальный год}
- min_price,max_price:longint; {Минимальная/максимальная стоимость}
- ave_price:real; {Средняя стоимость всех автомобилей}
- Begin clrscr;
- PrintLine;
- PrintHead(Yellow,30,'ФОРМИРОВАНИЕ ОТЧЁТА');
- PrintHead(LightGreen,8,'Создание текстового файла с полным отчетом по всем записям в БД');
- PrintLine;
- Assign(F_Data,F_name_rept); {Подключаем файл "F_name_db" к переменной F_Data}
- Rewrite(F_Data); {Создаем и открываем файл "F_name_db"}
- Min_Price:=Data[1].Price; {Начальное значение минимальной стоимости}
- Max_Price:=Data[1].Price; {Начальное значение максимальной стоимости}
- Ave_Price:=0; {Начальное значение средней стоимости всех автомобилей}
- Old_Year:=Data[1].Year; {Начальное значение минимального года выпуска}
- New_Year:=Data[1].Year; {Начальное значение максимального года выпуска}
- Writeln(F_Data,'----------------------------------------------------------------------------------------',
- '----------------------------------------------------------------------------------------',
- '-------------------------------------------------------------------------');
- Writeln(F_Data,'| № | Марка | Модель | Комлектация | Тип кузова | Вид топлива ',
- '|Мощность двигателя, л.с.|Объём двигателя, см^3|Расположение цилиндров',
- '| Расход топлива |Трансмиссия| Привод | Цвет | Год | Цена, руб. |');
- Writeln(F_Data,'----------------------------------------------------------------------------------------',
- '----------------------------------------------------------------------------------------',
- '-------------------------------------------------------------------------');
- for id:=1 to ns do
- With Data[id] do
- Begin
- Writeln(F_Data,'|',id:3, '| ', Maker:10, '|', Model:17, '|', Grade:19,'|',Types:14,
- '|',Engine.Fuel_Type:15, '| ', Engine.Power:23, '|', Engine.Volume:21, '|',Engine.Cylinders:22,
- '|',Consumption.City:4:1,' / ',Consumption.Track:4:1,' / ',Consumption.Mixed:4:1,
- '|', Transmission:13, '|', Drive:10,'|', Color:20,'|',Year:10,'|', Price:16,'|');
- Writeln(F_Data,'----------------------------------------------------------------------------------------',
- '----------------------------------------------------------------------------------------',
- '-------------------------------------------------------------------------');
- {----- Поиск минимальных/максимальным значений Start -----}
- if (Min_Price > Price) then Min_Price:=Price; {Минимальная цена}
- if (Max_Price < Price) then Max_Price:=Price; {Максимальная цена}
- if (Old_Year > Year) then Old_Year:=Year; {Минимальная цена}
- if (New_Year < Year) then New_Year:=Year; {Максимальная цена}
- Ave_Price:=Ave_Price+Price/Ns;
- {----- Поиск минимальных/максимальным значений End -----}
- end;
- Writeln(F_Data,'| Минимальная стоимость: ',Min_Price:213,', руб. |');
- Writeln(F_Data,'| Максимальная стоимость: ',Max_Price:213,', руб. |');
- Writeln(F_Data,'| Средняя стоимость: ',Ave_Price:218:2,', руб. |');
- Writeln(F_Data,'| Минимальный год выпуска: ',Old_Year:219,' |');
- Writeln(F_Data,'| Максимальный год выпуска: ',New_Year:219,' |');
- Writeln(F_Data,'----------------------------------------------------------------------------------------',
- '----------------------------------------------------------------------------------------',
- '-------------------------------------------------------------------------');
- Close(F_Data); {Закрываем файл "F_name2"}
- GotoXY(13,WhereY); TextColor(LightGreen); Writeln('Файл с отчетом успешно создан. Имя файла: "',F_name_rept,'".');
- Delay(3000); {Задержка 3 секунды}
- ReturnMainMenu; {Возврат в главное меню}
- end;
- {----- Файл с отчетом End -----}
- {----- Поиск информации в БД Start -----}
- Procedure FunctionSeach_1(data:TData; field:char; ns:integer; const value:array of string; item:integer);
- var id,count:integer;
- sdata:TData;
- nameseach:string;
- ch:char;
- Begin clrscr;
- PrintLine;
- PrintHead(Yellow,34,'ПОИСК ДАННЫХ');
- PrintHead(LightGreen,11,'Управление: клавиши клавиши "'+#26+'", "'+#27+'", Enter - подтвердить');
- PrintLine;
- TextColor(Cyan); Write(' Критерий поиска: '); NameSeach:=Selection(Value,item);
- PrintLine;
- Count:=0;
- for id:=1 to Ns do
- Case Field of
- #50:if Data[id].Types=NameSeach then {По типу кузова}
- Begin
- Inc(Count);
- sData[Count]:=Data[id];
- end;
- #51:if Data[id].Transmission=NameSeach then {По трансмиссии}
- Begin
- Inc(Count);
- sData[Count]:=Data[id];
- end;
- #52:if Data[id].Drive=NameSeach then {По типу привода}
- Begin
- Inc(Count);
- sData[Count]:=Data[id];
- end;
- #53:if Data[id].Engine.Fuel_type=NameSeach then {По виду топлива}
- Begin
- Inc(Count);
- sData[Count]:=Data[id];
- end;
- #54:if Data[id].Color=NameSeach then {По цвету автомобиля}
- Begin
- Inc(Count);
- sData[Count]:=Data[id];
- end;
- end; {Case Field}
- if (Count = 0) then
- Begin
- TextColor(Red); GotoXY(7,WhereY);
- Writeln('Результаты поиска: по данному критерию найдено ',Count,' из ',Ns,' записей');
- Delay(3000); {Задержка 3 секунды}
- ReturnMainMenu; {Возврат в главное меню}
- end
- else
- Begin
- TextColor(LightGreen); GotoXY(7,WhereY);
- Writeln('Результаты поиска: по данному критерию найдено ',Count,' из ',Ns,' записей');
- Delay(3000); {Задержка 3 секунды}
- PrintAdditionalMenu_2; {Выводим меню}
- Repeat
- Ch:=Readkey; {Считываем ASCII-код клавиши}
- Case Ch of
- #49:PrintShortStory(sData,Count); {Вывод информации на экран}
- #50:FullStory(sData,Count); {Вывод подробной информации на экран}
- #51:PrintMainMenu; {Возврат в основное меню}
- end; {Case Ch}
- Until (Ch in [#49..#51]);
- end;
- end;
- {----- Поиск информации в БД End -----}
- {----- Поиск информации в БД Start -----}
- Procedure FunctionSeach_2(data:TData; field:char; ns:integer);
- var id,count:integer;
- sdata:TData;
- nameseach:string;
- yearseach:word;
- priceseachleft,priceseachright,fixprice:longint;
- ch:char;
- Begin clrscr;
- PrintLine;
- PrintHead(Yellow,34,'ПОИСК ДАННЫХ');
- PrintHead(LightGreen,15,'Управление: ввод с клавиатуры, Enter - подтвердить');
- PrintLine;
- Count:=0;
- Case Field of
- #48:Begin
- TextColor(Cyan); Write(' Критерий поиска: '); TextColor(Yellow); Readln(NameSeach);
- PrintLine;
- for id:=1 to Ns do
- if Data[id].Maker=NameSeach then {По марке}
- Begin
- Inc(Count);
- sData[Count]:=Data[id];
- end;
- end;
- #49:Begin
- TextColor(Cyan); Write(' Критерий поиска: '); TextColor(Yellow); Readln(NameSeach);
- PrintLine;
- for id:=1 to Ns do
- if Data[id].Model=NameSeach then {По модели}
- Begin
- Inc(Count);
- sData[Count]:=Data[id];
- end;
- end;
- #55:Begin
- TextColor(Cyan); Write(' Критерий поиска: '); TextColor(Yellow); Readln(YearSeach);
- PrintLine;
- for id:=1 to Ns do if Data[id].Year=YearSeach then {По году}
- Begin
- Inc(Count);
- sData[Count]:=Data[id];
- end;
- end;
- #56:Begin
- TextColor(Cyan); Writeln(' Критерий поиска: ');
- TextColor(Cyan); Write(' Минимальная цена: '); TextColor(Yellow); Readln(PriceSeachLeft);
- TextColor(Cyan); Write(' Максимальная цена: '); TextColor(Yellow); Readln(PriceSeachRight);
- if (PriceSeachLeft > PriceSeachRight) then {На случай ошибки, если введенное значение Min > Max}
- Begin
- FixPrice:=PriceSeachLeft;
- PriceSeachLeft:=PriceSeachRight;
- PriceSeachRight:=FixPrice;
- end;
- PrintLine;
- for id:=1 to Ns do
- if ((PriceSeachLeft <= Data[id].Price) and (Data[id].Price <= PriceSeachRight)) then {По цене}
- Begin
- Inc(Count);
- sData[Count]:=Data[id];
- end; end;
- end; {Case Field}
- if (Count = 0) then
- Begin
- TextColor(Red); GotoXY(7,WhereY);
- Writeln('Результаты поиска: по данному критерию найдено ',Count,' из ',Ns,' записей');
- Delay(3000); {Задержка 3 секунды}
- ReturnMainMenu; {Возврат в главное меню}
- end
- else
- Begin
- TextColor(LightGreen); GotoXY(7,WhereY);
- Writeln('Результаты поиска: по данному критерию найдено ',Count,' из ',Ns,' записей');
- Delay(3000); {Задержка 3 секунды}
- PrintAdditionalMenu_2; {Выводим меню}
- Repeat
- Ch:=Readkey; {Считываем ASCII-код клавиши}
- Case Ch of
- #49:PrintShortStory(sData,Count); {Вывод информации на экран}
- #50:FullStory(sData,Count); {Вывод подробной информации на экран}
- #51:PrintMainMenu; {Возврат в основное меню}
- end; {Case Ch}
- Until (Ch in [#49..#51]);
- end;
- end;
- {----- Поиск информации в БД End -----}
- {----- Сортировка информации в БД Start -----}
- Procedure FunctionSorting(var data:TData; field:char; ns:integer);
- var i,count,j:integer;
- rem_year:word;
- rem_price:longint;
- cache:automobile;
- Begin clrscr;
- PrintLine;
- PrintHead(Yellow,31,'СОРТИРОВКА ДАННЫХ');
- PrintHead(LightGreen,20,'Сортировка данных от меньшего к большему');
- PrintLine;
- Case Field of
- #49:Begin {По году}
- for i:=1 to Ns do
- Begin
- Cache:=Data[i];
- Rem_Year:=Data[i].Year; {Запоминаем}
- Count:=1;
- While (Data[Count].Year < Rem_Year) do Inc(Count); {Считаем}
- for j:=i downto Count+1 do Data[j]:=Data[j-1]; {Перемещаем значениt}
- Data[Count]:=Cache; {Записываем}
- end;
- end; {Case Field #49}
- #50:Begin {По цене}
- for i:=1 to Ns do
- Begin
- Cache:=Data[i];
- Rem_Price:=Data[i].Price; {Запоминаем}
- Count:=1;
- While (Data[Count].Price < Rem_Price) do Inc(Count); {Считаем}
- for j:=i downto Count+1 do Data[j]:=Data[j-1]; {Перемещаем значениt}
- Data[Count]:=Cache; {Записываем}
- end;
- end; {Case Field #50}
- end; {Case Field}
- PrintHead(LightGreen,22,'Сортировка данных выполнена успешно');
- ReturnMainMenu; {Возврат в главное меню}
- end;
- {----- Сортировка информации в БД End -----}
- {----- Функционал программы End -----}
- Begin {Основная программа}
- id:=0;
- PrintMainMenu; {Выводим основное меню}
- Repeat
- Ch:=Readkey; {Считываем ASCII-код клавиши}
- {[#48..#55] - клавиши от 0 до 7 по таблице ASCII кодов}
- Case Ch of
- #49:Begin
- PrintAdditionalMenu_1; {Выводим дополнительное меню}
- Repeat
- Ch2:=Readkey; {Считываем ASCII-код клавиши}
- {[#49..#54] - клавиши от 1 до 6 по таблице ASCII кодов}
- Case Ch2 of
- #49:Begin {Ввод информации}
- if (id < MaxID) then
- Begin
- Inc(id); {Счетчик}
- ChangeDataBase(Data[id]);
- end
- else
- Begin
- PrintLine;
- PrintHead(Yellow,34,'ВВОД ДАННЫХ');
- PrintHead(LightGreen,14,'Управление: для ввода данных используйте клавиатуру');
- PrintLine;
- PrintHead(Red,3,'ОШИБКА #001: Файл базы данных содержит максимальное количество информации');
- ReturnMainMenu; {Возврат в главное меню}
- end;
- end; {Case Ch2 #49}
- #50:DeleteDataBase(Data,id,SelectionID(id)); {Удаление информации}
- #51:ChangeDataBase(Data[SelectionID(id)]); {Изменение информации}
- #52:SaveDataBase(Data,id); {Сохранение информации в Базу Данных}
- #53:ReadingDataBase(Data,id,MaxID); {Загрузка информации из Базы Данных}
- #54:PrintMainMenu; {Возврат в основное меню}
- end; {Case Ch2}
- Until Ch2 in [#49..#54];
- end; {Case Ch #49}
- #50:Begin
- PrintAdditionalMenu_2; {Выводим меню}
- Repeat
- Ch2:=Readkey; {Считываем ASCII-код клавиши}
- Case Ch2 of
- #49:PrintShortStory(Data,id); {Вывод информации на экран}
- #50:FullStory(Data,id); {Вывод подробной информации на экран}
- #51:PrintMainMenu; {Возврат в основное меню}
- end; {Case Ch2}
- Until (Ch2 in [#49..#51]);
- end; {Case Ch #50}
- #51:OutputTxt(Data,id);
- #52:Begin clrscr;
- PrintAdditionalMenu_3; {Дополнительное меню поиска}
- Repeat
- Ch2:=Readkey; {Считываем ASCII-код клавиши}
- {[#48..#57] - клавиши от 0 до 9 по таблице ASCII кодов}
- Case Ch2 of
- #49:FunctionSeach_2(Data,#48,id); {По марке}
- #50:FunctionSeach_2(Data,#49,id);{По модели}
- #51:FunctionSeach_1(Data,#50,id,c_types,n_types); {По типу кузова}
- #52:FunctionSeach_1(Data,#51,id,c_transmission,n_transmission);{По трансмиссии}
- #53:FunctionSeach_1(Data,#52,id,c_drive,n_drive); {По типу привода}
- #54:FunctionSeach_1(Data,#53,id,c_fuel,n_fuel); {По виду топлива}
- #55:FunctionSeach_1(Data,#54,id,c_color,n_color); {По цвету}
- #56:FunctionSeach_2(Data,#55,id);
- #57:FunctionSeach_2(Data,#56,id);
- #48:PrintMainMenu; {Возврат в основное меню}
- end;
- Until (Ch2 in [#48..#57]);
- end;
- #53:Begin clrscr;
- PrintAdditionalMenu_4; {Дополнительное меню (сортировки)}
- Repeat
- Ch2:=Readkey; {Считываем ASCII-код клавиши}
- {[#49..#51] - клавиши от 1 до 3 по таблице ASCII кодов}
- Case Ch2 of
- #49:FunctionSorting(Data,#49,id);{По году}
- #50:FunctionSorting(Data,#50,id);{По цене}
- #51:PrintMainMenu; {Возврат в основное меню}
- end;
- Until (Ch2 in [#49..#51]);
- end;
- #54:PrintHelpProgram;
- #55:PrintInfoAuthor;
- #48:Exit; {Выходим из программы}
- end; {Case Ch}
- Until (Ch = #48);
- end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement