Oppure

Loading
23/02/10 20:56
ssc
ciao a tutti mi servirebbe le correzione di questo progetto entro domani perchè devo consegnarlo...mi da 3 errori...

il testo
Si supponga di voler gestire un archivio di dischi. Supponiamo di avere n categorie
musicali identificate da un codice numerico e dal nome del genere (jazz, rock, punk,
ecc..) e di disporre di possibili dischi identificati da un titolo, autore e prezzo. Per
gni categoria è possibile inserire fino a m prodotti.
Gestire l’archivio in modo tale che l’utente può
· Data una categoria inserire un nuovo disco se è possibile. Considerare anche
le posizioni dei prodotti eventualmente venduti.
· Dato solo il titolo eliminare un prodotto.
· Restituire il titolo e la categoria del disco con prezzo minore.


il codice cn i relativi errori


#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 5
#define N 15
typedef struct 
{
char titolo[N];
char autore[N];
int prezzo;
} Disco;
enum Categorie
{
ROCK,
JAZZ,
POP,
HOUSE,
ITALIANO,
LATINO,
CATEGORIE
};
typedef struct 
{
char genere[N];
int codice;
int dischi;
Disco disco[M];
} Categoria;
Categoria categoria[CATEGORIE]; 
Disco disco[M];
int record_inseriti;

void visualizzazione_record();
int elimina_disco(const char * titolo);
int inserimento_nuovo_record();
int trova_prezzo_minore(int * picat);
void assegna_categorie();
int main()
{

enum { 
inserimento,
ordinamento_descrescente,
visualizzazione,
eliminazione,
uscita
} operazione;
do {
system("cls");
printf("Che operazione vuoi eseguire? ");
printf("\n\t 1. Inserisci nuovo disco");
printf("\n\t 2. Restituisci disco con prezzo minore");
printf("\n\t 3. Visualizza tutti dischi");
printf("\n\t 4. Elimina un disco");
printf("\n\t 5. Esci\n\t ");
scanf("%d", &operazione);

getchar();

switch(--operazione) {
case inserimento:
inserimento_nuovo_record();
break;
case ordinamento_descrescente:
trova_prezzo_minore();
printf("\nIl disco con prezzo minore e' ");
break;
case visualizzazione:
visualizzazione_record();
break;
case eliminazione:
elimina_disco();
puts ("Inserisci il disco che vuoi eliminare\n");


break;
case uscita:
break;
default:
printf("\nHai effettuato una scelta non valida");
}

if(operazione != uscita) {
printf("\n\nPremi INVIO per continuare.");
getchar();
}

} while(operazione != uscita);

printf("\nPremi INVIO per uscire.");
getchar();
return 0;
}


//definizione della funzione di visualizzazione dei record
void visualizzazione_record()
{
int i;

if(!record_inseriti) {
printf("\nNon sono presenti record all'interno della tabella.");
return;
}

printf("\n%-15s %-15s %6s", "Titolo", "Autore", "Prezzo");
for(i = 0; i < record_inseriti; i++) {
printf("\n%-15s %-15s %6d", Disco[].titolo, Disco[].autore, Disco[].prezzo);
}
}


int elimina_disco(const char * titolo)
{
int icat, idis;
for (icat=0; icat<CATEGORIE; icat++)
{
int dischi = categoria[icat].dischi;
for (idis=0; idis < dischi; idis++)
{
if (strncmp(titolo, categoria[icat].disco[idis].titolo, N-1) == 0)
{
if ( idis != dischi-1)
memcpy(&(categoria[icat].disco[idis]), &(categoria[icat].disco[dischi-1]), sizeof(Disco));
categoria[icat].dischi--;
return categoria[icat].dischi;
}
}
}
return -1;
}

int trova_prezzo_minore(int * picat)
{
int prezzo_minore;
int icat, idis, idis_trovato=-1;
*picat = -1;
for (icat=0; icat<CATEGORIE; icat++)
{
int dischi = categoria[icat].dischi;
for (idis=0; idis < dischi; idis++)
{
if ( prezzo_minore > categoria[icat].disco[idis].prezzo )
{
prezzo_minore = categoria[icat].disco[idis].prezzo;
idis_trovato = idis;
*picat = icat;
}
}
}
return idis_trovato;
} 

void assegna_categorie()
{
categoria[ROCK].codice = ROCK;
strncpy(categoria[ROCK].genere, "rock", N-1);
categoria[ROCK].dischi = 0;

categoria[JAZZ].codice = JAZZ;
strncpy(categoria[JAZZ].genere, "jazz", N-1);
categoria[JAZZ].dischi = 0;

categoria[POP].codice = POP;
strncpy(categoria[POP].genere, "pop", N-1);
categoria[POP].dischi = 0;

categoria[HOUSE].codice = HOUSE;
strncpy(categoria[HOUSE].genere, "house", N-1);
categoria[HOUSE].dischi = 0;

categoria[ITALIANO].codice = ITALIANO;
strncpy(categoria[ITALIANO].genere, "italiano", N-1);
categoria[ITALIANO].dischi = 0;

categoria[LATINO].codice = LATINO;
strncpy(categoria[LATINO].genere, "latino", N-1);
categoria[LATINO].dischi = 0;
} 

int aggiungi_disco(int codice, const char * titolo, const char * autore, int prezzo)
{
int indice;
if (codice < 0 || codice >= CATEGORIE) return -1;

if (categoria[codice].dischi >= M) return -2;
indice = categoria[codice].dischi;
strncpy(categoria[codice].disco[indice].autore, autore, N-1);
strncpy(categoria[codice].disco[indice].titolo, titolo, N-1);
categoria[codice].disco[indice].prezzo = prezzo;
categoria[codice].dischi++;
return categoria[codice].dischi;
} 
//definizione della funzione di inserimento di un nuovo record

int inserimento_nuovo_record()
{
int iCat;
int iCatScelta;
int prezzo;
char titolo[256];
char autore[256];
printf("scegli la categoria: \n");
for (iCat=0; iCat<CATEGORIE; iCat++)
{
printf("%d) %s\n", iCat, categoria[iCat].genere);
for(;;)
{
scanf("%d", &iCatScelta);
if ( iCatScelta >= 0 || iCatScelta < CATEGORIE) break;
printf("categoria non valida\n");
}
printf("inserisci il titolo: ");
scanf("%s", titolo);
printf("\ninserisci l'autore: ");
scanf("%s", autore);
printf("\ninserisci il prezzo: ");
scanf("%d", & prezzo);
return aggiungi_disco(categoria[iCatScelta].codice,titolo, autore, prezzo);
} 
}



ERRORI
C:\Users\Rita\Desktop\Nuova cartella (2)\stella.c(65) : error C2198: 'trova_prezzo_minore' : too few actual parameters
C:\Users\Rita\Desktop\Nuova cartella (2)\stella.c(72) : error C2198: 'elimina_disco' : too few actual parameters
C:\Users\Rita\Desktop\Nuova cartella (2)\stella.c(108) : error C2059: syntax error : 'type'
Error executing cl.exe.

stella.obj - 3 error(s), 0 warning(s)

EDIT by HeDo: Il codice va racchiuso tra i tag code
Ultima modifica effettuata da HeDo 24/02/10 9:23
aaa
23/02/10 21:38
lorenzo
sia trova_pezzo che elimina_disco vogliono un parametro in ingresso ma nello switch tu le richiami con zero parametri
aaa