Liste ordinate aiuto esame

chiara94

Nuovo Utente
1
0
Per via dell'incompetenza della mia prof ( con una preparazione davvero vergognosa ) chiedo a voi se potete aiutarmi a capire come funzionano a che servono i puntatori insomma mi manca anche un libro di testo che le tratti in maniera approfondita e non riesco a capire come proseguire da qui::ciaociao::ciaociao::ciaociao::suicidio:
La struttura dati richiesta è una lista ordinata rispetto al nome dei prodotti, le funzioni da implementare sono:
struttura dati menù testuale stampa del contenuto dell'intera struttura dati caricamento da file inserimento di un nuovo prodotto stampa di tutti i prodotti di un dato magazzino dato il codice cancellazione di un prodotto salvataggio dei dati su un file.




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


/*STRUTTURA DATI*/
typedef struct prodotto{
char codice_magazzino[7];
char nome_magazzino[20];
char città[20];
char codice_prodotto[7];
char nome[20];
float prezzo;
int numero_pezzi;
}prodotto;


typedef struct s{
prodotto info;
struct s*next;
}tipo_lista;


typedef tipo_lista*lista;


/*PROTOTIPI FUNZIONI*/


void init_lista(lista *L);
int stampa_dati(lista L);
int carica_file(lista *L);
void inserisci_prodotto(lista *L, char x);
void aggiornamento_prodotto(lista *L, char x);
int stampa_tutti_magazzino(lista L);
void cancella_prodotto(lista *L, prodotto p);
int salva_dati(lista *L);
void inserici_ordinamento(lista *L, char x);


/*MENU*/


int main(){
lista L;
int scelta;
char x;
prodotto prodotto;
init_lista(&L);
do{
printf("1) stampa il contenuto dell'intera struttura dati\n");
printf("2) caricamento da file\n");
printf("3) inserisci un nuovo prodotto\n");
printf("4) aggiorna il prodotto inserendo il codice del magazzino, il codice del prodotto e il numero di pezzi\n");
printf("5) stampa tutti i prodotti di un determinato magazzino\n");
printf("6) cancella un prodotto\n");
printf("7) salva i dati presenti in memoria centrale su memoria di massa\n");
switch (scelta){
case 1:{
printf("verrà stampato il contenuto dell'intera struttura dati\n");
printf(">>>>> ");
stampa_dati(L);
break;
}
case 2:{
printf("caricamento da file\n");
carica_file(&L);
break;
}
case 3:{
printf("inserisci un nuovo prodotto\n");
printf("inserisci il codice del prodotto per il nuovo inserimento in lista\n");
printf(">>>>> ");
scanf("%s\n", prodotto.codice_prodotto);
inserisci_prodotto(&L, x);
break;
}
case 4:{
printf("aggiorna il prodotto inserendo il codice del magazzino, il codice del prodotto e il numero di pezzi\n");
printf("se il prodotto non esiste verrà inserito\n");
printf("inserisci codice magazzino\n");
printf(">>>>> ");
scanf("%s\n", prodotto.codice_magazzino);
printf("inserisci il codice del prodotto\n");
printf(">>>>> ");
scanf("%s\n", prodotto.codice_prodotto);
printf("inserisci il numero di pezzi\n");
printf(">>>>> ");
scanf("%d\n", prodotto.numero_pezzi);
aggiornamento_prodotto(&L, x);
if (prodotto.codice_prodotto == NULL)
inserisci_prodotto(&L, x);
break;
}
case 5:{
printf("verranno stampati tutti i prodotti di un determinato magazzino\n");
printf("inserisci il codice del magazzino\n");
printf(">>>>> ");
scanf("%s\n", prodotto.codice_magazzino);
stampa_tutti(L);
break;
}
case 6:{
printf("cancellazione di un prodotto\n");
printf("inserisci il codice del prodotto da cancellare\n");
printf(">>>>> ");
scanf("%s\n", prodotto.codice_prodotto);
cancella_prodotto(&L, prodotto);
break;
}
case 7:{
printf("i dati presenti in memoria centrale verranno salvati in memoria di massa\n");
salva_dati(&L);
break;
}
}
} while (scelta != 0);
}


/*FUNZIONI*/




void init_lista(lista *L){
*L = NULL;
}


void inserimento_ordinato(lista *L, prodotto x){
prodotto prodotto;
int i = 0;
char p1, p2;
lista lista, p, q;
p = (lista)malloc(sizeof(lista));
p->info = prodotto;
p->next = NULL;
if (*L == NULL)
*L = p;
else{
if (strcmp(p1, p2) < 0){
p = (lista)malloc(sizeof(prodotto));
p->info = prodotto;
p->next = NULL;
}
else p = (lista)malloc(sizeof(prodotto));
p->info = prodotto;
p->next = NULL;
p1 = i + 2;
p2 = i + 2;
}
}




int stampa_dati(lista L){
prodotto prodotto;
printf("%s\n", prodotto.codice_magazzino);
printf("%s\n", prodotto.nome_magazzino);
printf("%s\n", prodotto.città);
printf("%s\n", prodotto.codice_prodotto);
printf("%s\n", prodotto.nome);
printf("%f\n", prodotto.prezzo);
printf("%d\n", prodotto.numero_pezzi);
}


int stampa_tutti(lista L){
while (L != NULL){
printf("%s\n %s\n %s\n %s\n %s\n %f\n %d\n", L->info);
L = L->next;
}
}




int carica_file(lista *L){
lista l, m;
prodotto prodotto;
FILE *in;
in = fopen("prodotto.txt", "r");
if (in == NULL){
printf("errore nel caricamento di prodotto.txt\n");
return 0;
}
while (fscanf(in, "%s\n %s\n %s\n %s\n %s\n %f\n %d\n", prodotto.codice_magazzino, prodotto.nome_magazzino, prodotto.città, prodotto.codice_prodotto, prodotto.nome, &prodotto.prezzo, &prodotto.numero_pezzi) != EOF){
if (l == NULL){
l = (l)malloc(sizeof(prodotto));
l->info = prodotto;
l->next = NULL;
l = m;
}
else{
inserimento_ordinato(&L, prodotto);
}
return 1;
}
fclose(in);
}


int salva_dati(lista *L){
prodotto prodotto;
FILE *out, *in;
in = fopen("prodotto.txt", "r");
if (in == NULL){
printf("errore nel caricamento di prodotto.txt\n");
return 0;
}
out = fopen("salva.txt", "w");
if (out == NULL){
printf("errore aprendo salva.txt\n");
return 0;
}
while (fscanf(in, "%s\n %s\n %s\n %s\n %s\n %f\n %d\n", prodotto.codice_magazzino, prodotto.nome_magazzino, prodotto.città, prodotto.codice_prodotto, prodotto.nome, &prodotto.prezzo, &prodotto.numero_pezzi) != EOF){
fprintf(out, "%s\n %s\n %s\n %s\n %s\n %f\n %d\n", prodotto.codice_magazzino, prodotto.nome_magazzino, prodotto.città, prodotto.codice_prodotto, prodotto.nome, prodotto.prezzo, prodotto.numero_pezzi);
}
fclose(out);
}
 

Ci sono discussioni simili a riguardo, dai un'occhiata!

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!

Discussioni Simili