Programowanie Wizualno-Obiektowe Zajęcia z Delphi: 4 1
Transkrypt
Programowanie Wizualno-Obiektowe Zajęcia z Delphi: 4 1
Programowanie Wizualno-Obiektowe Zajęcia z Delphi: 4 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) 1 Programowanie Wizualno-Obiektowe Zajęcia z Delphi: 4 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; 2 Programowanie Wizualno-Obiektowe Zajęcia z Delphi: 4 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; 3