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)
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ść TitleCaptions
(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;
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;