Mam takie zadanie do zrobienia i się chce zapytać czy dobrze to zrobiłem.
Proszę rozszerzyć program o następujące funkcje:
-
zapis i odczyt całego magazynu w trybie binarnym
-
funkcja zwalniająca pamięć przydzieloną na towary w magazynie. Funkcja jednocześnie usuwa wszystkie towary z magazynu.
To jest ten program
#include <cstdio>
#include <cstring>
struct Towar {
char nazwa[ 32 ];
float cena;
float cena_jednostkowa;
};
void ustaw( Towar * t, const char n[], float cena, float cj ) {
strcpy( t->nazwa, n );
t->cena = cena;
t->cena_jednostkowa = cj;
}
struct Magazyn {
int stan;
Towar * towary[ 1000 ];
};
void init( Magazyn * m ) {
m->stan = 0;
for( int i = 0; i < 1000; ++i )
m->towary[ i ] = 0;
}
Towar * utworz( const char n[], float cena, float cj ) {
Towar * t = new Towar;
ustaw( t, n, cena, cj );
return t;
}
bool dodaj( Magazyn * m, const char n[], float cena, float cj ) {
if( m->stan >= 1000 )
{
return false;
}
m->towary[ m->stan++ ] = utworz( n, cena, cj );
return true;
}
void wypisz( Magazyn * m, FILE * fp ) {
fprintf( fp, "%d\n", m->stan );
for( int i = 0; i < m->stan; ++i )
wypisz( m->towary[ i ], fp );
}
void wczytaj( Magazyn * m, FILE * fp ) {
fscanf( fp, "%d", & m->stan );
getc( fp );
for( int i = 0; i < m->stan; i++ )
{
m->towary[ i ] = new Towar;
wczytaj( m->towary[ i ], fp );
}
}
A tutaj napisałem te funkcje
void wypiszbinarnie( Magazyn * m, FILE * fp ) {
fwrite( &( m->stan ), sizeof( int ), 1, fp );
for( int i = 0; i < m->stan; ++i )
fwrite( m->towary[ i ], sizeof( Towar ), 1, fp );
}
void wczytajbinarnie( Magazyn * m, FILE * fp ) {
fread( &( m->stan ), sizeof( int ), 1, fp );
for( int i = 0; i < m->stan, i++ )
fread( m->towary[ i ], sizeof( Towar ), 1, fp );
}
bool usun( Magazyn * m, int numerTowaru ) {
if( numerTowaru < 0 or numerTowaru >= m->stan ) return 0;
if( numerTowaru < m->stan - 1 )
m->towary[ numerTowaru ] = m->towary[ m->stan - 1 ];
m->stan--;
return 1;
}