RISOLTO Programma gestione diario

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

Vito-

Utente Attivo
Messaggi
193
Reazioni
15
Punteggio
43
Ciao e buone feste! Ho questo esercizio da fare:
In questo progetto, l'utente può tenere il proprio record personale come in un diario. Puoi tenere un registro delle cose importanti che fai nella tua vita quotidiana, come riunioni e varie altre attività. In questa applicazione console è possibile aggiungere, visualizzare, modificare ed eliminare record. I record possono essere aggiunti con molte informazioni come la durata dell'attività, il nome, l'indirizzo, l'ora e la data. La gestione dei file viene utilizzata efficacemente per conservare i record. Le funzioni di base definite dall'utente utilizzate in questo progetto sono elencate di seguito nel menu principale:
• Password – Per accedere alle diverse opzioni del menu
• Aggiungi record – per aggiungere un nuovo record di diario
• Visualizza record – per visualizzare il record aggiunto nell'elenco
• Cerca record – Per visualizzare gli eventi/appuntamenti registrati ad una particolare data
• Modifica record – per modificare e aggiornare un record aggiunto
• Elimina record – per eliminare o rimuovere un record in modo permanente dal file di sistema
• Cambia password– per modificare/cambiare una password
• Uscita
Alla fine di ogni opzione, si può scegliere di uscire del programma o di tornare al menu principale


Volevo chiedervi se c'é la possibilitá di stampare il benvenuto, mettere la password e una volta messa la password va via tutto quello che c'era gia scritto e compaiono le nuove istruzioni, proprio come un menu
Io pe ora ho fatto questo...



C:
#include <stdio.h>
#define N 20

typedef struct  {int giorno;
                 int mese;
                 int anno;
                }datazione;

typedef struct  {int ore;
                 int minuti;
                }orario;

typedef struct  {char nome[N];
                 char descrizione[150];
                 char luogo[N];
                 orario ora;
                 datazione data;
                 char amici[N];
                 }record;

void aggiungi_record();
void visualizza_record();
void cerca_record();
void modifica_record();
void elimina_record();
void cambia_password();

int main()
{
    int scelta, password, valPassword;

    valPassword = 1604;

    printf("\t\t\t\t**Benvenuti nel vostro diario personale**\n\nInserire la password per continuare:");
    scanf("%d", &password);

    if(password == valPassword)
    {
        printf("\nScegliere una delle seguenti opzioni:\n");
        printf("\n1 Aggiungi record");
        printf("\n2 Visualizza record");
        printf("\n3 Cerca record");
        printf("\n4 Modifica record");
        printf("\n5 Elimina record");
        printf("\n6 Cambia password");
        printf("\n7 Uscita\n");
        scanf("%d", &scelta);

        switch(scelta)
        {
            case 1: aggiungi_record(); break;
            case 2: visualizza_record(); break;
            case 3: cerca_record(); break;
            case 4: modifica_record(); break;
            case 5: elimica_record(); break;
            case 6: cambia_password(); break;
            case 7: break;
            default: printf("La scelta fatta non e corretta"); break;
        }
    }
    else
    {
        printf("Password errata");
    }

    return(0);
}
 
Dovresti usare un do while per mostrare il menu.

I modi ci sarebbero, alcuni portabili altri no (come il system("cls") ;).
Puoi anche usare la combinazione ANSI, ma deve essere supportata dal terminale.

Comunque probabilmente dovrai aggiungere parametri a quelle funzioni.
 
Dovresti usare un do while per mostrare il menu.
va bene anche solo un while?

I modi ci sarebbero, alcuni portabili altri no (come il system("cls") ;).
Puoi anche usare la combinazione ANSI, ma deve essere supportata dal terminale.
Ho scoperto ora di questa funzione "system(cls)"
Comunque probabilmente dovrai aggiungere parametri a quelle funzioni.
Si certamente, sto facendo lo scheletro del programma per ora
 
La funzione in sé è portabile, ma il comando che vai a eseguire è dipendente dall'OS.
Quel "cls" è eseguito direttamente insomma (come fai tu da riga di comando, sul prompt).
Ma c'é qualche funzione analoga? Perche in questo programma mi serve una cosa del genere.
Ho lascio questa ormai
 
Nulla di portabile. Se sai che viene eseguito su Win puoi anche tenerlo così.
Altrimenti dovresti verificare l'OS, ma non so se ne vale la pena.

Puoi anche farti le funzioni adhoc usando le API di sistema... ma non penso ne valga la pena nel caso di specie. ?
 
Nulla di portabile. Se sai che viene eseguito su Win puoi anche tenerlo così.
Altrimenti dovresti verificare l'OS, ma non so se ne vale la pena.

Puoi anche farti le funzioni adhoc usando le API di sistema... ma non penso ne valga la pena nel caso di specie. ?
allora lascio cls perche lo uso su win
 
@DispatchCode arrivato a questo punto devo compilare la prima funzione, ma non saprei come fare. Nel senso come faccio ad aggiungere piu record ogni volta che voglio? E poi voglio salvarli in un file


C:
#include <stdio.h>
#include <stdlib.h>
#define N 20

typedef struct  {int giorno;
                 int mese;
                 int anno;
                }datazione;

typedef struct  {int ore;
                 int minuti;
                }orario;

typedef struct  {char nome[N];
                 char descrizione[150];
                 char luogo[N];
                 orario ora;
                 datazione data;
                 char amici[N];
                 }record;

void menu();
void aggiungi_record();
void visualizza_record();
void cerca_record();
void modifica_record();
void elimina_record();
void cambia_password();

FILE *pf;
record recordFile;

int main()
{
    menu();
    return(0);
}

void menu()
{
    int scelta, scelta_1, password, valPassword;

    valPassword = 1604;

    printf("\t\t\t\t**Benvenuti nel vostro diario personale**\n\nInserire la password per continuare:");
    scanf("%d", &password);

    if(password == valPassword)
    {
        do
        {
            system("cls");
            printf("Scegliere una delle seguenti opzioni:\n");
            printf("\n1 Aggiungi record");
            printf("\n2 Visualizza record");
            printf("\n3 Cerca record");
            printf("\n4 Modifica record");
            printf("\n5 Elimina record");
            printf("\n6 Cambia password");
            printf("\n7 Uscita\n");
            scanf("%d", &scelta);

            switch(scelta)
            {
                case 1:
                    system("cls");
                    aggiungi_record();
                    system("pause");
                    system("cls");
                    break;
                case 2:
                    system("cls");
                    visualizza_record();
                    system("pause");
                    system("cls");
                    break;
                case 3:
                    system("cls");
                    cerca_record();
                    system("pause");
                    system("cls");
                    break;
                case 4:
                    system("cls");
                    modifica_record();
                    system("pause");
                    system("cls");
                    break;
                case 5:
                    system("cls");
                    elimina_record();
                    system("pause");
                    system("cls");
                    break;
                case 6:
                    system("cls");
                    cambia_password();
                    system("pause");
                    system("cls");
                    break;
                case 7:
                    system("cls");
                    break;
                default:
                    system("cls");
                    printf("La scelta fatta non e' corretta\n\n");
            }
            printf("Tornare al menu principale?\n");
            printf("\n1 Torna al menu principale");
            printf("\n2 Non tornare al menu principale\n");
            scanf("%d", &scelta_1);
        }
        while(scelta_1 != 2);
    }
    else
    {
        printf("\nPassword errata!!");
    }
}

void aggiungi_record()
{
    
}

void visualizza_record()
{
    printf("Ciao\n");
}

void cerca_record()
{
    printf("Ciao\n");
}

void modifica_record()
{
    printf("Ciao\n");
}

void elimina_record()
{
    printf("Ciao\n");
}

void cambia_password()
{
    printf("Ciao\n");
}
 
Nel precedente topic avevi posto una domanda riguardante le liste. Puoi scegliere, o crei una lista o crei un array.
Se crei una lista, dovrai allocare singolarmente ogni nuovo elemento che aggiungi (usando malloc/calloc). Se utilizzi un array puoi farlo statico, come facevi nei casi precedenti, dove davi una dimensione fissa iniziale; oppure crearti una struttura dati dinamica che si espande - e si contrae eventualmente - quando aggiungi/togli elementi (un array dinamico).

Se crei un array dinamico non dovresti allocare memoria ad ogni inserimento; dovresti allocare della memoria per un tot di elementi e solo al raggiungimento di questa quota espanderlo ancora di altrettanti elementi.

Potresti iniziare a modellare il problema in questo modo; poi pensi al salvataggio su file.
Comunque invece del system("pause"); puoi utilizzare getchar();.
 
Ecco, questo è uno dei classici compiti scolastici che sono estremamente utili perché si impara a organizzare dati, aggregarli, manipolarli, salvarli e poi leggere da file. Sono compiti esclusivamente educativi (e praticamente inutili ovviamente), di fondamentale importanza. In pratica si può continuare ad usare un programma simile all’infinito, continuando a modificarlo, imparando sempre più concetti, in questo caso si può arrivare a imparare a scrivere una struttura b-tree, un semplice database, eventualmente aggiungere una interfaccia grafica, aggiungere un servizio, distribuire i dati in rete… come ho detto le possibilità sono infinite.
Perché l’importante del programmare non è solo imparare un linguaggio di programmazione, ma specialmente come scrivere e manipolare i dati. Scrivere un programma con certe specifiche è compito di un programmatore con un diploma delle superiore, da un laureato ci si aspetta molto di più. Programmare è solo imparare come si usa uno strumento, ma poi spetta a noi usare tale strumento per creare un prodotto.
 
Ragazzi, ho modificato cosi il codice per fare il cambio password, ma non ci trovo tanto senso in quello che é uscito fuori perche il cambio password é solo per il periodo di tempo in cui sto nel programma. Forse conviene usare un file su cui salvare la password?
O avete qualche altro consiglio da dare?

C:
#include <stdio.h>
#include <stdlib.h>
#define N 20

typedef struct  {int giorno;
                 int mese;
                 int anno;
                }datazione;

typedef struct  {int ore;
                 int minuti;
                }orario;

typedef struct  {char nome[N];
                 char descrizione[150];
                 char luogo[N];
                 orario ora;
                 datazione data;
                 char amici[N];
                 }record;

void menu(int valPassword);
void aggiungi_record();
void visualizza_record();
void cerca_record();
void modifica_record();
void elimina_record();
void cambia_password(int *valPassword);

FILE *pf;
record recordFile;
int valPassword = 1604;

int main()
{
    menu(valPassword);
    return(0);
}

void menu(int valPassword)
{
    int scelta, scelta_1, password;

    do
    {
        printf("\t\t\t\t**Benvenuti nel vostro diario personale**\n\nInserire la password per continuare:");
        scanf("%d", &password);

        if(password == valPassword)
        {

            system("cls");
            printf("Scegliere una delle seguenti opzioni:\n");
            printf("\n1 Aggiungi record");
            printf("\n2 Visualizza record");
            printf("\n3 Cerca record");
            printf("\n4 Modifica record");
            printf("\n5 Elimina record");
            printf("\n6 Cambia password");
            printf("\n7 Uscita\n");
            scanf("%d", &scelta);

            switch(scelta)
            {
                case 1:
                    system("cls");
                    aggiungi_record();
                    system("pause");
                    system("cls");
                    break;
                case 2:
                    system("cls");
                    visualizza_record();
                    system("pause");
                    system("cls");
                    break;
                case 3:
                    system("cls");
                    cerca_record();
                    system("pause");
                    system("cls");
                    break;
                case 4:
                    system("cls");
                    modifica_record();
                    system("pause");
                    system("cls");
                    break;
                case 5:
                    system("cls");
                    elimina_record();
                    system("pause");
                    system("cls");
                    break;
                case 6:
                    system("cls");
                    cambia_password(&valPassword);
                    system("pause");
                    system("cls");
                    break;
                case 7:
                    system("cls");
                    break;
                default:
                    system("cls");
                    printf("La scelta fatta non e' corretta\n\n");
            }
        }
        else
        {
            printf("\nPassword errata!!\n\n");
        }
        printf("Tornare al menu principale?\n");
        printf("\n1 Torna al menu principale");
        printf("\n2 Non tornare al menu principale\n");
        scanf("%d", &scelta_1);
        system("cls");
    }
    while(scelta_1 != 2);

}

void aggiungi_record()
{

}

void visualizza_record()
{
    printf("Ciao\n");
}

void cerca_record()
{
    printf("Ciao\n");
}

void modifica_record()
{
    printf("Ciao\n");
}

void elimina_record()
{
    printf("Ciao\n");
}

void cambia_password(int *valPassword)
{
    int newPass = 0, scelta=0;

    printf("Inserire nuova password: ");
    scanf("%d", &newPass);
    printf("\n\nSei sicuro di voler modificare la password?\n1 Si\n2 No\n");
    scanf("%d", &scelta);

    switch(scelta)
    {
        case 1:
            *valPassword = newPass;
            break;

        case 2:
            break;

        default:
           printf("La scelta fatta non e' corretta\n\n");
    }
}
 
Beh, certo, la password deve essere salvata assieme ai dati su file (o più file) come richiesto dall’esercizio. Lasciamo poi perdere che la password debba essere criptata (questo è un esercizio, si può iniziare senza).
Piuttosto il modo in cui cambi la password è sbagliato.
  1. devi chiedere prima se si sia sicuri di volere cambiare la pwd, odio programmi che ti chiedono di digitare un sacco di dati e solo alla fine ti permettono di abortire l’operazione
  2. Prima di chiedere la nuova pwd devi chiedere di digitare quella originale, per assicurarsi che sei tu.
  3. Devi chiedere di digitare la password una seconda volta, per conferma che la si ha digitata correttamente, e accertati che siano la stessa
  4. Devi spiegare quale siano i caratteri ammessi, nel tuo caso è un semplice numero (magari metti un numero minimo e massimo di cifre)
  5. Devi alla fine mostrare un messaggio di conferma che la pwd è stata cambiata con successo.
Come esercizio supplementare, scrivi una funzione che legge una stringa ma che mostra sul terminale un asterisco invece di ogni carattere; suggerimento: getch()

Vedo che continui con lo stesso errore: non guardi il valore di ritorno della scanf(). Cosa succede se leggi con formato %d e digiti ‘andretti’ ?
 
Beh, certo, la password deve essere salvata assieme ai dati su file (o più file) come richiesto dall’esercizio. Lasciamo poi perdere che la password debba essere criptata (questo è un esercizio, si può iniziare senza).
Piuttosto il modo in cui cambi la password è sbagliato.
  1. devi chiedere prima se si sia sicuri di volere cambiare la pwd, odio programmi che ti chiedono di digitare un sacco di dati e solo alla fine ti permettono di abortire l’operazione
  2. Prima di chiedere la nuova pwd devi chiedere di digitare quella originale, per assicurarsi che sei tu.
  3. Devi chiedere di digitare la password una seconda volta, per conferma che la si ha digitata correttamente, e accertati che siano la stessa
  4. Devi spiegare quale siano i caratteri ammessi, nel tuo caso è un semplice numero (magari metti un numero minimo e massimo di cifre)
  5. Devi alla fine mostrare un messaggio di conferma che la pwd è stata cambiata con successo.
Come esercizio supplementare, scrivi una funzione che legge una stringa ma che mostra sul terminale un asterisco invece di ogni carattere; suggerimento: getch()

Vedo che continui con lo stesso errore: non guardi il valore di ritorno della scanf(). Cosa succede se leggi con formato %d e digiti ‘andretti’ ?
Ok.
Ho creato (con un altro codice) un file con una password pero mi dice sempre password errata, perche?


C:
void menu()
{
    int scelta, scelta_1, password, valPassword;

        ptrPassword = fopen("filePassword", "rb");
        if(ptrPassword)
        {
            fscanf(ptrPassword, "%d", &valPassword);
        }
        else
        {
            printf("Errore file");
        }
        fclose(ptrPassword);

    do
    {
        printf("\t\t\t\t**Benvenuti nel vostro diario personale**\n\nInserire la password per continuare:");
        scanf("%d", &password);

        if(password == valPassword)
        {
--- i due messaggi sono stati uniti ---
ok sono scemo io, ho usato fread
--- i due messaggi sono stati uniti ---
Vedo che continui con lo stesso errore: non guardi il valore di ritorno della scanf(). Cosa succede se leggi con formato %d e digiti ‘andretti’ ?
Non sto lavorando solo con interi?
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top