[ AcidAngel @ 08.05.2007. 17:05 ] @
Kao odbranu za usmeni rad iz programiranja dobila sam zadatak da isprogramiram aviokompaniju.
Osim klasicnih funkcija koje treba da sadrzi pod 'must' je navedeno da funkcija sadrzi:
-Ponudu aviokompanija i destinacija(znaci da se ne unose sa tastature);
-Da unesenom putniku automatski dodjeljuje broj prvog slobodnog mjesta:
-Da se podaci o korinisku mogu mijenjati;
-Da se moze vrsiti pretrazivanje korisnika po destinacijama;
--------------------------------------------------------
* Edit: Prepravila sam prvobitni kod, mislim da je sada citljivije dosta, ali kada sam mu poslala vratio ga je i rekao da dodam jos i
-mogucnost da korinik odabere broj letova i broj sjedista;
-Te da umjesto inicijalizacije letova u mainu tamo stavim opciju „dodaj let“ koja bi bila zasticena odgovarajucim PIN-om(kojem bi pristup imao samo „administrator“).Svaki put kada se stvori mogucnost da se dodaju nove informacije o letu, postojala bi mogucnost da se ta opcija pokrene. Nakon toga, korisnici bi mogli rezervisatati samo one letove koji su dostupni...



Hmmm, pokusala sam da br_mjesta ostavim kao globalnu varijablu i da u main-u korisnik vrsi inicijalizaciju medjutim kada zatrazim rezervaciju (opcija a) on mi dopusti odabir aviokompanije i destinacije i onda preskoci unos podataka te me odmah vrati na glavni izbornik. O cemu se radi?

Hvala unaprijed
--------------------------------------------------------
*edit: Mislim da sam ipak uspjela odraditi to ! Novi kod:

Code:

  
    #include<iostream.h>
#include<string.h>
#include<stdlib.h>
#include<conio.h>

int apass=54321;
char crt[]={"\n ----------------------------------\n"};
char izbor;
const int MAX=100;
struct putnik{
     int id;
     char* ime;
     char* prezime;
     char* grad;

     int unos(int sifra_leta);
     void promjeni();
     void info();
};

struct let{
     int sifra;
     char* destinacija;
     char* aviokompanija;
     int putnici[MAX];
     int br_mjesta;


     int provjera();
     void inicijalizacijaPutnika();
     void listaPutnika();
     void dodaj();
};

let letovi[MAX];
int trenutniLet=0;

putnik sviPutnici[MAX];
int trenutniPutnik=0;

char aviokompanije[MAX][50];
int trenutnaKompanija=0;

char destinacije[MAX][50];
int trenutnaDestinacija=0;

int izabirKompanija(){
    int komp;
    if(trenutnaKompanija==0){
        cout<<"Nema unesenih kompanija"<<endl;
        return -1;
    }

    cout<<"Izaberite kompaniju:\n";
    for(int i=0;i<trenutnaKompanija;i++){
          cout<<(i+1)<<") "<<aviokompanije[i]<<endl;
     }
     while(komp<1 || komp>trenutnaKompanija){
          cin>>komp;
     }
     cin.ignore();
     return komp-1;
}

int izabirDestinacija(){
    int dest;
    if(trenutnaDestinacija==0){
        cout<<"Nema unesenih destinacija"<<endl;
        return -1;
    }
    cout<<"Izaberite destinaciju:\n";
     for(int i=0;i<trenutnaDestinacija;i++){
          cout<<(i+1)<<") "<<destinacije[i]<<endl;
     }
     while(dest<1 || dest>trenutnaDestinacija){
          cin>>dest;
     }
     cin.ignore();
     return dest-1;
}

int putnik::unos(int sifra_leta){
     int novo_mjesto=-1;
     int l;
     for(l=0;l<trenutniLet;l++){
          if(letovi[l].sifra==sifra_leta){
                novo_mjesto=letovi[l].provjera();
                if(novo_mjesto==-1){
                     cout<<"Ovaj let nema slobodnih mjesta"<<endl;
                     return 0;
                }else{
                     break;
                     //izlaz iz for petlje
                }
          }
     }
     if(novo_mjesto==-1){
            cout<<"Nije definisan takav let"<<endl;
            return 0;
     }
     //unos podataka za putnika:ime,prezime,grad
     cin.ignore();
     cout<<"Ime: ";
     ime=new char[21];
     cin.getline(ime,20,'\n');
     cout<<"Prezime: ";
     prezime=new char[21];
     cin.getline(prezime,20,'\n');
     cout<<"Grad: ";
     grad=new char[21];
     cin.getline(grad,20,'\n');
     id=random(1000);
     letovi[l].putnici[novo_mjesto]=id;
     return 1;
}

void putnik::info(){
     cout<<crt<<"\t ..::PUTNIK["<<id<<"]::.."<<crt;
     cout<<"Id: "<<id<<endl;
     cout<<"Ime: "<<ime<<endl;
     cout<<"Prezime: "<<prezime<<endl;
     cout<<"Grad: "<<grad;
     cout<<crt;
}

void putnik::promjeni(){
     char *novo_ime;
     char *novo_prezime;
     char *novo_grad;

     cout<<"Ime: ";
     novo_ime=new char[21];
     cin.getline(novo_ime,20,'\n');
     cin.getline(novo_ime,20,'\n');
     if(strcmp(novo_ime,"")!=0){
        ime=new char[21];
        ime=novo_ime;
     }
     cout<<"Prezime: ";
     novo_prezime=new char[21];
     cin.getline(novo_prezime,20,'\n');
     if(strcmp(novo_prezime,"")!=0){
        prezime=new char[21];
        prezime=novo_prezime;
     }
     cout<<"Grad: ";
     novo_grad=new char[21];
     cin.getline(novo_grad,20,'\n');
     if(strcmp(novo_grad,"")!=0){
        grad=new char[21];
        grad=novo_grad;
     }
}

int let::provjera(){
     for(int i=0;i<br_mjesta;i++){
          if(putnici[i]==-1) return i;
     }
     return -1;
}

void let::inicijalizacijaPutnika(){
     for(int i=0;i<MAX;i++){
          putnici[i]=-1;
     }
}

void let::listaPutnika(){
    int id;
    for(int i=0;i<MAX;i++){
        id=putnici[i];
        if(id!=-1){
            for(int j=0;j<MAX;j++){
                if(sviPutnici[j].id==id){
                    sviPutnici[j].info();
                    getch();
                    break;
                }
            }
        }
    }
}

void let::dodaj(){
     int meni;
     meni=izabirKompanija();
     aviokompanija=aviokompanije[meni];
     meni=izabirDestinacija();
     destinacija=destinacije[meni];
     cout<<"Unesite broj mjesta:\n";
     while(br_mjesta<1 || br_mjesta>MAX){
          cin>>br_mjesta;
     }
     cin.ignore();
     sifra=random(1000);
     inicijalizacijaPutnika();
}

int rezervacija(){
     int let;
     if(trenutniLet==0){
            cout<<"Nema definisanih letova"<<endl;
            return -1;
     }
     cout<<crt<<"\t ..::REZERVACIJA::.."<<crt;
     cout<<"Izaberite let"<<endl;
     for(int i=0;i<trenutniLet;i++){
         cout<<letovi[i].sifra<<"\t"<<letovi[i].aviokompanija<<","<<letovi[i].destinacija<<endl;
     }
     /*
     komp=izabirKompanija();
     if(komp==-1) return -1;
     dest=izabirDestinacija();
     if(dest==-1) return -1;
     */
     cin>>let;
     for(i=0;i<trenutniLet;i++){
            if(letovi[i].sifra==let)
                return let;
     }
     cout<<"Taj let ne postoji"<<endl;
     return -1;
}

void prikaziPutnike(){
    int sifra_leta;
    sifra_leta=rezervacija();
    if(sifra_leta!=-1){
        for(int l=0;l<trenutniLet;l++){
              if(letovi[l].sifra==sifra_leta){
                    letovi[l].listaPutnika();
              }
        }
    }
}

void otkazi()
{
  int idKL;
  cout<< "Unesite id putnika: " ;
  cin>>idKL;
  for(int i=0;i<trenutniLet;i++)
    {
      for(int j=0;j<letovi[i].br_mjesta;j++)
      {
        if(letovi[i].putnici[j]==idKL)
            letovi[i].putnici[j]=-1;
      }
    }
     cin.ignore();
}

void promjena()
{
  int idKL;
  cout<< "Unesite id putnika: " ;
  cin>>idKL;
  for(int i=0;i<40;i++){
        if(sviPutnici[i].id==idKL){
            sviPutnici[i].promjeni();
            return;
      }
    }
  cin.ignore();
}

void novaAvioKompanija(){
 int ppass;
     cout<<"Unesite admin password: ";
     cin>>ppass;
     if(ppass!=apass)
     cout<<"Pogresan unos\n Povratak u meni\n";
     else{
     cout<<"Unesite novu kompaniju: ";
     cin.ignore();
    cin.getline(aviokompanije[trenutnaKompanija++],49,'\n');
          }
}

void novaDestinacija(){
 int ppass;
     cout<<"Unesite admin password: ";
     cin>>ppass;
     if(ppass!=apass)
     cout<<"Pogresan unos\n Povratak u meni\n";
     else{
    cout<<"Unesite novu destinaciju: ";
    cin.ignore();
    cin.getline(destinacije[trenutnaDestinacija++],49,'\n');
     }
}

void noviLet(){
 int ppass;
     cout<<"Unesite admin password: ";
     cin>>ppass;
     if(ppass!=apass)
     cout<<"Pogresan unos\n Povratak u meni\n";
     else
      {
     letovi[trenutniLet++].dodaj();
      }
}

void main(){
     int check;

     /*letovi[0].sifra=1;
     letovi[0].destinacija="Amsterdam";
     letovi[0].aviokompanija="Air Bosna";
     letovi[0].inicijalizacijaPutnika();

     letovi[1].sifra=2;
     letovi[1].destinacija="Prag";
     letovi[1].aviokompanija="Air Bosna";
     letovi[1].inicijalizacijaPutnika();

     letovi[2].sifra=3;
     letovi[2].destinacija="Amsterdam";
     letovi[2].aviokompanija="LUFTHANSA";
     letovi[2].inicijalizacijaPutnika();

     letovi[3].sifra=4;
     letovi[3].destinacija="Prag";
     letovi[3].aviokompanija="LUFTHANSA";
     letovi[3].inicijalizacijaPutnika();*/

     cout<<crt<<"\t ..::PROGRAM ZA REZERVACIJU KARATA::.."<<crt;
     while(izbor!='h'){
          cout<<"Za izbor operacije unesite odgovarajuce slovo\n";
          cout<<" a) Rezerviraj sjediste\n";
          cout<<" b) Otkazi rezervaciju\n";
          cout<<" c) Prikazi putnike\n";
          cout<<" d) Promjena podataka\n";
          cout<<" e) Dodavanje aviokompanija\n";
          cout<<" f) Dodavanje destinacija\n";
          cout<<" g) Dodavanje letova\n";
          cout<<" h) Izlaz\n";
          cout<<"IZBOR: ";
          while(1){
              izbor=(char)getch();
              if(izbor=='a' || izbor=='b' || izbor=='c' || izbor=='d'
                     || izbor=='e' || izbor=='f' || izbor=='g' || izbor=='h')
                    break;
          }
          cout<<crt;
          switch(izbor){
                     case 'a':
                     {
                          int sifra_leta=rezervacija();
                          if(sifra_leta!=-1){
                                if(sviPutnici[trenutniPutnik].unos(sifra_leta)==1){
                                    trenutniPutnik++;
                                }
                          }
                     }
                          break;
                     case 'b':
                    otkazi();
                    break;
                case 'c':
                    prikaziPutnike();
                    break;
                case 'd':
                    promjena();
                    break;
                case 'e':
                    novaAvioKompanija();
                    break;
                case 'f':
                    novaDestinacija();
                    break;
                case 'g':
                    noviLet();
                    break;
                case 'h':
                    break;
                }
        }



[Ovu poruku je menjao AcidAngel dana 09.05.2007. u 11:26 GMT+1]

[Ovu poruku je menjao AcidAngel dana 11.05.2007. u 11:05 GMT+1]
[ karas @ 09.05.2007. 13:14 ] @
let::provjera() vraća -1, pogledaj petlju u njoj radi li kako treba.
Uzgred, umesto zaglavlja <iostream.h>, <string.h> koristi <iostream>, <string>, umesto <stdlib.h> koristi <cstdlib> i koristi std namespace. main() mora da vraća int, ne sme void.
Rekao bih da koristiš neki stari Borlandov kompajler, uzmi neki noviji u skladu sa standardom. Nema potrebe za <conio.h> i getch().
[ AcidAngel @ 09.05.2007. 14:26 ] @
Trenutno sam u fazi preseljenja tako da nemam svoj racunar nego koristim posudjen laptop koji ima tu stariju verziju borlanda tako da ce sve .h morati ostati za sada. Ukoliko dobijem racunar na vrijeme svakako sam ga planirala 'preraditi',a ako ne poslat cu source kod.