Compito su una mini banca

di il
2 risposte

Compito su una mini banca

Salve, il mio docente mi ha chiesto di realizzare una mini banca con un menù contenenti le varie funzioni, fin qui tutto bene sono riuscito ad elaborare il programma completo, inoltre mi ha chiesto di creare una scelta nel menù che crei un formato compattato del file con i dati...il problema è che quando provo a stampare a video il file compattato esso mi stampa i valori in modo disordinato..potreste aiutarmi?
1) programma sulla banca

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

 struct daticliente {
	int conto; //numero di conto
	char cognome[20]; //cognome utente
	char nome[20]; //nome utente
	double bilancio; //bilancio conto

};

int main() {

	FILE *ptf; //puntatore a file

	//crea dati cliente con informazioni di default
	struct daticliente cliente= {0,"", "", 0.0};

	/*fopen apre il file; se non riesce ad aprire il file;
   	 * provoca l'uscita dal file
   	 */
	if((ptf=fopen("credit.dat", "rb+"))==NULL) {
		printf ("ERRORE: file non aperto corretamente\n");
	}
	else {
		//chiede all'utente di specificare il numero del conto
		printf ("inserisci numero di conto\n-"
				"da 1 a 100, 0 per terminare l'inserimento degli input\n");
		scanf ("%d", &cliente.conto);
		/* l'utente inserisce le informazioni che verranno copiate nel file. */
		while (cliente.conto !=0) {
			// l'utente inserisce il cognome, il nome e il bilancio
			printf ("inserisci: cognome, nome, bilancio:\n");
			//imposta il cognome il nome e il bilancio del record

			fscanf(stdin, "%s%s%lf", cliente.cognome, cliente.nome, &cliente.bilancio);

			//trova la posizione nel file specificato dall'utente
			fseek(ptf,(cliente.conto-1) * sizeof(struct daticliente), SEEK_SET);

			//scrive l informazione specificata dall' utente nel file
			fwrite (&cliente, sizeof(struct daticliente),1,ptf);

			// consente all'utente di specificare un altro numero di conto

			printf("inserisci un numero di conto:\n");
			scanf("%d", &cliente.conto);
		} //fine while
      fclose(ptf); //chiusura file
	} //fine else



system ("PAUSE");
return 0;


}

2) programma per il file compattato da stampare a video

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

struct daticliente {
	int conto; //numero di conto
		char cognome[20]; //cognome utente
		char nome[20]; //nome utente
		double bilancio; //bilancio conto
};





int main() {

	FILE *ptf;

	//crea dati cliente con informazioni di default
		struct daticliente cliente= {0,"", "", 0.0};

		/*fopen apre il file; se non riesce ad aprire il file;
	   	 * provoca l'uscita dal file
	   	 */
		if((ptf=fopen("credit.dat", "rb"))==NULL) {
			printf ("ERRORE: file non aperto corretamente\n");
		}
		else {
			printf("%-6s%-16s%-11s%10s\n", "N. conto", "COGNOME", "NOME", "BILANCIO");

			while(!feof(ptf)) {
			//legge tutti i record da file finche non viene visualizzato l EOF
			fread(&cliente, sizeof(struct daticliente),1,ptf);

			//visualizza il record
			if(cliente.conto !=0) {
				printf("%-6d%-16s%-11s%10.2f\n",cliente.conto, cliente.cognome, cliente.nome, cliente.bilancio);
			} //fine if
			}//fine while

			fclose(ptf);//chiusura file
		}//fine else


	system("PAUSE");
	return 0;
} //fine main

2 Risposte

  • Re: Compito su una mini banca

    Esattamente "disordinato" come ?
  • Re: Compito su una mini banca

    oregon ha scritto:


    Esattamente "disordinato" come ?
    nel senso che non mi esce nel modo preposto cioe |numero di conto|cognome|nome|bilancio|
    ma in maniera casuale per ogni riga e le righe non sono giuste (non corrispondono) e alcune volte il nome viene spezzato da cifre

    1) modo corretto
    ||conto||cognome||nome||bilancio||
    12 rossi mario 12.36
    18 verdi luca 11.36
    16 gialli marco 45.69
    2) modo in cui mi appare
    ||conto |ro|ssi || nome|| bi||65448ca
    12 ||cognome 12.69
    verdi || 13 12.65 mar48979

    ecco io ora non so come risolvere perchè con il docente non abbiamo mai fatto un esercizio del genere e il libro di testo che utilizziamo si ferma solo alla creazione di questo file di testo formattato e non mostra i procedimenti di come stamparlo
Devi accedere o registrarti per scrivere nel forum
2 risposte