jsam
1/28/2013 - 12:30 AM

zamjeni si sve at(i) sa [i] da te ne zbunjuje jer je ista funkcija.....push_back() ti je funkcija s kojom dodajes u listu...i to je to..pret

zamjeni si sve at(i) sa [i] da te ne zbunjuje jer je ista funkcija.....push_back() ti je funkcija s kojom dodajes u listu...i to je to..pretrazivanje radis linearno to ti je najlakse..znaci puknes u petlju i onda pretrazujes element po element..pokazem ti jos sortiranje i to ti je ta ista sablona koja dolazi

#include <iostream>
#include <string>
#include <vector>
#include <fstream>
using namespace std;
class cstudent
{
public:
  long long mat_broj;
  string ime_prezime;

  void upis()
  {
    cout << "Unesite maticni broj:$ "; cin >> mat_broj;
    cout << "Unesite ime i prezime:$ "; cin >> ime_prezime;
  }

  void ispis()
  {
    cout << "Maticni broj: " << mat_broj << endl
   << "Ime i prezime: " << ime_prezime << endl << endl;
  }
};

class cprijava
{
public:
  long long sifra;
  long long mat_broj;
  string predmet;
  string rok;

  void upis()
  {
    cout << "Sifra:$ "; cin >> sifra;
    cout << "Maticni broj:$ "; cin >> mat_broj;
    cout << "Predmet:$ "; cin >> predmet;
    cout << "Rok:$ "; cin >> rok;
  }

  void ispis()
  {
    cout << "Sifra: " << sifra << endl
	 << "Maticni broj: " << mat_broj << endl
	 << "Predmet: " << predmet << endl
	 << "Rok: " << rok << endl << endl;
  }
};

int izbornik()
{
  int izbor = 0;
  cout << "1. unesi studenta\n"
       << "2. ispisi sve studente\n"
       << "3. unesi prijavu\n"
       << "4. ispisi sve prijave\n"
       << "5. ispis svih prijava za zadanog studenta\n"
       << "6. ispisi studente sa prijavama\n"
       << "9. exit\n";
  cin >> izbor;
  return izbor;
}

void zapisi_prijave_u_datoteku(vector<cprijava*> prijave)
{
  fstream dat;
  
  dat.open("prijave.dat", fstream::in | fstream::out | fstream::app);
  for ( int i = 0; i < prijave.size(); ++i )
    {
      dat << "Sifra: " << prijave.at(i)->sifra << endl
	  << "Maticni broj: " << prijave.at(i)->mat_broj << endl
	  << "Predmet: " << prijave.at(i)->predmet << endl 
	  << "Rok: " << prijave.at(i)->rok << endl << endl;
	  }
  dat.close(); //cout << "ZAPISUJEM U DATOTEKU!" << endl;
}

int main()
{
  vector<cstudent*> polje_studenata;
  vector<cprijava*> polje_prijava;

  cstudent *cstudent_element;
  cprijava *cprijava_element;

  bool student_ne_postoji;
  while(true)
    {
      switch(izbornik())
	{
	case 1:
	  cstudent_element = new cstudent;
	  cstudent_element->upis();
	  polje_studenata.push_back(cstudent_element);
	  break;
	case 2:
	  for( int i = 0; i < polje_studenata.size(); ++i )
	    polje_studenata.at(i)->ispis(); 
	  break;
	case 3:
	  cprijava_element = new cprijava;
	  cprijava_element->upis();
	  
	  // onemoguci dodavanje prijave u listu ako student ne postoji
	  student_ne_postoji = true;
	  for ( int i = 0; i < polje_studenata.size(); ++i )
	      if ( cprijava_element->mat_broj == polje_studenata.at(i)->mat_broj )
		student_ne_postoji = false;

	  if(!student_ne_postoji)
	    {
	      polje_prijava.push_back(cprijava_element);
	      zapisi_prijave_u_datoteku(polje_prijava);
	    }
	  break;
	case 4:
	  for( int i = 0; i < polje_prijava.size(); ++i )
	    polje_prijava.at(i)->ispis();
	  break;
	case 5:
	  long long mat_broj_studenta;
	  cout <<"Maticni broj studenta po kojem trazimo prijave: "; cin >> mat_broj_studenta;
	  for ( int i = 0; i < polje_prijava.size(); ++i )
	    {
	      if ( polje_prijava.at(i)->mat_broj == mat_broj_studenta )
		{
		  polje_prijava.at(i)->ispis();
		}
	    }
	  break;
	case 6:
	  int broj_prijava;
	  for ( int i = 0; i < polje_studenata.size(); ++i)
	    {
	      broj_prijava = 0;
	      polje_studenata.at(i)->ispis(); // ispis podatke za tog studenta
	      for ( int j = 0; j < polje_prijava.size(); ++j) // broji koliko prijava ima taj student
		{
		  if( polje_studenata.at(i)->mat_broj == polje_prijava.at(j)->mat_broj )
		    broj_prijava++;
		}
	      cout << "Ukupan broj prijava: " << broj_prijava << endl;
	    }
	  break;
	case 9:
	  return 0;
	}
    }
  return 0;
}