Advertisement
Lauda

Untitled

Dec 6th, 2012
100
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 10.91 KB | None | 0 0
  1. // DINSTRING:
  2. #ifndef DSTRING_HPP
  3. #define DSTRING_HPP
  4. #include <iostream>
  5. using namespace std;
  6.  
  7. class DinString {
  8. private:
  9.         int duzina;
  10.         char *text;
  11. public:
  12.         DinString(){ duzina=0; text=NULL; }
  13.         DinString(const char[]);
  14.         DinString(const DinString&);
  15.         ~DinString() { delete[] text; }
  16.         char& operator [](int);
  17.         char operator [](int) const;
  18.         DinString& operator =(const DinString&);
  19.         DinString& operator +=(const DinString&);
  20.         friend bool operator ==(const DinString &,const DinString&);
  21.         friend bool operator !=(const DinString &,const DinString&);
  22.         friend DinString operator +(const DinString &,const DinString&);
  23.         friend ostream& operator <<(ostream &out, const DinString &s);
  24.         int length()const{ return duzina; }
  25. };
  26.  
  27. #endif
  28.  
  29. // LIST:
  30. #ifndef LIST_DEF
  31. #define LIST_DEF
  32.  
  33. #include <stdlib.h>
  34. #include <iostream>
  35. using namespace std;
  36.  
  37. template <class T>
  38. class List{
  39.     private:
  40.         struct listEl{
  41.             T content;
  42.             struct listEl *next;
  43.         };
  44.         listEl *head;
  45.         listEl *tail;
  46.         int noEl;
  47.     public:
  48.         List(){
  49.             head=tail=NULL;
  50.             noEl=0;
  51.         }
  52.         List(const List<T>&);
  53.         List<T>& operator=(const List<T>&);
  54.         virtual ~List();
  55.         int getH() const { return (int)head; }
  56.         int getT() const { return (int)tail; }
  57.         int size() const {return noEl;}
  58.         bool empty() const {return head==NULL?1:0;}
  59.         bool add(int, const T&);
  60.         bool remove(int);
  61.         bool read(int, T&)const;
  62.         void clear();
  63.  
  64. };
  65.  
  66. template <class T>
  67. ostream& operator<<(ostream & out, const List<T> &l){
  68.     out<<endl;
  69.     out<<"--------"<<endl;
  70.     for(int i=1;i<=l.size();i++){
  71.         if(i!=1) out<<", ";
  72.         T res;
  73.         l.read(i,res);
  74.         out<<res;
  75.     }
  76.     out<<endl<<"--------"<<endl;
  77.     return out;
  78. }
  79.  
  80. template <class T>
  81. List<T>::List(const List<T> &l){
  82.     head=NULL;
  83.     tail=NULL;
  84.     noEl=0;
  85.     for(int i=1;i<=l.noEl;i++){
  86.         T res;
  87.         if(l.read(i,res))
  88.             add(i,res);
  89.     }
  90. }
  91.  
  92. template <class T>
  93. List<T>& List<T>::operator=(const List<T> &l){
  94.     if(this!=&l){
  95.         clear();
  96.         head=NULL;
  97.         tail=NULL;
  98.         noEl=0;
  99.         for(int i=1;i<=l.noEl;i++){
  100.             T res;
  101.             if(l.read(i,res))
  102.                 add(i,res);
  103.         }
  104.     }
  105.     return *this;
  106. }
  107.  
  108. template <class T>
  109. List<T>::~List(){
  110.     while(!empty())
  111.         remove(1);
  112. }
  113.  
  114. template <class T>
  115. bool List<T>::add(int n, const T& newContent){
  116.     if(n<1 || n>noEl+1)
  117.         return false;
  118.     else{
  119.         listEl *newEl=new listEl;
  120.         if(newEl==NULL)
  121.             return false;
  122.         else{
  123.             newEl->content=newContent;
  124.             if(n==1){
  125.                 newEl->next=head;
  126.                 head=newEl;
  127.             }else if(n==noEl+1){
  128.                 newEl->next=NULL;
  129.                 tail->next=newEl;
  130.             }else{
  131.                 listEl *temp=head;
  132.                 for(int i=2;i<n;i++)
  133.                     temp=temp->next;
  134.                 newEl->next=temp->next;
  135.                 temp->next=newEl;
  136.             }
  137.             noEl++;
  138.             if(newEl->next==NULL)
  139.                 tail=newEl;
  140.             return true;
  141.         }
  142.     }
  143. }
  144.  
  145. template <class T>
  146. bool List<T>::remove(int n){
  147.     if(n<1 || n>noEl)
  148.         return false;
  149.     else{
  150.         if(n==1){
  151.             listEl *del=head;
  152.             head=head->next;
  153.             if(tail==del)
  154.                 tail=NULL;
  155.             delete del;
  156.             noEl--;
  157.         } else {
  158.             listEl *temp=head;
  159.             for(int i=2;i<n;i++)
  160.                 temp=temp->next;
  161.             listEl *del=temp->next;
  162.             temp->next=del->next;
  163.             if(tail==del)
  164.                 tail=temp;
  165.             delete del;
  166.             noEl--;
  167.         }
  168.         return true;
  169.     }
  170. }
  171.  
  172. template <class T>
  173. bool List<T>::read(int n,T& retVal)const{
  174.     if(n<1 || n>noEl)
  175.         return false;
  176.     else{
  177.         if(n==1)
  178.             retVal=head->content;
  179.         else if(n==noEl)
  180.             retVal=tail->content;
  181.         else{
  182.             listEl *temp=head;
  183.             for(int i=1;i<n;i++)
  184.                 temp=temp->next;
  185.             retVal=temp->content;
  186.         }
  187.         return true;
  188.     }
  189. }
  190.  
  191. template <class T>
  192. void List<T>::clear(){
  193.     while(!empty())
  194.         remove(1);
  195. }
  196.  
  197. #endif
  198.  
  199. // SPISAK:
  200. #ifndef SPISAK_HPP_INCLUDED
  201. #define SPISAK_HPP_INCLUDED
  202.  
  203. #include "student.hpp"
  204. #include "list.hpp"
  205.  
  206. class SpisakStudenata
  207. {
  208.     private:
  209.         DinString nazivPredmeta;
  210.         DinString datumPolaganja;
  211.         List<Student> lista;
  212.  
  213.     public:
  214.         SpisakStudenata() {}
  215.         void setNaziv(const DinString &ds)
  216.         {
  217.             nazivPredmeta = ds;
  218.         }
  219.         void setDatumPolaganja(const DinString &ds)
  220.         {
  221.             datumPolaganja = ds;
  222.         }
  223.         void insertStudent();
  224.         void sortPoOceni();
  225.         void sortPoIndeksu();
  226.         void printSpisak() const;
  227.  
  228. };
  229.  
  230. #endif // SPISAK_HPP_INCLUDED
  231.  
  232. // STUDENT:
  233. #ifndef STUDENT_HPP_INCLUDED
  234. #define STUDENT_HPP_INCLUDED
  235.  
  236. #include "dinstring.hpp"
  237.  
  238. class Student
  239. {
  240.     protected:
  241.         int brojIndeksa;
  242.         DinString ime;
  243.         DinString prezime;
  244.         int ocena;
  245.  
  246.     public:
  247.         Student (int i=0, const char *s1 = "", const char *s2 = "", int oc = 5) : brojIndeksa(i), ime(s1), prezime(s2), ocena(oc) {}
  248.         Student (int i, const DinString &ds1, const DinString &ds2, int oc) : brojIndeksa(i), ime(ds1), prezime(ds2), ocena(oc) {}
  249.         Student (const Student &s) : brojIndeksa(s.brojIndeksa), ime(s.ime), prezime(s.prezime), ocena(s.ocena) {}
  250.         ~Student() {}
  251.  
  252.         void setBrojIndeksa(int bri)
  253.         {
  254.             brojIndeksa = bri;
  255.         }
  256.         void setIme(const DinString &ds)
  257.         {
  258.             ime = ds;
  259.         }
  260.         void setPrezime(const DinString &ds)
  261.         {
  262.             prezime = ds;
  263.         }
  264.         void setOcena(int x)
  265.         {
  266.             ocena = x;
  267.         }
  268.         int getBrojIndeksa() const
  269.         {
  270.             return brojIndeksa;
  271.         }
  272.         int getOcena() const
  273.         {
  274.             return ocena;
  275.         }
  276.  
  277.         Student& operator=(const Student&);
  278.         friend ostream& operator<<(ostream&, const Student&);
  279.  
  280. };
  281.  
  282.  
  283. #endif // STUDENT_HPP_INCLUDED
  284.  
  285. // DINSTRING.CPp
  286. #include "dinstring.hpp"
  287.  
  288. DinString::DinString(const char  ulazniStr[]) {
  289.     duzina=0;
  290.     while(ulazniStr[duzina]!='\0'){
  291.         duzina++;
  292.     }
  293.     text=new char[duzina+1];
  294.     for (int i=0;i<duzina;i++)
  295.         text[i]=ulazniStr[i];
  296.     text[duzina]='\0';
  297. }
  298.  
  299. DinString::DinString(const DinString& ds) {
  300.     duzina=ds.duzina;
  301.     text=new char[duzina+1];
  302.     for (int i=0;i<duzina;i++)
  303.         text[i]=ds.text[i];
  304.     text[duzina]='\0';
  305. }
  306.  
  307. char& DinString::operator [](int i)  { return text[i]; }
  308.  
  309. char DinString::operator [](int i) const { return text[i]; }
  310.  
  311. DinString& DinString:: operator =(const DinString& ds) {
  312.     if (this!=&ds){
  313.         delete[] text;
  314.         duzina=ds.duzina;
  315.         text=new char[duzina+1];
  316.         for (int i=0;i<duzina;i++)
  317.             text[i]=ds.text[i];
  318.         text[duzina]='\0';
  319.     }
  320.     return *this;
  321. }
  322.  
  323. DinString& DinString::operator +=(const DinString& ds) {
  324.     int i;
  325.     char *tempText=new char[duzina+ds.duzina+1];
  326.     for (i=0;i<duzina;i++)
  327.         tempText[i]=text[i];
  328.  
  329.     for (i=0;i<ds.duzina;i++)
  330.         tempText[duzina+i]=ds.text[i];
  331.  
  332.     tempText[duzina+ds.duzina]='\0';
  333.     duzina+=ds.duzina;
  334.     delete []text;
  335.     text=tempText;
  336.     return *this;
  337. }
  338.  
  339. bool operator ==(const DinString& ds1,const DinString& ds2) {
  340.     if (ds1.duzina!=ds2.duzina)
  341.         return false;
  342.     for (int i=0;i<ds1.duzina;i++)
  343.         if (ds1.text[i]!=ds2.text[i]) return false;
  344.     return true;
  345. }
  346.  
  347. bool operator !=(const DinString& ds1,const DinString& ds2) {
  348.     if (ds1.duzina!=ds2.duzina)
  349.         return true;
  350.     for (int i=0;i<ds1.duzina;i++)
  351.         if (ds1.text[i]!=ds2.text[i]) return true;
  352.     return false;
  353. }
  354.  
  355. DinString operator +(const DinString& ds1,const DinString& ds2) {
  356.     DinString temp;
  357.     temp.duzina=ds1.duzina+ds2.duzina;
  358.     temp.text=new char[temp.duzina+1];
  359.     int i;
  360.     for(i=0;i<ds1.duzina;i++)
  361.         temp.text[i]=ds1.text[i];
  362.     for(int j=0;j<ds2.duzina;j++)
  363.         temp.text[i+j]=ds2.text[j];
  364.     temp.text[temp.duzina]='\0';
  365.     return temp;
  366. }
  367.  
  368. ostream& operator <<(ostream &out, const DinString &s) {
  369.     if(s.duzina>0)
  370.         out<<s.text;
  371.     return out;
  372. }
  373.  
  374. // MAIN.CPP
  375. #include "spisak.hpp"
  376.  
  377. int main()
  378. {
  379.     char odg = 'd';
  380.     char s[100];
  381.     SpisakStudenata spisak;
  382.     cout << endl << endl << endl;
  383.     cout << "Unesite datum polaganja ispita: ";
  384.     cin >> s;
  385.     spisak.setDatumPolaganja(s);
  386.  
  387.     cout << "Unesite naziv ispita: ";
  388.     cin >> s;
  389.     spisak.setNaziv(s);
  390.  
  391.     cout << "Unesite podatke o studentima..." << endl;
  392.     while ((odg == 'd') || (odg = 'D'))
  393.     {
  394.         spisak.insertStudent();
  395.         cout << "Da li zelite jos da unosite podatke? [D/N] ";
  396.         cin >> odg;
  397.     }
  398.  
  399.     cout << "Da li da spisak bude sortiran po ocenama? [D/N] ";
  400.     cin >> odg;
  401.     if ((odg = 'd') || (odg = 'D'))
  402.         spisak.sortPoOceni();
  403.     else
  404.     {
  405.         cout << "Da li da spisak bude sortiran po broju indeksa? [D/N] ";
  406.         cin >> odg;
  407.  
  408.         if ((odg == 'd') || (odg = 'D'))
  409.             spisak.sortPoIndeksu();
  410.     }
  411.     cout << endl << endl << endl;
  412.  
  413.     spisak.printSpisak();
  414.  
  415.     return 0;
  416. }
  417.  
  418.  
  419. // SPISAK.CPP
  420. #include "spisak.hpp"
  421.  
  422. void SpisakStudenata :: insertStudent()
  423. {
  424.     Student st;
  425.     int x;
  426.     char s[100];
  427.  
  428.     cout << "Unesite broj indeksa: ";
  429.     cin >> x;
  430.     st.setBrojIndeksa(x);
  431.  
  432.     cout << "Unesite ime studenta: ";
  433.     cin >> s;
  434.     st.setIme(s);
  435.  
  436.     cout << "Unesite prezime studenta: ";
  437.     cin >> s;
  438.     st.setPrezime(s);
  439.  
  440.     cout << "Unesite ocenu: ";
  441.     cin >> x;
  442.     st.setOcena(x);
  443.  
  444.     cout << "*****************************************************" << endl;
  445.     cout << st << endl;
  446.     cout << "*****************************************************" << endl;
  447.  
  448.     lista.add(1, st);
  449. }
  450.  
  451. void SpisakStudenata :: sortPoOceni()
  452. {
  453.     Student s1, s2;
  454.  
  455.     for (int i = 1; i<=lista.size()-1; i++)
  456.         for (int j=i+1; j<=lista.size(); j++)
  457.         {
  458.             lista.read(i, s1);
  459.             lista.read(j, s2);
  460.             if (s1.getOcena() < s2.getOcena())
  461.             {
  462.                 lista.remove(i);
  463.                 lista.add(i, s2);
  464.                 lista.remove(j);
  465.                 lista.add(j, s1);
  466.             }
  467.         }
  468. }
  469.  
  470. void SpisakStudenata :: sortPoIndeksu()
  471. {
  472.     Student s1, s2;
  473.  
  474.     for (int i=1; i<=lista.size()-1; i++)
  475.         for (int j=i+1; j<=lista.size(); j++)
  476.         {
  477.             lista.read(i, s1);
  478.             lista.read(j, s2);
  479.             if (s1.getBrojIndeksa() < s2.getBrojIndeksa())
  480.             {
  481.                 lista.remove(i);
  482.                 lista.add(i, s2);
  483.                 lista.remove(j);
  484.                 lista.add(j, s1);
  485.             }
  486.         }
  487. }
  488.  
  489. void SpisakStudenata :: printSpisak() const
  490. {
  491.     cout << "Datum: " << datumPolaganja << endl;
  492.     cout << "Predmet: " << nazivPredmeta << endl;
  493.     cout << "---------------------------- REZULTATI ISPITA ----------------------------" << endl;
  494.     Student st;
  495.  
  496.     for (int i=1; i<=lista.size(); i++)
  497.     {
  498.         lista.read(i, st);
  499.         cout << st << endl;
  500.     }
  501.     cout << "--------------------------------------------------------------------------" << endl;
  502. }
  503.  
  504.  
  505. // STUDENT.CPP
  506.  
  507. #include "student.hpp"
  508.  
  509. Student& Student :: operator=(const Student &s)
  510. {
  511.     brojIndeksa = s.brojIndeksa;
  512.     ime = s.ime;
  513.     prezime = s.prezime;
  514.     ocena = s.ocena;
  515.     return *this;
  516. }
  517.  
  518. ostream& operator<<(ostream &out, const Student &s)
  519. {
  520.     out << "\t" << s.brojIndeksa;
  521.     out << "\t" << s.ime;
  522.     out << "\t" << s.prezime;
  523.     out << "\t" << s.ocena;
  524.  
  525.     return out;
  526. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement