Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <malloc.h>
- #include <string.h>
- typedef struct L{
- char codice[6];
- char *cognome;
- char *nome;
- char *categoria;
- char data[11];
- int ore;
- }lista;
- int LeggiFile(lista *A);
- void StampaVideo(lista *A, int dim);
- void StampaFile(lista *A, int dim);
- void OrdinaNascita(lista **A, int dim);
- void OrdinaCodice(lista **A, int dim);
- void OrdinaCognome(lista **A, int dim);
- void Categoria(lista *A, int dim);
- void MonteOre(lista **A, int dim);
- void RicercaCodice(lista *A, int dim);
- void RicercaCognome(lista *A, int dim);
- int ricercaBinaria(lista *S, int dim, char *chiave, int n);
- int MinDate(lista *s, int a, int b);
- int main()
- {
- int N, scelta=0;
- lista *atleta;
- N=LeggiFile(atleta);
- while(scelta!=-1){
- printf("0 Stampa a video i dati anagrafici;\n1 Stampa su file i dati anagrafici;\n2 Ordina per data di nascita;\n3 Ordina per codice atleta;\n4 Ordina per cognome;\n5 Stampa atleti per categoria;\n6 Aggiornamento ore settimanali;\n7 Ricerca atleta per codice;\n8 Ricerca per cognome.");
- printf("\nInserire -1 per terminare l'immissione.");
- printf("\n\nScegliere un numero: ");
- scanf("%d", &scelta);
- switch(scelta){
- case -1:
- printf("\n\nFine immissione.\n\n");
- break;
- case 0:
- StampaVideo(atleta, N);
- break;
- case 1:
- StampaFile(atleta, N);
- break;
- case 2:
- OrdinaNascita(&atleta, N);
- break;
- case 3:
- OrdinaCodice(&atleta, N);
- break;
- case 4:
- OrdinaCognome(&atleta, N);
- break;
- case 5:
- Categoria(atleta, N);
- break;
- case 6:
- MonteOre(&atleta, N);
- break;
- case 7:
- RicercaCodice(atleta, N);
- break;
- case 8:
- RicercaCognome(atleta, N);
- break;
- default:
- printf("\n\nImmissione non valida. Riprovare.\n\n");
- }
- }
- return 0;
- }
- int LeggiFile(lista *A){
- int n, i=0;
- char nome[26], cognome[26], categoria[26];
- FILE *fp;
- if((fp=fopen("atleti.txt", "r"))==NULL){
- printf("Errore.\n");
- exit(EXIT_FAILURE);
- }
- fscanf(fp,"%d",&n);
- A=(lista*)malloc(n*(sizeof(lista)));
- while(fscanf(fp,"%s %s %s %s %s %d", A[i].codice, cognome, nome, categoria, A[i].data, &A[i].ore)!=EOF){
- A[i].cognome=(char*)malloc((strlen(cognome)+1)*sizeof(char));
- A[i].nome=(char*)malloc((strlen(nome)+1)*sizeof(char));
- A[i].categoria=(char*)malloc((strlen(categoria)+1)*sizeof(char));
- printf("%s %s %s %s %s %d\n",A[i].codice, cognome, nome, categoria, A[i].data, A[i].ore);
- i++;
- }
- printf("\n\n");
- fclose(fp);
- return(n);
- }
- void StampaVideo(lista *A, int dim){
- int i=0;
- while(i<dim){
- printf("%s %s %s\n", A[i].cognome, A[i].nome, A[i].data);
- i++;
- }
- }
- void StampaFile(lista *A, int dim){
- FILE *fp;
- int i=0;
- char file[20];
- printf("Inserisci il nome del file: ");
- scanf("%s", file);
- if((fp=fopen(file, "w"))==NULL){
- printf("Errore.\n");
- return;
- }
- while(i<dim){
- fprintf(fp, "%s %s %s\n", A[i].cognome, A[i].nome, A[i].data);
- i++;
- }
- fclose(fp);
- }
- int MinDate(lista *s, int a, int b){
- int x;
- for(x=10; x<=0; x--){
- if(s[a].data[x]>s[b].data[x]){
- return 1;
- }
- if(s[a].data[x]>s[b].data[x]){
- return -1;
- }
- }
- return 0;
- }
- void OrdinaNascita(lista **A, int dim){
- int i,j, min;
- char temp[11];
- for(i=0;i<dim; i++){
- min=i;
- for(j=i+1;j<=dim; j++)
- if(MinDate(*A, j, min)<0)
- min=j;
- strcpy(temp,(*A[i]).data);
- strcpy((*A[i]).data, (*A[i]).data);
- strcpy((*A[i]).data, temp);
- }
- }
- void OrdinaCodice(lista **A, int dim){
- char tmp[6];
- int i, j;
- for(i=0; i<dim; i++){
- for(j=0; j<dim-i; j++){
- if(strcmp((*A[j]).codice,(*A[j+1]).codice)>0){
- strcpy(tmp,(*A[j]).codice);
- strcpy((*A[j]).codice,(*A[j+1]).codice);
- strcpy((*A[j+1]).codice,tmp);
- }
- }
- }
- for(i=0; i<dim; i++){
- printf("%s %s %s %s %s %d", (*A[i]).codice, (*A[i]).cognome, (*A[i]).nome, (*A[i]).categoria, (*A[i]).data, (*A[i]).ore);
- }
- }
- void OrdinaCognome(lista **A, int dim){
- char tmp[26];
- int i, j;
- for(i=0; i<dim; i++){
- for(j=0; j<dim-i; j++){
- if(strcmp((*A[j]).cognome,(*A[j+1]).cognome)>0){
- strcpy(tmp,(*A[j]).cognome);
- strcpy((*A[j]).cognome,(*A[j+1]).cognome);
- strcpy((*A[j+1]).cognome,tmp);
- }
- }
- }
- for(i=0; i<dim; i++){
- printf("%s %s %s %s %s %d", (*A[i]).codice, (*A[i]).cognome, (*A[i]).nome, (*A[i]).categoria, (*A[i]).data, (*A[i]).ore);
- }
- }
- void Categoria(lista *A, int dim){
- char *cat;
- int i;
- printf("Si scelga la categoria: ");
- scanf("%s", cat);
- cat=(char *)malloc((strlen(cat)+1)*sizeof(char));
- for(i=0; i<dim; i++){
- if(strcasecmp(cat, A[i].categoria)==0)
- printf("%s %s %s %s %s %d", A[i].codice, A[i].cognome, A[i].nome, A[i].categoria, A[i].data, A[i].ore);
- }
- }
- void MonteOre(lista **A, int dim){
- int i;
- char R;
- for(i=0; i<dim; i++){
- printf("%s %s %s\tVuoi aggiornare il monte ore per questo atleta?(Y/N)", (*A[i]).codice, (*A[i]).cognome, (*A[i]).nome);
- scanf("%c",&R);
- if(R=='Y'){
- printf("Inserire monte ore aggiornato: ");
- scanf("%d", &(*A[i]).ore);
- printf("%s %s %s %s %s %d", (*A[i]).codice, (*A[i]).cognome, (*A[i]).nome, (*A[i]).categoria, (*A[i]).data, (*A[i]).ore);
- }
- }
- }
- int ricercaBinaria(lista *S, int dim, char *chiave, int n){
- int m, l, r;
- l=0;
- r=dim-1;
- while(l<=r){
- m=(l+r)/2;
- if(strcmp(chiave, S[m].codice)==0)
- return (m);
- else if(strcmp(chiave, S[m].codice)==-1)
- l=m+1;
- else
- r=m-1;
- }
- return(-1);
- }
- void RicercaCodice(lista *A, int dim){
- char cerca[6];
- int q;
- printf("Quale codice si vuole cercare? ");
- scanf("%s", cerca);
- q=ricercaBinaria(A, dim, cerca, 6);
- if(q==-1)
- printf("Atleta non trovato.\n");
- else{
- printf("Atleta trovato:\n");
- printf("%s %s %s %s %s %d", A[q].codice, A[q].cognome, A[q].nome, A[q].categoria, A[q].data, A[q].ore);
- }
- }
- void RicercaCognome(lista *A, int dim){
- char *cerca;
- int i, j;
- printf("Quale cognome si vuole cercare (anche parziale)? ");
- scanf("%s", cerca);
- cerca=(char*)malloc((strlen(cerca)+1)*sizeof(char));
- for(i=0; i<dim; i++){
- j=0;
- while(j<strlen(cerca)){
- if(A[i].cognome[j]!=cerca[j])
- break;
- else
- j++;
- }
- if(j==strlen(cerca))
- printf("%s %s %s %s %s %d", A[i].codice, A[i].cognome, A[i].nome, A[i].categoria, A[i].data, A[i].ore);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement