Помощничек
Главная | Обратная связь


Археология
Архитектура
Астрономия
Аудит
Биология
Ботаника
Бухгалтерский учёт
Войное дело
Генетика
География
Геология
Дизайн
Искусство
История
Кино
Кулинария
Культура
Литература
Математика
Медицина
Металлургия
Мифология
Музыка
Психология
Религия
Спорт
Строительство
Техника
Транспорт
Туризм
Усадьба
Физика
Фотография
Химия
Экология
Электричество
Электроника
Энергетика

Контроль операцiй читання даних



 

Для контролю правильностi операцiй введення-виведення iснує дирек-тива {$I ±} та функція FileExists(File_Name).

1) Без вказівки директива {$I ±} перебуває в активному станi − {$I+}. У цьому режимi при виникненнi помилки введення-виведення робота програми переривається − i користувач дiстає повiдомлення про номер i мiсцезнаходжен-ня помилки. Якщо директива перебуває у пасивному станi {$I−}, то при виник-неннi помилки виконання програми не припиняється, але наступнi операцiї введення-виведення затримуються. Стан затримання зберiгається доти, доки у програмі не буде викликано функцiю Ioresult. Ця функцiя повертає значення 0, якщо попереднi операцiї введення-виведення були коректними, i певне нену-льове (ціле) значення при виявленнi помилки. Пiсля звертання до цiєї функцiї значення її обнулюється.

Наведемо фрагмент програми, котрий показує, у який спосіб можна опра-цювати помилку, пов’язану з вiдкриттям для зчитування неiснуючого файла. Користувач може ввести помилкове iм’я, i, якщо файла з таким iменем не iснує, програма повiдомить про це та ще раз попросить ввести iм’я файла. Якщо ж файл iснує, то буде видано його розмiр.

…………………………….

Var s : string[20]; b : boolean; f : file; …

Begin

b:=false;

repeat

ShowMessage (’Введіть ім’я файла в Edit1’);

Edit1.Text:= s;

Assignfile(f,s);

{$I-} reset(f); {$I+}

if IOresult=0 then b:=true

else ShowMessage(’Такий файл не віднайдено’);

until b;

ShowMessage (’Розмір файла: ’, filesize(f) ) ;

closefile(f);

end;

2) функція FileExists(File_Name); − має значення True, якщо не винайде-но на диску фiзичного файла, який має iм’я File_Name, i False − у противному разі. Наведемо фрагмент програми, у якому файл ‘Товари.doc’ відкривається для запису чи читання, якщо файл віднайдено на диску, або створюється такий файл для запису даних, якщо файла ще не існує.

If FileExists (‘Товари.doc’) then reset(f)

else begin

rewrite(f);

ShowMessage(’Файл порожній’);

end;

Приклад складання програми з типізованим файлом

Завдання.Скласти проект програми, за допомогою якого можна створити файл записів з відомостями про товари на складі: найменування, кількість, ціну та рік виготовлення. Вивести зміст файла у вікно StringGrid. Знайти:

· загальну кількість товарів на складі,

· товар з найменшою ціною,

· відсортувати записи за ціною.

 
 

Вигляд форми проекту наведено на рис. 8.1.

 
 


Рисунок 8.1 – Форма та результати проекту

 

Пояснення. Меню команд “Вихід” створено за допомогою компонента MainMenu. Команда “Вихід |Очистити все” очищує файл і всі компоненти, окрім StringGrid1.

За допомогою компонента opendialog (під час запускання проекту) відшуку-ється на диску тека, у якій знаходиться чи буде створено файл з даними. Властивість opendialog1.Execute набуває значення True, якщо обрано теку та ім’я файла на диску. Властивість opendialog1.FileName набуває значення імені файла на диску.

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

 

unit Unit1;

 

Interface

Uses

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

StdCtrls, ExtCtrls, Menus, Grids;

Type

TForm1 = class(TForm)

MainMenu1: TMainMenu;

OpenDialog1: TOpenDialog;

Button1: TButton; Button2: TButton; Button3: TButton;

Button4: TButton; Button5: TButton; Button6: TButton;

Edit1: TEdit; Edit2: TEdit; Edit3: TEdit;

Edit4: TEdit; Edit5: TEdit; Edit6: TEdit;

Label1: TLabel; Label2: TLabel; Label3: TLabel;

Label4: TLabel; Label5: TLabel;

StringGrid1: TStringGrid;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

procedure TForm1.FormCreate(Sender: TObject);

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

procedure Button4Click(Sender: TObject);

procedure Button5Click(Sender: TObject);

procedure N2Click(Sender: TObject);

procedure N3Click(Sender: TObject);

…………………………….

 

Implementation

{$R *.DFM}

 

typetovar=record

name:string[12];

kol:integer;

cena:real;

god:integer;

end;

 

// глобальні параметри проекту

var f:file of tovar; {файлова змінна}

z:tovar; {змінна типу “запис”}

namefile:string; {ім’я фізичного файла на диску}

 

// підпрограма запускання проекту ( створення форми)

procedureTForm1.FormCreate(Sender: TObject);

Begin

if opendialog1.Execute then namefile:=opendialog1.FileName;

AssignFile(F,namefile);

if FileExists(namefile) then

begin

reset(f);

ShowMessage('Файл вже існує. Перегляньте зміст файла ');

end else

begin

rewrite(f); ShowMessage('Введіть відомості про товар');

end;

end;

 

// підпрограма кнопки “Додати новий запис”

procedure TForm1.Button1Click(Sender: TObject);

Begin

{перевірка наявності значень про товар у вікнах edit}

if (length(edit1.text)=0) or (length(edit2.text)=0) or

(length(edit3.text)=0) or (length(edit4.text)=0) then

begin

showmessage('Введіть усі відомості про товар');

еxit;

end ;

{записування у файл значень про товар }

reset(f);

seek(f,FileSize(f)); {<− переведення покажчика на кінець файла}

with z do

begin

name:=edit1.text;

kol:=StrToInt(edit2.text);

cena:=StrToFloat(edit3.text);

god:=StrToInt(edit4.text);

end;

write(f,z);

{очищення вікон edit для нових значень про товар }

edit1.Clear; edit2.Clear;edit3.Clear; edit4.Clear;

closefile(f);

end;

// підпрограма команди меню “Товари на складі”

procedureTForm1.Button2Click(Sender: TObject);

var scena:string;

i:integer;

Begin

reset(f);

seek(f,0); {<− переведення покажчика на початок файла}

i:=0;

StringGrid1.Cells[0,0]:='Найменування';

StringGrid1.Cells[1,0]:='Кількість';

StringGrid1.Cells[2,0]:='Ціна';

StringGrid1.Cells[3,0]:='Рік випуску';

while not eof(f)do

begin

read(f,z);

i:=i+1;

with z do

begin

str(cena:1:2,scena);

StringGrid1.Cells[0,i]:=name;

StringGrid1.Cells[1,i]:=IntTostr(kol);

StringGrid1.Cells[2,i]:=scena;

StringGrid1.Cells[3,i]:=IntToStr(God);

end;

closefile(f);

end;

end;

 

 

//підпрограма кнопки “Загальна кількість”

procedure TForm1.Button3Click(Sender: TObject);

var k:integer;

Begin

reset(f);

seek(f,0); {<− переведення покажчика на початок файла}

k:=0;

while not eof(f)do

begin

read(f,z);

k:=k+z.kol;

end;

edit5.text:=IntToStr(k);

closefile(f);

end;

 

// підпрограма кнопки “Товар з min ценой”

procedure TForm1.Button4Click(Sender: TObject);

var zmin:tovar; min:real; s:string;

Begin

reset(f);

seek(f,0); {<− переведення покажчика на початок файла}

read(f,z);

zmin:=z; min:=z.cena;

while not eof(f)do

begin

read(f,z);

with z do

if cena<min then

begin min:=cena; zmin:=z;end;

end;

with zmin do

s:=name+' | '+IntTostr(kol)+' | '+floatToStr(cena)+' | '+IntToStr(God);

edit6.text:=s;

closefile(f);

end;

 

 

// підпрограма кнопки “Сортування за ціною”

procedureTForm1.Button5Click(Sender: TObject);

var k,i,j:integer; zi,zj:tovar; s:string;

Begin

reset(f);

seek(f,0); {<− переведення покажчика на початок файла}

Memo1.Clear;

k:=FileSize(F); {<− визначення кількісті елементів файла}

{Cортування даних файла}

for i:=0 to k-2 do

begin

for j:=i+1 to k-1 do

begin

seek(f,j);read(f,zi);

seek(f,i); read(f,zj);

if zi.cena>zj.cena then

begin

seek(f,j); write(f,zi);

seek(f,i); write(f,zj);

end;

end;

end;

{Виведення відсортованих даних у Memo}

seek(f,0); {<− переведення покажчика на початок файла}

while not eof(f) do

with z do

begin

read(f,z);

s:=name+' | '+IntTostr(kol)+' | '+floatToStr(cena) +' | '+IntToStr(God);

memo1.Lines.Add(s);

end;

closefile(f);

end;

// підпрограма команди меню “Вихід | Очистити все”

procedure TForm1.N2Click(Sender: TObject);

Begin

{очищення файла}

rewrite(f); closefile(f);

{очищення форми}

memo1.Clear;

edit1.Clear; edit2.Clear;edit3.Clear;

edit4.Clear;edit5.Clear;edit6.Clear;

end;

 

// підпрограма команди меню “ Вихід | Закрити проект”

procedureTForm1.N3Click(Sender: TObject);

Begin

close;

end;

end.

7 Контрольнi запитання

 
1 Якi типи файлів ви знаете? 2 Як оголосити типізований файл?
3 Якi операцiї є припустимi над компонентами файла?
4 Як здiйснюється читання даних з типізованих файлiв та запис до них даних? 5 Як здiйснюється записування даних до типізованого файла? 6 Запишiть послiдовнiсть операторiв для читання з файла ‘kot.dat’ значень змiнних к, n, m.
7 Запишiть послiдовнiсть операторiв для записування значень змiнних с та d у файл ‘dom.dat’.

 

8 Лабораторне завдання

1 Пiдготувати таблицю даних з iнформацiєю, наведеною у табл. 11.1, вiдповiдно до номера варiанта. Кiлькiсть записiв у таблиці − вiд 7 до 10.

 

Таблиця 11.1 – Варіанти інформації у файлах даних

Варiанти Iнформацiя
1…6 Список радiозаводiв: назва, кiлькicть робiтникiв, обсяг виготов-леної продукцiї кожного кварталу року
7…12 Список робiтникiв заводу: прiзвище, рiк народження, посада, зарплатня
13…18 Список студентiв: прiзвище, рiк народження, оцiнки з фiзики, математики, інформатики
19…24 Список товарiв на складi: найменування, цiна, кiлькiсть, рiк ви-готовлення, виготовляч
25…30 Список комп’ютерів: назва, частота, об’єм оперативної та дис-кової пам’ятi, наявність CD ROM, вартiсть

 

2 Скласти схему алгоритму та програму, яка створює файл з даними таблиці п.1 і виконує над ними дiї згідно з варiантом iндивiдуального завдання.

2Пiдготувати протокол лабораторної роботи, залучивши до нього записи файла вихiдних даних, блок-схему та текст програми, й залишивши місце для результатiв.

 

9 Індивiдуальнi завдання

1 Визначити пiдприємство з мiнiмальною кiлькiстю робiтникiв i надрукувати всi вiдомостi про нього.

2 Визначити обсяг продукцiї, виготовленої за рiк кожним пiдприємством, i надрукувати найменування пiдприємств та обсяги продукцiї, виготовленої ними за рiк.

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

4 Визначити пiдприємство з максимальною продуктивнiстю у першому кварталі (продуктивність є вiдношення обсягу продукцiї у першому кварталі до кiлькостi робiтникiв) і надрукувати вiдомостi про нього.

5 Визначити кiлькiсть пiдприємств, якi третього кварталу виготовили продукцiї бiльше за середнє значення (серед усiх пiдприємств), i надрукувати найменування пiдриємств та обсяги їхньої продукцiї у третьому кварталi.

6 Обчислити загальні обсяги продукцiї, виготовленої усiма пiдприємствами, і надрукувати назви кварталів та обсяги продукцiї.

7 Визначити і надрукувати усi вiдомостi про наймолодшого робiтника.

8 Визначити робiтника з максимальною зарплатнею й надрукувати усi вiдомостi про нього.

9 Обчислити середню зарплатню робiтникiв і надрукувати прiзвища та зарплатню кожного.

10 Визначити кiлькiсть робiтникiв iз зарплатнею бiльше за 300 грн. і надрукувати усi вiдомостi про них.

11 Визначити кiлькiсть робiтників, старших за 60 рокiв, і надрукувати усi вiдомостi про них.

12 Визначити кiлькiсть працівникiв з фахом iнженера і надрукувати усi вiдомостi про них.

13 Обчислити середнiй бал оцiнок кожного студента й надрукувати їхні прiзвища та середнiй бал.

14 Надрукувати прiзвища студентiв, котрі склали математику на “5”, і визначити їхню кiлькiсть.

15 Надрукувати прiзвища та рiк народження студентiв, котрі склали усi icпити на “5”, і визначити їхню кiлькiсть.

16 Надрукувати прiзвища й оцiнки з усiх предметiв для студентiв, котрі вчаться лише на “4” та “5”.

17 Визначити кiлькiсть студентiв, яким бiльше за 19 рокiв, і надрукувати уci вiдомостi про них.

18 Обчислити середнiй бал оцiнок студентiв з фiлософiї й надрукувати прiзвища, рiк народження та оцiнки з інформатики всіх студентiв.

19 Визначити товар, якого за кiлькістю найбiльше на складi, і надру-кувати усi вiдомостi про нього.

20 Визначити найдорожчий товар на складi й надрукувати усi вiдомостi про нього.

21 Визначити середню вартicть усiх товарiв й надрукувати найменування товарiв та їхню вартiсть.

22 Визначити кiлькість найменувань товарiв, виготовлених поточного року, й надрукувати усi вiдомостi про них.

23 Визначити кiлькiсть товарiв, виготовлених бiльше як два роки тому, й надрукувати усi вiдомості про них.

24 Визначити загальну вартiсть усiх товарiв й надрукувати наймену-вання товарiв, їхню вартiсть та кiлькiсть на складi.

25 Визначити кiлькiсть комп’ютерів з об’ємом оперативної пам’ятi бiльш за 10 Гбайт і надрукувати усi вiдомостi про них.

26 Обчислити середню вартiсть комп’ютерів і надрукувати найменува-ння комп’ютерів та їхню вартiсть.

27 Визначити найдешевший комп’ютер і надрукувати вiдомостi про нього.

28 Визначити комп’ютер з максимальною частотою й надрукувати всi вiдомостi про нього.

29 Визначити комп’ютери, які мають CD ROM, і надрукувати всi вiдомостi про них.

30 Надрукувати всi вiдомостi про комп’ютери, вартiсть яких є менше за 400 доларiв, і визначити ихню кiлькiсть.


2. література

Основна література:

1 Бобров С. Delphi 5. Учебный курс. Санкт-Петербург. Питер 2001.

2 Буч Г. Объектно-ориентированное проектирование. Пер. с англ., М., Мир, 1990

3 Гофман В. Хомоненко А. Delphi. Быстрый старт. – М.: Издательский дом “Вильямс”, 2006. – 576 с.

 

Додаткова література:

4 Borland Pascal with Objects. Version 7.0. User's Guide. Borland International INC. 1992.

5 Александровский А.Д., Шубин В.В. Delphi для профессионалов. Опыт практического применения. – Москва: ДМК, 2003.

6 Архангельский А.Я. Программирование в Delphi 7. – М.: ЗАО “Издательство БИНОМ”, 2005 г. – 1072 с.

7 Дарахвелидзе П.П., Марков И. Delphi - среда визуального программирования. СПБ «BNV - Санкт Петербург»,2000. - 352 с.

8 Джефф Дантеманн, Джим Мишель, Дон Тайлер Программирование в среде Delphi. К.,МПФ «Диа Софт» 1995. - 606 с.

9 Конопка П., Создание оригинальных компонент в среде Delphi. К.,1996. - 571 с.

10 Культин Н. Delphi 7. Программирование на Object Pascal. – СПб.: БХВ, 2004.

11 Миллер Т., Пауэл Д., Специальное издание Использование Delphi. К., 2001,768 с.

12 Рубенкинг Н. Дж. Delphi 4 для чайников. К. 1999. - 564 с.

13 Фаронов В.В. Delphi 5. Учебный курс. – М.: «Нолидж», 2002. – 464 с.

14 Федоров А.Г. Создание Windows - приложений в среде Delphi. М., ТОО «Компьютер пресс», 1995. - 297с.


3.ПЕРЕЛІК ПИТАНЬ ДЛЯ ПІДСУМКОВОГО КОНТРОЛЮ

1 Поняття об'єкту.

2 Поняття класу.

3 Принципи об'єктно-орієнтованого підходу.

4 Поняття абстракції.

5 Поняття інкапсуляції.

6 Поняття спадкування.

Поняття поліморфізму.




©2015 studopedya.ru Все права принадлежат авторам размещенных материалов.