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;
}