Advertisement
juanjo12x

LAB_GG_P3

Aug 30th, 2014
250
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 11.17 KB | None | 0 0
  1. /*
  2.  * File:   main.cpp
  3.  * Author: Juanjose Tenorio
  4.  *
  5.  * Created on 30 de agosto de 2014, 10:22 AM
  6.  */
  7.  
  8. #include <cstdlib>
  9. #include <cstdio>
  10.  
  11. using namespace std;
  12. int cont=0;int cp=0;int cc=0;
  13. typedef struct tfecha{
  14.     int dd;
  15.     int mm;
  16.     int aa;
  17. }fecha;
  18. typedef struct thora{
  19.     int h;
  20.     int m;
  21.     int s;
  22. }hora;
  23. void Obtener_Nombre(){
  24.     char digit='-';
  25.     while(digit!=' '){
  26.         digit=getchar();
  27.         if(digit!=' ' && digit!='\n') printf("%c",digit);
  28.     }
  29.     printf(" ");
  30.     while(digit==' '){
  31.         digit=getchar();
  32.     }
  33.     while(digit!=' '){
  34.         if(digit!=' ' && digit!='\n') printf("%c",digit);
  35.         digit=getchar();        
  36.     }
  37.     printf(" ");
  38.      while(digit==' '){
  39.         digit=getchar();
  40.     }
  41.     while(digit!=' '){
  42.         if(digit!=' ' && digit!='\n') printf("%c",digit);
  43.         digit=getchar();        
  44.     }
  45.     printf(" ");
  46.     while(!(digit<='9' && digit>='0')){
  47.         digit=getchar();
  48.         if(digit!=' ' && !(digit<='9' && digit>='0') && digit!='\n' ) printf("%c",digit);
  49.          
  50.     }
  51.    
  52.     printf("      Telefono:      ");
  53.    // printf("       ");
  54.     //consigo el codigo del pais y ciudad
  55.     int t=1;int num=0;int k=1;
  56.     //saco codigo del pais
  57.     cp=(digit-'0')*10;printf("%c",digit);digit=getchar();
  58.     cp+=(digit-'0');printf("%c",digit);
  59.     //saco codigo de ciudad
  60.     digit=getchar(); cc+=(digit-'0');
  61.     digit=getchar();
  62.     if(digit!='-') cc=(cc*10) + (digit-'0');
  63.     printf("%d     ",cc);digit=getchar();
  64.     //telefono en si
  65.     while(digit!=' '){
  66.        
  67.         if(digit!='-') {printf("%c",digit);cont++;}
  68.         digit=getchar();
  69.     }    
  70. }
  71. int sacar_ndigitos(int n){
  72.     int cont=1;
  73.     if (n<10) return 1;
  74.     else{
  75.         while(n>10){
  76.             n=n/10;cont++;
  77.         }
  78.         return cont;
  79.     }
  80. }
  81. int sacar_continente(int n){
  82.     if(n>=1 &&  n<=50) return 1;
  83.     else if( n>50 && n<=120) return 2;//europa
  84.     else return 3;
  85. }
  86. bool esta(fecha f,fecha in,fecha fin){
  87.     if( in.aa<=f.aa && f.aa<=fin.aa){
  88.         if(f.aa==in.aa){
  89.             if(f.mm>=in.mm){
  90.                 if(f.mm==in.mm){
  91.                  if(f.dd>in.dd){
  92.                      return true;
  93.                  }else return false;  
  94.                 }else return true;
  95.             }else return false;
  96.         }else if(f.aa==fin.aa){
  97.             if(f.mm<=fin.mm){
  98.                 if(f.mm==fin.mm){
  99.                     if(f.dd<fin.dd) return true;
  100.                     else return false;
  101.                 }else return true;
  102.             }else return false;
  103.         }else{
  104.             return false;
  105.         }
  106.        
  107.     }else{
  108.         return false;
  109.     }
  110. }
  111. bool nohora(hora f,hora in,hora l1,hora l2){
  112.     bool ac1=false;bool ac2=false;
  113.     if(f.h<l1.h) return false;
  114.     else if(f.h>=l1.h){
  115.         if(f.h==l1.h){
  116.             if(f.m>=l1.m){
  117.                 if(f.m==l1.m){
  118.                     if(f.s>l1.s){
  119.                         ac1=true;
  120.                     }else return false;
  121.                 }else ac1=true;
  122.             }else return false;
  123.         }else ac1=true;
  124.     }
  125.     if(in.h>l2.h) return false;
  126.     else if(in.h<=l2.h){
  127.         if(in.h==l2.h){
  128.             if(in.m<=l2.m){
  129.                 if(in.m==l2.m){
  130.                     if(in.s<l2.s){
  131.                         ac2=true;
  132.                     }else return false;
  133.                 }else ac2=true;
  134.             }else return false;
  135.         }else ac2=true;
  136.     }
  137.     return true;
  138. }
  139. int main(int argc, char** argv) {
  140.     float  ta,te,tas,fac;char car,digit;fecha f;int t,s,con,aux,ccp,ccc,ndig,p1,p2,p3;
  141.     scanf("%f %f %f",&ta,&te,&tas);int p4,p5;
  142.     bool final=false;bool ffec=false;bool nuev=false;hora st,ft;
  143.     float subt,tot,cost;
  144.     fecha in,fin;hora inh,finh;
  145.     scanf("%d/%d/%d",&in.dd,&in.mm,&in.aa);scanf("%d/%d/%d",&fin.dd,&fin.mm,&fin.aa);
  146.     scanf("%d:%d:%d",&inh.h,&inh.m,&inh.s);scanf("%d:%d:%d",&finh.h,&finh.m,&finh.s);
  147.     printf("Tarifas Base:\n");
  148.     printf("  America         Europa       Asia\n");
  149.     printf(" %.7f          %.7f         %.7f\n",ta,te,tas);
  150.     while(!final){
  151.         printf("------------------------------------------------------\n");
  152.         printf("------------------------------------------------------\n");
  153.         printf("Usuario:  ");
  154.         tot=0.0;
  155.         cc=0;cont=0;cp=0;
  156.         nuev=false;
  157.         Obtener_Nombre();
  158.         printf("\n");
  159.         //una vez leido el usuario y telefono , procedemos con las fechas
  160.         t=scanf("%d/%d/%d",&f.dd,&f.mm,&f.aa);
  161.         while(t!=0 && t!=EOF){
  162.             if(!esta(f,in,fin)){printf("\n");t=scanf("%d/%d/%d",&f.dd,&f.mm,&f.aa);continue;}
  163.             ffec=false;subt=0.0;
  164.             printf("%d/%d/%d:     ",f.dd,f.mm,f.aa);
  165.             //printf("\n");
  166.            printf("Telefono     Nombre                       Inicio     Fin     Factor  Costo\n");
  167.             //printf("\n");
  168.             s=scanf("%d-%d",&p4,&p5);
  169.            
  170.             while(s!=0 && s!=EOF){
  171.                 printf("          %d    %d",p4,p5);
  172.                 digit=' ';
  173.                 printf("       ");
  174.                 while(digit==' '){
  175.                 digit=getchar();
  176.                }
  177.                 while(digit!=' '){
  178.                  if(digit!=' ' && digit!='\n') printf("%c",digit);
  179.                  digit=getchar();                
  180.                 }
  181.                 printf(" ");
  182.                while(digit==' '){
  183.                 digit=getchar();
  184.                }
  185.                while(digit!=' '){
  186.                 if(digit!=' ' && digit!='\n') printf("%c",digit);
  187.                 digit=getchar();        
  188.                }
  189.                printf(" ");
  190.                 while(digit==' '){
  191.                  digit=getchar();
  192.                 }
  193.                 while(digit!=' '){
  194.                  if(digit!=' ' && digit!='\n') printf("%c",digit);
  195.                  digit=getchar();        
  196.                 }
  197.                 printf(" ");
  198.                 while(!(digit<='9' && digit>='0')){
  199.                  digit=getchar();
  200.                  if(digit!=' ' && !(digit<='9' && digit>='0') && digit!='\n' ) printf("%c",digit);
  201.                 }
  202.                
  203.                 printf("           %c",digit);aux=(digit-'0')*10;
  204.                 digit=getchar();aux+=(digit-'0');printf("%c",digit);
  205.                 st.h=aux;                  
  206.                 aux=scanf(":%d:%d",&p1,&p2);
  207.                 if(aux==1){ printf(":%d",p1);st.m=p1;st.s=0;}
  208.                 else {printf(":%d:%d",p1,p2);st.m=p1;st.s=p2;}
  209.                 aux=scanf("%d:%d:%d",&p1,&p2,&p3);
  210.                 if(aux==2){ printf("     %d:%d",p1,p2);ft.h=p1;ft.m=p2;ft.s=0;}
  211.                 else{ printf("     %d:%d:%d",p1,p2,p3);ft.h=p1;ft.m=p2;ft.s=p3;}
  212.                 if(!nohora(st,ft,inh,finh)){
  213.                     s=scanf("%d-%d",&p1,&p2);
  214.                 if(s==EOF){
  215.                     tot+=subt;
  216.                     printf("Subtotal consumido :         %.3f\n",subt);
  217.                     printf("total consumido :         %.3f\n",tot);
  218.                     tot=0;
  219.                     final=true;
  220.                     break;
  221.                 }
  222.                 if(s==1){
  223.                     //encontré solo fecha
  224.                     ffec=true;f.dd=p1;
  225.                     scanf("/%d/%d",&f.mm,&f.aa);
  226.                     t=1;
  227.                     printf("Subtotal consumido :         %.3f\n",subt);
  228.                     tot+=subt;
  229.                     break;
  230.                 }else if(s==0){
  231.                     //No cncontre nada, lo que significa que es
  232.                     //un nuevo usuario
  233.                     nuev=true;s=scanf("%d-%d",&p1,&p2);
  234.                 if(s==EOF){
  235.                     tot+=subt;
  236.                     printf("Subtotal consumido :         %.3f\n",subt);
  237.                     printf("total consumido :         %.3f\n",tot);
  238.                     tot=0;
  239.                     final=true;
  240.                     break;
  241.                 }
  242.                 if(s==1){
  243.                     //encontré solo fecha
  244.                     ffec=true;f.dd=p1;
  245.                     scanf("/%d/%d",&f.mm,&f.aa);
  246.                     t=1;
  247.                     printf("Subtotal consumido :         %.3f\n",subt);
  248.                     tot+=subt;
  249.                     break;
  250.                 }else if(s==0){
  251.                     //No cncontre nada, lo que significa que es
  252.                     //un nuevo usuario
  253.                     nuev=true;tot+=subt;
  254.                     printf("Subtotal consumido :         %.3f\n",subt);
  255.                     printf("total consumido :         %.3f\n",tot);
  256.                     tot=0;
  257.                     break;
  258.                 }else{continue;}
  259.                     break;
  260.                 }else{continue;}
  261.                 }
  262.                 scanf("%f",&fac);
  263.                 printf("     %.3f",fac);
  264.                 //proceso de calculo del porcentaje de cobro
  265.                  //saco codigo de pais
  266.                 ccp=p4/100;
  267.                 //saco codigo de ciudad
  268.                 ccc=p4%100;
  269.                 //saco el numero de digitos dep2
  270.                 ndig=sacar_ndigitos(p5);
  271.                 /*proceso de comparacion*/
  272.                 if(ccp==cp && ccc==cc){//coincide pais y ciudad
  273.                     cost=0;
  274.                 }else if(ccp==cp){
  275.                     //averigua  de que continente es
  276.                     con=sacar_continente(ccp);
  277.                     if(con==1) cost=ta;
  278.                     else if(con==2) cost=te;
  279.                     else cost=tas;
  280.                     if(cont!=ndig) cost=cost*float(115/100);
  281.                 }else{//diferente pais
  282.                     con=sacar_continente(ccp);
  283.                     if(con==1) cost=ta*fac;
  284.                     else if(con==2) cost=te*fac;
  285.                     else cost=tas*fac;
  286.                     if(cont!=ndig) cost=cost*float(115/100);
  287.                 }
  288.                 /*proceso de impresion*/
  289.                 printf("      %.3f\n",cost);
  290.                 subt+=cost;
  291.                 //comienzo revisando si hay telefono,fecha o EOF
  292.                 s=scanf("%d-%d",&p1,&p2);
  293.                 if(s==EOF){
  294.                     tot+=subt;
  295.                     printf("Subtotal consumido :         %.3f\n",subt);
  296.                     printf("total consumido :         %.3f\n",tot);
  297.                     tot=0;
  298.                     final=true;
  299.                     break;
  300.                 }
  301.                 if(s==1){
  302.                     //encontré solo fecha
  303.                     ffec=true;f.dd=p1;
  304.                     scanf("/%d/%d",&f.mm,&f.aa);
  305.                     t=1;
  306.                     printf("Subtotal consumido :         %.3f\n",subt);
  307.                     tot+=subt;
  308.                     break;
  309.                 }else if(s==0){
  310.                     //No cncontre nada, lo que significa que es
  311.                     //un nuevo usuario
  312.                     nuev=true;tot+=subt;
  313.                     printf("Subtotal consumido :         %.3f\n",subt);
  314.                     printf("total consumido :         %.3f\n",tot);
  315.                     tot=0;
  316.                     break;
  317.                 }else{continue;}
  318.              }
  319.             if(final) break;
  320.             if(nuev)break;//nuevo usuario
  321.         }
  322.         if(t==EOF) {final=true;break;}
  323.     }
  324.     return 0;
  325. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement