- 6
- 0
- CPU
- Intel core i7 6700k
- Dissipatore
- Lepa exllusion 240
- Scheda Madre
- Asus z170 pro gaming
- HDD
- WD blue 1tb, samsung 850 evo.
- RAM
- 16gb ddr4
- GPU
- gtx 970
Ciao a tutti, come scritto nel titolo ho un problema a stampare e probabilmente anche a salvare i dati in una struttura dati c. L' esercizio richiede di implementare un programma per la simulazione di un conto corrente e che stampi a video la lista movimenti di un dato correntista in diversi periodi dell'anno. Allego il codice di quello che sono riuscito ad abbozzare, il problema principale sta nella funzione per effettuare i movimenti di denaro tra utenti. In parole povere dovrei stampare a video tutti i movimenti effettuati da un dato correntista, ma nella function che ho scritto mi stampa solo l'ultimo movimento per num_mov volte.
C:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 20
struct u {
char nome [MAX];
char cognome [MAX];
int saldo;
int id;
} utenti [MAX];
struct m {
int giorno;
int mese;
int anno;
int importo;
int codice;
} movimento[MAX];
int num_utenti = 0;
int num_movimenti = 0;
int menu();
int ricerca_conto(int id);
int ricerca_movimento(int codice);
void inserisci_utente(void);
void cerca_utente(void);
void deposito(void);
void prelievo(void);
int movim();
void stampa_movimenti(void);
//void stampa(void);
int main (){
int scelta;
while(scelta = menu()) {
switch ( scelta ){
case 1: system("CLS");
inserisci_utente();
break;
case 2: system("CLS");
cerca_utente();
break;
case 3: system("CLS");
deposito();
break;
case 4: system("CLS");
prelievo();
break;
case 5: system("CLS");
movim();
break;
case 6: system("CLS");
stampa_movimenti();
break;
case 0:
return 0;
}
}
}
int ricerca_conto(int id) //Function che cerca la presenza di un dato correntista.
{
int i;
for( i = 0; i < num_utenti; i++)
if ( utenti[i].id == id)
return i;
return -1;
}
void inserisci_utente(void) //Function che permette l'inserimento di un nuovo correntista.
{
int num_conto;
if ( num_utenti == MAX )
{
printf("Numero utenti massimo raggiunto.\n");
return;
}
printf("\nInserire numero di conto: ");
scanf("%d", &num_conto);
if ( ricerca_conto(num_conto) >= 0){
printf("Utente già esistente.\n");
return;
}
utenti[num_utenti].id = num_conto;
fflush(stdin);
printf("\nInserire nome: ");
gets(utenti[num_utenti].nome);
fflush(stdin);
printf("\nInserire cognome: ");
gets(utenti[num_utenti].cognome);
printf("\nInserire saldo: ");
scanf("%d", &utenti[num_utenti].saldo);
num_utenti++;
}
void cerca_utente(void) //Function per la ricerca di un dato correntista.
{
int i, n;
printf("\nInserire numero di conto: ");
scanf("%d", &n);
i = ricerca_conto(n);
if ( i >= 0) {
printf("\nNome utente: %s\t Cognome utente: %s\t Saldo: %d\n", utenti[i].nome, utenti[i].cognome, utenti[i].saldo);
//printf("Saldo: %d", utenti[i].saldo);
}
else
printf("Utente non trovato.\n");
}
void deposito(void) //Function che permetta di effettuare un deposito.
{
int i, n;
printf("\nInserire numero di conto: ");
scanf("%d", &n);
i = ricerca_conto(n);
if ( i >= 0 ){
printf("Quanto vuoi depositare?: ");
scanf("%d", &movimento[i].importo);
utenti[i].saldo += movimento[i].importo;
}
else
printf("Conto non trovato.\n");
}
void prelievo(void) //Function che permette di effettuare un prelievo
{
int i, n, importo;
printf("\nInserire numero di conto: ");
scanf("%d", &n);
i = ricerca_conto(n);
if ( i >= 0 ){
printf("Quanto vuoi prelevare?: ");
scanf("%d", &importo);
utenti[i].saldo -= importo;
}
else
printf("Conto non trovato.\n");
}
int menu() { //Function che stampa a video il menu di scelta.
int scelta;
printf("\n\t\t\t\t\t*** Conto Corrente 1.0 ***\n\n");
printf("[1] Inserisci utente.\n\n");
printf("[2] Ricerca utente.\n\n");
printf("[3] Effettua Deposito.\n\n");
printf("[4] Effettua Prelievo.\n\n");
printf("[5] Effettua movimento.\n\n");
printf("[6] Stampa movimenti.\n\n");
printf("[0] Esci.\n\n");
scanf("%d", &scelta);
while ( scelta < 0 || scelta > 6 ){
printf("Comando non riconosciuto!\n");
printf("scelta: ");
scanf("%d", &scelta);
return scelta;
}
return scelta;
}
int movim() //Function che permette di effettuare un movimento di denaro.
{
int i, n, mittente, destinatario;
printf("\nInserire numero di conto del mittente: ");
scanf("%d", &mittente);
i = ricerca_conto(mittente);
if ( i >= 0 ){
printf("\nQuanto vuoi inviare?: ");
scanf("%d", &movimento[i].importo);
utenti[i].saldo -= movimento[i].importo;
}
else{
printf("Utente inesistente.\n");
return menu();
}
printf("\nInserire numero di conto del destinatario: ");
scanf("%d", &destinatario);
n = ricerca_conto(destinatario);
printf("\nInserire giorno: ");
scanf("%d", &movimento[i].giorno);
printf("\nInserire mese: ");
scanf("%d", &movimento[i].mese);
printf("\nInserire anno: ");
scanf("%d", &movimento[i].anno);
if ( n >= 0 ){
utenti[n].saldo += movimento[i].importo;
printf("Movimento effettuato con successo!\n");
num_movimenti++; movimento[i].codice++;
return menu();
}
else{
printf("Utente inesistente.\n");
return menu();
}
}
int ricerca_movimento(int codice) //Function che verifica la presenza di un movimento.
{
int i;
for( i = 0; i < num_movimenti; i++)
if (movimento[i].codice == codice)
return i;
return -1;
}
void stampa_movimenti(void) //Function che stampa a video la lista movimenti di un dato correntista.
{
int i, n, utente, x;
printf("\nInserire il numero del conto di cui stampare i movimenti: ");
scanf("%d", &utente);
x = ricerca_conto(utente);
if ( i >= 0 ){
n = ricerca_movimento(utente);
printf("Lista movimenti Numero conto:%d\t Nome: %s\t Cognome: %s\n", utente, utenti[i].nome, utenti[i].cognome);
for (x = 0; x < num_movimenti; x++){
printf("Importo: %d\t Giorno: %d\t Mese: %d\t Anno: %d\t", movimento[i].importo, movimento[i].giorno, movimento[i].mese, movimento[i].anno);
}
}
}