Advertisement
Guest User

Untitled

a guest
Jan 20th, 2017
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.82 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3.  
  4.  
  5. using namespace std;
  6.  
  7.  
  8. class cpredmeti_zapis{
  9. public:
  10.     int sifra;
  11.     char pred[20];
  12.     char smjer[20];
  13.     cpredmeti_zapis(){
  14.         sifra=-1;
  15.         pred[0]='\0';
  16.         smjer[0]='\0';
  17.     }
  18.     void unos(){
  19.         cout<<"Sifra predmeta: ";
  20.         cin>>sifra;
  21.         cout<<"Naziv predmeta: ";
  22.         cin.ignore();
  23.         cin.getline(pred, 20);
  24.         cout<<"Naziv smjera: ";
  25.         cin.getline(smjer, 20);
  26.     }
  27.     void ispis(){
  28.         cout<<"Sifra predmeta: "<<sifra<<endl<<"Naziv predmeta: "<<pred<<endl<<"Naziv smjera: "<<smjer<<endl<<"--------------------"<<endl;
  29.     }
  30. };
  31.  
  32.  
  33. class cpredmeti{
  34. public:
  35.     static int brojac;
  36.     cpredmeti_zapis zapis;
  37.     cpredmeti *next;
  38.     cpredmeti *prev;
  39.     cpredmeti(){
  40.         next=NULL;
  41.         prev=NULL;
  42.         brojac++;
  43.     }
  44.     cpredmeti *unos(){
  45.         cpredmeti *last=this;
  46.         while(last->next) last=last->next;
  47.         cpredmeti *novi;
  48.         novi=new cpredmeti;
  49.         last->next=novi;
  50.         novi->prev=last;
  51.         novi->zapis.unos();
  52.         return novi;
  53.     }
  54.     int ispis(char smjer[] = "*"){
  55.         int c=0;
  56.         bool pom=false;
  57.         cpredmeti *first=this;
  58.         while(first->prev) first=first->prev;
  59.         for (; first->next; (pom?(cout<<"Pokazivac na sljedeci element u listi: 0x"<<first->next->next<<endl):cout) && (++c) && (first=first->next) && !(pom=false))
  60.             if((!strcmp(smjer, "*") || !strcmp(smjer, (first->next->zapis).smjer)) && (pom=true)) (first->next->zapis).ispis();
  61.         return c;
  62.     }
  63.     cpredmeti *trazi(int sifra){
  64.         cpredmeti *first=this;
  65.         while(first->prev) first=first->prev;
  66.         for(;first->next;first=first->next)
  67.             if((first->next->zapis).sifra==sifra)
  68.                 return first->next;
  69.         return NULL;
  70.     }
  71. };
  72. class cprijave_zapis{
  73. public:
  74.     int sifra_prijave;
  75.     int sifra_predmeta;
  76.     char mat_br[11];
  77.     char rok[20];
  78.     cprijave_zapis(){
  79.         sifra_prijave=-1;
  80.         sifra_predmeta=-1;
  81.         mat_br[0]='\0';
  82.         rok[0]='\0';
  83.         cout<<"Konstruktor\n";
  84.     }
  85.     void unos(){
  86.         cout<<"Sifra prijave: ";
  87.         cin>>sifra_prijave;
  88.         cout<<"Sifra predmeta: ";
  89.         cin>>sifra_predmeta;
  90.         cout<<"Maticni broj: ";
  91.         cin.ignore();
  92.         cin.getline(mat_br, 11);
  93.         cout<<"Rok: ";
  94.         cin.getline(rok, 20);
  95.     }
  96.     void ispis(){
  97.         cout<<"Sifra prijave: "<<sifra_prijave<<endl<<"Sifra predmeta: "<<sifra_predmeta<<endl<<"mat_br : "<<mat_br<<endl<<"Rok: "<<rok<<endl<<"--------------------"<<endl;
  98.     }
  99. };
  100. class cprijave{
  101. public:
  102.     static int brojac;
  103.     cprijave_zapis *zapis;
  104.     cprijave *next;
  105.     cprijave(){
  106.         cout<<"Konstruktor."<<endl;
  107.         zapis=new cprijave_zapis;
  108.         next=NULL;
  109.         brojac++;
  110.     }
  111.     cprijave *unos(){
  112.         cprijave *last=this;
  113.         while(last->next) last=last->next;
  114.         cprijave *novi=new cprijave;
  115.         last->next=novi;
  116.         novi->zapis->unos();
  117.         return novi;
  118.     }
  119.     void ispis(cpredmeti *predmeti){
  120.         for(cprijave *last=this; last->next; cout<<(predmeti->trazi(last->next->zapis->sifra_predmeta)->zapis).smjer <<endl && (last=last->next))
  121.             last->next->zapis->ispis();
  122.     }
  123.     void ispis_mbr(cpredmeti *predmeti, char mbr[]){
  124.         for(cprijave *last=this; last->next; cout<<(predmeti->trazi(last->next->zapis->sifra_predmeta)->zapis).smjer <<endl && (last=last->next))
  125.             if(strcmp(last->next->zapis->mat_br, mbr)==0) last->next->zapis->ispis();
  126.     }
  127. };
  128.  
  129. int cpredmeti::brojac=0;
  130. int cprijave::brojac=0;
  131.  
  132. int status(int counter, char ime[]){
  133.     if(!counter && cout<<"\n0-glava liste "<<ime<<" nije alocirana\n") return 0;
  134.     if(counter==1 && cout<<"1-lista "<<ime<<" je prazna\n") return 1;
  135.     cout<<"2-lista "<<ime<<" sadrzi "<<counter-1<<" "<<ime<<endl;
  136.     return 2;
  137. }
  138. int main(){
  139.     int izbor, pom;
  140.     char smjer[20];
  141.     char mbr[11];
  142.     cpredmeti *predmeti=NULL;
  143.     cprijave *prijave=NULL;
  144.     cprijave *kraj=NULL;
  145.     do{
  146.         cout<<"1. Upis predmeta\n2. Popis predmeta po smjeru\n3. Unos / ispis prijava\n4.mog\n vas izbor?";
  147.         cin>>izbor;
  148.         switch(izbor){
  149.             case 1:
  150.                 if(!status(cpredmeti::brojac, "predmeta") && (predmeti=new cpredmeti)) status(cpredmeti::brojac, "predmeta");
  151.                 predmeti->unos();
  152.                 predmeti->ispis();
  153.                 break;
  154.             case 2:
  155.                 if(!status(cpredmeti::brojac, "predmeta")) break;
  156.                 cout<<"Naziv smjera: ";
  157.                 cin.ignore();
  158.                 cin.getline(smjer, 20);
  159.                 pom=predmeti->ispis(smjer);
  160.                 cout<<"Ukupan broj predmeta na popisu: "<<pom<<endl;
  161.                 break;
  162.             case 3:
  163.                 if(status(cpredmeti::brojac, "predmeta")!=2 && (status(cprijave::brojac, "prijava") || cout<<"Unos prijava nije dopusten"<<endl)) break;
  164.                 if(!status(cprijave::brojac, "prijava") && (prijave=new cprijave))
  165.                     status(cprijave::brojac, "prijava");
  166.                 kraj=prijave->unos();
  167.                 while(!predmeti->trazi(kraj->zapis->sifra_predmeta) && cout<<"Ponovni upis sifre predmeta: " && (cin>>pom))
  168.                     kraj->zapis->sifra_predmeta=pom;
  169.                 prijave->ispis(predmeti);
  170.                 break;
  171.             case 4:
  172.                 cout<<"ukupan broj prijava: "<<cprijave::brojac-1<<endl;
  173.                 cout<<"Maticni broj? ";
  174.                 cin.ignore();
  175.                 cin.getline(mbr, 11);
  176.                 prijave->ispis_mbr(predmeti, mbr);
  177.                 break;
  178.         }
  179.     }while(izbor!=9);
  180.     system("pause");
  181.     return 0;
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement