Problema stampa file

di il
1 risposte

Problema stampa file

Ciao a tutti ragazzi, mi potreste aiutare con il mio problema?
Sto eseguendo un compito con liste di liste, ma non riesco a stampare i file dopo la carica.
Di seguito posto il codice.


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

#define C 9
#define N 16
#define D 32

//definizioni strutture
typedef struct{
	char cliente [C];
	char nome[N];
	int numero_ordine;
	int numero_pezzi;
}TAtomo_ordini;

typedef struct elem_lista_ordini{
	TAtomo_ordini dato;
	struct elem_lista_ordini *succ;
}ELista_ordini,*TLista_ordini;

typedef struct{
	int codice;
	char descrizione [D];
	float costo;
	TLista_ordini lista_ordini;
}TAtomo_prodotti;

typedef struct elem_lista_prodotti{
	TAtomo_prodotti dato;
	struct elem_lista_prodotti *succ;
}ELista_prodotti,*TLista_prodotti;

//dichiarazioni funzioni

int null_ordini(TLista_ordini);
int null_prodotti(TLista_prodotti);
void cons_ordini(TLista_ordini *,TAtomo_ordini);
void cons_prodotti(TLista_prodotti *,TAtomo_prodotti);
TAtomo_ordini car_ordini(TLista_ordini);
void insord_ordini(TLista_ordini *,TAtomo_ordini);
TLista_prodotti cerca_cod_prodotto(TLista_prodotti,int);
void carica_prodotti(TLista_prodotti *);
void carica_ordini(TLista_prodotti);
void stampa_prodotti_ordini(TLista_prodotti,TAtomo_ordini);


void main(void) {

	int x;
	TLista_prodotti lp;
	TAtomo_ordini ordini;

	printf("\n******MENU******\n\n");
	printf("1.Carica file ordini e prodotti\n");
	printf("2.Stampa file ordini e prodotti\n");
	printf("3.Calcola cifra totale per ogni cliente\n");
	printf("4.Evasione ordine\n\n");
	printf("\nFare una scelta (1-4): ");
	scanf("%d",&x);

	if(x<5&&x>=0){
	switch(x){
	case 1: {
		carica_prodotti(&lp);

	 	carica_ordini(lp);
	         }
		break;
	case 2:
		stampa_prodotti_ordini(lp,ordini);
		break;
	case 3:
		break;
	case 4:
		break;
	}
	}

	else
		printf("\n\nErrore scelta\n\n");

	system("PAUSE");
}


int null_ordini(TLista_ordini l){
	return(l==NULL);
}

int null_prodotti(TLista_prodotti l){
	return(l==NULL);
}

void cons_ordini(TLista_ordini *l,TAtomo_ordini e){
	TLista_ordini tmp;
	tmp=(TLista_ordini)malloc(sizeof(ELista_ordini));
	if(tmp==NULL) return;
	tmp->dato=e;
	tmp->succ=*l;
	*l=tmp;
}

void cons_prodotti(TLista_prodotti *l,TAtomo_prodotti e){
	TLista_prodotti tmp;
	tmp=(TLista_prodotti)malloc(sizeof(ELista_prodotti));
	if(tmp==NULL) return;
	tmp->dato=e;
	tmp->succ=*l;
	*l=tmp;
}


TAtomo_ordini car_ordini(TLista_ordini l){
	if(!null_ordini(l)){
		return(l->dato);
	}
}

void insord_ordini(TLista_ordini *l,TAtomo_ordini e){
	if(null_ordini(*l)||car_ordini(*l).numero_ordine>e.numero_ordine)
		cons_ordini(l,e);
	else
		insord_ordini(&(*l)->succ,e);
}

TLista_prodotti cerca_cod_prodotto(TLista_prodotti l,int cod_prodotto){
	while(!null_prodotti(l)){
		if(l->dato.codice ==cod_prodotto) break;
		l=l->succ;
	}
	return l;
}


void carica_prodotti(TLista_prodotti *l){
	FILE *fp;
	TAtomo_prodotti tmp;
	fp=fopen("prodotti.txt","r");
	if(fp!=NULL){
		while(fscanf(fp,"%d\n",&tmp.codice)!=EOF){
		fgets(tmp.descrizione,D,fp);
		fscanf(fp,"%f\n",&tmp.costo);
		tmp.lista_ordini=NULL;
		cons_prodotti(l,tmp);
		}

	}
	else
		printf("Errore carica file prodotti");

	fclose(fp);
	printf("\n\nCaricamento prodotti ultimato\n\n");
}


void carica_ordini(TLista_prodotti l){
	FILE *fp;
	TAtomo_ordini tmp;
	int cod;
	TLista_prodotti p;
	fp=fopen("ordini.txt","r");
	if(fp!=NULL){
		while(fscanf(fp,"%d\n",&cod)!=EOF){
			fgets(tmp.cliente,C,fp);
			tmp.cliente[strlen(tmp.cliente)-1]='\0';
			fgets(tmp.nome,N,fp);
			fscanf(fp,"%d\n",&tmp.numero_ordine);
			fscanf(fp,"%d\n",&tmp.numero_pezzi);
			p=cerca_cod_prodotto(l,cod);
			if(p==NULL)
				printf("Prodotto nn trovato\n");
			else
				insord_ordini(&(p->dato.lista_ordini),tmp);

		}
		fclose(fp);
		printf("Caricamento ordini ultimato\n\n");
	}
}

void stampa_prodotti_ordini(TLista_prodotti l,TAtomo_ordini e){

	while(!null_prodotti(l)){

		TLista_ordini p2;

		printf("Prodotto:\n");
		printf("Codice prodotto:%d\n",l->dato.codice);
		printf("Codice cliente:%s\n",l->dato.descrizione);
		printf("Costo:%f\n",l->dato.costo);
		p2=l->dato.lista_ordini;
		while(!null_ordini(p2)){
			printf("Codice cliente:%s\n",e.cliente);
			printf("Cognome e nome del cliente:%s\n",e.nome);
			printf("Numero ordine:%d\n",e.numero_ordine);
			printf("Numero pezzi:%d\n",e.numero_pezzi);

			p2=p2->succ;
		}

		l=l->succ;
	}
}







1 Risposte

  • Re: Problema stampa file

    Non essere così generico.

    Se si ha un problema si deve presentare in modo da facilitare il compito di chi ti vuole aiutare.

    "Non riesci" non significa molto ...
Devi accedere o registrarti per scrivere nel forum
1 risposte