baza danych

0

Witam stworzyłem sobie oto program "Baza danych"
Taki mały programik przechowujący info na listach jednokierunkowych
problem polega na tym że nie działa usuwanie ( a właściwie nie chce usunąć żadnego rekordu prócz "0" )
Byłbym wdzięczny za przejrzenie tego i wskazanie błędu albo pokazanie innego łatwiejszego sposobu na usuwanie wzkazanego rekordu, z góry dziękuję.

 #include <iostream>
#include <string>
#include <conio.h>

using namespace std;


//*********** struktury i funkcje
struct lista{
       string marka;
       string model;
       lista *nast;
};

//dodanie elementu na koncu listy
void stworz(lista *L, string marka, string model){
     
     while(L->nast != NULL){
        L=L->nast;                          
     }  
     
     lista *nowy = new lista;
     L->nast = nowy;
     
     nowy->nast = NULL;
     
     
     nowy->marka = marka;
     nowy->model = model;
}




int przegladaj(lista *L){

     if(L == NULL) return 0;
     system("cls");
     cout << "                                BAZA SAMOCHODOW                               " << endl; 
     cout << "==============================================================================" << endl;                     
     cout << "==============================================================================" << endl;
     cout << "| LP\t| Marka\t\t| Model" << endl;
     cout << "==============================================================================" << endl;
      
     int i=0;    
     while (L->nast != NULL)
     {
           L=L->nast;  
             cout << "| " << i++ << "\t| "<< L->marka << "\t\t| " << L->model << endl;   
     }
     
}


int usun(lista *L, int numer){
     
      if(L == NULL) return 0;
          
     int i=0;    
     while ( (L->nast != NULL))
     {
           if(i==numer){
            lista *tmp = new lista;
            tmp = L->nast;
            delete L->nast;
            L->nast = L->nast->nast;
            delete tmp;
            break;          
           }
           
           i++;
           L=L->nast;  

   
     }
}



//************************************************
//*********** main
int main(){

    string marka;
    string model;
    int numer;
	char c;
	unsigned char b, n;

    cout << "\t ------------------------BAZA DANYCH SAMOCHODOW--------------------" << endl << endl;
    cout << "\t Baza danych oparta o liste jednokierunkowa." << endl;
    cout << "\t Program umozliwia dodawanie, usuwanie i przegladanie rekordow" << endl; 
    cout << "\t oraz posiada interfejs uzytkownika w trybie tekstowym" << endl;
    cout << "\t ------------------------------------------------------------------" << endl << endl;
    cout << "Autor: Michal Witkowski" << endl << endl;
    system("pause");
    system("cls"); 

    lista *L1 = new lista;  //tworzenie nowej listy
    L1->nast = NULL;

  //"menu"
  char opt=' '; 
  while(opt != '0'){

            system("cls");
  
      cout << "\n";
      cout << "                                     MENU                                     " << "\n"; 
      cout << "==============================================================================" << "\n"; 
      cout << endl; 
      cout << "Wybierz: " << endl;
      cout << "* 1 aby przegladac baze" << "\n"; 
      cout << "* 2 aby dodac nowe auto do bazy"<< "\n"; 
      cout << "* 3 aby usunac auto z bazy" << "\n"; 
      cout << "* 0 aby zakonczyc program" << "\n"; 
      cout << endl; 
      cout << "==============================================================================" << "\n";
      cout << "Wybierz cyfre: ";
           opt = getchar();
      cout << endl << endl;
           
           switch(opt){
                       case '1':      
                                 przegladaj(L1);
                                 system("pause");
                                 break;
                                 
                       case '2': 
                                 cout << "Podaj marke: "; 
                                 cin >> marka; 
                                 cout <<"\n";
                                      
                                 cout << "Podaj model: "; 
                                 cin >> model; 
                                 cout <<"\n";
                                      
                                 stworz(L1, marka, model);
                                 break;
                       case '3': 
                                 przegladaj(L1);
                                 cout << "Podaj numer rekordu, ktory chesz usunac: "; 
                                 // cin << numer;     
                                      numer = 0;
                                      do
                                      { 
                                       b = getch(); // wczytaj znak z klawiatury
                                       n =  b - '0'; // zamien go na cyfre

                                      if (n <= 9 && numer <= (unsigned int) -1 / 10 && numer * 10 <= (unsigned int) -1 - n)
                                      // jesli to cyfra od 0 do 9 oraz cala wprowadzona liczba nie przekracza zakresu unsigned int
                                      {
                                       numer = numer * 10 + n; // dolacz cyfre do wprowadzanej liczby
                                        putch(b); // wyswietl cyfre na ekranie
                                        }
                                        if (b == 8)  // jesli to klawisz backspace
                                        {
                                         numer /= 10; // usun ostatnia cyfre
                                         putch(8); // cofnij kursor
                                         putch(' '); // wyswietl spacje zeby zamazac ostatnia cyfre
                                         putch(8);  // jeszcze raz cofnij kursor
                                        }
                                       } while (b != 13); // powtarzaj dotad az nacisniety zostanie klawisz enter
                                 
                                 usun(L1, numer);
                                 break;
           }
  }//petla
     
       return 0;   
}
0

lista *tmp = new lista;
tmp = L->nast;
delete L->nast;
L->nast = L->nast->nast;
delete tmp;

problem lezy w tym miejscu, przemysl ten kawaleczek

1 użytkowników online, w tym zalogowanych: 0, gości: 1