Il programma gestisce le informazioni di una banca:
esso aggiornerà i conti esistenti, aggiungera dei conti nuovi, (li eliminerà) e stampa a video la lista con tutti i conti
IL programma a 5 scelte:
1 stampa elenco conti
2 updateRecord per aggiornare un conto (aggiorna un conto gia esistente)
3 new record aggiungere un nuovo conto
4 delete record per eliminare un conto
5 uscita programma
il programma mi da problemi di stampa
la stampa avviene in questo modo:
||CONTO||COGNOME||NOME||BILANCIO||
1 ROSSI @( 11.00
2 GIALLI (998@ 00.00
INVECE DOVREBBE USCIRE:
||CONTO||COGNOME||NOME||BILANCIO||
1 ROSSI MARCO 12.56
2 GIALLI ANTONIO 09.88
#include <stdio.h>
#include <stdlib.h>
struct DatiCliente {
int conto; //numero di contocorrente
char cognome[50]; //cognome del cliente
char nome[50]; //nome del cliente
double bilancio; //bilancio denaro cliente
};
//prototipi
int sceltamenu(void);
void stampaFile(FILE*ptf);
void aggiungiConto(FILE*ptf);
void aggiornaConto(FILE*ptf);
void eliminaConto(FILE*ptf);
int main() {
int scelta; //scelta utente per operazioni in menu
FILE*cptf;
//fopen apre il file se non riesce ad aprirlo provoca l'uscita dal programma
if((cptf=fopen("elencoCLienti.dat", "rb+"))==NULL) {
printf("ERRORE: file non aperto correttamente\n\a");
}//fine if
else {
//permette all'utente di specificare un azione
while((scelta=sceltamenu())!=5){
switch(scelta) {
//stampa contenuti file
case 1:
stampaFile(cptf);
break;
case 2:
aggiungiConto(cptf);
break;
case 3:
aggiornaConto(cptf);
break;
case 4:
eliminaConto(cptf);
break;
//visualizza un messaggio se l'utente non specifica una scelta valida
default:
printf("ERRORE: la scelta selezionata non e' corretta");
break;
}//fine switch
}//fine while
fclose(cptf);//chiude il file
}//fine else
system("PAUSE");
return 0;
}//fine main
//stampa a video il contenuto del file
void stampaFile(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("elencoClienti.dat", "rb"))==NULL) {
printf ("ERRORE: file non aperto corretamente\n");
}
else {
printf("%-15s%-20s%-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("%-15d%-20s%-11s%10.2f\n",cliente.conto, cliente.cognome, cliente.nome, cliente.bilancio);
} //fine if
}//fine while
fclose(ptf);//chiusura file
}//fine else
}//fine stampa
void aggiornaConto(FILE*ptf) {
int conto; //numero di conto
double trans; //transazione conto
//crea dati cliente con info di default
struct DatiCliente cliente = { 0, "", "", 0.0 };
//ottiene numero di conto da aggiornare
printf("inserisci il numero di conto da aggiornare (1-100): ");
scanf("%d", &conto);
//sposta il puntatore del file nel punto del record giusto del file
fseek(ptf,(conto-1)*sizeof(struct DatiCliente),SEEK_SET);
//legge il record da file
fread(&cliente, sizeof(struct DatiCliente),1,ptf);
//visualizza un messaggio di errore se il conto non esiste
if(cliente.conto==0) {
printf("ERRORE: il conto #%d non risulta essere attivo\n", conto);
}//fine if
else { //aggiornamento record
printf("%-15d%-20s%-11s%10.2f\n\n", cliente.conto,
cliente.cognome,cliente.nome, cliente.bilancio);
//richiesta di inserire il bilancio da aggiornare
printf("inserisci il denaro da aggiungere al conto: ");
scanf("%lf", &trans);
cliente.bilancio += trans; //aggiornamento bilancio
printf("%-15d%-20s%-11s%10.2f\n",
cliente.conto, cliente.cognome, cliente.nome, cliente.bilancio);
//sposta il puntatore del file per correggere il record nel file
fseek(ptf,(conto-1)*sizeof(struct DatiCliente), SEEK_SET);
//sovrascrizione del vecchio record con il nuovo record aggiornato
fwrite(&cliente, sizeof(struct DatiCliente),1,ptf);
}//fine else
}//fine aggiorna conto
//cancella conto esistente
void eliminaConto(FILE*ptf) {
struct DatiCliente cliente; //memorizza il record letto da file
struct DatiCliente blankcliente= {0,"","",0}; //cliente vuoto
int conto;
//ottieni il numero del conto da cancellare
printf("inserisci il numero di conto da cancellare (1-100): ");
scanf("%d",&conto);
//sposta il puntatore del file nel punto del record
fseek(ptf,(conto-1)*sizeof(struct DatiCliente), SEEK_SET);
//legge il record del file
fread(&cliente, sizeof(struct DatiCliente),1,ptf);
//visualizza un messaggio di errore se il conto non esistesse
if(cliente.conto==0) {
printf("ERRORE:il conto #%d non esiste\n", cliente.conto);
}//fine if
else { //cancella record
//sposta il puntatore del file ne punto giusto del record
fseek(ptf, (conto-1)*sizeof(struct DatiCliente), SEEK_SET);
//legge il record del file
fread(&cliente,sizeof(struct DatiCliente),1,ptf);
//visualizza un messaggio d'errore se il conto non esiste
}//fine else
if(cliente.conto==0) {
printf("ERRORE: il conto #%d non esiste", conto);
}//fine if
else {
//sposta il puntatore del punto giusto del file
fseek(ptf,(conto-1)*sizeof(struct DatiCliente), SEEK_SET);
//sostituisce il record esistente con uno vuoto
fwrite(&blankcliente, sizeof(struct DatiCliente),1,ptf);
}//fine else
}//fine cancella conto
void aggiungiConto(FILE*ptf) {
struct DatiCliente cliente= {0,"","",0.0}; //record con informazioni di default
int conto; //numero conto
// ottieni il numero del conto da creare
printf("inserisci il nuovo numero di conto (0-100): ");
scanf("%d",&conto);
//sposta il puntatore del file nel punto di record giusto nel file
fseek(ptf, (cliente.conto-1)*sizeof(struct DatiCliente), SEEK_SET);
//legge il record dal file
fread(&cliente, sizeof(struct DatiCliente),1,ptf);
//visualizza un messaggio di errore se il conto è gia esistente
if(cliente.conto !=0) {
printf("ERRORE: conto #%d e' gia' presente", cliente.conto);
}// fine if
else {
//l'utente inserisce il cognome, il nome e il bilancio
printf ("inserisci, cognome, nome e bilancio\n-");
scanf("%s%s%lf", cliente.cognome, cliente.nome, &cliente.bilancio);
cliente.conto=conto;
//sposta il puntatore del file nel punto del record giusto nel file
fseek(ptf,(cliente.conto-1)* sizeof(struct DatiCliente), SEEK_SET);
//inserisci il record nel file
fwrite(&cliente, sizeof(struct DatiCliente), 1,ptf);
}// fine else
}//fine nuovo conto
//permette all'utente di scegliere una funzione nel menu
int sceltamenu (void) {
int scelta; //variabile di memorizzazione della scelta
printf("\n benvenuto nella tua banca\n"
"seleziona una opzione:\n"
"1) stampa contenuto file\n"
"2) aggiorna conto\n"
"3) inserisci un nuovo conto\n"
"4) elimina conto\n"
"5) esci dal programma\n");
scanf("%d", &scelta);
return scelta;
}//fine menu