Come realizzare un software gestionale in C

di il
25 risposte

Come realizzare un software gestionale in C

Buongiorno a tutti.
Come da titolo, da studente universitario di informatica al primo anno mi tocca realizzare il mio primo progetto in C. Si tratta di un semplice software gestionale per monitorare la curva di contagi da coronavirus in Italia. L'idea mi affascina molto e sono parecchio eccitato ma anche parecchio ignorante. Purtroppo i due corsi di programmazione proposti dalla mia università avevano ben poco di pratico e mi ritrovo a non sapere da dove partire, soprattutto per quanto riguarda il funzionamento dei file. Vi allego la traccia ma se non vi va di scaricarla vi spiego brevemente.
Il sistema deve poter essere utilizzato da personale autorizzato (occorre quindi una struttura dati per l'utente). L'utente può inserire una o più informazioni relative a un singolo paziente (quindi, suppongo, altra struttura dati di cui alcuni campi possono essere anche lasciati vuoti). Ogni record( cioè le strutture dati?) Devono essere possibili le seguenti operazioni:
1)registrare utente nuovo, modificarne i dati o eliminarlo.
2)Come detto prima, l'utente deve poter registrare nuovi pazienti e modificarne i dati ma non può eliminare un paziente.
3)tramite le informazioni elaborate, l'utente deve poter visualizzare statistiche per vedere dove e chi il virus ha colpito di più
4)l'utente deve poter confrontare diverse statistiche per capire se determinate contromisure servono o meno.
Questo è quanto. Vorrei soltanto dei suggerimenti su come iniziare e procedere, anche generici perchè mi sento un po' sperduto, dato che le mie conoscenze al momento non sono approfondite. Sopratutto non so come suddividere il programma in più file, ma so programmare solo in maniera "monolitica". E so bene che non è affatto il modo più efficiente.
Allegati:
traccia esame
traccia esame

25 Risposte

  • Re: Come realizzare un software gestionale in C

    Inizia a definire le entità da gestire, cioè le strutture dati.
    Scomponi il programma in funzionalità molto semplici, magari definendo i prototipi delle funzioni e solo in seguito, quando avrai un'idea chiara della struttura del programma, andrai ad implementarle.
    Non abusare di puntatori e variabili globali, in modo da rendere ogni pezzo il più indipendente possibile dagli altri.
    Riduci al minimo i copia-incolla: blocchi ripetuti è il caso di racchiuderli in funzioni.
    FAI DEI TEST ogni volta che aggiungi una nuova funzionalità.
  • Re: Come realizzare un software gestionale in C

    A prescindere dal problema particolare, è possibile che ti venga dato un compito "da esame" e tu non sappia da dove iniziare (intendo neanche come strutturare il programma in file sorgenti)?

    E' possibile che un compito del genere ti venga dato senza che tu abbia la minima idea di come trattare dati in memoria (strutturandoli) e nei file (con le ovvie operazioni di lettura/scrittura)?

    E' possibile che sia colpa del corso universitario?

    Mi dispiace ma sono molto perplesso. Che risposta ti si può dare? Non servono le risposte generiche, qui bisogna aver chiari i concetti che servono e applicarli. In pratica bisogna fare un corso di base del linguaggio in un post. Possibile?
  • Re: Come realizzare un software gestionale in C

    oregon ha scritto:


    A prescindere dal problema particolare, è possibile che ti venga dato un compito "da esame" e tu non sappia da dove iniziare (intendo neanche come strutturare il programma in file sorgenti)?

    E' possibile che un compito del genere ti venga dato senza che tu abbia la minima idea di come trattare dati in memoria (strutturandoli) e nei file (con le ovvie operazioni di lettura/scrittura)?

    E' possibile che sia colpa del corso universitario?

    Mi dispiace ma sono molto perplesso. Che risposta ti si può dare? Non servono le risposte generiche, qui bisogna aver chiari i concetti che servono e applicarli. In pratica bisogna fare un corso di base del linguaggio in un post. Possibile?
    A prescindere dalla tua perplessità , purtroppo i due corsi di programmazione sono stati estremamente annacquati. Il primo, "programmazione", ha completamente saltato i puntatori, spiegato le strutture dati alla bene e meglio (anche se quello credo di averle ben afferrate) mentre ha liquidato i file in una lezioncina molto generica e con due esempi stupidi. Ci è stato ripetuto mille volte che è importante strutturare e non scrivere i programmi monolite ma non ci hanno mai spiegato, concretamente, come fare. Il secondo corso, quello che richiede questo piccolo software gestionale, è stato anche peggio se possibile. Ho persino richiesto un colloquio privato al prof per spiegarmi il funzionamento dei file e della programmazione strutturata in maniera più dettagliata ma è stato del tutto inutile. Era palesemente seccato e mi ha dato spiegazioni estremamente sintetiche e con esempi risicatissimi. Persino il libro, che devo dire è sempre stato abbastanza utile, non spiega come fare a creare un programma "grosso" e diviso in più file. Che devo farci io? Non so come creare un software strutturato(se è questa la corretta definizione) e non so come fare. Io so anche usare le istruzioni, array, matrici, creare funzioni, strutture dati (almeno quelle basilari) e cose così ma non so come realizzare un software più complesso dividendolo in più parti senza creare una roba di 5000 righe in un unico file. Poi sicuramente sarò anche io a non essere proprio un geniaccio eh
  • Re: Come realizzare un software gestionale in C

    Comincia a fare quanto ti ha suggerito Alexv.
    L'unica cosa su cui ti consiglio diversamente è sulle variabili globali. Usa pure un array di struct globale per gli utenti autorizzati con una dimensione limite ragionevole, poi stessa cosa per i tamponi etc. Le funzioni tutte del tipo void funzione(void), che verranno chiamate in un apposito switch case nel main, all'interno di un while infinito, in base all' input acquisito.
    La questione di non usare variabili globali è importante, ma secondo me non è così importante da far bloccare subito gli studenti (in un programma C single thread poi...)
  • Re: Come realizzare un software gestionale in C

    Anche cosa sia il multi-threading, per me, rimane un mistero. Ci hanno solo detto che è difficile (grazie prof, grazie).
  • Re: Come realizzare un software gestionale in C

    Weistress per quanto riguarda le variabili globali, non ne facevo una questione di multithread, bensì perché rischia di rendere troppe funzioni dipendenti da esse e quindi introdurre bug. Poi non ha mai visto la separazione dei file e rischia di peggiorare le cose.
    Certo, le variabili che riguardano lo stato del programma, come quelle relative al login ha senso farle globali, così come anche le definizione dei tipi, ma già cose come liste di utenti e tamponi gli sono stato chiesto di farlo su file.
  • Re: Come realizzare un software gestionale in C

    Alexv so che forse è chiedere troppo, ma non potresti spiegarmi sommariamente come realizzare la cosa in più file? O magari non so mostrarmi qualche esempio e/o indirizzarmi a un buon tutorial perchè sinceramente non sono riuscito a trovarne. Per programmare uso Codeblocks comunque.
  • Re: Come realizzare un software gestionale in C

    Ma tu sai usare le funzioni? Anche se solo in un file unico, sai scrivere il programma usando delle funzioni richiamate dal main?
  • Re: Come realizzare un software gestionale in C

    sadN00b ha scritto:


    Alexv so che forse è chiedere troppo, ma non potresti spiegarmi sommariamente come realizzare la cosa in più file? O magari non so mostrarmi qualche esempio e/o indirizzarmi a un buon tutorial perchè sinceramente non sono riuscito a trovarne. Per programmare uso Codeblocks comunque.
    Non c'è molto da dire. Metti i prototipi delle funzioni, ma anche le definizioni dei tipi e delle costanti negli header file (estensione .h) e le implementazioni nei source file (estensione .c, com il file del main).
    Esempio:
    file: matematica.h
    
    #define Pigreco 3.14
    
    double quadrato(double x);
    double reciproco(double x);
    
    typedef struct _complex
    {
    	double reale;
    	double immaginaria;
    } complex;
    
    file: matematica.c
    
    #include "matematica.h"
    
    double quadrato(double x) {
    return x*x;
    }
    
    double reciproco(double x) {
    return 1./x;
    }
    
    file: main.c (o qualunque altro file abbia bisogno di usare matematica.h)
    
    #include "matematica.h"
    int main() {
    	double raggio = 2.0;
    	complex numerocomplesso;
    	double area = Pigreco * quadrato(raggio);
    	//...
    	return 0;
    }
    
    Per aggiungere un header file dal compilatore, dove fa vedere i file del progetto, di solito basta fare clic destro sulla cartella "header files" -> aggiungi e scegli l'header file fra le varie opzioni. Stessa cosa per i file sorgenti, ma cliccando sulla cartella "source files" (dove si trova anche il file main.c).
    A compilazione eseguita verrà generato sempre un solo eseguibile.

    Se il professore non è stato esauriente, ti conviene cercare un libro introduttivo (ne avrà consigliato uno?). Intanto ti linko questa guida:
    https://www.fabiomanganiello.com/guidac.pd
  • Re: Come realizzare un software gestionale in C

    oregon ha scritto:


    Ma tu sai usare le funzioni? Anche se solo in un file unico, sai scrivere il programma usando delle funzioni richiamate dal main?
    Ma certo, fin lì ci arrivo. Come ho detto so usare "tutto" esclusi puntatori, file e strutture avanzate perchè queste ultime cose non ci sono state spiegate, purtroppo.
    Comunque anche solo gli esempi di Alexv mi sembrano molto utili, purtroppo molte cose devo impararle per i fatti miei (ed è anche giusto), avrei solo voluto che i prof avessero tenuto lezioni un po' più dettagliate, specialmente per gli aspetti più pratici.
  • Re: Come realizzare un software gestionale in C

    Alexv grazie mille, già questo mi sembra molto utile e chiaro. Magari vi terrò aggiornati sugli eventuali progressi !
  • Re: Come realizzare un software gestionale in C

    Un progetto del genere, fatto in C, è una specie di tortura. Però se riesci a farlo stare in piedi, è un banco di prova notevole.
    La prima cosa da fare è quella di disegnare la base dati. Ti serve carta e matita. Devi identificare tutti gli elementi e dividerli nelle varie tabelle. Attenzione alle cose che la traccia del progetto dice tra le righe. Dopo aver disegnato la base dati, la sua implementazione è solo a tua discrezione. Se non conosci i puntatori, farai degli array di strutture. I dati andranno salvati su file. Se non conosci i file, inizia a fare pratica.
    Dopo dovrai identificare le funzioni necessarie. Più o meno la traccia del progetto le esplicita tutte:
    • funzione di login
    • aggiungi/modifica/revoca un operatore
    • aggiungi/modifica/rimuovi un utente
    • aggiungi un evento per utente
    • calcoli statistici vari
    • ...
    Si tratta di tanta roba: puoi anche fare un file unico, ma verrebbe poco gestibile. Se usi un qualunque IDE (Visual Studio, Code::Blocks, CLion, ecc.) la parte di gestione dei file la farà lui. Parti da un progetto Console, poi aggiungerai i file man mano che sarà necessario.
  • Re: Come realizzare un software gestionale in C

    Siamo ""onesti"", all'universita' cosi' come in ogni ambito, ci sono gli assiomi, i teoremi e le dimostrazioni.

    E' (quasi) IMPOSSIBILE che un docente proponga un esercizio SENZA che abbia spiegato il 110% di quello che serve per svolgerlo.
    Se dovesse accadare:

    1) lo o gli studenti possono lamentarsi presso il rettore di facolta' il quale farebbe a ""striscie""/""quadrati""/"""cubetti"" il ""c"" del docente. (lo so per CERTO )

    2) gli studenti oderni non sono abituati a ""sudare"" per assimilare le conoscenze fornite al corso: se non capiscono qualcosa in 10 (nano) secondi, l'argomento e' ""spiegato male"", il docente ""non sa insegnare"", ""insegna male"", ""e' stato superficiale"", ed n altre n-mila scuse ...

    3) il docente ha fornito (perche' DEVE, NON E' un'opzione) tutti i riferimenti del caso: libri, dispense, appunti, esercizi, ecc ...

    L'esercizio proposto e' adeguatamente ""articolato"", il che vuol dire che ci sono state un BEL PO' DI ORE di lezioni che si dovevano seguire! (anche questo lo so per CERTO )

    Ora, che lo studente non abbia capito nulla, ci puo' anche stare.
    Che non sappia come fare, anche.
    Ma che sia TOTALMENTE incapace di avere una qualche anche se pur MINIMA idea di come fare, avendo la traccia sotto mano, ed avendo un CERVELLO che DOVREBBE FUNZIONARE, e' irrealistico.

    Se uno sa che cosa sono le funzioni (1 lezione -> 2 ore) e ha una funzione da 1000 righe, non serve un corso di 1 mese per trovare il modo di spezzarla in tante funzioncine piu' piccole (10 da 100 righe, ad esempio).

    Si fa un primo tentativo, se non funziona un secondo, un terzo, ... e si continua fino a che non si trova ""la quadra"".

    Non e' che ci voglia l'intelligenza di un Einstein per capire che un progetto grosso va scomposto in pezzetti piu' piccoli che poi devono essere combinati. Come?
    Ci sono TANTE SOLUZIONI QUANTI i programmatori!

    Se uno non sa come fare, puo' iniziare con implementare i pezzetti piu' piccoli che sa di poter realizzare. POI le idee iniziano a schiarirsi
  • Re: Come realizzare un software gestionale in C

    Migliorabile, lo dico un'ultima volta e poi basta perchè francamente mi secca stare a dire sempre le stesse cose. Io le lezione le ho seguite TUTTE e le ho anche registrate per riguardarle all'occorrenza.

    PURTROPPO non ci sono stati spiegati puntatori, file e strutture dati avanzate nel primo corso di programmazione. Il secondo è stato un riassunto del primo (abbiamo fatto meno di 10 lezioni) e in più ci è stato dato qualche accenno di file e puntatori ma SOLO con esempi mooooolto basilari e sbrigativi, che sono riuscito a riprodurre in poco tempo. Ad esempio, come integrare file e strutture, come usare i puntatori con le strutture, come passare strutture a funzioni tramite puntatori sono tutte cose ASSOLUTAMENTE NON MOSTRATE e per un informatico alle prime armi è tanta roba. L'implementazione e la pianificazione (teorica e pratica) di un progetto diviso in più file è stata una cosa solo nominata (della serie "AHO DOVETE FARLO EH, NON VE NE VENITE COL PROGRAMMA DI 8000 RIGHE) e mai (MAI) mostrata.

    Io poi, se non so o non capisco una cosa, non mi faccio problemi a fare domande, a differenza dei miei colleghi che vedo tutti parecchio "orgogliosi" anche quando non capiscono una ceppa. Però se l'ambiente è questo, così snob e supponente, non mi sorprende che la gente si tenga i dubbi per se. Sono contento che non si credano tutti sto _____D e che qualcuno sia disposto ad aiutare un dilettante in difficoltà senza fare pipponi inutili e arroganti.

    Che poi magari tu eri più bravo di me ai tempi dell'università e/o hai avuto a disposizione corsi migliori va benissimo e mi fa piacere per te.

    Ma tutta sta sequela di "lo so per certo"...mah.
Devi accedere o registrarti per scrivere nel forum
25 risposte