background image

Programowanie Wizualno-Obiektowe  
Zajęcia z Delphi: 4 

 

1

Programowanie Wizualno-Obiektowe 
(studia zaoczne - inżynieria komputerowa) 
Zajęcia z Delphi 4, program 2 
 
Temat:  

Zapisywanie rekordów do plików, wstęp do prostych baz danych. 

 
Zadanie:  

Program powinien pozwalać na tworzenie 30 elementowej tablicy rekordów 
zawierającej informacje o osobach (imię i wiek), a następnie powinien 
umożliwiać zapisywanie tablicy do pliku i odczytywanie tej tablicy z pliku.

   

 

 

 

 

 

 

 

 

 

1.  
Otwieramy nowa aplikację File>NewApplication 
2.  
Zapisujemy projekt przy pomocy File>Save All w katalogu gdzie będzie kompilowany nasz 
projekt 
3.  
Dodajemy odpowiednie komponenty w kolejności 

•  Menu główne TMainMenu (paleta Standard) 

•  Komponent zawierający tabelę z wartościami w rekordach TValueListEditor (paleta 

Additional) 

•  Przycisk do dodawania danych TButton (paleta Standard) 
•  Etykiety opisujące TLabel (paleta Standard) 

•  Komponent wybierający plik do odczytu tabeli rekordów TOpenDialog (paleta 

Dialogs) 

•  Komponent wybierający plik do zapisu tabeli rekordów TSaveDialog (paleta Dialogs) 
 

 
 
 

background image

Programowanie Wizualno-Obiektowe  
Zajęcia z Delphi: 4 

 

2

4.  
Należy zaprojektować menu główne (kliknięcie na komponent TMainMenu) tak aby miało 
następujące funkcje (skróty klawiszowe należy dodać do każdego elementu menu zmieniając 
jego własność ShortCut>Skrót ): 
 
- Plik 
 

- Odczytaj z Pliku (skrót Ctrl+L) 

 

- Zapisz do Pliku (skrót Ctrl+S) 

- Koniec

 

5.  
Użytkownik programu ma wpisywać dane n osób do tablicy rekordów. Jeden element tablicy 
to rekord zawierający dane jednej osoby,  jej imię i wiek. W tym celu definiujemy dwa typy, 
jeden rekordowy dotyczący osoby, zaś drugi tablicowy zawierający dane n osób: 
 

type osoba=record 

      imie:string[10]; 

      wiek:integer; 

        end; 

 

type osoby=record 

            a:array [1..n] of osoba; 

          end; 

 

type plikSpis=file of osoby; 

 

 

Ilość osób n jest zadeklarowana jako stała. Dodatkowo należy określić ilość/długość 
wszystkich zmiennych występujących w rekordach. Jest to potrzebne przy zdefiniowaniu 
nowego typu będącego typem plikowym, który opisuje pliki w których zapisuje się rekordy 
(pliki rekordowe). Jak widać z powyższego zadania w takim pliku można też zapisywać 
zagnieżdżone rekordy. Definicja jest następująca: 

 

type plik=file of typ_zapisywanego_rekordu; 

6.  
Następnie definiujemy zmienne wykorzystywane w programie. W zmiennej 

spis

 

przechowujemy tablicę rekordów n osób. Zmienna 

licznik

 mówi ile osób zostało wpisanych 

do tablicy. Natomiast 

plik

 jest zmienną wykorzystywaną do zapisu/odczytu utworzonego 

rekordu.

 

 

  spis:osoby; 

  plik:plikSpis; 

  licznik:integer; 

7. 
Zainicjalizować komponent 

ValueListEditor 

ustawiając jego właściwość  TitleCaption

(obiekt TStrings) w Object Inspector, aby widoczne były dwa opisane pola ‘imię’ i ‘wiek’. 
8.  
Obsługując metodę 

OnCreate

 formularza należy wyzerować licznik wpisanych osób.  

Następnie obsługujemy przycisk dotyczący dodawania nowych elementów do spisu osób. 
Należy uwzględnić w nim zarówno dodawanie osób, jak i zabezpieczyć się przed 
wpisywaniem większej ilości osób niż  n. Przycisk ten dodatkowo wypisuje dane osoby w 
tabeli 

ValueListEditor 

wykorzystujące metodę 

ValueListEditor.InsertRow(zmienna1,zmienna2,true).

 

procedure TForm1.Button1Click(Sender: TObject); 

var os:osoba; 

background image

Programowanie Wizualno-Obiektowe  
Zajęcia z Delphi: 4 

 

3

begin 

os.imie:=Form1.Edit1.Text; 

os.wiek:=StrToInt(Form1.Edit2.Text); 

licznik:=licznik+1; 

if licznik<=length(spis.a) then 

begin 

  spis.a[licznik].imie:=os.imie; 

  spis.a[licznik].wiek:=os.wiek; 

  Form1.ValueListEditor1.InsertRow(os.imie,IntToStr(os.wiek),true); 

end 

else 

ShowMessage('nie moze juz dodac wiecej osob do bazy'); 

end; 

9.  
Napisać procedurę obsługującą zapis danych do pliku, wywoływaną po naciśnięciu na opcję 
‘Zapis do pliku’ w głównym menu. Wykorzystać komponent SaveDialog. 

 

 

procedure TForm1.zapiszdopliku1Click(Sender: TObject); 

var nazwa:string;i:integer;os:osoba; 

begin 

 

if Form1.SaveDialog1.Execute then nazwa:=Form1.SaveDialog1.FileName; 

AssignFile(plik,nazwa); 

Rewrite(plik); 

Write(plik,spis); 

CloseFile(plik); 

 

end; 

10.  
Napisać procedurę obsługującą odczyt danych z pliku, wywoływaną po naciśnięciu na opcję 
‘Odczyt z pliku’ w głównym menu. Dane należy zapisać do zmiennej spis, kasując dane z 
tabeli i wpisując tam nowe dane odczytane z pliku. Do wykasowania danych z tabeli należy 
wykorzystać metodę 

ValueListEditor.Strings.Clear; 

 

procedure TForm1.odczytajzpliku1Click(Sender: TObject); 

var nazwa:string;i:integer;os:osoba; 

begin 

 

if Form1.OpenDialog1.Execute then nazwa:=Form1.OpenDialog1.FileName; 

AssignFile(plik,nazwa); 

Reset(plik); 

Read(plik,spis); 

CloseFile(plik); 

 

Form1.ValueListEditor1.Strings.Clear; 

 

for i:=1 to il_osob do 

begin 

  os.imie:=spis.a[i].imie; 

  os.wiek:=spis.a[i].wiek; 

  Form1.ValueListEditor1.InsertRow(os.imie,IntToStr(os.wiek),true); 

end; 

 

licznik:=il_osob; 

 

end;