ZADATAK 2:  (Korišćenje liste)Napisati aplikaciju u kojoj se koristi LISTA:

U memoriji računara nemamo dovoljno mesta da ubacimo sve strukture u kojima se nalaze podaci o knjigama (naziv, autor, godinaIzdanja, mestoIzdanja). Zbog toga ćemo koristiti listu elemenata.
Treba nam aplikacija pomoću koje ćemo moći da unosimo podatke o svakoj pojedinoj knjizi i da to ubacujemo u listu knjiga. Ako se knjiga rashoduje, onda je treba izbaciti iz liste.

(detalji: )
U beskonačnoj petlji korisniku (admin) se daje na izbor:
- unos nove knjige
- koliko imamo knjiga ukupno
- rashodovanje knjige
- kraj

Ako je u pitanju unos nove knjige, treba da se traži da se unese naziv, autor, godinaIzdanja, mestoIzdanja. To se sve smešta na kraj liste.
Ako je u pitanju rashodovanje knjige, traži se da korisnik unese naziv knjige koja se uklanja iz liste, ako postoji u listi, sa porukom tipa: „ uspešno je rashodovana knjiga “. Međutim, ako se ne pronađe knjiga sa traženim nazivom, korisnik treba da može da bira da li će da pokuša ponovo ili da se vrati na glavni meni.
Ako se bira broj knjiga, tada treba da se ispiše  poruka koliko je trenutno knjiga u listi.
Usput: Ako pokušate da uklonite knjigu a u listi nema ni jedne, ne treba da traži naziv, već odmah da prikaže odgovarajuća poruka

Rešenje (jedan od mogućih načina za rešavanje, možda malo duži)

************

using System;                       /* ovo se uvek koristi */
using System.Collections.Generic; /* ovo treba ako koristimo generike: List<> je generik */

namespace aplikacija_L /* unutar istog namespace-a su svi delovi projekta ! */
{

    struct knjiga                 /* struktura knjiga */
{
public string naziv; /* da bi mogli pristupiti pojedinim poljima strukture, treba vam public ! */
public string autor;
public int godinaIzdanja;
public string mestoIzdanja;

}
class Program /* ovo je klasa - program u kojem je programski kod, */
{ /* van njega su strukture i druge klase koje se koriste ! */

static List<knjiga> listaKnjiga = new List<knjiga>(); /* LISTA knjiga - tj lista struktura */

static char izborZaKorisnika() /* metoda kojom se od korisnika traži da unese svoj izbor */
{
string izbor = "o";
Console.WriteLine("\n Izaberite OPCIJU koju želite da radite: ");
Console.WriteLine("\n 1 - unos nove knjige");
Console.WriteLine("\n 2 - koliko imamo knjiga u ukupno");
Console.WriteLine("\n 3 - rashodovanje knjige");
Console.WriteLine("\n 4 - KRAJ");

izbor = Console.ReadLine(); /* string - liniju koju unese korisnik - smeštamo u promenljivu tipa string */

return izbor[0]; /* ali kao izlaz ćemo poslati samo PRVO SLOVO, koje god da je */
}

static void unosNoveKnjige() /* metoda pomoću koje se unosi novi element (knjiga) u listu */
{
knjiga novaKnjiga;
Console.WriteLine("\n Unesite sledeće podatke: ");
Console.WriteLine("\n naziv: ");
novaKnjiga.naziv = Console.ReadLine();
Console.WriteLine("\n autor: ");
novaKnjiga.autor = Console.ReadLine();
Console.WriteLine("\n godina izdanja: ");
novaKnjiga.godinaIzdanja = Convert.ToInt32(Console.ReadLine());
Console.WriteLine("\n mesto izdanja : ");
novaKnjiga.mestoIzdanja = Console.ReadLine();

listaKnjiga.Add(novaKnjiga); /* naredba kojom se nova promenljiva novaKnjiga tipa strukture knjiga dodaje na kraj liste */

}
static void brojKnjigaUkupno() /* metoda kojom se ispisuje koliki je broj knjiga koje imamo ukupno */
{
Console.WriteLine("\n Broj knjiga koje imamo je " + listaKnjiga.Count);

}
static void rashodovanjeKnjige() /* metoda koja se koristi za izbacivanje nekog elementa iz liste */
{
if(listaKnjiga.Count==0) /* ako NEMA knjiga, odmah da izađe iz metode - nema smisla raditi dalje */
{
Console.WriteLine("nema knjiga uopšte - šta biste rashodovali ?");
return; /* izlazak iz metode - može da se postavi bilo gde - prvi put kad naleti na naredbu return - izlazi iz metode ! */
}
bool pronadjen = false; /* logička promenljiva koja označava da li jeste ili nije pronađena knjiga */
string ponovniPokusaj; /* ako budemo hteli da probamo ponovo, to treba smestiti negde ... */

string zadatNaziv; /* pomoćna promenljiva u koju se stavlja zadati naziv knjige */

do { /* radimo u do...while petlji - dok ne rashodujemo knjigu ili dok ne odaberemo drugačije */

ponovniPokusaj = "ne"; /* i na početku postavljamo da je logička promenljiva false - čak i ako jeste ponovljan pokušaj */
/* jer bi inače moglo da dođe do pogrešnih rezultata */
Console.WriteLine("\n Unesite naziv knjige koju želite da rashodujete \n");
Console.WriteLine("\n naziv: ");
zadatNaziv = Console.ReadLine();


for (int i = 0; i < listaKnjiga.Count; i++) /* prolazi se od početka do kraja liste */
{ /* i ako se pronađe kjniga sa zadatim nazivom */
if (listaKnjiga[i].naziv == zadatNaziv )
{ /* prvo se ispišu podaci -šta će se rashodovati */
Console.WriteLine("rashodujemo knjigu {0} autora {1} izdatu {2} godune u mestu {3}",
listaKnjiga[i].naziv, listaKnjiga[i].autor, listaKnjiga[i].godinaIzdanja, listaKnjiga[i].mestoIzdanja);

listaKnjiga.RemoveAt(i); /* a onda se uklanja iz liste */
i--;
/* ako pronađe knjigu koja se rashoduje, uklanja se iz liste,
* i samim tim je sledeći element u listi dobio indeks koji je taj element imao
* pa je zbog toga indeks smanjen za jedan
* a iz petlje u ovom slučaju ne izlazimo,
* jer može da se desi da imamo još neku knjigu sa istim nazivom,
* pa ćemo i nju ukloniti iz liste - ovo nije najbolje rešenje, a sigurno nije ni najispravnije,
* razmislite kako biste rešili ovaj problem */

pronadjen = true; /* oznaka da smo pronašli knjigu koja se rashoduje i da je uklonjena iz liste */
}
}

if (pronadjen == false) /* ako nismo pronašliknjigu za rashod, dajemo opciju za ponavljanje : */
{
Console.WriteLine("\n Nema takve knjige. Želite li da pokušate ponovo (da/ne) ?");

ponovniPokusaj = Console.ReadLine();

}
} while (ponovniPokusaj == "da"); /* i sve se radi ponovo, ako nismo knjigu i ako smo rekli "da" za ponovni pokušaj */

}


static void Main(string[] args)
{

char mojIzbor;

while (true) /* ovo JESTE beskonačna petlja - daje izbor korisniku stalno ponovo i ponovo */
{

mojIzbor = izborZaKorisnika(); /* ispis izbora za korisnika, korisnik kuca svoj odgovor */
if (mojIzbor == '1') unosNoveKnjige();
if (mojIzbor == '2') brojKnjigaUkupno();
if (mojIzbor == '3') rashodovanjeKnjige();
if (mojIzbor == '4') break; /* naredbom break se izlazi iz najbliže petlje - u ovom slučaju beskonačne petlje, i možemo da završimo program */
}

}
}
}
Last modified: Thursday, 22 October 2020, 4:08 AM