Posto tutto il listato per chiarezza suddivisio in due parti. L'unica cosa che non funziona del tutto è la funzione abbonamento che scade per prima.
codice:
#include<stdio.h>
#include <string.h>
#include <stdlib.h>
#define SIZE 20
#define PERCENTUALE_MAX 100
/* dichiarazione della struttura - Struct - palestra */
struct palestra
{
char cognome[SIZE]; /* */
char nome[SIZE]; /* */
int giorno; /* */
int mese; /* */
int anno; /* */
char abbonamento[SIZE]; /* */
};
typedef struct palestra PALESTRA; /* nuovo nome tipo per struct palestra */
/* Prototipi di funzione */
void iniz(int dim,PALESTRA array [SIZE]);
void acquis_tast(int dim,PALESTRA array[SIZE]);
void acquis_aut(int dim,PALESTRA array[SIZE]);
void stampa(int dim,PALESTRA array[SIZE]);
void sort(int dim,PALESTRA array[SIZE]);
void ricerca(int dim,PALESTRA array[SIZE]);
void calcolo_perc(int dimensione, PALESTRA array[SIZE]);
main ()
{
PALESTRA dati[SIZE]; /* dichiara il vettore di elementi - dati - di tipo PALESTRA */
int selezione, dimensione;
iniz(dimensione,dati);
do
{
system("cls");
printf("\n******** MENU' PRINCIPALE ********\n");
printf("\n1. Per acquisire i dati");
printf("\n2. Stampare a video i dati");
printf("\n3. Ordinare i dati per Cognome");
printf("\n4. Stampa a video l'abbonamento dell'utente prossimo alla scadenza");
printf("\n5. Calcolo della percentuale dei diversi tipi di abbonamento");
printf("\n6. USCITA\n\n\n Selezione: ");
scanf("%d",&selezione);
switch(selezione)
{
case 1:
system("cls");
do
{
system("cls");
printf("\n******** MENU' di ACQUISIZIONE ********\n");
printf("\n1. Per acquisire i dati da tastiera");
printf("\n2. Per acquisire i dati di prova automaticamente");
printf("\n3. MENU' PRINCIPALE\n\n\n Selezione: ");
scanf("%d",&selezione);
switch(selezione)
{
case 1:
system("cls");
do
{
printf("\n********** Inizializzazione array *********\n\n\n");
printf("Determinare la dimesione della array <max 20>: ");
scanf("%d",&dimensione);
if(dimensione == 0 || dimensione > SIZE)
{
printf("\n\n++++++++++ errore ++++++++++++++\n\n");
system("\n\npause");
}
system("cls");
} while(dimensione == 0 || dimensione >SIZE);
acquis_tast(dimensione, dati);
break;
case 2:
system("cls");
dimensione=5;
iniz(dimensione,dati);
acquis_aut(dimensione, dati);
system("pause");
break;
case 3:
break;
default:
if(selezione == 0 || selezione >3)
{
system("cls");
printf("\n\n\n+++++++++++++++ Errore nella selezione ++++++++++++++++++\n\n\n");
system("pause");
}
}
}while (selezione !=3);
break;
case 2:
system("cls");
stampa(dimensione, dati);
system("pause");
break;
case 3:
system("cls");
sort(dimensione, dati);
system("pause");
break;
case 4:
system("cls");
ricerca(dimensione, dati);
system("pause");
break;
case 5:
system("cls");
calcolo_perc(dimensione, dati);
system("pause");
break;
case 6:
break;
default:
if(selezione == 0 || selezione >5)
{
system("cls");
printf("\n\n\n+++++++++++++++ Errore nella selezione ++++++++++++++++++\n\n\n");
system("pause");
}
}
}
while(selezione != 6);
}