#include
#include
using namespace std;
/*class Student
{
public:
//skladniki publiczne
//funkcje do obsługi
// void dodajEL(); //dodaje studenta
// void usunEL(); //usuwa studenta
private:
}; //koniec klasy*/
struct EL {
int nr_i; //numer indeksu
EL *next; //nastepny element
};
string imie;
string nazwisko;
//prototypy funkcji
void dodajELp(EL *&s); //dodaje element na poczatek
void dodajELk(EL *&s); //dodaje element na koniec
void wyswietlEL(EL *&s); //wyswietla element
void usunEL(EL *&s); //usuwa jeden element
//void usun(EL *&s); //usuwa wszystko
int ileEL(EL *&s); //liczy elementy
EL *start = NULL;
int main()
{
int wybor;
do {
cerr << "Co chcesz zrobic?\n\n"
<< "[1] Wpisz 1, by dodac studenta na koniec listy "<< endl
<< "[2] Wpisz 2, by dodac studenta na poczatek listy "<< endl
<< "[3] Wpisz 3, by policzyc zapisanych studentow "<< endl
<< "[4] Wpisz 4, by wyswietlic informacje o studencie "<< endl
<< "[5] Wpisz 5, by usunac studenta "<< endl
<< "[6] Wpisz 6, by skasowac liste "<< endl
<< "[0] Wpisz 0, by zakonczyc program "<< endl;
cin >> wybor;
switch(wybor)
{
case 1: dodajELp(start); break; //jest
case 2: dodajELk(start); break; //jest po czesci
case 3: cout << "Jest "<< ileEL(start) << " zapisanych studentow " << endl << endl; break; //jest
// case 4: wyswietlEL(start); break; //nie ma
case 5: usunEL(start); break; //jest
// case 6: usun(start); break; //nie ma
case 0: break;
}
} while(wybor!=0);
system("pause");
return 0;
}
void dodajELp(EL *&s) //dodawanie elementow listy - studentow
{
system("cls"); //czysc ekran
if(s==NULL) //jezeli pierwszy element
{
s=new EL; //stworz nowy
s->next = NULL; //z wartoscia NULL
cerr << "Wpisz imie studenta: " << endl;
cin >> imie;
cerr << "Wpisz nazwisko studenta: " << endl;
cin >> nazwisko;
cerr << "Podaj nr indeksu: " << endl;
cin >> s->nr_i;
}
}
void dodajELk(EL *&s) //dodawanie elementow listy - studentow
{
if(s->next==NULL)//tu dopisac warunek koncowego elementu!!!!!!!!!!!!!!!!!!!!
{
EL *e = new EL;
e->next = NULL;
s=new EL; //stworz nowy
s->next = NULL; //z wartoscia NULL
cerr << "Wpisz imie studenta: " << endl;
cin >> imie;
cerr << "Wpisz nazwisko studenta: " << endl;
cin >> nazwisko;
cerr << "Podaj nr indeksu: " << endl;
cin >> s->nr_i;
/*EL *licznik = start;
int ile=0;
while(licznik->next!=NULL)
{ ile++;
licznik=licznik->next;
}
licznik->next=e;
for(int i=ile-1;i<=ile;i++)
{
licznik=licznik->next;
}*/
}
}
void usunEL(EL *&s) //usun studenta
{
system("cls"); //czysc ekran
int x_nr; //numer indeksu podawany przy usunieciu
cerr << "Podaj nr indeksu do usuniecia: \n";
cin >> x_nr;
EL *licznik = start; //licznik na poczatek
while(licznik->next!=NULL) //petla przechodzimy az do elementu przedostatniego listy
{
if(licznik->nr_i==x_nr) //jezeli numer indeksu zgadza sie z szukanym
{
//if(licznik->next==NULL)
//{
delete s; //usun studenta
//}
}
licznik=licznik->next; //przypisz dla aktualnego elementu listy, kolejna wartosc
}
}
int ileEL(EL*&s) //licznik elementow
{
system("cls");
int x=0;
while(s!=NULL)
{
x++;
s=s->next;
}
return x;
}
[/code]
Napisałem program oparty na funkcjach, ale nie działa tak ja powinien.
Np nie rozumiem dlaczego dodawanie elementu koncowego listy (wybór 2) zawiesza działanie programu.
Gdy chciałem usunąć konkretnego studenta po nr indeksu, także zawiesiła się konsola.
Czemu tak się dzieje?