nikpez di nikpez
Ominide 738 punti

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.

Registrati via email