Witam. Dostałem zadanie aby napisać aplikację, która pozwala na wyświetlanie tabeli z bazy danych zawierającej następujące dane studentów:
Lp,Imie,Nazwisko,Data,Grupa,Adres,Miasto,Kod,Wojewodztwo,Telefon.
Aplikacja ma wyświetlać dane, umożliwiać głównie ich dodawanie, modyfikowanie, usuwanie, odczyt i zapis do pliku + wszystkie podobne działania jakie tylko wymyślę (typu sortowanie, wyszukiwanie, itp.).
Ogólne założenie miałem takie, że będzie plik Główny.cpp (w którym będzie obsługa całej aplikacji, czyli wszystkie buttony itd.), plik Funkcje.cpp (w którym będą funkcje typu wczytaj, zapisz, czyść tablicę, dodaj, usuń, itd...) oraz plik student.h (w którym zdefiniowana jest struktura student i zadeklarowane funkcje).
Do tej pory mam zrobione funkcje czyszczenia tablicy(czyli tej struktury) oraz wczytywanie i zapis. I tu mam problem, bo leżę na tych plikach. Mam bazę z MySQL-a, z którą program powinien być kompatybilny. Funkcje niby się kompilują (jedyne ostrzeżenia jakie pokazuje to podwójne \t\t, ale to chyba nie problem). Tyle tylko, że po wczytaniu pliku i jego zapisie zamiast tego co było pojawiają mi się wiersze cyferek. Nie wiem co robię źle, bo pierwszy raz próbuję coś tworzyć na plikach.
Kod pisałem w oparciu o aplikację kolegi, ale nic z niej nie rozumiem, bo kolega pisze 'brudne' programy (wskaźniki, multum zniennych, zero wcięć, mało komentarzy). Czy mogę prosić o pomoc w tych dwóch funkcjach?
Oto ich kod:
void Wczytaj( void )
{ int i;
ifstream plik;
plik.open( "baza.txt", ios::in );
do
{
if( plik.fail() )
{
plik.close();
return;
}
else
{
for( i = 0; i <= MAX; i++ )
{
plik.getline( tab[ i ].LP, sizeof( tab[ i ].LP ), '\t' );
plik.getline( tab[ i ].Imie, sizeof( tab[ i ].Imie ), '\t\t' );
plik.getline( tab[ i ].Nazwisko, sizeof( tab[ i ].Nazwisko ), '\t\t' );
plik.getline( tab[ i ].Data, sizeof( tab[ i ].Data ), '\t\t\t' );
plik.getline( tab[ i ].Grupa, sizeof( tab[ i ].Grupa ), '\t\t' );
plik.getline( tab[ i ].Adres, sizeof( tab[ i ].Adres ), '\t\t' );
plik.getline( tab[ i ].Miasto, sizeof( tab[ i ].Miasto ), '\t\t' );
plik.getline( tab[ i ].Kod, sizeof( tab[ i ].Kod ), '\t\t' );
plik.getline( tab[ i ].Wojewodztwo, sizeof( tab[ i ].Wojewodztwo ), '\t\t' );
plik.getline( tab[ i ].Telefon, sizeof( tab[ i ].Telefon ), '\n' );
}
}
}
while( !plik.eof() );
plik.close();
}
void Zapisz( void )
{
int i;
ofstream plik;
plik.open( "baza.txt", ios::out );
if( plik.fail() )
{
plik.close();
exit( 1 );
}
for( i = 0; i < MAX; i++ )
{
plik
<< tab[ i ].LP << '\t'
<< tab[ i ].Imie << '\t\t'
<< tab[ i ].Nazwisko << '\t\t'
<< tab[ i ].Data << '\t\t\t'
<< tab[ i ].Grupa << '\t\t'
<< tab[ i ].Adres << '\t\t'
<< tab[ i ].Miasto << '\t\t'
<< tab[ i ].Kod << '\t\t'
<< tab[ i ].Wojewodztwo << '\t\t'
<< tab[ i ].Telefon << '\n'
<< endl;
}
plik.close();
}
Proszę, help me, co tu jest źle? Bez tego nie mogę pisać dalej, bo jak sprawdzić dodawanie wierszy skoro nie wiem czy mi źle czyta czy źle zapisuje...
A i jeszcze funkcja do czyszczenia tablicy przed wczytaniem:
void Tablica()
{
for( int i = 0; i < MAX; i++ )
{
tab[ i ].Imie[ 0 ] = NULL;
tab[ i ].Nazwisko[ 0 ] = NULL;
tab[ i ].Data[ 0 ] = NULL;
tab[ i ].Grupa[ 0 ] = NULL;
tab[ i ].Adres[ 0 ] = NULL;
tab[ i ].Miasto[ 0 ] = NULL;
tab[ i ].Kod[ 0 ] = NULL;
tab[ i ].Wojewodztwo[ 0 ] = NULL;
tab[ i ].Telefon[ 0 ] = NULL;
};
}