codice:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define MAX 100
#define M 50
typedef struct{
char cognome[M];
char nome[M];
char via[M];
}cliente;
int caricaDati(cliente[]);
void scambia(cliente[],char[],int);
void ordinaClienti(cliente[],int);
int main () {
cliente ElencoClienti[MAX];
int n_clienti=caricaDati(ElencoClienti);
printf("Totale clienti caricati:%d \n", n_clienti);
ordinaClienti(ElencoClienti,n_clienti);
}
int caricaDati(cliente ElencoClienti[]){
int i,n,tot=0;
printf("Quanti clienti vuoi caricare? \n");
scanf("%d", &n);
for(i=0; i<n; i++){
printf("Cliente %d: \n", i+1);
printf("Cognome: \n");
scanf("%s", ElencoClienti[i].cognome);
printf("Nome: \n");
scanf("%s", ElencoClienti[i].nome);
printf("Via: \n");
scanf("%s", ElencoClienti[i].via);
tot++;
}
return tot;
}
void scambia(cliente ElencoClienti[],char c[], int n){
int i,j;
cliente copiaElencoClienti[MAX];
for(i=0; i<n; i++){
for(j=0; j<n; j++){
if(strcmp(c,copiaElencoClienti[i].cognome)==0){
char *temp;
temp=(char*)malloc(n*sizeof(char));
strcpy(temp,ElencoClienti[i].cognome);
strcpy(copiaElencoClienti[i].cognome,copiaElencoClienti[j].cognome);
strcpy(copiaElencoClienti[j].cognome,temp);
}
if(strcmp(c,copiaElencoClienti[i].nome)==0){
char *temp;
temp=(char*)malloc(n*sizeof(char));
strcpy(temp,copiaElencoClienti[i].nome);
strcpy(copiaElencoClienti[i].nome,copiaElencoClienti[j].nome);
strcpy(copiaElencoClienti[j].nome,temp);
}
if(strcmp(c,copiaElencoClienti[i].via)==0){
char *temp;
temp=(char*)malloc(n*sizeof(char));
strcpy(temp,ElencoClienti[i].via);
strcpy(copiaElencoClienti[i].via,copiaElencoClienti[j].via);
strcpy(copiaElencoClienti[j].via,temp);
}
}
}
}
void ordinaClienti(cliente ElencoClienti[], int n){
cliente copiaElencoClienti[MAX];
char cognomiordinati[M], nomiordinati[M], vieordinate[M];
int k;
for(k=0; k<n; k++){
strcpy(copiaElencoClienti[k].cognome,ElencoClienti[k].cognome);
cognomiordinati[k]=copiaElencoClienti[k].cognome;
strcpy(copiaElencoClienti[k].nome,ElencoClienti[k].nome);
nomiordinati[k]=copiaElencoClienti[k].nome;
strcpy(copiaElencoClienti[k].via,ElencoClienti[k].via);
vieordinate[k]=copiaElencoClienti[k].via;
}
int alto;
int i;
for(alto=n-1; alto>0; alto--){
for(i=0; i<alto; i++){
if(strcmp(ElencoClienti[i].cognome,ElencoClienti[i+1].cognome)>0){
scambia(ElencoClienti,cognomiordinati,n);
scambia(ElencoClienti,nomiordinati,n);
scambia(ElencoClienti,vieordinate,n);
}
}
for(i=0; i<n; i++){
printf("Cognome:%s Nome:%s Via:%s \n",
ElencoClienti[i].cognome,ElencoClienti[i].nome,ElencoClienti[i].via);
}
}
}