Conto Corrente

di il
22 risposte

Conto Corrente

Salve ragazzi avrei questa traccia:
Si supponga di voler gestire i conti correnti di n utenti. Ogni utente è identificato dal
Cognome, Nome, numero del conto, lista movimenti.
Gestire i conti correnti e gestire le seguenti operazioni
• Inserire un nuovo correntista a cui viene assegnato un codice univoco.
• Visualizzare la lista movimenti di un dato correntista (dato il numero del conto o
Cognome/Nome) in una fissata data.
Ho iniziato a lavorarci solo che per quanto riguarda il primo punto più o meno con le idee ci sono mentre per il secondo punto non so come implementare la lista movimenti. La mia idea è di creare due function prelievo e deposito poi pero non so se è giusto farlo e se rispecchia la traccia, potete darmi idee a riguardo magari con qualche esempio.

PS: per forza con struct, se notate qualche errore che sicuro ci sarà ditemelo perche sono alle prime armi con le struct e sto cercando di capirle al meglio, solo che il tempo stringe per la consegna
#include "header.h"
#include <stdlib.h>
#include <time.h>
#define utenti_max 3

int main() {


    int op_richiesta;
    char dato_ins_1;
    char nuovo_utente = 0;
    //Generazione Codice
    int cod_generato[]={1,2,3,4,5,6,7,8,9,0};
    int *password;
    int lung_passw=4;       //lunghezza da 0 a 5


    srand(time(NULL));


    struct Correntisti utenti[15] = {{"Giulio",  "Rossi",       2472621, 1500},
                                     {"Marco",   "Verde",       4567353, 20000},
                                     {"Dante",   "Alighieri",   3917545, 20000},
                                     {"Luca",    "Caprari",     9123436, 50000},
                                     {"Mario",   "Rossi",       2309467, 2790},
                                     {"Tiziano", "Franchi",     7542878, 890},
                                     {"Silvio",  "Manchi",      8168519, 5500},
                                     {"Gaia",    "Ruggiero",    3278422, 3500},
                                     {"Noemi",   "Assuidi", 1975251, 12000},
                                     {"Orsola",  "Livorno",     6647894, 1040}};
    correntisti.ID_conto=password;

    printf("\nOperazioni disponibili:\n 1)Nuovo Conto\n 2)Lista Movimenti"
                   "\nQuale operazione vuoi eseguire?\n");
    scanf("%d", &op_richiesta);

    switch (op_richiesta)
    {
        case 1:                     //Inserimento nuovo correntista
            if (nuovo_utente <= utenti_max)
            {
                printf("Inserisci il dati della persona da inserire:\nNome: ");
                scanf("%s",correntisti.Nome);

                printf("\nCognome:");
                scanf("%s",correntisti.Cognome);

                //Generazione del codice univoco
                password=(int *)calloc(lung_passw,sizeof (int ));
                for (int i = 0; i <= lung_passw; i++) {
                    password[i]=cod_generato[ rand()% 9];
                }
                printf("\nIl tuo Numero utente del conto corrente e':%d\n", correntisti.ID_conto);
                nuovo_utente++;
                printf("\nProcedimento completato il tuo conto di:"
                       "\nNome:%s\nCognome:%s\nNumero Conto:%d\ne' stato creato, verra'"
                       "abilitato nelle prossime 24 ore.",
                       correntisti.Nome,correntisti.Cognome,correntisti.ID_conto);
            }
            break;

        case 2:                 //Visualizzazione movimenti
                printf("\nInserisci uno di questi tre elementi richiesti\n1)Numero di conto\n2)Cognome/Nome\n");
                    scanf("%d", &dato_ins_1);
            while (dato_ins_1 = correntisti.Nome &&correntisti.Cognome&&correntisti.ID_conto) {

                }
    }
Queste sono le dichiarazioni di struct
#include <stdio.h>
struct Correntisti{                         //Comprende tutti i dati dell'utente
    char Nome[15];
    char Cognome[15];
    int *ID_conto;          //Numero univoco del conto
    int Movimenti;
}correntisti;


typedef enum {gennaio,febbraio,marzo,aprile,maggio,giugno,luglio,agosto,settembre,ottobre,novembre,dicemre}Mesi;
struct Data{                    //Comprende gli elementi per ricercare una data
    int *giorno[31];
    //char *mese[12];
    int anno;               //possibile vedere solo ultimo anno

    Mesi *mese;             //per far inserire il mese all'utente
};


22 Risposte

  • Re: Conto Corrente

    Perché i campi ID_conto e mese sono puntatori? Che vuol dire int *giorno [31]? Dove viene salvato il nuovo correntista?
  • Re: Conto Corrente

    Alexv ha scritto:


    Perché i campi ID_conto e mese sono puntatori? Che vuol dire int *giorno [31]? Dove viene salvato il nuovo correntista?
    Per quanto riguarda giorno ho dimenticato di levarlo, per quanto riguarda il salvare il correntista non so dove salvarlo me l'hai fatto notare tu adesso ed effettivamente è un errore poiche cosi non si fermerebbe mai e potrei inserire persone all'infinito.
    Id_Conto forse non lo avevo corretto mese invece perche avevo in mente di fa inserire la data nella quale si vuole visualizzare la lista movimenti, tu dici che devo mettere una data prestabilita?
  • Re: Conto Corrente

    No, però ti basta usare un int per il giorno così come hai fatto per il mese (l'enum è un int). Per quanto riguarda movimenti, basta che abbiano anch'essi un campo l'ID_conto per sapere a chi appartengono. Quanto ne inserisci di nuovi controlli nella lista degli utenti se quel conto esiste davvero prima di aggiungerlo.

    Attenzione che la riga
    
    correntisti.ID_conto=password;
    
    Non ha senso. Devi fare una cosa tipo
    
    utenti[n].ID_conto=password;
    
    Per ogni nuovo utente. Comunque farei 2 campi diversi per id e password, ma questa è una scelta tua.
  • Re: Conto Corrente

    Ciao caro ieri avevo ricominciato tutto da capo poiche la generazione di password non mi piaceva preferisco incrementarla, ci ho ragionato su e ho buttato giu due righe, ci saranno sicuro degli errori nelle struct (ricordo che sono alle prime mani ma il tempo stringe), questo è quello che ho fatto finora.
    #include "header.h"
    #define max_utenti 3
    int main() {
    
        int p_operazione;
        int contatore=0;
        int nuovi_ut=0;
    
        correntista.ID_conto=123456;
    
        printf("\nOperazioni disponibili:\n 1)Nuovo Conto\n 2)Lista Movimenti"
               "\nQuale operazione vuoi eseguire?\n");
        scanf("%d", &p_operazione);
    
            switch (p_operazione)
            {
                case 1://Inserimento nuovo correntista
                {
                    if (nuovi_ut <= max_utenti)
                    {
                        printf("Inserisci il dati della persona da inserire:\nNome: ");
                        scanf("%s", correntista.Nome);
    
                        printf("\nCognome:");
                        scanf("%s", correntista.Cognome);
    
                        //Generazione del codice utente univoco
                        printf("\nIl tuo codice utente e':%d",correntista.ID_conto);
                        correntista.ID_conto++;
    
                        //Azzeramento saldo e assegnazione del codice conto corrente
                        cc.saldo=0;
                        cc.num_conto=987654321;
                        correntista.ID_conto=cc.num_conto;  //Ad un Id_utente corrisponde un numero di conto corrente
    
                    }
                    printf("\nIl tuo conto e' stato aperto con successo, quale operazione vuoi aprire adesso?");
    
                }break;
    
            }
            //DEBUG per vedere se la variabile dell' ID_conto si incrementava
            /* printf("\n dopo contatore:%d",correntista.ID_conto);*/
    return 0;
    }
    Dichiarazioni:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    struct Movimenti_Bancari{
            int numero_cc;      //numero del conto corrente associato al Id del correntista
            int *operazione;    //scelta delle operazioni da fare(prelievo/deposito)
    
    
    }movimenti;
    
    struct Correntista{
        char *Nome[10];                    //10 sta per max di lettere
        char *Cognome[10];
        int ID_conto;                    //codice univoco del correntista
        struct Movimenti_Bancari;       //Lista movimenti del correntista
    
    }correntista;
    
    struct Conto{
        int saldo;
        int num_conto;                  //Poiche ad ogni ID_conto si deve creare un numero di ccA
    
    }cc;
    
    
    //Quelle che secondo me serviranno, i parametri sono molto vaghi probabile che qualcosa andrà via
    int versamento(int somma_d,int saldo,int ID_conto);		
    
    int prelievo(int somma_p,int saldo,int ID_conto);
    
    int stampa_movimenti(int deposito,int versamento);
  • Re: Conto Corrente

    E compila?
  • Re: Conto Corrente

    Alexv ha scritto:


    E compila?
    Si compila ti faccio vedere a che punto sono adesso, secondo me i problemi da risolvere sono attualmente che le due function debbano registrare i movimenti , e penso lo si debba fare tramite la struct Movimenti, tu cosa suggeriresti?
    #include "header.h"
    #define max_utenti 3
    int main() {
    
        int p_operazione,s_operazione;
        int contatore=0;
        int nuovi_ut=0;
        int importo=0;
        int n_conto_ins;
    
        correntista.ID_conto=123456;
    
        printf("\nOperazioni disponibili:\n 1)Nuovo Conto\n 2)Deposito\n 3)Prelievo\n 4)Mostra Saldo\n 5)Lista Movimenti"
               "\nQuale operazione vuoi eseguire?\n");
        scanf("%d", &p_operazione);
    
            switch (p_operazione)
            {
                case 1://Inserimento nuovo correntista
                {
                    if (nuovi_ut <= max_utenti)
                    {
                        printf("Inserisci il dati della persona da inserire:\nNome: ");
                        scanf("%s", correntista.Nome);
    
                        printf("\nCognome:");
                        scanf("%s", correntista.Cognome);
    
                        //Generazione del codice utente univoco
                        printf("\nIl tuo codice utente e':%d",correntista.ID_conto);
                        correntista.ID_conto++;                         //Incremento del codice univoco (non so se va qua)
    
    
                        cc.saldo=0;                                   //Azzeramento del saldo
                        cc.num_conto=987654321;                      //assegnazione del codice conto corrente
                        correntista.ID_conto=cc.num_conto;          //Ad un Id_utente corrisponde un numero di conto corrente
    
                        cc.num_conto++;                           //Incremento del numero del conto(non so se va qua)
    
                    }
                    printf("\nIl tuo conto e' stato aperto con successo,effettua il primo deposito per abilitare il tuo conto");
                    printf("\n\nInserisci l'importo da depositare:");
                    scanf("\n%d",&importo);
    
                    versamento(importo);
    
                    //printf("\nQuale operazione vuoi effettuare adesso?\n2)Deposito\n3)Prelievo");
                    //scanf("%s",movimenti.operazione);   //uso la variabile nella struct
                }break;
                    //DEBUG per vedere se la variabile dell' ID_conto si incrementava
                    /* printf("\n dopo contatore:%d",correntista.ID_conto);*/
                case 2:
                    {
                        importo=0;
                        printf("Inserisci il numero di conto:");
                        scanf("%d",n_conto_ins);
                        if (n_conto_ins == cc.num_conto)
                        {
                            printf("\n\nInserisci l'importo da depositare:");
                            scanf("\n%d", &importo);
                            versamento(importo);
                        }
    
    
                    }break;
                case 3:
                {
                    importo=0;
                    printf("Inserisci il numero di conto:");
                    scanf("%d",n_conto_ins);
                    if (n_conto_ins == cc.num_conto)
                    {
                        printf("\n\nInserisci l'importo da prelevare:");
                        scanf("\n%d", &importo);
                        prelievo(importo);
                    }
                }break;
            }
    
    return 0;
    }
    FUNCTION
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    struct Movimenti_Bancari{
            int numero_cc;      //numero del conto corrente associato al Id del correntista
            int *operazione;    //scelta delle operazioni da fare(prelievo/deposito)
            int cronologia_mov;
            int conteggio_movimenti;
    
    }movimenti;
    
    struct Correntista{
        char *Nome[10];                    //10 sta per max di lettere
        char *Cognome[10];
        int ID_conto;                    //codice univoco del correntista
        struct Movimenti_Bancari;       //Lista movimenti del correntista
    
    }correntista;
    
    struct Conto{
        int saldo;
        int num_conto;                  //Poiche ad ogni ID_conto si deve creare un numero di ccA
    
    }cc;
    
    
    
    int versamento(int );
    
    int prelievo(int importo);
    
    int stampa_movimenti(int deposito,int versamento);
    
  • Re: Conto Corrente

    Come intendi registrare più di un movimento?
    Perché il campo operazione è un puntatore?
    L'istruzione
    correntista.ID_conto=123456;
    Cosa vuol dire? C'è un solo correntista?
    Se ogni correntista ha un solo conto, ti conviene non complicarti ulteriormente le cose: elimina la struct Conto e metti il campo saldo direttamente in Correntista.
  • Re: Conto Corrente

    Alexv ha scritto:


    Come intendi registrare più di un movimento?
    Perché il campo operazione è un puntatore?
    L'istruzione
    correntista.ID_conto=123456;
    Cosa vuol dire? C'è un solo correntista?
    Se ogni correntista ha un solo conto, ti conviene non complicarti ulteriormente le cose: elimina la struct Conto e metti il campo saldo direttamente in Correntista.
    Ciao forse ho sbagliato io, la traccia dice di gestire n correntisti, devo inserire più correntsti gia prestabiliti oppure no? quella assegnazione era per definire il numero di conto per un nuovo correntista probabilmente sbagliata
  • Re: Conto Corrente

    Allora ti serve un vettore o una lista, che puoi inizializzare con alcuni valori predefiniti. Per tenere traccia del numero ID da assegnare puoi usare un contatore esterno.
  • Re: Conto Corrente

    Alexv ha scritto:


    Allora ti serve un vettore o una lista, che puoi inizializzare con alcuni valori predefiniti. Per tenere traccia del numero ID da assegnare puoi usare un contatore esterno.
    Avevo idea di usare un contatore ma non saperei dove posizionarlo, se mi puoi far vedere tu in che parte del programma usarlo?
  • Re: Conto Corrente

    Ammine7 ha scritto:


    Avevo idea di usare un contatore ma non saperei dove posizionarlo, se mi puoi far vedere tu in che parte del programma usarlo?
    Dichiara una variabile globale
    
    int ID_conto = 0;
    
    E nel momento in cui aggiungerai un nuovo correntista nel tuo vettore (che ancora non vedo), farai:
    
    correntisti[n].ID_conto = ID_conto++;
    
  • Re: Conto Corrente

    Alexv ha scritto:


    Ammine7 ha scritto:


    Avevo idea di usare un contatore ma non saperei dove posizionarlo, se mi puoi far vedere tu in che parte del programma usarlo?
    Dichiara una variabile globale
    
    int ID_conto = 0;
    
    E nel momento in cui aggiungerai un nuovo correntista nel tuo vettore (che ancora non vedo), farai:
    
    correntisti[n].ID_conto = ID_conto++;
    
    quidni ricapitolando mi consigli di levare ID_conto dalla struct Correntista e farla una variabile globale?Oppure rimane com'è e devo solo inizializzarla a zero nel main? e poi non ho capito il fatto del vettore scusami a che mi serve un vettore? e più che altro dove dovrei inserirlo?Perdona l'gnoranza
  • Re: Conto Corrente

    Non devi toglierlo dalla struct. Ad ogni nuovo correntista, nella rispettiva struct, assegni l'ID che hai memorizzato nella variabile globale, che poi andrai ad incrementare. La variabile globale ti serve per sapere quale id assegnare al nuovo correntista.
    Come a che ti serve il vettore? Dove hai intenzione di memorizzare l'elenco dei correntisti?
  • Re: Conto Corrente

    Alexv ha scritto:


    Non devi toglierlo dalla struct. Ad ogni nuovo correntista, nella rispettiva struct, assegni l'ID che hai memorizzato nella variabile globale, che poi andrai ad incrementare. La variabile globale ti serve per sapere quale id assegnare al nuovo correntista.
    Come a che ti serve il vettore? Dove hai intenzione di memorizzare l'elenco dei correntisti?
    Ma intendi una cosa del genere?
    struct Correntisti utenti[15] = {{"Giulio",  "Rossi",       2472621, 1500},
                                         {"Marco",   "Verde",       4567353, 20000},
                                         {"Dante",   "Alighieri",   3917545, 20000},
                                         {"Luca",    "Caprari",     9123436, 50000},
                                         {"Mario",   "Rossi",       2309467, 2790},
                                         {"Tiziano", "Franchi",     7542878, 890},
                                         {"Silvio",  "Manchi",      8168519, 5500},
                                         {"Gaia",    "Ruggiero",    3278422, 3500},
                                         {"Noemi",   "Assuidi", 1975251, 12000},
                                         {"Orsola",  "Livorno",     6647894, 1040}};
Devi accedere o registrarti per scrivere nel forum
22 risposte