Skripta Programiranje

You might also like

Download as pdf or txt
Download as pdf or txt
You are on page 1of 25

Programiranje 2 Skripta Vincijanovi Danijel

Sadraj
1.

VEZANA LISTA .......................................................... 1


1.2.
1.3.
1.4.
1.5.
1.6.

2.

DVOSTRUKO VEZANA LISTA ................................................ 3


2.1.
2.2.
2.3.
2.4.
2.5.

3.

DODAJ ELEMENT NA KRAJ................................................ 3


DODAJ ELEMENT NA POCETAK ............................................. 3
ISPIS OD POETKA.................................................... 3
ISPIS OD KRAJA ..................................................... 3
DEALOKACIJA........................................................ 3

DATOTEKE .............................................................. 5
3.1.
3.2.
3.3.
3.4.

4.

ISPISI SVE ELEMENTE ................................................. 1


PRETRAZI LISTU ..................................................... 1
BRISI ELEMENT ...................................................... 1
DEALOKACIJA LISTE ................................................... 1
SORTIRANJE VEZANE LISTE PREMA MATICNOM BROJU ............................. 3

KREIRANJE DATOTEKE .................................................. 5


UNOS PODATAKA U DATOTEKU ............................................. 5
ISPIS SVIH PODATAKA ................................................. 5
ISPIS ZADANIH PODATAKA ............................................... 5

VEZANA LISTA OBJEKATA (POMOU KLASE) .................................. 7


4.1.
4.2.
4.3.
4.4.
4.5.

DODAVANJE ELEMENTA NA KRAJ LISTE ....................................... 7


ISPIS SVIH ELEMENATA ................................................ 7
PRETRAZIVANJE LISTE ................................................. 7
BRISANJE ELEMENTA LISTE .............................................. 7
SORTIRANJE LISTE UZLAZNO ............................................. 7

5.

PRIMJER (VEZANA / DATOTEKA) ........................................... 9

6.

PRIMJER (DATOTEKA / VEZANA) .......................................... 11

7.

PRIMJER (DATOTEKA / DINAMICKO) ....................................... 14

8.

PRIMJER (DINAMIKO / DATOTEKA) ....................................... 17

9.

PRIMJER (DINAMIKO / VEZANA) ......................................... 19

10. PRIMJER (VEZANA / DINAMIKO) ......................................... 22

Programiranje 2 Skripta Vincijanovi Danijel

1.

Vezana lista

1.1.

Dodaj element

1.2.

Ispisi sve elemente

1.3.

Pretrazi listu

1.4.

Brisi element

1.5.

Dealokacija liste

#include <iostream>
#include "biblioteka_vrijeme.cc"
using namespace std;
struct tstudent{
int mat_br;
char prez_ime[35];
int god_stu;
tstudent *sljedeci;
};//struct
void dodaj_element(tstudent *lista){ // dodaje element na kraj liste
tstudent *novi,*zadnji;
zadnji = lista;
while (zadnji->sljedeci)
zadnji = zadnji->sljedeci;
// pronalaenje zadnjeg elementa u listi
novi = new tstudent;
// alokacija novog elementa liste
zadnji -> sljedeci = novi;
// povezivanje zadnje elementa u listi s novim elementom
novi -> sljedeci = NULL;
// novi je sada zadnji element u listi
cout << "Maticni broj: ";
cin >> novi -> mat_br;
cout << "Prezime i ime: ";
unos(novi->prez_ime);
// funkcija iz biblioteke
cout << "Godina studija: ";
cin >> novi -> god_stu;
};//dodaj_element
void ispisi_sve_elemente(tstudent *lista){ // ispis svih elemenata liste
tstudent *tekuci = lista -> sljedeci; // tekuci se usmjerava na poetni element za ispis
while (tekuci){
cout << "adresa elementa = " << int((size_t)tekuci) << endl;
cout << "Maticni broj: " << tekuci -> mat_br << endl;
cout << "Prezime i ime: " << tekuci -> prez_ime << endl;
cout << "Godina studija: " << tekuci -> god_stu << endl;
cout << "Adresa sljedeceg elementa: " << int ((size_t)tekuci -> sljedeci) << endl;
cout << "---------------------" << endl;
tekuci = tekuci -> sljedeci;
// kretanje kroz listu
}; // while
};//ispisi_sve_elemente
void pretrazi_listu(tstudent *lista,int mat_br){ //pretraivanje liste prema matinom broju
tstudent *tekuci = lista -> sljedeci; // tekuci se usmjerava na poetni element za ispis
while (tekuci){
if (tekuci -> mat_br == mat_br){
cout << "Maticni broj: " << tekuci -> mat_br << endl;
cout << "Prezime i ime: " << tekuci -> prez_ime << endl;
cout << "Godina studija: " << tekuci -> god_stu << endl;
cout << "---------------------" << endl;
return; // izlaz iz petlje i potprograma
};//if
tekuci = tekuci -> sljedeci;
// kretanje kroz listu
}; // while
cout << "Element nije pronadjen!" << endl;
};//pretrazi_listu
void brisi_element(tstudent *lista,int mat_br){ //brisanje elementa liste prema matinom broju

Programiranje 2 Skripta Vincijanovi Danijel

tstudent *brisi = lista -> sljedeci, *prethodni = lista;


while (brisi){
if (brisi -> mat_br == mat_br){
prethodni -> sljedeci = brisi -> sljedeci;
delete brisi;
cout << "Element je izbrisan iz vezane liste!" << endl;
return; // izlaz iz petlje i potprograma
}; // if
prethodni = brisi;
brisi = brisi->sljedeci;
}; // while
cout << "Element za brisanje nije pronadjen!" << endl;
};//brisi element
tstudent *dealokacija_liste(tstudent *lista){ //dealokacija liste
tstudent *tekuci,*prethodni;
prethodni=lista;
tekuci=lista->sljedeci;
while (tekuci){
delete prethodni;
prethodni=tekuci;
tekuci=tekuci->sljedeci;
}//while
delete prethodni;
return NULL;
};//dealokacija_liste
int main(){
int izbor,mat_br;
tstudent *lista = new tstudent; // alokacija glave liste
lista -> sljedeci = NULL;
// kraj liste
do{
cout << "1. dodavanje novog elementa na kraj liste" << endl;
cout << "2. ispis svih elemenata liste" << endl;
cout << "3. pretrazivanje liste prema maticnom broju" << endl;
cout << "4. brisanje elementa liste prema maticnom broju" << endl;
cout << "5. dealokacija liste i kreiranje nove glave liste" << endl;
cout << "9. dealokacija liste i izlaz" << endl;
cin >> izbor;
switch (izbor){
case 1:dodaj_element(lista);break;
case 2:ispisi_sve_elemente(lista);break;
case 3:
cout << "Maticni broj: ";
cin >> mat_br;
pretrazi_listu(lista,mat_br);break;
case 4:
cout << "Maticni broj: ";
cin >> mat_br;
brisi_element(lista,mat_br);break;
case 5:
lista=dealokacija_liste(lista);
lista = new tstudent;
// alokacija nove glave liste
lista -> sljedeci = NULL;
// kraj liste
break;
case 9:lista=dealokacija_liste(lista);break;
};
cout << endl;
} while (izbor!=9);
cout << int((size_t)lista); // NULL

Programiranje 2 Skripta Vincijanovi Danijel

1.6.

Sortiranje vezane liste prema maticnom broju

void sortiraj_listu(tstudent *lista){ //sortiranje liste uzlazno po matinom broju


tstudent *prethodni,*tekuci,*sljedeci;
int indikator;
do{
indikator = 0;
tekuci=lista->sljedeci;
prethodni=lista;
while (tekuci->sljedeci){
sljedeci=tekuci->sljedeci;
if (tekuci->mat_br > sljedeci->mat_br){
prethodni->sljedeci=sljedeci;
tekuci->sljedeci=sljedeci->sljedeci;
sljedeci->sljedeci=tekuci;
indikator=1;
}//if
prethodni=prethodni->sljedeci;
tekuci=prethodni->sljedeci;
}//while
} while (indikator==1);
}; // sortiraj listu

2.

Dvostruko vezana lista

2.1.

Dodaj element na kraj

2.2.

Dodaj element na pocetak

2.3.

Ispis od poetka

2.4.

Ispis od kraja

2.5.

Dealokacija

#include <iostream>
using namespace std;
struct telement{
int broj;
telement *sljedeci;
telement *prethodni;
};//struct
void dodaj_element_na_kraj(telement *lista){
telement *novi,*zadnji;
zadnji = lista;
while (zadnji->sljedeci)
//traenje zadnjeg elementa u listi
zadnji=zadnji->sljedeci;
novi = new telement;
novi->prethodni=zadnji;
novi->sljedeci=NULL;
zadnji->sljedeci=novi;
cout << "Broj = ";
cin >> novi -> broj;
};//dodaj_element_na_kraj
void dodaj_element_na_pocetak(telement *lista){
if (!lista->sljedeci){ // provjera da lista nije prazna
dodaj_element_na_kraj(lista);
return;
};
telement *novi,*sljedeci;
sljedeci = lista->sljedeci;

Programiranje 2 Skripta Vincijanovi Danijel

novi = new telement;


novi->prethodni=lista; //povezivanje novog
novi->sljedeci=sljedeci;
lista->sljedeci=novi; //stari 'prihvaaju' novog
sljedeci->prethodni=novi;
cout << "Broj = ";
cin >> novi -> broj;
};//dodaj_element_na_kraj
void ispis_od_pocetka(telement *lista){
telement *tekuci = lista->sljedeci;
while (tekuci){
cout << tekuci -> broj << ", ";
tekuci = tekuci -> sljedeci;
};//while
cout << "NULL" << endl;
};//ispis_od_pocetka
void ispis_od_kraja(telement *lista){
telement *tekuci = lista->sljedeci;
while (tekuci->sljedeci)
tekuci = tekuci -> sljedeci; // traenje zadnjeg elementa u listi
while (tekuci!=lista){
cout << tekuci -> broj << ", ";
tekuci = tekuci -> prethodni;
};//while
cout << "glava" << endl;
};//ispis_od_kraja
telement *dealokacija_liste(telement *lista){ //dealokacija liste
telement *tekuci,*prethodni;
prethodni=lista;
tekuci=lista->sljedeci;
while (tekuci){
delete prethodni;
prethodni=tekuci;
tekuci=tekuci->sljedeci;
}//while
delete prethodni;
return NULL;
};//dealokacija_liste
int main(){
int izbor;
telement *lista = new telement; // alokacija glave liste
lista -> sljedeci = NULL;
lista -> prethodni = NULL;
do{
cout << "1. dodavanje elementa na kraj liste" << endl;
cout << "2. dodavanje elementa na pocetak liste" << endl;
cout << "3. ispis svih elemenata liste od pocetka" << endl;
cout << "4. ispis svih elemenata liste od kraja" << endl;
cout << "9. dealokacija liste i izlaz iz programa" << endl;
cin >> izbor;
switch (izbor){
case 1: dodaj_element_na_kraj(lista);break;
case 2: dodaj_element_na_pocetak(lista);break;
case 3: ispis_od_pocetka(lista);break;
case 4: ispis_od_kraja(lista);break;
case 9:lista=dealokacija_liste(lista);break;
}//switch
} while(izbor!=9);
return 1;
}// main

Programiranje 2 Skripta Vincijanovi Danijel

3.

Datoteke

3.1.

Kreiranje datoteke

3.2.

Unos podataka u datoteku

3.3.

Ispis svih podataka

3.4.

Ispis zadanih podataka

#include <iostream>
#include <fstream>
using namespace std;
struct tstudent{
// tip zapisa koje sadri datoteka
int mat_br;
char prez_ime[35];
int g_stu;
};
tstudent student; // varijabla iji se upisuje/ita u/iz datoteke
fstream dat; // datoteni objekt
char naziv_datoteke[40]; // fiziko ime datoteke
void unos(char *znakovni_niz)
{
cin.getline(znakovni_niz, 150);
if (cin.gcount()==1)
cin.getline (znakovni_niz,150);
};
void kreiranje_datoteke(){
cout << "Unesite naziv datoteke u koju cete spremati podatke:";
cin >> naziv_datoteke;
dat.open(naziv_datoteke,ios::in | ios::binary);
if (!dat){
// ako datoteka ne postoji na disku
dat.open(naziv_datoteke,ios::out | ios::binary); // kreiranje datoteke
dat.close();dat.clear();
}
else{
cout << "Datoteka " << naziv_datoteke << " vec postoji na disku."<<endl;
dat.close();dat.clear();}
};
void unos_podataka_u_datoteku(){
char dalje;
dat.open(naziv_datoteke,ios::out | ios::ate | ios::in| ios::binary);
do{
cout << "Maticni broj:";
cin >> student.mat_br;
cout << "Prezime i ime:";
unos (student.prez_ime); // zbog problema s razmakom
cout << "Godina studija:";
cin >> student.g_stu;
dat.write((char *) &student,sizeof(student));
cout << "Dalje? (d/n)";
cin >> dalje;
} while (dalje=='d');
dat.close();dat.clear();
};
void ispis_podataka_o_svim_studentima(){
dat.open(naziv_datoteke,ios::in | ios::binary);
while (1){
dat.read((char *) &student,sizeof(student));
if (dat.eof()) break;
cout << "Maticni broj: " << student.mat_br << endl;
cout << "Prezime i ime: " << student.prez_ime << endl;
5

Programiranje 2 Skripta Vincijanovi Danijel

cout << "Godina studija: " << student.g_stu << endl;


}
dat.close();dat.clear();
};
void ispis_podataka_o_zadanom_studentu(int mb){
int brojac=0;
dat.open(naziv_datoteke,ios::in | ios::binary);
while (1){
dat.read((char *) &student,sizeof(student));
if (dat.eof()) break;
if (student.mat_br==mb){
cout << "Maticni broj: " << student.mat_br << endl;
cout << "Prezime i ime: " << student.prez_ime << endl;
cout << "Godina studija: " << student.g_stu << endl;
brojac++;
}
}
if (brojac==0)
cout << "Student s maticnim brojem " << mb << " nije nadjen u
datoteci."<<endl;
dat.close();dat.clear();
};
int main(){
int izbor,mbr;
do{ cout <<"Izaberite :" <<endl<<endl;
cout <<"1. Kreiranje datoteke"<<endl;
cout <<"2. Unos podataka u datoteku"<<endl;
cout <<"3. Ispis svih zapisa iz datoteke"<<endl;
cout <<"4. Ispis podataka o zadanom studentu"<<endl;
cout <<"9. Izlaz iz programa"<<endl;
cin >> izbor;
switch (izbor){
case 1:kreiranje_datoteke();break;
case 2:unos_podataka_u_datoteku();break;
case 3:ispis_podataka_o_svim_studentima();break;
case 4:cout << "Maticni broj studenta:"; cin >> mbr;
ispis_podataka_o_zadanom_studentu(mbr); break;
}
} while (izbor != 9);
return 1;
}

Programiranje 2 Skripta Vincijanovi Danijel

4.

Vezana lista objekata (pomou klase)

4.1.

Dodavanje elementa na kraj liste

4.2.

Ispis svih elemenata

4.3.

Pretrazivanje liste

4.4.

Brisanje elementa liste

4.5.

Sortiranje liste uzlazno

#include <iostream>
using namespace std;
class cstudent{
private: cstudent *sljedeci;
public:
//atributi
int mat_br;
char prez_ime[35];
int god_stu;
//metode
cstudent(){//konstruktor
sljedeci=NULL;
};//konstruktor
void dodaj_element(){ // dodaje element na kraj liste
cstudent *novi,*zadnji;
zadnji = this;
while (zadnji->sljedeci)
zadnji = zadnji->sljedeci;
// pronalaenje zadnjeg elementa u listi
novi = new cstudent;
// alokacija novog elementa liste
zadnji -> sljedeci = novi;
// povezivanje zadnjeg elementa u listi s novim
elementom
cout << "Maticni broj: "; cin >> novi -> mat_br;
cout << "Prezime i ime: "; cin >> novi -> prez_ime;
cout << "Godina studija: "; cin >> novi -> god_stu;
};//dodaj_element
void ispisi_sve_elemente(){ // ispis svih elemenata liste
cstudent *tekuci = this -> sljedeci; // tekuci se usmjerava na poetni element za ispis
while (tekuci){
cout << "Maticni broj: " << tekuci -> mat_br << endl;
cout << "Prezime i ime: " << tekuci -> prez_ime << endl;
cout << "Godina studija: " << tekuci -> god_stu << endl;
cout << "---------------------" << endl;
tekuci = tekuci -> sljedeci;
// kretanje kroz listu
}; // while
};//ispisi_sve_elemente
void pretrazi_listu(int mat_br){ //pretraivanje liste prema matinom broju
int nadjen=0;
cstudent *tekuci = this -> sljedeci; // tekuci se usmjerava na poetni element za ispis
while (tekuci){
if (tekuci -> mat_br == mat_br){
nadjen=1;
cout << "Maticni broj: " << tekuci -> mat_br << endl;
cout << "Prezime i ime: " << tekuci -> prez_ime << endl;
cout << "Godina studija: " << tekuci -> god_stu << endl;
cout << "---------------------" << endl;
break; // izlaz iz petlje
};//if
tekuci = tekuci -> sljedeci;
// kretanje kroz listu
}; // while
if (!nadjen) cout<<"Element nije pronadjen u listi!"<<endl;
};//pretrazi_listu
void brisi_element(int mat_br){ //brisanje elementa liste prema matinom broju
int nadjen=0;

Programiranje 2 Skripta Vincijanovi Danijel

cstudent *brisi = this -> sljedeci, *prethodni = this;


while (brisi){
if (brisi -> mat_br == mat_br){
nadjen=1;
prethodni -> sljedeci = brisi -> sljedeci;
delete brisi;
break; // izlaz iz petlje
}; // if
prethodni = brisi;
brisi = brisi->sljedeci;
}; // while
if (nadjen) cout << "Element je izbrisan iz liste!" << endl;
else cout << "Element nije pronadjen!" << endl;
};//brisi element
void sortiraj_listu(){ //sortiranje liste uzlazno po matinom broju
if (this->sljedeci==NULL) return; // izlaz ako je lista prazna
cstudent *prethodni,*tekuci,*sljedeci;
int indikator;
do{
indikator = 0;
tekuci=this->sljedeci;
prethodni=this;
while (tekuci->sljedeci){
sljedeci=tekuci->sljedeci;
if (tekuci->mat_br > sljedeci->mat_br){
prethodni->sljedeci=sljedeci;
tekuci->sljedeci=sljedeci->sljedeci;
sljedeci->sljedeci=tekuci;
indikator=1;
}//if
prethodni=prethodni->sljedeci;
tekuci=prethodni->sljedeci;
}//while
} while (indikator==1);
}; // sortiraj listu
cstudent *dealokacija_liste(){ //dealokacija liste
cstudent *tekuci,*prethodni;
prethodni=this;
tekuci=this->sljedeci;
while (tekuci){
delete prethodni;
prethodni=tekuci;
tekuci=tekuci->sljedeci;
}//while
delete prethodni;
return NULL;
};//dealokacija_liste
};//class
cstudent *lista;
int main(){
int izbor, mat_br;
lista=new cstudent; //alokacija glave liste
do{
cout << "1. dodavanje novog elementa na kraj liste" << endl;
cout << "2. ispis svih elemenata liste" << endl;
cout << "3. pretrazivanje liste prema maticnom broju" << endl;
cout << "4. brisanje elementa liste prema maticnom broju" << endl;
cout << "5. sortiranje liste prema maticnom broju uzlazno" << endl;
cout << "9. dealokacija liste i izlaz" << endl;
cin >> izbor;
switch (izbor){
case 1:lista->dodaj_element();break;
case 2:lista->ispisi_sve_elemente();break;
case 3:
cout << "Maticni broj: "; cin >> mat_br;
lista->pretrazi_listu(mat_br);break;
case 4:

Programiranje 2 Skripta Vincijanovi Danijel

cout << "Maticni broj: "; cin >> mat_br;


lista->brisi_element(mat_br);break;
case 5:lista->sortiraj_listu();break;
case 9:lista=lista->dealokacija_liste();break;
};
} while (izbor!=9);
}//main

5.

Primjer (vezana / datoteka)

#include<iostream>
#include<fstream>
using namespace std;
class cstudent{
private:
cstudent *sljedeci;
public:
int mat_br;
char prez_ime[40];
cstudent(){
sljedeci=NULL;
}; // konstruktor
void unos(){
cstudent *zadnji, *novi;
zadnji=this;
while (zadnji->sljedeci)
zadnji=zadnji->sljedeci;
novi = new cstudent;
zadnji->sljedeci=novi;
cout << "Maticni broj:";
cin >> novi -> mat_br;
cout << "Prezime i ime:";
cin >> novi->prez_ime;
}; // unos
void ispis(){
cstudent *tekuci=this->sljedeci;
while (tekuci){
cout << tekuci->mat_br << endl;
cout << tekuci->prez_ime<<endl;
tekuci=tekuci->sljedeci;
};
}; // ispis
int provjeri(int mb){
cstudent *tekuci=this->sljedeci;
while (tekuci){
if (tekuci->mat_br==mb) return 1;
tekuci=tekuci->sljedeci;
};
return 0;
}; // provjeri
void ukupno(){
int brojac=0;
cstudent *tekuci=this->sljedeci;
while (tekuci){
brojac++;
tekuci=tekuci->sljedeci;
};
cout << "Ukupan broj studenata = " << brojac << endl;
}; // ispis
void broj_prijava();
};//cstudent
fstream dat;
cstudent *student;
class cprijava{
public:
int sif_prij;
int mat_br;

Programiranje 2 Skripta Vincijanovi Danijel

char predmet[30];
char rok[20];
cprijava(){
dat.open("prijave.dat", ios::out);
dat.close();
dat.clear();
} // cprijava
void unos(){
dat.open("prijave.dat", ios::out|ios::app|ios::binary);
cout << "Sifra prijave:";
cin >> sif_prij;
do{
cout << "Maticni_broj:";
cin >> mat_br;
}while(student->provjeri(mat_br)==0);
cout << "Predmet:";
cin >> predmet;
cout << "Rok:";
cin >> rok;
dat.write((char *)this,sizeof(*this));
dat.close(); dat.clear();
}; // unos
void ispis(){
dat.open("prijave.dat", ios::in|ios::binary);
while(1){
dat.read ((char *)this,sizeof(*this));
if (dat.eof())break;
cout << sif_prij << endl;
cout << mat_br << endl;
cout << predmet << endl;
cout << rok << endl;
}
dat.close(); dat.clear();
}; // ispis
void ukupno(){
int brojac=0;
dat.open("prijave.dat", ios::in|ios::binary);
while(1){
dat.read ((char *)this,sizeof(*this));
if (dat.eof())break;
brojac++;
}
dat.close(); dat.clear();
cout << "Ukupan broj prijava = " << brojac << endl;
}; // ispis
void trazi(int mb){
dat.open("prijave.dat", ios::in|ios::binary);
while(1){
dat.read ((char *)this,sizeof(*this));
if (dat.eof())break;
if (mat_br==mb){
cout << sif_prij << endl;
cout << mat_br << endl;
cout << predmet << endl;
cout << rok << endl;
}
}
dat.close(); dat.clear();
}; // ispis
};//cprijava
cprijava prijava;
void cstudent::broj_prijava(){
cstudent *tekuci=this->sljedeci;
int brojac;
while (tekuci){
cout << tekuci->mat_br << endl;
cout << tekuci->prez_ime<<endl;

10

Programiranje 2 Skripta Vincijanovi Danijel

brojac=0;
dat.open("prijave.dat", ios::in|ios::binary);
while(1){
dat.read ((char *)&prijava,sizeof(prijava));
if (dat.eof())break;
if (prijava.mat_br==tekuci->mat_br)brojac++;
}
dat.close(); dat.clear();
cout << "Broj_prijava:" << brojac << endl;
tekuci=tekuci->sljedeci;
};
}; // broj_prijava
int main(){
int izbor,mat_br;
student = new cstudent;
do{
cout << "1. Unos studenata" << endl;
cout << "2. Ispis studenata" << endl;
cout << "3. Unos prijava" << endl;
cout << "4. Ispis prijava" << endl;
cout << "5. Ukupan broj studenata i prijava" << endl;
cout << "6. Prijave zadanog studenta" << endl;
cout << "7. Studenti s brojem prijava" << endl;
cout << "9. Izlaz" << endl;
cin >> izbor;
switch (izbor){
case 1: student->unos();break;
case 2: student->ispis();break;
case 3: prijava.unos();break;
case 4: prijava.ispis();break;
case 5: student->ukupno();
prijava.ukupno();break;
case 6: cout << "Maticni broj:";cin >> mat_br;
prijava.trazi(mat_br);break;
case 7: student->broj_prijava();break;
} // switch
}while (izbor!=9);
return 0;
}

6.

Primjer (datoteka / vezana)

#include<iostream>
#include<fstream>
using namespace std;
fstream dat;
class cstudent{
public:
int mat_br;
char prezime[35];
cstudent(){
dat.open ("studenti.dat", ios::in);
if (!dat){
dat.open ("studenti.dat", ios::out);
dat.close();
dat.clear();
}
};
void unos(){
dat.open ("studenti.dat", ios::out | ios::app | ios::binary);
cout << "\nMaticni broj: ";

11

Programiranje 2 Skripta Vincijanovi Danijel

cin >> mat_br;


cout << "Prezime i ime: ";
cin >> prezime;
dat.write ((char *) this, sizeof(*this));
dat.close();
dat.clear();
};
void ispis(){
dat.open ("studenti.dat", ios::in | ios::binary);
while (1){
dat.read ((char *) this, sizeof(*this));
if (dat.eof()) break;
cout << "\n\nMaticni broj: " << mat_br;
cout << "\nPrezime i ime: " << prezime;
}
dat.close();
dat.clear();
};
bool postoji(int matbr){
dat.open ("studenti.dat", ios::in | ios::binary);
while (1){
dat.read ((char *) this, sizeof(*this));
if (dat.eof()) break;
if (mat_br==matbr){
dat.close();
dat.clear();
return false;
}
}
dat.close();
dat.clear();
return true;
};
};
cstudent student;
class cprijava{
private:
cprijava *sljedeci;
public:
int sifra, mat_br;
char predmet[35], rok[10];
cprijava(){
sljedeci=NULL;
};
void unos(){
cprijava *novi, *zadnji;
zadnji=this;
while (zadnji->sljedeci)
zadnji=zadnji->sljedeci;
novi=new cprijava;
zadnji->sljedeci=novi;
cout << "\nSifra: ";
cin >> novi->sifra;
do {
cout << "Maticni broj: ";
cin >> novi->mat_br;
} while (student.postoji(novi->mat_br));
cout << "Predmet: ";
cin >> novi->predmet;
cout << "Rok: ";
cin >> novi->rok;
};
void ispis(){
cprijava *tekuci=this->sljedeci;

12

Programiranje 2 Skripta Vincijanovi Danijel

while (tekuci){
cout << "\n\nSifra: " << tekuci->sifra;
cout << "\nMaticni broj: " << tekuci->mat_br;
cout << "\nPredmet: " << tekuci->predmet;
cout << "\nRok: " << tekuci->rok;
tekuci=tekuci->sljedeci;
};
};
void ispis_prijava(int matbr){
bool nadjen=false;
cprijava *tekuci=this->sljedeci;
while (tekuci){
if (tekuci->mat_br==matbr){
nadjen=true;
cout << "\n\nSifra: " << tekuci->sifra;
cout << "\nMaticni broj: " << tekuci->mat_br;
cout << "\nPredmet: " << tekuci->predmet;
cout << "\nRok: " << tekuci->rok;
}
tekuci=tekuci->sljedeci;
};
if(!nadjen) cout << "\nNema prijava!\n";
};
void br_prijava();
};
cprijava *prijava;
void cprijava::br_prijava(){
int broj;
dat.open ("studenti.dat", ios::in | ios::binary);
while (1){
dat.read ((char *) &student, sizeof(student));
if (dat.eof()) break;
cout << "\n\nMaticni broj: " << student.mat_br;
cout << "\nPrezime i ime: " << student.prezime;
broj=0;
cprijava *tekuci=this->sljedeci;
while (tekuci){
if (tekuci->mat_br==student.mat_br) broj++;
tekuci=tekuci->sljedeci;
};
cout << "\nBroj prijava: " << broj << endl;
}
dat.close();
dat.clear();
};
int main(){
int izbor, br;
prijava=new cprijava;
do {
cout << "\n\nIzbornik ";
cout << "\n1. Unos studenata ";
cout << "\n2. Ispis studenata ";
cout << "\n3. Unos prijava ";
cout << "\n4. Ispis prijava ";
cout << "\n5. Ispis svih prijava zadanog studenta ";
cout << "\n6. Popis studenata s brojem prijava ";
cout << "\n7. Izlaz iz programa ";
cout << "\nVas izbor: ";
cin >> izbor;
switch (izbor){
case 1:
student.unos();
break;
case 2:

13

Programiranje 2 Skripta Vincijanovi Danijel

case

case

case

case

case

student.ispis();
break;
3:
prijava->unos();
break;
4:
prijava->ispis();
break;
5:
cout << "\nUnesite maticni broj studenta: ";
cin >> br;
prijava->ispis_prijava(br);
break;
6:
prijava->br_prijava();
break;
7:
cout << "\nIzlaz iz programa\n";
break;

}
} while (izbor!=7);
system("pause");
return 0;
}

7.

Primjer (datoteka / dinamicko)

#include<iostream>
#include<fstream>
using namespace std;
int brojac=0;
bool nadjen;
fstream dat;
class cstudent {
public:
int mat_br;
char prezime[40];
cstudent(){
dat.open("studenti.dat",ios::in);
if (!dat) {
dat.open("studenti.dat", ios::out);
dat.close();
dat.clear();
}
};
void unos(){
dat.open("studenti.dat", ios::out | ios::app | ios::binary);
cout << "\nMaticni broj: ";
cin >> mat_br;
cin.ignore();
cout << "Prezime i ime: ";
cin.getline(prezime, 40);
dat.write((char *) this, sizeof(*this));
dat.close();
dat.clear();
};
void ispis(){
dat.open("studenti.dat", ios::in | ios::binary);
while (1){
dat.read((char *) this, sizeof(*this));
if (dat.eof()) break;
cout << "\n\nMaticni broj: " << mat_br;
cout << "\nPrezime i ime: " << prezime;
};

14

Programiranje 2 Skripta Vincijanovi Danijel

dat.clear();
dat.close();
};
bool postoji(int matbr){
dat.open("studenti.dat", ios::in | ios::binary);
while (1){
dat.read((char *) this, sizeof(*this));
if (dat.eof()) break;
if (mat_br==matbr){
dat.close();
dat.clear();
return false;
}
};
dat.clear();
dat.close();
return true;
};
};
cstudent student;
class cprijave{
public:
int sifra, mat_br;
char predmet[35], rok[20];
void unos(){
cout << "\nSifra: ";
cin >> sifra;
do {
cout << "Maticni broj: ";
cin >> mat_br;
} while (student.postoji(mat_br));
cin.ignore();
cout << "Predmet: ";
cin.getline(predmet, 35);
cout << "Rok: ";
cin.getline(rok, 20);
};
void ispis(){
cout << "\n\nSifra: " << sifra;
cout << "\nMaticni broj: " << mat_br;
cout << "\nPredmet: " << predmet;
cout << "\nRok: " << rok;
};
void ispis_prijava(int matbr){
if (mat_br==matbr){
cout << "\n\nSifra: " << sifra;
cout << "\nMaticni broj: " << mat_br;
cout << "\nPredmet: " << predmet;
cout << "\nRok: " << rok;
nadjen=true;
}
};
void br_prijava();
};
cprijave *prijave;
void cprijave::br_prijava(){
int broj;
dat.open ("studenti.dat", ios::in | ios::binary);
while (1){
dat.read((char *) &student, sizeof(student));
if (dat.eof()) break;
cout << "\n\nMaticni broj: " << student.mat_br;
cout << "\nPrezime i ime: " << student.prezime;

15

Programiranje 2 Skripta Vincijanovi Danijel

broj=0;
for (int i=0; i<brojac; i++){
if (student.mat_br==prijave[i].mat_br) broj++;
}
cout << "\nBroj prijava: " << broj << endl;
};
dat.clear();
dat.close();
};

int main(){
int izbor, br, n;
cout << "Koliko zelite unijeti prijava: ";
cin >> n;
prijave=new cprijave[n];
do {
cout << "\n\nIzbornik: ";
cout << "\n1. Upis studenata";
cout << "\n2. Ispis svih studenata";
cout << "\n3. Upis prijava";
cout << "\n4. Ispis svih prijava";
cout << "\n5. Ispis svih prijava zadanog studenta";
cout << "\n6. Popis studenata s brojem prijava";
cout << "\n7. Izlaz iz programa";
cout << "\nVas izbor: ";
cin >> izbor;
switch (izbor){
case 1:
student.unos();
break;
case 2:
student.ispis();
break;
case 3:
prijave[brojac].unos();
brojac++;
break;
case 4:
for (int i=0; i<brojac; i++)
prijave[i].ispis();
break;
case 5:
nadjen=false;
cout << "Unesite maticni broj studenta: ";
cin >> br;
for (int i=0; i<brojac; i++)
prijave[i].ispis_prijava(br);
if (!nadjen) cout << "\nNema prijave\n";
break;
case 6:
prijave[brojac].br_prijava();
break;
case 7:
break;
default:
cout << "\nKrivi izbor!\n";
break;
};
} while (izbor!=7);
system("pause");
return 0;
}

16

Programiranje 2 Skripta Vincijanovi Danijel

8.

Primjer (Dinamiko / Datoteka)

#include<iostream>
#include<fstream>
using namespace std;
int brojac=0;
class cstudent {
public:
int mat_br;
char prezime[40];
void unos(){
cout << "\nMaticni broj: ";
cin >> mat_br;
cin.ignore();
cout << "Prezime i ime: ";
cin.getline(prezime, 40);
};
void ispis(){
cout << "\n\nMaticni broj: " << mat_br;
cout << "\nPrezime i ime: " << prezime;
};
void br_prijava();
};
cstudent *student;
int provjera(int matbr){
for (int i=0; i<brojac; i++){
if (student[i].mat_br==matbr) return 1;
}
return 0;
};
fstream dat;
class cprijave{
public:
int sifra, mat_br;
char predmet[35], rok[10];
cprijave(){
dat.open ("prijave.dat", ios::in);
if (!dat){
dat.open ("prijave.dat", ios::out);
dat.close();
dat.clear();
}
};
void unos(){
dat.open ("prijave.dat", ios::out | ios::app | ios::binary);
cout << "\nSifra: ";
cin >> sifra;
do {
cout << "Maticni broj: ";
cin >> mat_br;
} while(provjera(mat_br)==0);
cin.ignore();
cout << "Predmet: ";
cin.getline(predmet, 35);
cout << "Rok: ";
cin.getline(rok, 10);
dat.write ((char *) this, sizeof(*this));
dat.close();
dat.clear();
};
void ispis(){

17

Programiranje 2 Skripta Vincijanovi Danijel

dat.open ("prijave.dat", ios::in | ios::binary);


while (1){
dat.read ((char *) this, sizeof(*this));
if (dat.eof()) break;
cout << "\n\nSifra: " << sifra;
cout << "\nMaticni broj: " << mat_br;
cout << "\nPredmet: " << predmet;
cout << "\nRok: " << rok;
}
dat.close();
dat.clear();
};
void ispis_prijava(int matbr){
bool nadjen=false;
dat.open ("prijave.dat", ios::in | ios::binary);
while (1){
dat.read ((char *) this, sizeof(*this));
if (dat.eof()) break;
if (mat_br==matbr){
nadjen=true;
cout << "\n\nSifra: " << sifra;
cout << "\nMaticni broj: " << mat_br;
cout << "\nPredmet: " << predmet;
cout << "\nRok: " << rok;
}
}
if (!nadjen) cout << "\nNema prijave\n";
dat.close();
dat.clear();
};
//void br_prijava();
};
cprijave prijave;
void cstudent::br_prijava(){
int broj;
for (int i=0; i<brojac; i++){
cout << "\n\nMaticni broj: " << student[i].mat_br;
cout << "\nPrezime i ime: " << student[i].prezime;
broj=0;
dat.open ("prijave.dat", ios::in | ios::binary);
while (1){
dat.read ((char *) &prijave, sizeof(prijave));
if (dat.eof()) break;
if (student[i].mat_br==prijave.mat_br) broj++;
}
dat.close();
dat.clear();
cout << "\nBroj prijava: " << broj << endl;
}
};
int main(){
int izbor, n, br;
cout << "Koliko zelite unijeti studenata: ";
cin >> n;
student=new cstudent[0];
do {
cout << "\n\nIzbornik: ";
cout << "\n1. Upis studenata";
cout << "\n2. Ispis svih studenata";
cout << "\n3. Upis prijava";
cout << "\n4. Ispis svih prijava";
cout << "\n5. Ispis svih prijava zadanog studenta";
cout << "\n6. Popis studenata s brojem prijava";
cout << "\n7. Izlaz iz programa";

18

Programiranje 2 Skripta Vincijanovi Danijel

cout << "\nVas izbor: ";


cin >> izbor;
switch (izbor){
case 1:
student[brojac].unos();
brojac++;
break;
case 2:
for (int i=0; i<brojac; i++)
student[i].ispis();
break;
case 3:
prijave.unos();
break;
case 4:
prijave.ispis();
break;
case 5:
cout << "Unesite maticni broj studenta: ";
cin >> br;
prijave.ispis_prijava(br);
break;
case 6:
student[brojac].br_prijava();
break;
case 7:
break;
default:
cout << "\nKrivi izbor!\n";
break;
};
} while (izbor!=7);
system("pause");
return 0;
}

9.

Primjer (Dinamiko / Vezana)

#include<iostream>
using namespace std;
int brojac=0;
class cstudent{
public:
int mat_br;
char prezime[35];
void unos(){
cout << "\nMaticni broj: ";
cin >> mat_br;
cin.ignore();
cout << "Prezime i ime: ";
cin.getline(prezime, 35);
};
void ispis(){
cout << "\n\nMaticni broj: " << mat_br;
cout << "\nPrezime i ime: " << prezime;
};
};
cstudent *student;
int provjera(int matbr){
for (int i=0; i<brojac; i++)
if (student[i].mat_br==matbr)return 1;
return 0;

19

Programiranje 2 Skripta Vincijanovi Danijel

};
class cprijava{
private:
cprijava *sljedeci;
public:
int sifra, mat_br;
char predmet[35], rok[10];
cprijava(){
sljedeci=NULL;
};
void unos(){
cprijava *novi, *zadnji;
zadnji=this;
while (zadnji->sljedeci)
zadnji=zadnji->sljedeci;
novi=new cprijava;
zadnji->sljedeci=novi;
cout << "\nSifra prijave: ";
cin >> novi->sifra;
do {
cout << "Maticni broj: ";
cin >> novi->mat_br;
} while (provjera(novi->mat_br)==0);
cout << "Predmet: ";
cin >> novi->predmet;
cout << "Rok: ";
cin >> novi->rok;
};
void ispis(){
cprijava *tekuci=this->sljedeci;
while (tekuci){
cout << "\n\nSifra prijave: " << tekuci->sifra;
cout << "\nMaticni broj: " << tekuci->mat_br;
cout << "\nPredmet: " << tekuci->predmet;
cout << "\nRok: " << tekuci->rok;
tekuci=tekuci->sljedeci;
}
};
void ispis_prijava(int matbr){
bool nadjen=false;
cprijava *tekuci=this->sljedeci;
while (tekuci){
if (tekuci->mat_br==matbr){
nadjen=true;
cout << "\n\nSifra prijave: " << tekuci->sifra;
cout << "\nMaticni broj: " << tekuci->mat_br;
cout << "\nPredmet: " << tekuci->predmet;
cout << "\nRok: " << tekuci->rok;
}
tekuci=tekuci->sljedeci;
}
if(!nadjen) cout << "\nNema prijava!\n";
}
void br_prijava();
};
cprijava *prijava;
void cprijava::br_prijava(){
int broj;
for (int i=0; i<brojac; i++){
cout << "\n\nMaticni broj: " << student[i].mat_br;
cout << "\nPrezime i ime: " << student[i].prezime;
broj=0;
cprijava *tekuci=this->sljedeci;
while (tekuci){

20

Programiranje 2 Skripta Vincijanovi Danijel

if (tekuci->mat_br==student[i].mat_br) broj++;
tekuci=tekuci->sljedeci;
}
cout << "\nBroj prijava: " << broj;
}
};

int main(){
int izbor, n, br;
cout << "Koliko studenata: ";
cin >> n;
student=new cstudent[n];
prijava=new cprijava;
do {
cout << "\n\nIzbornik: ";
cout << "\n1. Upis studenata";
cout << "\n2. Ispis svih studenata";
cout << "\n3. Upis prijava";
cout << "\n4. Ispis svih prijava";
cout << "\n5. Ispis svih prijava zadanog studenta";
cout << "\n6. Popis studenata s brojem prijava";
cout << "\n7. Izlaz iz programa";
cout << "\nVas izbor: ";
cin >> izbor;
switch (izbor){
case 1:
student[brojac].unos();
brojac++;
break;
case 2:
for (int i=0; i<brojac; i++)
student[i].ispis();
break;
case 3:
prijava->unos();
break;
case 4:
prijava->ispis();
break;
case 5:
cout << "Unesite maticni broj studenta: ";
cin >> br;
prijava->ispis_prijava(br);
break;
case 6:
prijava->br_prijava();
break;
case 7:
cout << "\nIzlaz iz programa\n";
break;
default:
cout << "\nKrivi izbor!\n";
break;
};
} while(izbor!=7);
system("pause");
return 0;
}

21

Programiranje 2 Skripta Vincijanovi Danijel

10. Primjer (Vezana / Dinamiko)


#include<iostream>
using namespace std;
int brojac=0;
bool nadjen;
class cstudent{
private:
cstudent *sljedeci;
public:
int mat_br;
char prezime[35];
cstudent(){
sljedeci=NULL;
};
void unos(){
cstudent *novi, *zadnji;
zadnji=this;
while (zadnji->sljedeci)
zadnji=zadnji->sljedeci;
novi=new cstudent;
zadnji->sljedeci=novi;
cout << "\nMaticni broj: ";
cin >> novi->mat_br;
cout << "Prezime i ime: ";
cin >> novi->prezime;
};
void ispis(){
cstudent *tekuci=this->sljedeci;
while (tekuci){
cout << "\n\nMaticni broj: " << tekuci->mat_br;
cout << "\nPrezime i ime: " << tekuci->prezime;
tekuci=tekuci->sljedeci;
}
};
bool provjera(int matbr){
cstudent *tekuci=this->sljedeci;
while (tekuci){
if (tekuci->mat_br==matbr) return false;
tekuci=tekuci->sljedeci;
}
return true;
};
void br_prijava();
};
cstudent *student;
class cprijava{
public:
int sifra, mat_br;
char predmet[35], rok[10];
void unos(){
cout << "\nSifra prijave: ";
cin >> sifra;
do {
cout << "Maticni broj: ";
cin >> mat_br;
} while (student->provjera(mat_br));
cin.ignore();
cout << "Predmet: ";
cin.getline (predmet, 35);
cout << "Rok: ";
cin.getline (rok, 10);
};

22

Programiranje 2 Skripta Vincijanovi Danijel

void ispis(){
cout << "\n\nSifra prijave: " << sifra;
cout << "\nMaticni broj: " << mat_br;
cout << "\nPredmet: " << predmet;
cout << "\nRok: " << rok;
};
void ispis_prijava(int matbr){
if (mat_br==matbr){
cout << "\n\nSifra prijave: " << sifra;
cout << "\nMaticni broj: " << mat_br;
cout << "\nPredmet: " << predmet;
cout << "\nRok: " << rok;
nadjen=true;
}
};
};
cprijava *prijava;
void cstudent::br_prijava(){
int broj;
cstudent *tekuci=this->sljedeci;
while (tekuci){
cout << "\n\nMaticni broj: " << tekuci->mat_br;
cout << "\nPrezime i ime: " << tekuci->prezime;
broj=0;
for (int i=0; i<brojac; i++)
if (tekuci->mat_br==prijava[i].mat_br)
broj++;
cout << "\nBroj prijava: " << broj << endl;
tekuci=tekuci->sljedeci;
}
};
int main(){
int izbor, n, br;
cout << "Koliko prijava: ";
cin >> n;
prijava=new cprijava[n];
student=new cstudent;
do {
cout << "\n\nIzbornik: ";
cout << "\n1. Upis studenata";
cout << "\n2. Ispis svih studenata";
cout << "\n3. Upis prijava";
cout << "\n4. Ispis svih prijava";
cout << "\n5. Ispis svih prijava zadanog studenta";
cout << "\n6. Popis studenata s brojem prijava";
cout << "\n7. Izlaz iz programa";
cout << "\nVas izbor: ";
cin >> izbor;
switch (izbor){
case 1:
student->unos();
break;
case 2:
student->ispis();
break;
case 3:
prijava[brojac].unos();
brojac++;
break;
case 4:
for (int i=0; i<brojac; i++)
prijava[i].ispis();
break;
case 5:

23

Programiranje 2 Skripta Vincijanovi Danijel

cout << "Unesite maticni broj studenta: ";


cin >> br;
nadjen=false;
for (int i=0; i<brojac; i++)
prijava[i].ispis_prijava(br);
if (!nadjen) cout << "\nNema prijava!\n";
break;
case 6:
student->br_prijava();
break;
case 7:
cout << "\nIzlaz iz programa\n";
break;
default:
cout << "\nKrivi izbor!\n";
break;
};
} while(izbor!=7);
system("pause");
return 0;
}

24

You might also like