Advertisement
Dany1858

inf. Compito 1 appello 2015 rev 3 (da finire)

May 27th, 2015
629
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.57 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <malloc.h>
  4. #include <string.h>
  5.  
  6. struct listino{
  7.        int tipo;
  8.        char modello[31];
  9.        int cilindrata;
  10.        long int ricam[11];
  11.        struct listino *next;
  12. };
  13.        
  14. struct ricambi{
  15.        long int codice[11];
  16.        float prezzo;
  17.        int giorni;
  18.        int orelav;
  19.        char descrizione[101];
  20.        struct ricambi *prox;
  21. };
  22.        
  23. int menu(struct listino *, struct ricambi *);
  24. struct listino *database(struct listino *, struct ricambi **);
  25. int ripara(struct listino *, struct ricambi *);
  26.  
  27. int main()
  28. {
  29.     struct listino *p=NULL;
  30.     struct ricambi *pr=NULL;
  31.     int err;
  32.     while(1){
  33.     switch(menu(p, pr)){
  34.          case 0: return 0;
  35.          case 1:{ p=database(p, &pr); break;}
  36.          case 2:{ if(p!=NULL && pr!=NULL) err=ripara(p, pr);
  37.                   else printf("\n!!!Database mancante"); getchar(); break;}}
  38.     if(err==0) printf("\ncalcolo fallito"); getchar();}
  39. }
  40.  
  41. int menu(struct listino *p, struct ricambi *pr)
  42. {
  43.         int men=-1;
  44.         system("cls"); printf("\n");
  45.         while(men<0 || men>2){
  46.              if(p==NULL && pr==NULL) printf("\n1. carica database\n");
  47.              else printf("\n1. database caricato\n");
  48.              printf("\n2. cerca modello\n\n0. esci\t");
  49.              scanf("%d", &men); if(men<0 || men>2){ system("cls"); getchar();
  50.              printf("!!!Inserire opzione corretta!\n");}}
  51.         return men;
  52. }
  53.  
  54. struct listino *database(struct listino *p, struct ricambi **pr)
  55. {
  56.         FILE *listi;
  57.         FILE *ricam;
  58.         struct listino *pc=p;
  59.         struct ricambi *pt=*pr;
  60.         int n=1, m=1, i=0;
  61.         listi=fopen("C:\\Users\\user\\Desktop\\Milicia444159\\listino.txt", "r");
  62.         if(listi==NULL){ printf("\n!!!Errore apertura file listino.txt\n"); getchar();}
  63.         else{ while(n>0){
  64.                  if(p==NULL){ p=(struct listino *)malloc(sizeof(struct listino)); p->next=NULL; pc=p;}
  65.                  else{ p->next= (struct listino *)malloc(sizeof(struct listino)); p=p->next; p->next=NULL;}
  66.                  n=fscanf(listi, "%d %s %d ", &p->tipo, p->modello, &p->cilindrata); printf("%d %s %d\n",p->tipo, p->modello, p->cilindrata);
  67.                  if(n==0) printf("\n!Fine lettura file listino\n");
  68.                  else{ while(m>0 && ferror(listi)){ m=fscanf(listi, "%d", &p->ricam[i]);if(m>0){ printf("\n%10d %d", p->ricam[i], i);i++;}}
  69.                        }}
  70.              fclose(listi);}
  71.         n=1;
  72.         ricam=fopen("C:\\Users\\user\\Desktop\\Milicia444159\\ricambi.txt", "r");
  73.         if(ricam==NULL){ printf("\n!!!Errore apertura file ricambi.txt\n"); getchar();}
  74.         else{ while(n>0){
  75.                  if(*pr==NULL){ *pr=(struct ricambi *)malloc(sizeof(struct ricambi)); (*pr)->prox=NULL; pt=(*pr);}
  76.                  else{ (*pr)->prox= (struct ricambi *)malloc(sizeof(struct ricambi)); (*pr)=(*pr)->prox; (*pr)->prox=NULL;}
  77.                  n=fscanf(ricam, "%d %f %d %d %s", &(*pr)->codice, &(*pr)->prezzo, &(*pr)-> giorni, &(*pr)->orelav, (*pr)-> descrizione);
  78.                  if(n==0) printf("\n!Fine lettura file ricambi\n");}
  79.              fclose(ricam);}
  80.        if(p!=NULL && *pr!=NULL){ printf("\n!Database caricato correttamente"); getchar();}
  81.        *pr=pt;
  82.        return pc;
  83. }
  84.  
  85. int ripara(struct listino *p, struct ricambi *pr)
  86. {
  87.         char nome[31];
  88.         long int pezzi[11]; pezzi[11]=0;
  89.         int ore=0, day=0, n=0, i;
  90.         float prez=0, tot=0;
  91.         printf("\nInserire nome veicolo\t");
  92.         scanf("%s", nome);
  93.         nome[30]='\0'; /*evita errori in caso di overflow*/
  94.         for(i=0; i<10; i++){
  95.              printf("\t\t\t\t\t , , , , ,\n");
  96.              printf("Inserire codice ricambio, 0 per uscire\t");
  97.              scanf("%d", &pezzi[i]); if(pezzi[i]==0) break;
  98.              else n++;}
  99.         while(p!=NULL){printf("%s %s", nome, p->modello);
  100.              if(strcmp(nome, p->modello)==0){ printf("si");
  101.                   for(i=0; i<=n; i++){
  102.                        if(pezzi[i]==p->ricam[i]==0){
  103.                             while(pr!=NULL){
  104.                                  if(pezzi[i]==pr->codice[i]==0){                                
  105.                                       ore+=pr->orelav; day+=pr->giorni;
  106.                                       prez+=pr->prezzo;}
  107.                                  pr=pr->prox;}}}
  108.          p=NULL;}
  109.              else p=p->next;}
  110.         tot=ore*20+prez;
  111.         if(tot==0) return 0;
  112.         else{
  113.         printf("\nCosto totale: %.2f", tot);
  114.         printf("\nGiorni di attesa: %d", day+1);
  115.         getchar(); return 1;}
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement