Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <ctype.h>
- #include <string.h>
- typedef struct {char codice[6];
- char *cognome,*nome,*categoria;
- int num,giorno,mese,anno;} anagrafica;
- typedef enum{stampa_a,ordina_data,ordina_codice,ordina_cognome,
- stampa_categoria,ore_settimanali,ricerca_codice,ricerca_cognome,fine} comando_e; //azione_criterio
- comando_e leggiComando(void);
- void stampaAnagrafica(anagrafica *p,int N);
- void sLower(char string[],int dimensione);
- void ordinaParole_codice(anagrafica **p,int N);
- int trova_categorie(anagrafica *p,int N,int lung, char listacategorie[][lung]);
- void stampaPerCategorie(anagrafica *p,int N,int lung, char lista_categorie[][lung],int lunghezzaeffettiva);
- int main(){
- int i,N,decisione=0;
- char nome[25],cognome[25],categoria[25];
- anagrafica *p, **pcodice;
- FILE *fp;
- comando_e tmp;
- fp=fopen("atleti.txt","r");
- if(fp==NULL){
- printf("Il file non e' stato aperto correttamente.\n");
- return(-1);}
- fscanf(fp,"%d",&N);
- p=(anagrafica*)malloc(N*sizeof(anagrafica));
- if(p==NULL){
- printf("La struct non e' stata generata correttamente.\n");
- return(EXIT_FAILURE);
- }
- for(i=0;i<N;i++){
- fscanf(fp,"%s %s %s %s %d/%d/%d %d",p[i].codice,cognome,nome,categoria,&p[i].giorno,&p[i].mese,&p[i].anno,&p[i].num);
- p[i].nome=strdup(nome);
- p[i].cognome=strdup(cognome);
- p[i].categoria=strdup(categoria);
- }
- fclose(fp);
- for(i=0;i<N;i++){
- printf("%s %s\n",(*pcodice[i]).nome,(*pcodice[i]).cognome);
- }
- while(decisione==0){ //fine
- tmp=leggiComando();
- switch (tmp){
- case 0:
- stampaAnagrafica(p,N);
- break;
- case 2:
- pcodice=(anagrafica**)malloc(N*(sizeof(anagrafica*)));
- if(pcodice==NULL){
- printf("Il vettore per l'ordinamento per codice non e' stato allocato correttamente.\n");
- return(EXIT_FAILURE);}
- for(i=0;i<N;i++){
- pcodice[i]=&p[i];
- }
- ordinaParole_codice(pcodice,N);
- for(i=0;i<N;i++){
- printf("%s\n",(*pcodice[i]).codice);
- }
- break;
- case 8:
- printf("\nHai deciso di chiudere il programma.\n");
- decisione=1;
- break;
- default:
- break;}}
- return 0;}
- comando_e leggiComando(void){
- comando_e tmp;
- tmp=0;
- int i=0;
- char comando[24];
- char lista_comandi[9][24]={"stampa_a","ordina_data","ordina_codice","ordina_cognome","stampa_categoria","ore_settimanali","ricerca_codice","ricerca_cognome","fine"};
- printf("\nInserisci un comando tra:\n1)stampa_a;\n2)ordina_data;\n3)ordina_codice;\n4)ordina_cognome;\n5)stampa_categoria;\n6)ore_settimanali;\n7)ricerca_codice;\n8)ricerca_cognome\n9)fine.\n");
- scanf("%s",comando);
- sLower(comando,strlen(comando));
- while(tmp<9){
- if((strcmp(lista_comandi[i],comando))==0){
- break;}
- tmp++;
- i++;}
- return tmp;}
- void sLower(char string[],int dimensione){
- int i;
- for(i=0;(i<dimensione)&&(string[i]!='\0');i++){
- if((isalpha(string[i])!=0)&&(islower(string[i])==0)){
- string[i]=tolower(string[i]);
- }
- }
- return;}
- void stampaAnagrafica(anagrafica *p,int N){
- int n,i;
- FILE* output;
- char S[20];
- printf("\nHai deciso di stampare dei contenuti dell'Anagrafica.");
- printf("Dove vuoi stamparlo?\n 1)File o a 2)video?\n");
- scanf("%d",&n);
- if(n==1){
- printf("In che file vuoi stamparlo?\n");
- scanf("%s",S);
- output=fopen(S,"w");
- if(output==NULL){
- printf("Il file non e' stato aperto correttamente\n");
- return;
- }
- for(i=0;i<N;i++){
- fprintf(output,"%s %s %s %s %d/%d/%d %d",p[i].codice,p[i].cognome,p[i].nome,p[i].categoria,p[i].giorno,p[i].mese,p[i].anno,p[i].num);}}
- else{
- for(i=0;i<N;i++){
- printf("%s %s %s %s %d/%d/%d %d\n",p[i].codice,p[i].cognome,p[i].nome,p[i].categoria,p[i].giorno,p[i].mese,p[i].anno,p[i].num );
- }}
- return;}
- void ordinaParole_codice(anagrafica **p,int N){
- int i,j;
- anagrafica *chiave;
- for(i=1;i<N;i++){
- j=i-1;
- chiave=p[i];
- while((j>=0)&&(strcmp((*chiave).codice,(*p[j]).codice)<0)){
- p[j+1]=p[j];
- j--;
- }
- p[j+1]=chiave;
- }
- return;}
- int trova_categorie(anagrafica *p,int N,int lung, char listacategorie[][lung]){
- int i,j,trovato=0,k=0;
- for(i=0;i<N;i++){
- for(j=0;j<k;j++){
- if(strcmp(p[i].categoria,listacategorie[j])==0){
- trovato=1;
- }}
- if(trovato==0){
- strcpy(listacategorie[k],p[i].categoria);
- k++;
- }
- trovato=0;
- }
- listacategorie[k][0]='0';
- return k;
- }
- void stampaPerCategorie(anagrafica *p,int N,int lung, char lista_categorie[][lung],int lunghezzaeffettiva){
- int i,j;
- printf("\n");
- for(i=0;i<lunghezzaeffettiva;i++){
- printf("%s\n",lista_categorie[i]);
- for(j=0;j<N;j++){
- if(strcmp(p[j].categoria,lista_categorie[i])==0){
- printf("%s %s\n",p[j].cognome,p[j].nome );
- }
- }
- printf("\n");
- }
- return;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement