maze Temat założony przez niniejszego użytkownika |
Problem z dynamiczna tablica danych. » 2013-01-12 22:13:50 Witam, Napisalem prosta baze danych z uzyciem statycznej tablicy i tu sobie poradzilem, jednak kiedy proboje teraz napiac go z wykorzystaniem dynamicznej tablicy, ktorej wielkosc jest okreslana przez ilosc elementow jakie uzytkownik chce dodac do bazy. I tu mam jakis problem, gdyz program mimo ze sie kompiluje to wyrzuca blad podczas proby dodania nowego elementu do bazy. Z uwagi na fakt, ze chcialem aby baza po otwarciu miala juz kilka predefiniowanych elementow, ktore mozemy wyswietlic, zapisalem kilka do statycznej tablicy. A kiedy uzytkownik chce dodac nowe elementy, to wtedy alokuje pamiec dla tablicy dynamicznej, jednoczenie kopiujac do niej zawartos tej statycznej. Do osblugi tego uzylem zmienna 'pamiec', ktora przy wartosci =1 informuje ze mamy korzystac juz z nowo utworzonej tablicy dynamicznej. Bede bardzo wdzieczny, jezeli ktos pomoze mi zlokalizowac blad jaki robie. *) Cala operacja przypisania pamieci oraz kopiowania jest wykonywana w "CASE 1" petli switch. #include <iostream> #include <string> using namespace std;
struct DDT { short id; string marka; string model; int rocznik; double cena; };
void wczytaj_dane( DDT * tablica, int n, int poz ); void wyswietl( DDT * tablica, int n, bool pozycja ); int szukaj( DDT * tablica, int * wyniki, int ilosc ); void edytuj( DDT * tablica, int n );
int main() { int ilosc = NULL, zmiana = NULL, poz = 3, pamiec = 0; DDT * tablica = { 0 }; DDT baza[ 3 ] = { { 1, "Ford", "Mondeo", 2001, 16000 }, { 2, "Toyota", "Camry", 1998, 9000 }, { 3, "Opel", "Astra", 2003, 18000 } }; int wyniki[ 10 ] = { 0 }; do { cout << endl << "Witaj w Auto Komisie" << endl << endl; cout << "Obecnie w bazie " << poz << " pozycji" << endl << endl; cout << "Wybierz opcje:" << endl << endl; cout << "1) Dodaj pojazdy do bazy" << endl; cout << "2) Wyswiel zawartosc bazy" << endl; cout << "3) Znajdz samochod" << endl; cout << "4) Edytuj baze" << endl << endl; cout << "5) Zakoncz program" << endl << endl; cin >> zmiana; if( zmiana == 5 ) break; if(( zmiana == 1 ) ||( zmiana == 2 ) ||( zmiana == 3 ) ||( zmiana == 4 ) ) { switch( zmiana ) { case 1: do { cout << "Ile pojazdow chcesz wprowadzic do bazy?" << endl; cin >> ilosc; if(( ilosc + poz ) > 30 ) { cout << "Zbyt duza ilosc elementow"; ilosc = NULL; } int rozmiar = ilosc + poz; if( DDT * tablica = new DDT[ rozmiar ] ) cout << "Przydzielono pamiec"; pamiec = 1; for( int i = 0; i < poz; i++ ) { tablica[ i ].marka = baza[ i ].marka; tablica[ i ].model = baza[ i ].model; tablica[ i ].rocznik = baza[ i ].rocznik; tablica[ i ].cena = baza[ i ].cena; } } while( ilosc == 0 ); break; case 2: if( poz == 0 ) { cout << "Najpierw wprowadz dane pojazdow" << endl; break; } if( pamiec == 0 ) wyswietl( baza, poz, 0 ); else wyswietl( tablica, poz, 0 ); break; case 3: { if( ilosc == 0 ) { cout << "Najpierw wprowadz dane pojazdow" << endl; break; } int buf = NULL, temp = NULL; temp = szukaj( tablica, wyniki, poz ); for( int i = 0; i < temp; i++ ) { buf = wyniki[ i ]; cout << endl << "###########Wyniki Wyszukiwania###########" << endl; cout << tablica[ buf ].marka << "::" << tablica[ buf ].model << "::" << tablica[ buf ].rocznik << "::" << tablica[ buf ].cena << endl; cout << "###########*******************###########" << endl; } break; } case 4: edytuj( tablica, poz ); break; } } } while( zmiana != 5 ); cin.get(); return 0; }
void wczytaj_dane( DDT * tablica, int n, int poz ) { for( int i = poz; i < n + poz; i++ ) { cout << endl << "Wprowadz dane " << i + 1 << "-go samochodu"; cout << endl << "Marka: "; cin >> tablica[ i ].marka; cout << endl << "Model: "; cin >> tablica[ i ].model; cout << endl << "Rocznik: "; cin >> tablica[ i ].rocznik; cout << endl << "Cena: "; cin >> tablica[ i ].cena; } ; }
void wyswietl( DDT * tablica, int n, bool pozycja ) { cout << endl << "###############BAZA###############" << endl; if( pozycja == 1 ) { cout << tablica[ n ].id << "::" << tablica[ n ].marka << "::" << tablica[ n ].model << "::"; cout << tablica[ n ].rocznik << "r.::" << tablica[ n ].cena << " zl" << endl; } else for( int i = 0; i < n; i++ ) { cout << tablica[ i ].id << "::" << tablica[ i ].marka << "::" << tablica[ i ].model << "::"; cout << tablica[ i ].rocznik << "r.::" << tablica[ i ].cena << " zl" << endl; } cout << "##################################" << endl; }
void edytuj( DDT * tablica, int n ) { int edit; wyswietl( tablica, n, 0 ); cout << endl << "Ktora pozycje chcesz wyedytowac?"; cin >> edit; cout << endl << "Podaj marke: "; cin >> tablica[ edit ].marka; cout << endl << "Podaj model: "; cin >> tablica[ edit ].model; cout << endl << "Podaj rocznik: "; cin >> tablica[ edit ].rocznik; cout << endl << "Podaj cene: "; cin >> tablica[ edit ].cena; wyswietl( tablica, n, 0 ); }
int szukaj( DDT * tablica, int * wyniki, int n ) { string klucz; double kwota; int poz = NULL; cout << "Wprowadz szukane kryteria:" << endl; cout << "Jakiej marki poszukujesz?: "; cin >> klucz; cout << endl << "Podaj cene maksymalna: "; cin >> kwota; for( int i = 0; i < n; i++ ) { if(( tablica[ i ].marka == klucz ) &&( tablica[ i ].cena <= kwota ) ) { wyniki[ poz ] = i; poz++; }; } return( poz ); }
|