milardovich

Final 1 | Sintaxis | UTN FRRO

May 22nd, 2013
167
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.94 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. /************************************************************************
  5.  *                                  *
  6.  * Final de Sintaxis tomado el 22-07-2010               *
  7.  * ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        *
  8.  * Están programadas también las funciones que no pide            *
  9.  * para que se pueda probar el programa completo.           *                  
  10.  * Escrito por Sergio Milardovich <[email protected]>    *
  11.  *                                  *
  12.  ************************************************************************
  13.  */
  14. struct sucursal{
  15.     char nombre[64];
  16.     char direccion[64];
  17.     char localidad[64];
  18.     float importe;
  19.     float neto;
  20.     float total;
  21. };
  22.  
  23. // Se declaran las funciones que se van a usar.
  24. struct sucursal* carga();
  25. void menu();
  26. void modifica(struct sucursal *buffer, char nom[64], int codigo_campo);
  27. void listado(struct sucursal sucursal[3]);
  28.  
  29. // En el main vamos a llamar a las funciones carga() y listado().
  30. void main(){
  31.     menu();
  32. }
  33.  
  34. // Menú de opciones.
  35. void menu(){
  36.     int i,opt,num_suc,suc_campo;
  37.     char suc_campo_valor[64];
  38.     struct sucursal *suc;
  39.     opt = 1;
  40.     do{
  41.         printf("Opciones: \n 1- ingresar sucursales \n 2- modificar una sucursal \n 3- listar sucursales \n 0- salir \n\n\t");
  42.         scanf("%d",&opt);
  43.         switch(opt){
  44.             case 1:
  45.                 suc = carga();
  46.                 printf("\n\n\n Sucursales cargadas: \n");
  47.                 for(i=0;i<3;i++){
  48.                     printf("\t %s \n",suc[i].nombre);
  49.                 }
  50.             break;
  51.             case 2:
  52.                 printf("\n\n Ingrese el número de sucursal que quiere editar: \n");
  53.                 scanf("%d",&num_suc);
  54.                 printf("Ingrese el campo que quiere editar: \n");
  55.                 scanf("%d",&suc_campo);
  56.                 printf("Ingrese el nuevo valor del campo: \n");
  57.                 scanf("%s",suc_campo_valor);
  58.  
  59.                 modifica(&suc[num_suc],suc_campo_valor,suc_campo);
  60.             break;
  61.             case 3:
  62.                 listado(suc);
  63.             break;
  64.         }
  65.     } while(opt != 0);
  66. }
  67.  
  68. // Cuerpo de la función declarada anteriormente.
  69. struct sucursal* carga(){
  70.     static struct sucursal buffer[3];
  71.     int i,j;
  72.     j=0;
  73.     for(i=0;i<3;i++){
  74.         printf("Sucursal número %d \n",(++j));
  75.  
  76.         printf("Ingrese nombre: \n");
  77.         scanf("%s",buffer[i].nombre);
  78.  
  79.         printf("Ingrese dirección: \n");
  80.         scanf("%s",buffer[i].direccion);
  81.  
  82.         printf("Ingrese localidad: \n");
  83.         scanf("%s",buffer[i].localidad);
  84.  
  85.         // Para usar scanf con una variable
  86.         // que no sea un string es necesario
  87.         // pasar la variable como puntero (&).
  88.  
  89.         printf("Ingrese importe: \n");
  90.         scanf("%f",&buffer[i].importe);
  91.  
  92.         printf("Ingrese neto: \n");
  93.         scanf("%f", &buffer[i].neto);
  94.  
  95.         printf("Ingrese total: \n");
  96.         scanf("%f", &buffer[i].total);
  97.  
  98.     }
  99.     return buffer;
  100. }
  101.  
  102. void modifica(struct sucursal *buffer, char nom[64], int codigo_campo){
  103.     switch(codigo_campo){
  104.         case 1:
  105.             strcpy(buffer->nombre, nom);
  106.         break;
  107.         case 2:
  108.             strcpy(buffer->direccion, nom);
  109.         break;
  110.         case 3:
  111.             strcpy(buffer->localidad, nom);
  112.         break;
  113.         case 4:
  114.             // La función atof() sirve
  115.             // para pasar un string a
  116.             // flotante.
  117.             buffer->importe = atof(nom);
  118.         break;
  119.         case 5:
  120.             buffer->neto = atof(nom);
  121.         break;
  122.         case 6:
  123.             buffer->total = atof(nom);
  124.         break;
  125.     }
  126. }
  127.  
  128. void listado(struct sucursal sucursal[3]){
  129.     struct sucursal buffer;
  130.     int i,j;
  131.     // Algoritmo sencillo para
  132.     // ordenar colecciones
  133.     // (método burbuja). Se puede
  134.     // ver con más detalles acá:
  135.     // http://www.nachocabanes.com/c/curso/cc05.php
  136.     for (i=0;i<2;i++){
  137.         for(j=1;j<3;j++){
  138.             // Para comparar dos strings se debe usar la función strncmp.
  139.             // Documentación: http://c.conclase.net/librerias/?ansifun=strncmp
  140.             if(strncmp(sucursal[i].localidad, sucursal[j].localidad, 64) > 0){
  141.                 // Para asignarle un valor a un string
  142.                 // se usa la función strcpy
  143.                 // el primer argumento es la variable
  144.                 // donde se guarda el valor del segundo.
  145.                 // Para que funcione hace falta llamar
  146.                 // a la función string.h en la cabecera.
  147.                 strcpy(buffer.nombre,sucursal[i].nombre);
  148.                 strcpy(buffer.direccion,sucursal[i].direccion);
  149.                 strcpy(buffer.localidad,sucursal[i].localidad);
  150.                 buffer.importe = sucursal[i].importe;
  151.                 buffer.neto = sucursal[i].neto;
  152.                 buffer.total = sucursal[i].total;
  153.  
  154.                 strcpy(sucursal[i].nombre,sucursal[j].nombre);
  155.                 strcpy(sucursal[i].direccion,sucursal[j].direccion);
  156.                 strcpy(sucursal[i].localidad,sucursal[j].localidad);
  157.                 sucursal[i].importe = sucursal[j].importe;
  158.                 sucursal[i].neto = sucursal[j].neto;
  159.                 sucursal[i].total = sucursal[j].total;
  160.  
  161.                 strcpy(sucursal[j].nombre,buffer.nombre);
  162.                 strcpy(sucursal[j].direccion,buffer.direccion);
  163.                 strcpy(sucursal[j].localidad,buffer.localidad);
  164.                 sucursal[j].importe = buffer.importe;
  165.                 sucursal[j].neto = buffer.neto;
  166.                 sucursal[j].total = buffer.total;
  167.             }
  168.         }
  169.     }
  170.     printf("\n\n \t\t nombre \t dirección \t localidad \t importe \t neto \t total");
  171.     for(i=0;i<3;i++){
  172.         printf("\n \t\t %s \t %s \t %s \t %f \t %f \t %f \n",sucursal[i].nombre,sucursal[i].direccion,sucursal[i].localidad,sucursal[i].importe,sucursal[i].neto,sucursal[i].total);
  173.     }
  174. }
Advertisement
Add Comment
Please, Sign In to add comment