Opis:
Program umożliwia gromadzenie danych osobowych. Baza danych zapisana jest w pliku baza.dat.
Budowa pliku:
Kazda linia zawiera dokładnie jeden rekord danych
Poszczególne pola rekordu oddzielone sa znakiem [ ; ] co za tym idzie taki znak nie może wystąpic w danych
Budowa jedego rekordu:
nazwisko;imie;ulica;nrdomu;nrmieszkania;miasto;kodpocztowy;email;tel;mobil;
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:
[ |<< ] - 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