pr2, Dokumentacja, /*


Opis:

Program umożliwia gromadzenie danych osobowych. Baza danych zapisana jest w pliku baza.dat.

Budowa pliku:

  1. Kazda linia zawiera dokładnie jeden rekord danych

  2. Poszczególne pola rekordu oddzielone sa znakiem [ ; ] co za tym idzie taki znak nie może wystąpic w danych

  3. Budowa jedego rekordu:

    1. nazwisko;imie;ulica;nrdomu;nrmieszkania;miasto;kodpocztowy;email;tel;mobil;

  4. Program nie ogranicza wielkości bazy danych, jest to ograniczone jednynie przez system operacujny, doklanie przez maksymalna wielkość jednego pliku.

Program automatycznie odczytuje i zapisuje bazę danych przy starcie i zamykaniu programu.

Opis wynkcji programu:

0x01 graphic

[ |<< ] - przejscie do pierwszego rekordu

[ < ] - przejscie do poprzedniego rekordu

[ > ] - przejscie do nastepnego rekordu

[ >>| ] - przejscie do ostatniego rekordu

[ Dodaj ] - dodaje nowy rekord do bazy

[ Edytuj ] - edytuje aktualny rekord bazy

[ Usun ] - oznacza rekord do usuniecia z bazy danych przy zamykaniu programu. Jezli danych rekord jest [ aktywny ] - rekord zostanie zapisany. Jezli danych rekord jest [ usunięty ] - rekord nie zostanie zapisany. Jezeli na rekordzie ze statusem usuniety ponownie nacisniemy [ usun ] jego stan zmieni sie na aktywny.

[ Zapisz ] - dopisuje rekord do bazy danych

[ Anuluj ] - anuluje aktualnie wprowadzone dane

Source code:

/*

Baza danych do gromadzenia danych osobowych. Klasyczne dzialanie, operacje

dodawania, edycji, usowania rekordow. Plik bazy danych o nazwie baza.dat - pola

bazy rozdzialone znakiem [ ; ].

*/

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include <stdio.h>

#include <stdlib.h>

#include <io.h>

#include <string>

#include <fstream>

#include <iostream>

#pragma package(smart_init)

#pragma resource "*.dfm"

TForm1 *Form1;

int id_rekord; // id unikatowe rekordu

int ile_rekorodow; // ile rekordow w bazie

int akcja; // akcja - operacja na bazie

int akt_id_rekord; // id aktualnego rekordu

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{

}

void __fastcall TForm1::FormCreate(TObject *Sender)

// ustawia parametry poczatkowe

{

id_rekord = 0;

ile_rekorodow =0;

akcja = 0;

odczytaj_baze();

}

TForm1::przyciski(int operacja)

// ustala ktore przyciski w jakiej operacji maja byc aktywne

{

switch(operacja)

{

case 1:

// operacja edycji lub dodania nowego rekoru

{

B_anuluj->Enabled = false;

B_dodaj->Enabled = false;

B_edytuj->Enabled = false;

B_nastepny->Enabled = false;

B_ostatni->Enabled = false;

B_pierwszy->Enabled = false;

B_poprzedni->Enabled = false;

B_usun->Enabled = false;

B_zapisz->Enabled = true;

B_anuluj->Enabled = true;

GroupBox1->Enabled = true;

LabeledEdit1->SetFocus();

break;

}

case 2:

// prze4gladanie bazy danych - normalny tryb pracy

{

B_anuluj->Enabled = true;

B_dodaj->Enabled = true;

B_edytuj->Enabled = true;

B_nastepny->Enabled = true;

B_ostatni->Enabled = true;

B_pierwszy->Enabled = true;

B_poprzedni->Enabled = true;

B_usun->Enabled = true;

B_zapisz->Enabled = false;

B_anuluj->Enabled = false;

GroupBox1->Enabled = false;

break;

}

case 3:

// pusta baza danych

{

B_pierwszy->Enabled = false;

B_poprzedni->Enabled = false;

B_nastepny->Enabled = false;

B_ostatni->Enabled = false;

break;

}

case 4:

// pierszy rekord bazy

{

B_pierwszy->Enabled = false;

B_poprzedni->Enabled = false;

B_nastepny->Enabled = true;

B_ostatni->Enabled = true;

break;

}

case 5:

// przegladanie bazy danych - srodek bazy

{

B_pierwszy->Enabled = true;

B_poprzedni->Enabled = true;

B_nastepny->Enabled = true;

B_ostatni->Enabled = true;

break;

}

case 6:

// ostatni rekord bazy danych

{

B_pierwszy->Enabled = true;

B_poprzedni->Enabled = true;

B_nastepny->Enabled = false;

B_ostatni->Enabled = false;

break;

}

}

return 0;

}

void __fastcall TForm1::B_dodajClick(TObject *Sender)

// dodaje nowy rekord do

{

akcja = 1;

wyczysc_pola();

przyciski(1);

}

void __fastcall TForm1::B_edytujClick(TObject *Sender)

// edycja aktualnego rekordu

{

if ((LabeledEdit1->Text != "") && (LabeledEdit2->Text != ""))

{

akcja = 2;

przyciski(1);

}

else

{

ShowMessage(AnsiString("Brak wymaganych danych!"));

}

}

void __fastcall TForm1::B_anulujClick(TObject *Sender)

// anulacja ostatniej operacji

{

wyswietl_rekord();

przyciski(2);

}

void __fastcall TForm1::B_zapiszClick(TObject *Sender)

{

if ((LabeledEdit1->Text != "") && (LabeledEdit2->Text != ""))

{

if ( akcja == 1 )

// dodaje rekord do bazy danych

{

StringGrid1->Cells[0][id_rekord]= id_rekord+1;

StringGrid1->Cells[1][id_rekord]= 1;

StringGrid1->Cells[2][id_rekord]= LabeledEdit1->Text;

StringGrid1->Cells[3][id_rekord]= LabeledEdit2->Text;

StringGrid1->Cells[4][id_rekord]= LabeledEdit3->Text;

StringGrid1->Cells[5][id_rekord]= LabeledEdit4->Text;

StringGrid1->Cells[6][id_rekord]= LabeledEdit5->Text;

StringGrid1->Cells[7][id_rekord]= LabeledEdit6->Text;

StringGrid1->Cells[8][id_rekord]= LabeledEdit7->Text;

StringGrid1->Cells[9][id_rekord]= LabeledEdit8->Text;

StringGrid1->Cells[10][id_rekord]= LabeledEdit9->Text;

StringGrid1->Cells[11][id_rekord]= LabeledEdit10->Text;

akt_id_rekord = ile_rekorodow;

ile_rekorodow++;

StringGrid1->RowCount = ile_rekorodow;

StringGrid1->Row = id_rekord;

id_rekord++;

przyciski(2);

}

else if ( akcja == 2)

// edytuje rekord bazy danych

{

StringGrid1->Cells[2][akt_id_rekord]= LabeledEdit1->Text;

StringGrid1->Cells[3][akt_id_rekord]= LabeledEdit2->Text;

StringGrid1->Cells[4][akt_id_rekord]= LabeledEdit3->Text;

StringGrid1->Cells[5][akt_id_rekord]= LabeledEdit4->Text;

StringGrid1->Cells[6][akt_id_rekord]= LabeledEdit5->Text;

StringGrid1->Cells[7][akt_id_rekord]= LabeledEdit6->Text;

StringGrid1->Cells[8][akt_id_rekord]= LabeledEdit7->Text;

StringGrid1->Cells[9][akt_id_rekord]= LabeledEdit8->Text;

StringGrid1->Cells[10][akt_id_rekord]= LabeledEdit9->Text;

StringGrid1->Cells[11][akt_id_rekord]= LabeledEdit10->Text;

przyciski(2);

}

}

else

// komunika o bledzie brak danych lab1 lab2

{

ShowMessage(AnsiString("Brak wymaganych danych!"));

LabeledEdit1->SetFocus();

}

wyswietl_rekord();

}

TForm1::wyczysc_pola()

// czysci pola edycyjne - dodanie nowego rekordu

{

LabeledEdit1->Clear();

LabeledEdit2->Clear();

LabeledEdit3->Clear();

LabeledEdit4->Clear();

LabeledEdit5->Clear();

LabeledEdit6->Clear();

LabeledEdit7->Clear();

LabeledEdit8->Clear();

LabeledEdit9->Clear();

LabeledEdit10->Clear();

LabeledEdit11->Clear();

return 0;

}

void __fastcall TForm1::B_usunClick(TObject *Sender)

/*

usowa rekord z bazy danych

zmiania pole status rekoru

jezeli 1 rekord jest aktywny i zostanie zapisany do bazy danych

jezeli 0 rekord usuniety - zostanie pominiety przy zapisie do bazy danych

jezeli w czasie edycji nacisniemy usun na rekordzie usunietym to jego stan

przechodzi na rekord aktywny

*/

{

if ((LabeledEdit1->Text != "") && (LabeledEdit2->Text != ""))

{

if (StringGrid1->Cells[1][akt_id_rekord] == "1")

{

StringGrid1->Cells[1][akt_id_rekord]= 0;

}

else

{

StringGrid1->Cells[1][akt_id_rekord]= 1;

}

wyswietl_rekord();

}

else

{

ShowMessage(AnsiString("Brak wymaganych danych!"));

}

}

TForm1::odczytaj_baze()

// odczytuje baze danych z pliku

{

AnsiString baza = "baza.dat";

AnsiString linia_danych = "";

char znak = 0;

FILE *file_in;

if ((file_in = fopen("baza.dat", "rt")) == NULL)

{

ShowMessage(AnsiString("Blad odczytu danych"));

}

else

{

while (!feof(file_in))

{

znak = fgetc(file_in);

if (znak != '\n')

{

linia_danych = linia_danych + znak;

}

else if (znak == '\n')

{

wczytaj_rekord(linia_danych);

linia_danych = "";

}

}

}

fclose(file_in);

akt_id_rekord = 0;

wyswietl_rekord();

return 0;

}

TForm1::wczytaj_rekord(AnsiString linia)

// przeksztalca odczytana linie tekstu na odp. pola bazy danych

{

String tmp = "";

int x = linia.Length();

if ( x > 10 )

{

StringGrid1->Cells[0][id_rekord]= id_rekord+1;

StringGrid1->Cells[1][id_rekord]= 1;

StringGrid1->Cells[2][id_rekord]= linia.SubString(1, linia.Pos("\;")-1);

linia.Delete(1, linia.Pos("\;"));

StringGrid1->Cells[3][id_rekord]= linia.SubString(1, linia.Pos("\;")-1);

linia.Delete(1, linia.Pos("\;"));

StringGrid1->Cells[4][id_rekord]= linia.SubString(1, linia.Pos("\;")-1);

linia.Delete(1, linia.Pos("\;"));

StringGrid1->Cells[5][id_rekord]= linia.SubString(1, linia.Pos("\;")-1);

linia.Delete(1, linia.Pos("\;"));

StringGrid1->Cells[6][id_rekord]= linia.SubString(1, linia.Pos("\;")-1);

linia.Delete(1, linia.Pos("\;"));

StringGrid1->Cells[7][id_rekord]= linia.SubString(1, linia.Pos("\;")-1);

linia.Delete(1, linia.Pos("\;"));

StringGrid1->Cells[8][id_rekord]= linia.SubString(1, linia.Pos("\;")-1);

linia.Delete(1, linia.Pos("\;"));

StringGrid1->Cells[9][id_rekord]= linia.SubString(1, linia.Pos("\;")-1);

linia.Delete(1, linia.Pos("\;"));

StringGrid1->Cells[10][id_rekord]= linia.SubString(1, linia.Pos("\;")-1);

linia.Delete(1, linia.Pos("\;"));

StringGrid1->Cells[11][id_rekord]= linia.SubString(1, linia.Pos("\;")-1);

linia.Delete(1, linia.Pos("\;"));

akt_id_rekord = ile_rekorodow;

ile_rekorodow++;

StringGrid1->RowCount = ile_rekorodow;

StringGrid1->Row = id_rekord;

id_rekord++;

}

return 0;

}

TForm1::wyswietl_rekord()

// wyswietla rekord danych w editach

{

StringGrid1->Row = akt_id_rekord;

LabeledEdit1->Text = StringGrid1->Cells[2][akt_id_rekord];

LabeledEdit2->Text = StringGrid1->Cells[3][akt_id_rekord];

LabeledEdit3->Text = StringGrid1->Cells[4][akt_id_rekord];

LabeledEdit4->Text = StringGrid1->Cells[5][akt_id_rekord];

LabeledEdit5->Text = StringGrid1->Cells[6][akt_id_rekord];

LabeledEdit6->Text = StringGrid1->Cells[7][akt_id_rekord];

LabeledEdit7->Text = StringGrid1->Cells[8][akt_id_rekord];

LabeledEdit8->Text = StringGrid1->Cells[9][akt_id_rekord];

LabeledEdit9->Text = StringGrid1->Cells[10][akt_id_rekord];

LabeledEdit10->Text = StringGrid1->Cells[11][akt_id_rekord];

if (StringGrid1->Cells[1][akt_id_rekord] == "1")

{

LabeledEdit11->Text = "aktywny";

}

else

{

LabeledEdit11->Text = "usuniety";

}

if (akt_id_rekord == 0)

{

przyciski(4);

}

else if (akt_id_rekord == ile_rekorodow-1)

{

przyciski(6);

}

else if ((akt_id_rekord == ile_rekorodow-1) && (ile_rekorodow =0))

{

przyciski(3);

}

else if ((akt_id_rekord < ile_rekorodow-1) && (akt_id_rekord >0))

{

przyciski(5);

}

return 0;

}

void __fastcall TForm1::B_nastepnyClick(TObject *Sender)

// przyciski poruszania sie po rekordach

{

if (akt_id_rekord < ile_rekorodow-1)

{

akt_id_rekord++;

}

wyswietl_rekord();

}

void __fastcall TForm1::B_poprzedniClick(TObject *Sender)

// przyciski poruszania sie po rekordach

{

if (akt_id_rekord > 0)

{

akt_id_rekord--;

}

wyswietl_rekord();

}

void __fastcall TForm1::B_pierwszyClick(TObject *Sender)

// przyciski poruszania sie po rekordach

{

akt_id_rekord = 0;

wyswietl_rekord();

}

void __fastcall TForm1::B_ostatniClick(TObject *Sender)

// przyciski poruszania sie po rekordach

{

akt_id_rekord = ile_rekorodow - 1;

wyswietl_rekord();

}

TForm1::zapisz_baze()

// zapisuje baze danych do pliku

{

AnsiString linia = "";

FILE *file_out;

if ((file_out = fopen("baza.dat", "wt")) == NULL)

{

ShowMessage("Blad zapisu do pliku!");

}

else

{

for( int y = 0; y < ile_rekorodow; y++)

{

linia = zapisz_rekord(y);

if (linia != "0")

{

int r = (linia.Length());

for (int x = 0; x <= r-1 ; x++)

{

fputc(linia[x+1], file_out);

}

}

}

}

fclose(file_out);

return 0;

}

AnsiString TForm1::zapisz_rekord(int rekord)

// tworzy z pol danych linie tekstowa - rekord dla pliku bazy

{

if (StringGrid1->Cells[1][rekord] != "0")

{

AnsiString tmp = "";

tmp = tmp + StringGrid1->Cells[2][rekord] + "\;";

tmp = tmp + StringGrid1->Cells[3][rekord] + "\;";

tmp = tmp + StringGrid1->Cells[4][rekord] + "\;";

tmp = tmp + StringGrid1->Cells[5][rekord] + "\;";

tmp = tmp + StringGrid1->Cells[6][rekord] + "\;";

tmp = tmp + StringGrid1->Cells[7][rekord] + "\;";

tmp = tmp + StringGrid1->Cells[8][rekord] + "\;";

tmp = tmp + StringGrid1->Cells[9][rekord] + "\;";

tmp = tmp + StringGrid1->Cells[10][rekord] + "\;";

tmp = tmp + StringGrid1->Cells[11][rekord] + "\;";

tmp = tmp + "\n";

return tmp;

}

else

return "0";

}

void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)

{

zapisz_baze();

}

TForm1::sprawdz_znaki()

// sprawdza czy we wpisanym tekscie nie ma niedozwolonego znaku

// znak [ ; ] - rozdziela pola bazy danych

{

AnsiString tmp = "";

tmp = LabeledEdit1->Text;

if ((tmp.Pos("\;")))

LabeledEdit1->SetFocus();

tmp = LabeledEdit2->Text;

if ((tmp.Pos("\;")))

LabeledEdit2->SetFocus();

tmp = LabeledEdit3->Text;

if ((tmp.Pos("\;")))

LabeledEdit3->SetFocus();

tmp = LabeledEdit4->Text;

if ((tmp.Pos("\;")))

LabeledEdit4->SetFocus();

tmp = LabeledEdit5->Text;

if ((tmp.Pos("\;")))

LabeledEdit5->SetFocus();

tmp = LabeledEdit6->Text;

if ((tmp.Pos("\;")))

LabeledEdit6->SetFocus();

tmp = LabeledEdit7->Text;

if ((tmp.Pos("\;")))

LabeledEdit7->SetFocus();

tmp = LabeledEdit8->Text;

if ((tmp.Pos("\;")))

LabeledEdit8->SetFocus();

tmp = LabeledEdit9->Text;

if ((tmp.Pos("\;")))

LabeledEdit9->SetFocus();

tmp = LabeledEdit10->Text;

if ((tmp.Pos("\;")))

LabeledEdit10->SetFocus();

return 0;

}

void __fastcall TForm1::LabeledEdit1Exit(TObject *Sender)

{

sprawdz_znaki();

}

Zadanie: BAZA DANYCH OSOBOWYCH

Program na zaliczenie Laboratorium

PODSTAWY I JĘZYKI PROGRAMOWANIA

Grupa: 3BZ / WSTI

Student: Robert Ruszel (112)

Strona 2 z 10



Wyszukiwarka