Problema con progetto in C: Negozio Musicale

di il
3 risposte

Problema con progetto in C: Negozio Musicale

Buongiorno a tutti, devo fare questo progetto per scuola ma non riesco più ad andare avanti!! In allegato c'è la consegna. se volete vi mando anche il codice che sono riuscito a scrivere io. Vi prego aiutatemi, grazie
Allegati:
progetto in allegato
progetto in allegato

3 Risposte

  • Re: Problema con progetto in C: Negozio Musicale

    Troppo facile così non credi?
    Posta ciò che hai fatto e proviamo a ragionare su ciò che non sei riuscito a fare...Così sarebbe troppo per chi ti vuole aiutare
  • Re: Problema con progetto in C: Negozio Musicale

    Ho diviso il codice in 3 file: es.c, disco.c, disco.h

    codice di disco.h:
    typedef struct elem {
    char titolo; //campi della struct
    char artista;
    char genere;
    int annouscita;
    struct elem *next; //puntatore al prossimo nodo della lista
    //struct elem *prev; //puntatore al precedente nodo della lista
    } elemen_t;

    typedef elemen_t *lista_t;

    void printlist(lista_t lista);
    int is_empty(lista_t lista);
    int length(lista_t lista);
    lista_t insert(lista_t lista, char titolo, char artista, char genere, int annouscita);



    codice di disco.c:
    // Definizione dei tipi
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "disco.h"

    // Funzioni

    void printlist(lista_t lista) {
    lista_t curr;
    for(curr = lista; curr != NULL; curr = curr->next) {
    printf("%d\t",curr->titolo);
    printf("%d\t",curr->artista);
    printf("%d\t",curr->genere);
    printf("%d\t",curr->annouscita);
    }
    printf("\n");
    }

    int is_empty(lista_t lista) {
    return(lista == NULL);
    }

    int length(lista_t lista) {
    int n = 0;
    while(lista != NULL) {
    n++;
    lista = lista->next;
    }
    return n;
    }

    lista_t insert(lista_t lista, char titolo, char artista, char genere, int annouscita) {
    elemen_t *paux;
    paux = (elemen_t*) malloc(sizeof(elemen_t));
    if (paux == NULL){
    fprintf(stderr, "Out of memory\n");
    exit(-1);
    }
    paux->titolo = titolo;
    paux->artista = artista;
    paux->genere = genere;
    paux->annouscita = annouscita;
    paux->next = lista;
    return paux;
    }


    codice di es.c:
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
    #include "disco.h"


    int main(int argc, char *argv[]) {
    FILE *fin;
    lista_t lista = NULL;


    //copio i dati del file nella lista
    //fin = fopen(argv[1],"r");

    //struct nodo

    if (argc < 2){
    printf("\nSpecificare l'archivio dei dischi.\n\n");
    return 1;


    } else if (argc < 3){
    printf("\nProgramma richiamato senza opzioni.\n\n");
    system("cat archivio.txt");
    printf("\n");
    return 1;

    } else if (strcmp(argv[2],"-i") == 0){ //confronto il terzo argomento con la stringa -i
    fin = fopen(argv[1],"a+");
    if (fin == NULL){
    printf("Errore nell’apertura dell'archivio.\n");
    //}if (argv[3] || argv[4] || argv[5] || argv[6] == NULL){
    // printf("\nErrore: non hai scritto tutti i dati richiesti.\n\n");
    // return 1;
    }else{
    //if (){
    // printf("Errore nell’apertura dell'archivio.\n");
    //}

    fprintf(fin, "%s\t%s\t%s\t%s\n", argv[3],argv[4],argv[5],argv[6]);
    system("cat archivio.txt");
    printf("\n");

    }

    lista = insert(lista, argv[3], argv[4], argv[5], argv[6]);
    printf("La lista e’ lunga %d elementi.\n", length(lista));
    printlist(lista);
    printf("La lista e’ vuota se c'è un uno: %d.\n", is_empty(lista));

    }else if (strcmp(argv[2],"-t") == 0){
    system("cat archivio.txt");
    return 1;
    }else if (strcmp(argv[2],"-c") == 0){
    system("cat archivio.txt");
    return 1;
    }else if (strcmp(argv[2],"-a") == 0){
    system("cat archivio.txt");
    return 1;
    }else if (strcmp(argv[2],"-y") == 0){
    system("cat archivio.txt");
    return 1;
    }else if (strcmp(argv[2],"-g") == 0){
    system("cat archivio.txt");
    return 1;
    }else{
    printf("\nOpzione non prevista.\n\n");
    return 1;
    }

    if ( fclose(fin) != 0 ) { //verifico la corretta chiusura del file
    printf("Errore nella chiusura dell'archivio.\n\n");
    exit(1);
    }
    //return 0;
    }
  • Re: Problema con progetto in C: Negozio Musicale

    La mia idea è quella di avere una lista di record con tutti i dischi in modo da implementare le opzioni di ricerca disco, titolo, genere e anno.
    il primo problema però è che il codice che sono riuscito a scrivere mi crea solo la lista composta di un elemento che è quello che inserisco da linea di comando e per giunta se inserisco titolo artista genere e anno, nel file archivio.txt me li scrive giusti mentre quando richiamo la printlist non mi scrive i caratteri ma dei numeri. il secondo problema è che non riesco a creare la lista, mi spiego meglio.
    nel mio archivio devo tenere la lista dei dischi quindi quando ne inserisco uno, questo viene messo alla fine del file,quello che non so fare è leggere il file archivio.txt e inserire nella lista i precedenti record in modo da avere una lista con tutti i precord presenti in archivio.txt e anche l'ultimo inserito; così facendo per implementare le opzioni mi basta fare un for e passare per ogni record e vedere (per esempio se il titolo è lo stesso), aiutatemi vi prego
Devi accedere o registrarti per scrivere nel forum
3 risposte