ho dei piccoli problemi alquanto stupidi...
il programma deve semplicemente leggere da input i dati di alcuni libri...dopo di che deve dare l'opportunità di face determinate cose....
vi posto il codice...
- Codice: Seleziona tutto
#include "stdafx.h"
#include "iostream"
#include "stdlib.h"
#include "string.h"
#define MINISTERO 245
#define L_MAX 40
#define LIBRI_MAX 100
using namespace std;
typedef struct /*definizione del tipo data*/
{
char titolo[L_MAX];
char autore[L_MAX];
char casaeditrice[L_MAX];
float prezzo;
char isbn[L_MAX];
}data;
int menu();
int inserimento(data libri[]);
float totale(data libri[], int N);
void controllo(int somma);
void indicizzazione(data libri[], int N, int IND_AUT[], int IND_TITLE[], int IND_CASA[], int IND_ISBN[], int IND_PREZZO[]);
void menu_ord(data libri[], int N, int IND_AUT[], int IND_TITLE[], int IND_CASA[], int IND_ISBN[], int IND_PREZZO[]);
void stampa (data libri[], int N, int INDICE[]);
void main()
{
int IND_AUT[LIBRI_MAX]; //variabili indicizzazione
int IND_TITLE[LIBRI_MAX];
int IND_CASA[LIBRI_MAX];
int IND_ISBN[LIBRI_MAX];
int IND_PREZZO[LIBRI_MAX];
data libri[LIBRI_MAX];
int scelta1=0;
int scelta2=0;
int N=0;
float somma=0;
while(scelta1!=4)
{
scelta1=0;
scelta1=menu();
switch (scelta1)
{
case 1:
system("cls");
N=inserimento(libri);
indicizzazione(libri,N,IND_AUT,IND_TITLE,IND_CASA,IND_ISBN,IND_PREZZO);
break;
case 2:
system("cls");
somma=totale(libri,N);
break;
case 3:
system("cls");
menu_ord(libri,N,IND_AUT,IND_TITLE,IND_CASA,IND_ISBN,IND_PREZZO);
}
}
}
int menu()//finita
{
int scelta1=0;
while(scelta1<1 || scelta1>4)
{
system("cls");
cout<<"1 - Inserisci libri\n";
cout<<"2 - Controlla se il prezzo totale dei libri rientra nella normativa vigente\n";
cout<<"3 - Visualizza secondo l'ordine che preferisci\n";
cout<<"4 - Exit\n";
cin>>scelta1;
}
return scelta1;
}
int inserimento(data libri[])
{
int N=0;
int i=0;
char let;
for (i=0;let!='n';i++)
{
system("cls");
printf("--->LIBRO ");
printf("%d",i+1);
printf("<---\n\n");
printf("TITOLO\n");
gets(libri[i].titolo);
printf("\nAUTORE\n");
gets(libri[i].autore);
printf("\nCASA EDITRICE\n");
gets(libri[i].casaeditrice);
printf("\nCODICE ISBN\n");
gets(libri[i].isbn);
printf("\nCOSTO\n");
cin>>libri[i].prezzo;
N++;
system("cls");
cout<<"Vuoi continuare? (s/n)\n";
cin>>let;
}
return N;
}
float totale(data libri[], int N)
{
int i=0;
float somma=0;
for(i=0;i<N;i++)
{
somma=somma+libri[i].prezzo;
}
return somma;
}
void controllo(int somma)
{
if(somma>MINISTERO)
{
cout<<"Totale della spesa: "<<somma<<" euro\n";
cout<<"Si e' superato il tetto massimo di spesa di :"<<somma-MINISTERO<<"\n";
cout<<"\n\n\nPremi invio per continuare...";
cin.get();
}
else
{
cout<<"Totale della spesa: "<<somma<<" euro\n";
cout<<"Non si e' superato il tetto massimo di spesa ("<<MINISTERO<<" euro)\n";
cout<<"\n\n\nPremi invio per continuare...";
cin.get();
}
}
void menu_ord(data libri[], int N, int IND_AUT[], int IND_TITLE[], int IND_CASA[], int IND_ISBN[], int IND_PREZZO[])
{
int scelta2=0;
while(scelta2<1 || scelta2>5)
{
system("cls");
cout<<"Secondo quale criterio vuoi visualizzare?\n";
cout<<"1 - Titolo\n";
cout<<"2 - Autore\n";
cout<<"3 - Codice ISBN\n";
cout<<"4 - Prezzo\n";
cout<<"5 - Torna al menu' precedente\n";
cin>>scelta2;
}
switch (scelta2)
{
case 1:
system("cls");
stampa (libri, N, IND_TITLE);
break;
case 2:
system("cls");
stampa (libri, N, IND_AUT);
break;
case 3:
system("cls");
stampa (libri, N, IND_ISBN);
break;
case 4:
system("cls");
stampa (libri, N, IND_PREZZO);
default: ;
}
}
void indicizzazione(data libri[], int N, int IND_AUT[], int IND_TITLE[], int IND_CASA[], int IND_ISBN[], int IND_PREZZO[])
{
int ultimo_scambio=0;
int i;
int temp;
/*inizializzazione indici*/
for(i=0;i<N;i++)
{
IND_AUT[i]=i;
IND_TITLE[i]=i;
IND_CASA[i]=i;
IND_ISBN[i]=i;
IND_PREZZO[i]=i;
}
/*indicizza autore*/
do
{
ultimo_scambio=0;
for(i=0;i<N-1;i++)
{
if(strcmp(libri[IND_AUT[i]].autore,libri[IND_AUT[i+1]].autore)>0)
{
ultimo_scambio=i+1;
temp=IND_AUT[i];
IND_AUT[i]=IND_AUT[i+1];
IND_AUT[i+1]=IND_AUT[i];
}
N=ultimo_scambio;
}
}while (ultimo_scambio!=0);
/*indicizza titolo*/
do
{
ultimo_scambio=0;
for(i=0;i<N-1;i++)
{
if(strcmp(libri[IND_TITLE[i]].titolo,libri[IND_TITLE[i+1]].titolo)>0)
{
ultimo_scambio=i+1;
temp=IND_TITLE[i];
IND_TITLE[i]=IND_TITLE[i+1];
IND_TITLE[i+1]=IND_TITLE[i];
}
N=ultimo_scambio;
}
}while (ultimo_scambio!=0);
/*indicizza casa editrice*/
do
{
ultimo_scambio=0;
for(i=0;i<N-1;i++)
{
if(strcmp(libri[IND_CASA[i]].casaeditrice,libri[IND_CASA[i+1]].casaeditrice)>0)
{
ultimo_scambio=i+1;
temp=IND_CASA[i];
IND_CASA[i]=IND_CASA[i+1];
IND_CASA[i+1]=IND_CASA[i];
}
N=ultimo_scambio;
}
}while (ultimo_scambio!=0);
/*indicizza ISBN*/
do
{
ultimo_scambio=0;
for(i=0;i<N-1;i++)
{
if(strcmp(libri[IND_ISBN[i]].isbn,libri[IND_ISBN[i+1]].isbn)>0)
{
ultimo_scambio=i+1;
temp=IND_ISBN[i];
IND_ISBN[i]=IND_ISBN[i+1];
IND_ISBN[i+1]=IND_ISBN[i];
}
N=ultimo_scambio;
}
}while (ultimo_scambio!=0);
/*indicizza prezzo*/
do
{
ultimo_scambio=0;
for(i=0;i<N-1;i++)
{
if(libri[IND_PREZZO[i]].prezzo>libri[IND_PREZZO[i+1]].prezzo)
{
ultimo_scambio=i+1;
temp=IND_PREZZO[i];
IND_PREZZO[i]=IND_PREZZO[i+1];
IND_PREZZO[i+1]=IND_PREZZO[i];
}
N=ultimo_scambio;
}
}while (ultimo_scambio!=0);
}
void stampa(data libri[],int N, int INDICE[])
{
int i=0;
cout.width(30);
cout<<"TITOLO";
cout.width(30);
cout<<"AUTORE";
cout.width(30);
cout<<"CASA EDITRICE";
cout.width(30);
cout<<"CODICE ISBN";
cout.width(6);
cout<<"PREZZO";
cout<<"\n";
cout<<"\n";
for (i=0;i<N;i++)
{
cout.width(30);
cout<<libri[INDICE[i]].titolo;
cout.width(30);
cout<<libri[INDICE[i]].autore;
cout.width(30);
cout<<libri[INDICE[i]].casaeditrice;
cout.width(30);
cout<<libri[INDICE[i]].isbn;
cout.width(6);
cout<<libri[INDICE[i]].prezzo;
cout<<"\n";
cout<<"\n";
}
cin.get();
}
il problema sta nel fatto che durante l'inserimento non mi fa inserire il titolo e salta subito all'autore...
seconda cosa dove ho messo cin.get() per fare una pausa forzata non me la vede ed è come se lo saltasse...
potrebbe dipendere dal fatto che il "buffer" della cin contiene gia qualcosa??se si come lo svuoto?
confido in voi...mi scuso con il codice...spero sia leggibile...nel qualcaso datemi consigli anche su quello
grazie!