1. Krok – Štruktúra
Vytvoríme si štruktúru, ktorá bude mať 5 prvkov. Bude to meno, priezvisko, adresa, suma a ID číslo. Nebudeme používať v štruktúre dátový typ AnsiString, ale použijeme klasické polia znakov. Deklarácia štruktúry bude vyzerať nasledovne:
typedef struct{ //deklarovanie štruktúry
char meno[15]; //pre meno, priezvisko a adresu si
char priezvisko[20]; //pevne určíme dĺžku, ak nepostačuje
char adresa[20]; //môžete si ju prispôsobiť
int suma;
int idcislo;
}ZOZNAM;
2. Krok – Načítavanie do štruktúry
Načítavanie budeme vykonávať pomocou funkcie fscanf. Pri výpise budeme využívať funkciu sprintf pre korektné zapisovanie (je to možné však aj bez tohto kódu a priamo priraďovať prvky štruktúry). Budeme načítavať až do konca súboru, čo budeme testovať funkciou fgetc(). Táto funkcia vracia hodnotu EOF – End of File, ak sa dostane na koniec súboru. Použitie v programe bude vyzerať nasledovne:
while(k != EOF){
fscanf(f,"%s", ((pole + i)->meno));
fscanf(f,"%s", ((pole + i)->priezvisko));
fscanf(f,"%s", ((pole + i)->adresa));
fscanf(f,"%d", &((pole + i)->suma));
fscanf(f,"%d", &((pole + i)->idcislo));
k = fgetc(f);
i++;
}
Metóda načítavania by sa dala vykonať samozrejme viacerými spôsobmi, čo je pre programovanie príznačné. V týchto dvoch krokoch sme si ukázali hlavné prvky programu, ktorý vytvárame. Prejdeme teda k vizuálnej stránke programu. Použijeme novú komponentu – MainMenu. Po vložení do formulára je to malý štvorček, ale po preložení sa ukáže, že je to fixovaný panel, ktorý poznáme zo všetkých programov. Vytvoríme si jeden prvok – Súbor a jeden sub-prvok – Otvoriť. Druhým komponentom je OpenDialog. Vypisovať budeme do komponentu StringGrid. Po kliknutí na položku Otvoriť sa spustí OpenDiaolog a budeme si môcť zvoliť súbor, ktorý chceme otvoriť. Po umiestnení všetkých prvkov by mal formulár vyzerať asi ako na tomto obrázku:
3. Krok – Ošetrenie otvárania súboru
Pri prístupe k názvu súboru som zvolil priradenie názvu súboru (ktorý obsahuje komponent OpenDialog->FileName) jedinej premennej typu AnsiString vyskytujúcej sa v tomto programe. Ošetrenie je prevedené pomocou overovania podmienky – ak sa pointer typu FILE rovná NULL, tak sa otváranie nepodarilo a program vyhodí chybu.
4. Krok – Príprava súboru s dátami
Dôležite je samozrejme si pripraviť súbor, ktorý bude obsahovať dáta, ktoré budeme načítavať. Najvhodnejšie je napísať aspoň 7 kompletných vstupov, teda 7 ľudí a ich atribúty (ak sa vám ťažko vymýšľajú mená, použite mená ovocia, zeleniny alebo aj politikov napríklad :)).
Ako sa vraví, najlepšie je si sadnúť k zdrojovému kódu poriadne si ho prezrieť zo všetkých strán, trochu sa s ním pohrať. To nenahradia ani tie najvýstižnejšie poučky o programovaní. Celý program bude vyzerať nasledovne.
Databázový program:
//----------------------------------------------------
#include
#pragma hdrstop
#include
#include "Unit1.h"
//----------------------------------------------------
typedef struct{
char meno[15];
char priezvisko[20];
char adresa[20];
int suma;
int idcislo;
}ZOZNAM;
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
FILE *f;
AnsiString nazov_suboru;
ZOZNAM *pole;
int i = 0;
//-----------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
: TForm(Owner)
{
}
//-----------------------------------------------------
void __fastcall TForm1::Open1Click(TObject *Sender)
{ int b,h,k;
char *pom;
pole = new ZOZNAM[10000];
pom = new char[1000];
if(OpenDialog1->Execute()){
nazov_suboru = OpenDialog1->FileName;
f = fopen(nazov_suboru.c_str(), "r");
if(f == NULL){
Application->MessageBox("Cannot open a file!", "Error", MB_OK + MB_ICONERROR);
}
else{
while(k != EOF){
fscanf(f,"%s", ((pole + i)->meno));
fscanf(f,"%s", ((pole + i)->priezvisko));
fscanf(f,"%s", ((pole + i)->adresa));
fscanf(f,"%d", &((pole + i)->suma));
fscanf(f,"%d", &((pole + i)->idcislo));
k = fgetc(f);
i++;
}
}
if(fclose(f) == EOF){
Application->MessageBox("Cannot close a file!", "Error", MB_OK + MB_ICONERROR);
}
strgridOpen->Cells[0][0] = "Meno";
strgridOpen->Cells[1][0] = "Priezvisko";
strgridOpen->Cells[2][0] = "Ulica";
strgridOpen->Cells[3][0] = "Číslo ulice";
strgridOpen->Cells[4][0] = "ID číslo";
for(b = 1; b < i; b++){
sprintf(pom, " %s", (pole + b)->meno);
Form1->strgridOpen->Cells[0][b] = pom;
sprintf(pom, " %s", (pole + b)->priezvisko);
Form1->strgridOpen->Cells[1][b] = pom;
sprintf(pom, " %s", (pole + b)->adresa);
Form1->strgridOpen->Cells[2][b] = pom;
sprintf(pom, " %d", (pole + b)->suma);
Form1->strgridOpen->Cells[3][b] = pom;
sprintf(pom, " %d", (pole + b)->idcislo);
Form1->strgridOpen->Cells[4][b] = pom;
}
}
}
V budúcom dieli si ukážeme ako pridávať a odstraňovať prvky databázy, ktorú sme si dnes vytvorili.
