Libretto universitario

di il
12 risposte

Libretto universitario

Per la vostra gioia sono ancora qui
sto cercando di finire questo esercizio mi servirebbero delucidazioni
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
Scrivere un programma che permetta all’utente di gestire un libretto di voti di esami,
per un massimo di 20 esami. Ogni esame sostenuto ha i seguenti attributi:
• nome del corso (stringa di massimo 256 caratteri)
• voto (minimo 18, massimo 30)
• data (in formato gg/mm/aaaa)
• codice del corso (codice di massimo 6 cifre)
Il programma permette all’utente di svolgere le seguenti operazioni:
inserimento: inserisce un esame in fondo alla lista degli esami eventualmente presenti.
stampa: stampa tutti gli esami presenti, con i dettagli di cui sopra.
ricerca: chiede all’utente di inserire un codice e cerca nel libretto la presenza di un
esame corrispondente a quel codice. Se presente, stampa tale esame.
uscita: esce dal programma.
tramite un menù di scelta di questo tipo:
inserimento nuovo esame
[s] stampa del libretto
[r] ricerca per codice
[x] uscita*/
typedef struct libretto{
    char corso[256];
    int voto;
    int data[10];
    int codice  [10];}
    Libretto;
    void stampa(struct libretto libretto3);

    main() {
    int numero,x;
    int p;
    int str1;
    struct libretto Libretto;
        printf("\t\nbenvenuto nel tuo libretto\n");
        char scelta;
        printf("\na)inserimento nuovo esame");
        printf("\nb)stampa del libretto");
        printf("\nc)ricerca del codice");
        printf("\nd)usita");
        printf("\ncosa vuoi fare?:");
        scanf("%c",&scelta);
        switch (scelta){
        ----
        ----
     }}

    void stampa(struct libretto Libretto){
    printf("\ncorso:%s \nvoto:%d \ndata:%d  \ncodice del corso:%d",Libretto.corso,
           Libretto.voto,Libretto.data,Libretto.codice);}
questo è quello che sono riuscito a fare
ora mi servirebbe sapere:
1)come impostare un numero massimo di 20 esami; (pensavo di inserirlo come costante)
2) come spostare un esame in fondo alla lista?
3) come confrontare i due codici? ( con una strcmp ? c'è se confronto gli stessi numeri non dovrebbe andare bene?)
4) una volta stampo il libretto ad esempio vorrei che uscisse la scritta (vuoi continuare? se si premere 1 altrimenti preme x per uscire)
una volta premuto 1 vorrei che ritornasse alla scelta.

12 Risposte

  • Re: Libretto universitario

    Un quesito per thread...

    Ovviamente dichiarerai un vettore di 20 strutture e su quelle farai tutte le operazioni.
  • Re: Libretto universitario

    F18 Oregonn
    a volte non so se sei cosi nella vità
    o ti sto tremendamente sulle palle
    intendi array di strutture?
  • Re: Libretto universitario

    Nessuno dei due ... comunque faresti bene ad evitare certe battute con gente che non conosci.

    Sì, intendo un array di strutture
  • Re: Libretto universitario

    Non era una battuta ma una curiosità il che è diverso!

    proverò e cercherò di venirne a capo
  • Re: Libretto universitario

    Allora tieni per te le curiosità, leggi il regolamento e avrai risposte precise a domande precise.
  • Re: Libretto universitario

    Perché nella struttura Libretto metti un campo int data[10] ?

    Uno si potrebbe aspettare char data[10], immaginando il formato gg/mm/aaaa (che contiene dieci caratteri), ma in quel caso ci vorrebbe un char in più per il terminatore '\0'.

    Oppure si potrebbe immaginare di non mettere i '/' separatori, nel qual caso potrebbe non essere una stringa ma semplicemente un modo per "immagazzinare" ggmmaaaa (per poi aggiungere i separatori in fase di visualizzazione); in questo caso basterebbero otto char.

    Oppure si potrebbe mettere nella struttura un unsigned char per il giorno, uno per il mese e un unsigned short per l'anno, per un totale di 4 byte.

    Oppure ancora, volendo essere fantasiosi e dimostrarsi amanti delle complicazioni inutili, si potrebbe "compattare" la data in un singolo unsigned long nel quale destinare i primi due byte all'anno, il terzo byte al mese e il quarto byte al giorno (in questo caso sarebbe molto facile confrontare le date per eventuali ordinamenti, ma il "compattamento" richiederebbe lo spostamento dei bit con << e/o >>, il che comporta un po' di lavorìo).



    EDIT: Potresti anche usare un time_t, includendo time.h, il che ti darebbe accesso a un sacco di funzioni per le operazioni più varie.
  • Re: Libretto universitario

    Anche quell'int codice[10] è strano...
  • Re: Libretto universitario

    AldoBaldo ha scritto:


    Perché nella struttura Libretto metti un campo int data[10] ?

    Uno si potrebbe aspettare char data[10], immaginando il formato gg/mm/aaaa (che contiene dieci caratteri), ma in quel caso ci vorrebbe un char in più per il terminatore '\0'.

    Oppure si potrebbe immaginare di non mettere i '/' separatori, nel qual caso potrebbe non essere una stringa ma semplicemente un modo per "immagazzinare" ggmmaaaa (per poi aggiungere i separatori in fase di visualizzazione); in questo caso basterebbero otto char.

    Oppure si potrebbe mettere nella struttura un unsigned char per il giorno, uno per il mese e un unsigned short per l'anno, per un totale di 4 byte.

    Oppure ancora, volendo essere fantasiosi e dimostrarsi amanti delle complicazioni inutili, si potrebbe "compattare" la data in un singolo unsigned long nel quale destinare i primi due byte all'anno, il terzo byte al mese e il quarto byte al giorno (in questo caso sarebbe molto facile confrontare le date per eventuali ordinamenti, ma il "compattamento" richiederebbe lo spostamento dei bit con << e/o >>, il che comporta un po' di lavorìo).

    non ci avevo pensato a dichiararlo come char.

    altra domanda come faccio ad impostare il voto minimo a 18??
  • Re: Libretto universitario

    AldoBaldo ha scritto:


    Anche quell'int codice[10] è strano...
    come lo dichiaro il codice del corso ?
  • Re: Libretto universitario

    Ti basta un int

    Tutti i limiti vanno controllati mel codice con apposite istruzioni, non impostate nella struttura.
  • Re: Libretto universitario

    Quando ricevi il valore in ingresso (diciamo che sia v), controlla che sia ( v >= 18 && v <= 30 ). Se viene fuori che il valore immesso non rientra nei limiti ripeti la richiesta "over and over". Quando arriva un valore accettabile, lo copi nel libretto del caso, facendo esami[indice].voto = v.

    Ah... secondo me la struttura con i campi così come li hai chiamati dovrebbe chiamarsi Esame, più che Libretto. Un Libretto potrebbe essere un array di strutture Esame (visto il testo dell'esercizio, 20 esami al massimo).
  • Re: Libretto universitario

    Grazie a tutti ora ho capito !
Devi accedere o registrarti per scrivere nel forum
12 risposte