nikpez
Ominide
6 min. di lettura
Vota 3 / 5

Concetti Chiave

  • L'ufficio organizza corsi di specializzazione per l'HPLC e deve gestire l'alta richiesta automatizzando il processo di graduatoria.
  • La graduatoria si basa sul punteggio degli aspiranti e, in caso di parità, sull'età, con precedenza al più anziano.
  • La procedura prevede un massimo di 100 domande, con meccanismi per correggere errori di battitura durante l'inserimento dati.
  • Il programma sviluppato esegue l'acquisizione dei dati, stesura della graduatoria e stampa la lista degli ammessi in ordine alfabetico.
  • Utilizza un approccio top-down, con funzioni specifiche per l'inserimento di corsi e candidati, e per il confronto e l'ordinamento delle date.
Sviluppo SW - Esercizio

Traccia
Un ufficio di una società che gestisce corsi di specializzazione per l'uso di macchine di analisi mediche ha ricevuto un gran numero di iscrizioni per un ciclo di lezioni sull'utilizzo dell'HPLC (High Pressare Liquid Chromatography). Dato che i posti sono limitati la segreteria deve stendere una graduatoria e compilare una lista in ordine alfabetico dei nomi di coloro che sono stati accettati al corso, per poterla stampare sul bollettino della società.

La graduatoria deve essere stilata in base ad un punteggio assegnato a ciascun aspirante dall'ufficio organizzatore e, a parità di punteggio, la precedenza è data al candidato più anziano. Dato che questo tipo di problema si ripresenta per ogni corso, si vuole automatizzare la procedura, utilizzando un personal computer presente nell'ufficio.

Soluzione
1. Analisi e specifica dei requisiti:
Analisi della situazione reale
La segretaria, nello svolgimento del suo lavoro, dovrà:
1. ricevere l’elenco degli aspiranti corredato delle date di nascita e dei punteggi assegnati;
2. dopo aver attivato la procedura, inserire i dati relativi al corso e successivamente quelli degli aspiranti;
3. prendere la lista dei nomi stampata dall’elaboratore e consegnarla al responsabile.
Specifiche di progetto:
- Da un colloquio con i responsabili della società si è determinato che il numero di domande pervenute per l’iscrizione ai corsi precedenti non è mai stato superiore a 100.
- Il formato stampa deve comprendere il nome del corso, il periodo di effettuazione, l’elenco alfabetico degli aspiranti ammessi alla frequenza del corso e la data di nascita (per evitare malintesi in caso di omonimia).
- Nella procedura sono previsti meccanismi per poter correggere un eventuale errore di battitura da parte dell’operatore in fase di inserimento dei dati.
- Il corso viene tenuto anche nel caso in cui non vengano occupati tutti i posti disponibili.
- La graduatoria viene stilata esclusivamente in base ai criteri specificati dalla società. (In caso di parità assoluta la precedenza viene assegnata a chi ha presentato per 1° la domanda).
Funzioni espletate dal programma
- acquisizione dei dati del corso;
- acquisizione dei dati degli aspiranti;
- definizione (stesura) della graduatoria;
- stampa ordinata degli ammessi dell’ufficio.
Analizziamo ora le operazioni fondamentali che la procedura deve compiere:
1. ricevere il numero di posti disponibili per il corso in esame, nonché il titolo del
corso e il periodo di effettuazione;
2. acquisire, uno per volta, tutti i dati dei candidati;
3. stilare la graduatoria dei candidati;
4. estrarre dalla graduatoria i nominativi degli ammessi e porli in ordine alfabetico;
5. stampare il tabulato richiesto.
2. Progettazione
Strutture dati in memoria centrale:
#define MAX_ASPIRANTI 100
typedef {
int giorno;
int mese;
int anno;
}data;
typedef{
char cognome[26];
char nome[21];
data dataNascita;
int punteggio;
}persona;
persona aspiranti[MAX_ASPIRANTI];
int numAspiranti;
int numPostiDisponibili;

Struttura del programma
INIZIO
acquisizione dei dati del corso
acquisizione dei dati degli aspiranti
SE (numAspiranti > numPostiDisponibili)
ALLORA
definizione della graduatoria
FINE_SE
ordinamento degli ammessi alla frequenza
stampa dei nominativi nel formato richiesto
FINE

Applicazione della metodologia Top-Down ed individuazione dei sottopgm a partire dalle funzioni espletate dal programma:
void insertCorso(const char *nomeCorso,const char *dataCorso,int *numPosti);
void insertAspirante(persona *aspiranti);
void graduatoria(persona *aspiranti,int numAspiranti);
void sort(persona *aspiranti,int numAmmessi);
void stampa(const char *nomeCorso,const char *dataCorso,const persona *aspiranti,int numAmmessi);
bool sonoInOrdine(const data *data1, const data *data2);

Sviluppo dei singoli sottopgm
Sviluppo del sottopgm: void graduatoria(persona *aspiranti,int numAspiranti);
sort per confronti sequenziali
utilizza una funzione booleana: bool sonoInOrdine(const data *data1, const data *data2);
per confrontare due date
Sviluppo del sottopgm: bool sonoInOrdine(const data *data1, const data *data2);
La funzione si limita a controllare prima gli anni, poi i mesi e infine i giorni e a
restituire il valore vero solo se le date sono in ordine.
Sviluppo del sottopgm: void sort(persona *aspiranti,int numAmmessi);
sort per confronti sequenziali

3. Programmazione
4. Convalida e Verifica
Test data set
Fare tabella dei casi di test come visto in classe terza, tenendo presente i seguenti casi:
- numero di aspiranti ³ a quello dei posti disponibili
- numero di aspiranti > di quello dei posti disponibili, senza casi di parità di punteggio
- numero di aspiranti > di quello dei posti disponibili, con casi di parità di punteggio
- numero di aspiranti > posti disponibili, con casi di parità di punteggio n cui uno solo degli
aspiranti a pari merito viene ammesso al corso
- casi di parità di punteggi tra persone nate nello stesso anno ma mesi diversi
- casi di parità di punteggi tra persone nate nello stesso anno, nello stesso mese ma in giorni
diversi.

Domande da interrogazione

  1. Qual è l'obiettivo principale dell'automazione della procedura di iscrizione ai corsi?
  2. L'obiettivo principale è automatizzare la procedura di gestione delle iscrizioni ai corsi di specializzazione per l'uso di macchine di analisi mediche, in modo da stilare una graduatoria basata su punteggi e data di nascita, e stampare una lista alfabetica degli ammessi.

  3. Quali sono i criteri utilizzati per stilare la graduatoria degli aspiranti?
  4. La graduatoria è stilata in base al punteggio assegnato a ciascun aspirante e, in caso di parità di punteggio, la precedenza è data al candidato più anziano. In caso di parità assoluta, la precedenza va a chi ha presentato per primo la domanda.

  5. Quali dati devono essere acquisiti per ogni corso e aspirante?
  6. Per ogni corso, devono essere acquisiti il numero di posti disponibili, il titolo del corso e il periodo di effettuazione. Per ogni aspirante, devono essere acquisiti il nome, la data di nascita e il punteggio assegnato.

  7. Come viene gestito un errore di battitura durante l'inserimento dei dati?
  8. La procedura prevede meccanismi per correggere eventuali errori di battitura da parte dell'operatore durante l'inserimento dei dati.

  9. Quali sono le funzioni principali del programma sviluppato per gestire le iscrizioni?
  10. Le funzioni principali del programma includono l'acquisizione dei dati del corso e degli aspiranti, la definizione della graduatoria, l'ordinamento degli ammessi e la stampa dei nominativi nel formato richiesto.

Domande e risposte

Hai bisogno di aiuto?
Chiedi alla community