Advertisement
Dany1858

inf. Compito1 appello gennaio (completo)

Jan 23rd, 2015
730
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 6.45 KB | None | 0 0
  1. /* https://app.box.com/s/87dfqn37lc0y0jen7y4mwwcjszfvtuu9 */
  2. /* link di supporto scrittura su file: https://www.youtube.com/watch?v=2i9dPVtHJXc */
  3. /* link di supporto time.h: http://it.wikibooks.org/wiki/C/Appendice/Librerie_standard/time.h */
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <malloc.h>
  8. #include <time.h>
  9. #include <string.h>
  10. #define N 20
  11.  
  12.         /*strutture*/
  13. struct card{
  14.         char nome[N+1];
  15.         char ID[8+1];
  16.         char reg[8+1];
  17.         int punti;
  18.         struct log *inf;
  19.         struct card *pun;
  20. };
  21.  
  22. struct log{
  23.         char data[8+1];
  24.         int punti;
  25.         struct log *pun;
  26. };
  27.  
  28.         /*funzioni*/
  29. int menu(struct card *);
  30. void addCard(struct card *);
  31. void findCard(struct card *);
  32. void downCard(struct card *);
  33. void printBest(struct card *, struct card **, int *);
  34. void upPunti(struct card *, int);
  35. void menu2(struct card *);
  36. void dwPunti(struct card *);
  37. struct card *ciclo(struct card *);
  38. struct card *findCard2(struct card *, char *);
  39. void logcat(struct card *);
  40.  
  41.  
  42.         /*main*/
  43. int main()
  44. {
  45.     struct card *px=NULL, *radice=NULL;
  46.     int risp, x=0;
  47.    
  48.     radice=malloc(sizeof(struct card));
  49.     radice->punti=0;
  50.     radice->inf=NULL;
  51.     radice->pun=NULL;
  52.     printf("\nInserire nome autolavaggio  ");
  53.     scanf("%[^\n]", radice->nome);
  54.     getchar();
  55.     while(risp!=0){
  56.         risp=menu(radice);
  57.         switch(risp){
  58.             case 0:{ break;}
  59.             case 1:{ addCard(radice); break;}
  60.             case 2:{ findCard(radice); break;}
  61.             case 3:{ findCard(radice); break;}
  62.             case 4:{ printBest(radice, &px, &x); break;}
  63.             default:{ printf("\n\nOpzione non ammessa!"); getchar();}
  64.     }}
  65.   return 0;
  66. }
  67.  
  68.  
  69. int menu(struct card *p)
  70. {
  71.     int opz;
  72.     system("cls");
  73.     printf("\n  Menu' Autolavaggio %s\n", p->nome);
  74.     printf("\n1. Registra cliente\n\n2. Ricerca cliente\n\n3. Scarica punti\n\n4. Miglior cliente\n\n0. EXIT\n\n");
  75.     scanf("%d", &opz);
  76.     getchar();
  77.     return opz;
  78. }
  79.  
  80. void addCard(struct card *p)
  81. {
  82.      system("cls");
  83.      time_t t=time(NULL);
  84.      struct tm *tp=localtime(&t);
  85.      
  86.      p=ciclo(p);
  87.      p->pun=malloc(sizeof(struct card));
  88.      p=p->pun;
  89.      printf("\nInserire Nome e Cognome cliente separati da uno spazio\t");
  90.      scanf("%[^\n]", p->nome); p->nome[N]='\0'; getchar();
  91.      strftime(p->ID, 9, "%m%d%H%M", tp);
  92.      printf("\nID cliente: %s\t", p->ID);
  93.      strftime(p->reg, 9, "%Y%m%d", tp);
  94.      p->punti=0; p->pun=NULL; p->inf=NULL;
  95.      printf("\n\n\nRicorda d aspettare almeno 1 minuto\nprima di registrare un nuovo cliente!!");
  96.      getchar();
  97. }    
  98.  
  99. struct card *ciclo(struct card *p)
  100. {
  101.        if(p!=NULL){ if(p->pun!=NULL) p=ciclo(p->pun); return p;}
  102. }
  103.  
  104. void findCard(struct card *p)
  105. {
  106.        struct card *paus=NULL;
  107.        char find[8+1];
  108.        int esci=-1;
  109.        system("cls");
  110.        while(paus==NULL && esci!=0){
  111.            printf("\n\t\t\t     ,........,");
  112.            printf("\nInserire ID carta (8 cifre):  ");
  113.            scanf("%s", find); find[8]='\0'; getchar();
  114.            if(strcmp(find, "00000000")==0) esci=0;
  115.            else{ paus=findCard2(p->pun, find);
  116.                if(paus==NULL) printf("\nID carta non presente, riprovare\n");
  117.                else menu2(paus);}}
  118. }
  119.  
  120. struct card *findCard2(struct card *p, char *val)
  121. {
  122.        if(p!=NULL){
  123.            if(strcmp(p->ID, val)!=0){ if(p->pun!=NULL) p=findCard2(p->pun, val); else return NULL;}
  124.            return p;}
  125.        else return NULL;
  126. }
  127.  
  128. void menu2(struct card *p)
  129. {
  130.      int opz=-1;
  131.      system("cls");
  132.      while(opz<0 || opz>5){
  133.          printf("\nCliente: %s", p->nome);
  134.          printf("\n\n1. Lavaggio auto solo interno - punti 1");
  135.          printf("\n\n2. Lavaggio auto solo esterno - punti 2");
  136.          printf("\n\n3. Lavaggio auto interno ed esterno - punti 3");
  137.          printf("\n\n4. Scarica punti\n\n5. !log!\n\n0. EXIT\n\n");
  138.          scanf("%d", &opz); getchar();}
  139.      switch(opz){
  140.          case 1:{ upPunti(p, 1); break;}
  141.          case 2:{ upPunti(p, 2); break;}
  142.          case 3:{ upPunti(p, 3); break;}
  143.          case 4:{ dwPunti(p); break;}
  144.          case 5:{ logcat(p); break;}}
  145.      printf("\n\nOperazione completata con successo  ");
  146.      getchar();
  147. }
  148.  
  149. void upPunti(struct card *p, int pnt)
  150. {
  151.      struct log *px, *paus=p->inf;
  152.      printf("\nSaldo carta: %d", p->punti);
  153.      time_t t=time(NULL);
  154.      struct tm *tp=localtime(&t);
  155.      (p->punti)+=pnt;
  156.      p->inf=malloc(sizeof(struct log));
  157.      px=p->inf;
  158.      strftime(px->data, 9, "%Y%m%d", tp);
  159.      px->punti=pnt;
  160.      px->pun=paus;
  161.      printf("\nNuovo saldo carta: %d", p->punti);
  162. }
  163.  
  164. void dwPunti(struct card *p)
  165. {
  166.      struct log *px, *paus=p->inf;
  167.      int pnt=-1;
  168.      system("cls");
  169.      printf("\nSaldo carta: %d", p->punti);
  170.      time_t t=time(NULL);
  171.      while(pnt<0 || pnt>(p->punti)){
  172.          printf("\nInserire punti ritiro premio, 0 per annullare ");
  173.          scanf("%d", &pnt); getchar();}
  174.      if(pnt!=0){
  175.          struct tm *tp=localtime(&t);
  176.          (p->punti)-=pnt;
  177.          p->inf=malloc(sizeof(struct log));
  178.          px=p->inf;
  179.          strftime(px->data, 9, "%Y%m%d", tp);
  180.          px->punti=-pnt;
  181.          px->pun=paus;}
  182.      printf("\nNuovo saldo carta: %d", p->punti);
  183. }
  184.  
  185. void printBest(struct card *p, struct card **paus, int *n)
  186. {
  187.      if(p!=NULL){
  188.          if((*n)<(p->punti)){ *n=p->punti; *paus=p;}
  189.          printBest(p->pun, paus, n);}
  190.      else if(*paus!=NULL){
  191.          system("cls");
  192.          printf("\n\n\n Il cliente con un piu' punti e': ");
  193.          printf("%s, con un totale di: %d punti.\t", (*paus)->nome, (*paus)->punti);
  194.          getchar();}
  195.          else{ printf("\n\n\tNessuna cliente ancora registrato!"); getchar();}
  196. }
  197.      
  198. void logcat(struct card *p)
  199. {
  200.      struct log *pl=p->inf;
  201.      int i;
  202.      FILE *scrivi;
  203.      system("cls");
  204.      scrivi=fopen("C:\\Users\\user\\Desktop\\logCliente.txt", "w");
  205.      if(scrivi==NULL) printf("\nProblemi nella creazione file!");
  206.      else{
  207.          fprintf(scrivi, "Cliente: %s\tID: %s\n", p->nome, p->ID);
  208.          fprintf(scrivi, "Log eventi dal più recente\n\n");
  209.          while(pl!=NULL){
  210.              fprintf(scrivi, "\nData: ");
  211.              for(i=0; i<8; i++){ if(i==4 || i==6) fprintf(scrivi, "-"); fprintf(scrivi, "%c", pl->data[i]);}
  212.              fprintf(scrivi, "\nOperazione punti: %d\n\n\n", pl->punti); pl=pl->pun;}
  213.          fclose(scrivi); printf("\nCreazione file avvenuta con successo");}
  214. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement