La traccia dell'esercizio è la seguente:
Un centro benessere memorizza in una struttura dati in memoria centrale (di dimensione massima 100) l’archivio delle prestazioni effettuate. Per ogni prestazione vengono registrate informazioni su: ?codice prestazione (numerico intero); ?tipo prestazione (stringa: massaggio, smalto, epilazione) ?durata prestazione (numerico intero); ?cognome cliente (stringa); ?cognome operatore (stringa); ?costo (numerico intero). ?data prossimo appuntamento (stringa: ggmmaaaa-hh:mm); Si scriva un programma C che:
Realizzi la struttura specificata dal testo e completi il main in modo da richiamare opportunamente le funzioni e gestirne i risultati restituiti. Definisca la funzione CaricaDati avente il compito di trasferire il contenuto del file prestazioni.txt nel vettore inizialmente vuoto ElencoPrestazioni passato in ingresso: 1)restituendo, alla fine, il numero di prestazioni caricate 2)stampando a video il cognome del cliente che ha effettuato la prestazione più costosa 3) la funzione deve anche ricevere in ingresso una stringa contenente un tipo di prestazione (richiesto e passata opportunamente dal main) e stampare a video, alla fine del caricamento, quante prestazioni di quel tipo sono presenti nel vettore
Definisca e richiami la funzione CancellaPrestazione che riceve in ingresso il vettore delle prestazioni ElencoPrestazioni e un numero di prestazione e ne effettua la cancellazione. Per effettuare la cancellazione va sostituito in ElencoPrestazioni il numero della prestazione che si vuole cancellare con il numero 0.
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
#define M 50
//Structures:
typedef struct {
char codice[M];
char tipo[M];
int durata;
char cognome_cliente[M];
char cognome_operatore[M];
int costo;
char data_prox[M];
}prestazione;
//Prototypes:
int caricaDati(prestazione[], char[]);
void valutacosto(prestazione[], int);
void stampa(prestazione[], int);
void cancella(prestazione*, int, int);
void cancellaPrestazione(prestazione[], int);
//Main:
int main (){
prestazione ElencoPrestazioni[MAX];
char file1[M]="prestazioni.txt";
int n_prestazioni=caricaDati(ElencoPrestazioni,file1);
printf("Totale prestazioni caricate: %d \n", n_prestazioni);
valutacosto(ElencoPrestazioni,n_prestazioni);
stampa(ElencoPrestazioni,n_prestazioni);
cancellaPrestazione(ElencoPrestazioni,n_prestazioni);
stampa(ElencoPrestazioni,n_prestazioni);
}
//Functions:
void valutacosto(prestazione ElencoPrestazioni[], int n){
int i, max=0;
for(i=0; i<n; i++){
if(ElencoPrestazioni[i].costo>ElencoPrestazioni[max].costo){
max=i;
}
}
printf("Il cliente che ha effettuato la prestazione di maggior costo e' %s. \n", ElencoPrestazioni[max].cognome_cliente);
}
int caricaDati(prestazione ElencoPrestazioni[], char file[]){
FILE *fp;
int tot=0;
int costo_max=0;
fp=fopen(file,"r");
if(fp==NULL){
printf("Errore nell'apertura del file. \n");
system ("PAUSE");
return 0;
}else{
while(!feof(fp)){
fscanf(fp,"%s",ElencoPrestazioni->codice);
fscanf(fp,"%s",ElencoPrestazioni->tipo);
fscanf(fp,"%d",&ElencoPrestazioni->durata);
fscanf(fp,"%s",ElencoPrestazioni->cognome_cliente);
fscanf(fp,"%s",ElencoPrestazioni->cognome_operatore);
fscanf(fp,"%d",&ElencoPrestazioni->costo);
fscanf(fp,"%s",ElencoPrestazioni->data_prox);
ElencoPrestazioni++;
tot++;
}
fclose(fp);
}
return tot;
}
void stampa(prestazione ElencoPrestazioni[], int n){
int i;
printf("Elenco prestazioni: \n");
for(i=0; i<n; i++){
printf("Prestazione %d: \n", i+1);
printf("Codice:%s \tTipo:%s \tDurata:%d \tCognome cliente:%s \tCognome operatore:%s \tCosto:%d \tData prossimo appuntamento:%s \n",
ElencoPrestazioni[i].codice,ElencoPrestazioni[i].tipo,ElencoPrestazioni[i].durata,ElencoPrestazioni[i].cognome_cliente,ElencoPrestazioni[i].cognome_operatore,ElencoPrestazioni[i].costo,ElencoPrestazioni[i].data_prox);
}
}
void cancella(prestazione *ElencoPrestazioni, int indice, int n){
}
void cancellaPrestazione(prestazione ElencoPrestazioni[], int n){
int n_prestazione;
prestazione *curr;
prestazione *next;
int cancellate=0;
do{
printf("Inserire un numero di prestazione: \n");
scanf("%d", &n_prestazione);
}while((n_prestazione<=0)||(n_prestazione>n));
int i;
for(i=0; i<n; i++){
if(i==n_prestazione){
cancella(ElencoPrestazioni,n_prestazione,n);
cancellate++;
}
}
printf("Sono state cancellate %d prestazioni: \n", cancellate);
printf("Prestazione n.%d \n", n_prestazione);
}