giovedì 12 marzo 2015

Classe Articolo

Cos’è un Articolo
Composizione testuale composta da un numero di caratteri compreso tra un minimo di 500 ed un massimo di 1000.
Caratteristiche della classe Articolo:
1.      Inserimento/Visualizzazione/Aggiornamento Articolo
      a.      Numero Articolo
      b.     Titolo
      c.      Testo
2.      Controllo numero di caratteri inseriti per Articolo

Implementare la classe Articolo e una struttura per la gestione all'interno della classe Main():

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

using namespace std;

class Articolo
{
    public:
        Articolo();
        char titolo[31];
        int numeroArticolo;
        char testo[1001];
        bool controllo;
        void InserimentoArticolo();
        void InserimentoTitolo();
        void InserimentoNumero();
        void InserimentoTesto();
        void Aggiornamento();
        void Visualizza();
        bool controlloLunghezza();
};

Articolo::Articolo()
{
    strcpy(titolo,"");   //inizzializzo la variabile titolo
    numeroArticolo=0;   //inizzializzo la variabile numeroArticolo
    strcpy(testo,"");   //inizzializzo la variabile testo
    controllo=false;   //inizzializzo la variabile controllo
}

void Articolo::InserimentoArticolo()   //METODO PER INSERIMENTO COMPLETO DI UN NUOVO ARTICOLO
{
    InserimentoTitolo();   //chiamata al metodo INSERIMENTOTITOLO()
    InserimentoNumero();   //chiamata al metodo INSERIMENTONUMERO()
    InserimentoTesto();   //chiamata al metodo INSERIMENTOTESTO()
}

void Articolo::InserimentoTitolo()   //METODO PER INSERIMENTO TITOLO ARTICOLO
{
    char c;   //variabile di acquisizione tasto premuto DA UTENTE da tastiera
    int i;   //variabile contatore per inserimento carattere in vettore array TITOLO e TESTO
    //INPUT TITOLO ARTICOLO
    cout<<endl<<"\tInserire il 'TITOLO' dell'articolo: "<<endl;
    i=0;   //azzero contatore 'i'
    do{
        if(i<31)   //controllo su massima dimensione array
        {
            c=getch();
            putchar(c);
            if((c!=13)&&(c!=127))   //se diverso da INVIO
            {
                titolo[i]=c;   //inserisco in posizione 'i' all'interno dell'array testo il carattere acquisito da tastiera 'c'
                i++;   //incremento il contatore 'i'
            }
            else   //altrimenti
            {
                if((c!=13)&&(c==127)&&(i>0))   //se utente preme tasto BACK per cancellare input
                    titolo[i]=' ';   //cancello contenuto in relativa posizione 'i'
                    i--;   //decremento contatore 'i' per sovrascrivere posizione array
            }
        }
        else
        {
            cout<<endl<<endl<<"Hai superato la dimensione massima del TITOLO! (max 30 battute)"<<endl;
            i=0;
        }
    }while(c!=13);
    i++;   //incremento contatore 'i' per chiusura array
    titolo[i]='\0';   //inserisco fine stringa
}


void Articolo::InserimentoNumero()   //METODO PER INSERIMENTO NUMERO ARTICOLO
{
    //INPUT NUMERO ARTICOLO
    cout<<endl<<"\tInserire il 'NUMERO' dell'articolo: "<<endl;
    cin>>numeroArticolo;
}

void Articolo::InserimentoTesto()   //METODO PER INSERIMENTO TESTO ARTICOLO
{
    //INPUT TESTO ARTICOLO
    cout<<endl<<"\tInserire il 'TESTO' dell'articolo: "<<endl;
    int i=0;
    char c;
    do{
        if(i<1001)   //controllo su massima dimensione array
        {
            c=getch();
            putchar(c);
            if((c!=13)&&(c!=127))   //se diverso da INVIO
            {
                testo[i]=c;   //inserisco in posizione 'i' all'interno dell'array testo il carattere acquisito da tastiera 'c'
                i++;   //incremento il contatore 'i'
            }
            else   //altrimenti
            {
                if((c!=13)&&(c==127)&&(i>0))   //se utente preme tasto BACK per cancellare input
                    testo[i]=' ';   //cancello contenuto in relativa posizione 'i'
                    i--;   //decremento contatore 'i' per sovrascrivere posizione array
            }
        }
        else
        {
            cout<<endl<<endl<<"Hai superato la dimensione massima del TESTO! (max 1000 battute)"<<endl;
            i=0;
        }
    }while(c!=13);
    i++;   //incremento contatore 'i' per chiusura array
    testo[i]='\0';   //inserisco fine stringa
    cout<<endl<<endl;
}

void Articolo::Aggiornamento()   //METODO AGGIORNAMENTO CAMPI DELL'ARTICOLO
{
    int menu,i;   //variabile per scelta menu e contatore
    char c;   //variabile per input char utente da tastiera
    cout<<endl<<"Quale campo vuoi aggiornare? 1)Titolo - 2)Numero Articolo - 3)Testo - 0)Annulla"<<endl;
    cin>>menu;
    do{
        switch(menu)
        {
            case 1:     InserimentoTitolo();   //chiamata al metodo INSERIMENTOTITOLO()
                        break;
            case 2:     InserimentoNumero();   //chiamata al metodo INSERIMENTONUMERO()
                        break;
            case 3:     InserimentoTesto();   //chiamata al metodo INSERIMENTOTESTO()
                        break;
            case 0:     cout<<endl<<"Aggiornamento annullato"<<endl;
                        break;
            default: cout<<endl<<"Scelta non consentita"<<endl;
        }
    }while(menu!=0);
}

void Articolo::Visualizza()
{
    cout<<endl<<"\tIl 'TITOLO' dell'articolo e': "<<endl;
    cout<<titolo;
    cout<<endl<<"\tIl 'NUMERO' dell'articolo e': "<<endl;
    cout<<numeroArticolo;
    cout<<endl<<"\tIl 'TESTO' dell'articolo e': "<<endl;
    cout<<testo;
}


bool Articolo::controlloLunghezza()   //METODO PER VERIFICA REQUISITI LUNGHEZZA
{
    int i=0, lunghezza=0;   //variabile contatore 'i' e variabile contatore 'lunghezza' inizzializzate a 0
    bool verifica=false;   //variabile riscontro esito inizializzata a 'false'
    cout<<endl<<"\tControllo Lunghezza minima dell'Articolo: "<<endl;
    do{
       if (testo[i]!='\0')   //se l'elemento dell'array preso in esame non è quello di fine stringa
        {
            lunghezza++;   //incremento contatore 'lunghezza'
            i++;   //incremento contatore 'i'
        }
    }while(testo[i]!='\0');   //continuo mentre elemento dell'array e' diverso da fine stringa
    cout<<endl<<"Il testo contiene "<<lunghezza<<" caratteri"<<endl;
    if(lunghezza>499)   //se il contatore lunghezza conta almeno 500 caratteri
        verifica=true;  

    return verifica;   //restituisco il valore della variabile 'verifica'
}

main()
{
    int menu;
    bool requisiti=false;

    Articolo obj1;
    do
        {
        cout<<"MENU:\n1)Inserimento nuovo Articolo\n2)Visualizza Articolo\n3)Aggiorna Articolo\n4)Verifica requisiti Articolo\n0)Esci"<<endl;
        cin>>menu;
        switch (menu)
            {
            case 1:   obj1.InserimentoArticolo();
                        break;
            case 2:   obj1.Visualizza();
                        break;
            case 3:   obj1.Aggiornamento();
                      break;
            case 4:   requisiti=obj1.controlloLunghezza();
                      if(requisiti)
                            cout<<endl<<"Requisiti raggiunti"<<endl;
                      else
                            cout<<endl<<"L'aritcolo non raggiunge la lunghezza minima di testo (550 battute) "<<endl;
                      break;
            case 0:   cout<<endl<<"Arrivederci"<<endl;
                      break;
            default: cout<<"Scelta non valida"<<endl<<endl;
            }
        }while(menu!=0);

}