You are on page 1of 14

Trabajo prctico Nro.

2
Tema: Estructuras y funciones

Autor: Matas Vazquez Comisin: 1AM Ao 2012

Pgina 1 de 14

Enunciado
Se dispone de los datos de los distintos tipos de productos de una heladeria, los cuales no son ms de 100. De cada producto se conoce: Cdigo de producto (valor entre 1 y 100) ,descripcion (mximo 40 caracteres), marca(arcor,frigor,com-com), precio, stock, punto de pedido, fecha de ltima compra y el total de compras mensuales en el ao. Se solicita realizar un programa que permita: - ingresar los datos de los productos - consultar los datos de un producto a partir de su cdigo - realizar una compra - listar todos los productos de una determinada marca ingresada por teclado - listar todos los productos, en orden ascendente por precio

Programa en C
#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <conio.h> #include<ctype.h> #define CANT 100 //Cantidad de productos //declarando typedef typedef struct{ int dia,mes,anio; } fecha; typedef struct{ int cod,stock,pedido,mes[12]; char desc[40],marca; float prec; fecha f_ult; } productos; //declaracion de las funciones principales void menu(void); void cargar(productos producto[CANT],int *i); void comprarProd(productos producto[CANT]); void mostrarProd(productos producto[CANT]); void listarMarca(productos producto[CANT]); void listarPrec(productos producto[CANT]); int ingresarOpcion(void); int solicitarProducto(productos producto[CANT]); Pgina 2 de 14

int es_valido(int valor, int val_ini, int val_fin); int buscarProducto(int cod,productos producto[CANT]); int solicitarStock(productos producto[CANT]); int es_valida (int day, int month, int year); void listarTipo(productos producto[CANT], char mark); //Comienzo del cuerpo main() { int opc,i=0,k; productos producto[CANT]; opc=1; system("color f1"); for(k=0;k<CANT;k++){ producto[k].cod=0; producto[k].stock=0; producto[k].prec=0; producto[k].pedido=0; } while(opc!=0){ opc=ingresarOpcion(); system("cls"); switch(opc){ case 1: cargar(producto,&i); i++; break; case 2: mostrarProd(producto); break; case 3: comprarProd(producto); break; case 4: listarMarca(producto); break; case 5: listarPrec(producto); break; } } system("pause"); } void menu(void) Pgina 3 de 14

{ system("cls"); printf("\n\n\n\n\t\tOpciones: "); printf("\n\t\t-----------"); printf("\n\n\t\t1) Cargar datos"); printf("\n\n\t\t2) Consultar los datos de un producto"); printf("\n\n\t\t3) Realizar una compra", 162); printf("\n\n\t\t4) Listar los productos de una marca determinada", 162); printf("\n\n\t\t5) Listar todos los productos, en orden descendente por precio"); printf("\n\n\t\t0) Terminar"); printf("\n\n\n\t\tIngrese su opci%cn: ",162); } int ingresarOpcion(void) { int opc; do { menu(); scanf("%d", &opc); } while (opc<0 || opc>5); return opc; } void mostrarProd(productos producto[CANT]) { int j,pos; pos=solicitarProducto(producto); system("cls"); printf("\n\t------- Datos del producto -------"); printf("\nC%cdigo: %d",162,producto[pos].cod); printf("\nDescripci%cn: %s",162,producto[pos].desc); printf("\nMarca: %c",producto[pos].marca); printf("\nPrecio: %.2f",producto[pos].prec); printf("\nStock: %d",producto[pos].stock); printf("\nPunto de pedido: %d",producto[pos].pedido); printf("\nFechade ultima compra:%d/%d/%d\n", producto[pos].f_ult.dia, producto[pos].f_ult.mes, producto[pos].f_ult.anio); printf("\nTOTAL DE COMPRAS MENSUALES EN EL ANIO"); printf("\n\t--------------------------------------"); for(j=0;j<12;j++){ printf("\nMes %d ------------> Ventas: %d",j+1,producto[pos].mes[j]); } printf("\n\n"); Pgina 4 de 14

system("pause"); } int solicitarProducto(productos producto[CANT]) { int cod, ok=0, pos; printf("\nIndique el producto"); do{ printf("\nCodigo (1 a 100): "); scanf("%d", &cod); if (es_valido(cod, 1, 100)!=0) { pos=buscarProducto(cod, producto); if (pos<CANT) ok=1; else printf("\tNo existe producto con este codigo"); } else printf("\tC%cdigo de producto inv%clido",162, 160); }while(ok==0); return pos; } int es_valido(int valor, int val_ini, int val_fin) { return (valor>=val_ini && valor<=val_fin); } int buscarProducto(int cod,productos producto[CANT]) { int l=0; int existe=0; //falso while (l<CANT & !existe) { if (producto[l].cod==cod) existe=1; //1=verdadero (todo lo que no es 0 es verdadero) else l++; } return l; } void comprarProd(productos producto[CANT]) { int pos, band=0,canti; printf("\nExtracci%cn", 162); printf("\n----------\n"); Pgina 5 de 14

pos=solicitarProducto(producto); printf("Producto: %c ,%s",producto[pos].marca, producto[pos].desc); printf("\nCantidad actual: %d",producto[pos].stock); do { canti=solicitarStock(producto); if (canti>producto[pos].stock) printf("\n\tLa cantidad a comprar supera el stock actual.\n"); else band=1; }while(band==0); producto[pos].stock-=canti; printf("Stock actualizado: %d\n",producto[pos].stock); Sleep(2000); } int solicitarStock(productos producto[CANT]) { int canti; printf("\nIndique la cantidad a comprar: "); do { scanf("%d", &canti); }while (canti<=0); return canti; } void listarMarca(productos producto[CANT]) { char mark; do{ printf("\n\tMarca de los productos a listar(Arcor/Frigor/Com-com): "); mark=toupper(getch()); printf("\n\n"); }while(mark!='A' && mark!='F' && mark!='C'); listarTipo(producto,mark); printf(\n\n); system("pause"); } void listarTipo(productos producto[CANT], char mark) { int k=0; printf("\n\t----------Productos----------\n"); switch(mark) { Pgina 6 de 14

case 'A': for(k=0;k<CANT;k++) { if(producto[k].marca=='A' && producto[k].cod>0) { printf("\n%i\t\t\t%s",producto[k].cod,producto[k].desc); } } case 'F': for(k=0;k<CANT;k++) { if(producto[k].marca=='F' && producto[k].cod>0) { printf("\n%i\t\t\t%s",producto[k].cod,producto[k].desc); } } case 'C': for(k=0;k<CANT;k++) { if(producto[k].marca=='C' && producto[k].cod>0) { printf("\n%i\t\t\t%s",producto[k].cod,producto[k].desc); } } } system("pause"); } void listarPrec(productos producto[CANT]) { int q,j,k; productos aux; for(q=0;q<CANT-1;q++) { for(j=q+1;j<CANT;j++) { if(producto[q].prec<producto[j].prec) { aux=producto[q]; producto[q]=producto[j]; producto[j]=aux; } } } printf("\n\tC%cdigo\t\t\tDescripci%cn\n\n\n",162,162); Pgina 7 de 14

for(k=0;k<CANT;k++) if(producto[k].cod>0) printf("\n\t%d\t\t\t%s\n",producto[k].cod,producto[k].desc); system("pause"); } void cargar(productos producto[CANT],int *i) { int cod,k,dia,mes,anio,flag,ok; char mark; printf("\n\n\n\t\t----------- CARGA DE DATOS ----------\n"); printf("\n\t\t\t"); flag=0; do{//ingreso de cdigo ok=0; system("cls"); if(flag==1) printf("\nATENCION!\nUd. ha ingresado datos incorrectos\n");//a partir de la 2 vez que muestra el mismo ingreso de datos, muestra el cartel de error flag=0; printf("\nIngreso de c%cdigo", 162); printf("\n-----------------\n"); printf("\nIngrese el c%cdigo (1-100):\n", 162); scanf("%i", &cod); if (es_valido(cod, 1, 100)!=0) if (buscarProducto(cod, producto)==CANT){ ok=1; producto[*i].cod=cod;} else { printf("\nC%cdigo ya usado...", 162); Sleep(2000);} else {printf("\tC%cdigo inv%clido...", 162, 160); Sleep(2000);} flag=1;//activa la bandera }while(ok==0); do{ fflush(stdin); printf("\nDescripci%cn: ",162); gets(producto[*i].desc); }while(strlen(producto[*i].desc)==0 || strlen(producto[*i].desc)>40); Pgina 8 de 14

do{ printf("\nMarca(Arcor/Frigor/Com-com): "); mark=toupper(getch()); }while(mark!='A' && mark!='F' && mark!='C'); producto[*i].marca=mark; do{ fflush(stdin); printf("\nPrecio: "); scanf("%f",&producto[*i].prec); fflush(stdin); }while(producto[*i].prec<=0); do{ printf("\nStock: "); scanf("%d",&producto[*i].stock); }while(producto[*i].stock<=0); do{ printf("\nPunto de pedido: "); scanf("%d",&producto[*i].pedido); }while(producto[*i].pedido<=0); flag=0; do{//ingreso de fecha de ultima compra system("cls"); if(flag==1) printf("\nATENCION!\nUd. ha ingresado datos incorrectos\n"); flag=0; printf("\nIngreso la fecha de ultima compra"); printf("\n------------------------------------------\n"); printf("\nIngrese el a%co:\n", 164); scanf("%i", &anio); printf("\nIngrese el mes:\n"); scanf("%i", &mes); printf("\nIngrese el d%ca:\n", 161); scanf("%i", &dia); flag=1; }while(es_valida(dia, mes, anio)==0); printf("\nCantidad de compras por mes: "); for(k=0;k<12;k++){ do{ printf("\nMes %d: ",k+1); scanf("%d",&producto[*i].mes[k]); }while(&producto[*i].mes[k]<0); } Pgina 9 de 14

} int es_valida (int day, int month, int year)//Para validar fechas { int validation=0; if(year>0 && month>0 && month <=12 && day>=1 && day<=31) { if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12) { if(day<=31 && day>=1) validation=1; } if(month==4 || month==6 || month==9 || month==11) { if(day<=30 && day>=1) validation=1; } if(month==2) { if(year%4) { if(day>=1 && day<=29) validation=1; } else { if(day>=1 && day<=28) validation=1; } } } else validation=0; return validation; }

Pgina 10 de 14

Pgina 11 de 14

Pgina 12 de 14

Pgina 13 de 14

Pgina 14 de 14

You might also like