Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Temas - larezaka

#1
Buenas,

Gente les hago una consulta para ver si es posible.

Tengo un codigo PHP en el cual el usuario se Loguea y escribe un documento, luego lo puede guardar en un texto plano.
Queria intentar que al sitio se loguen varios usuarios y puedan modificar el mismo documento, ya sea individual o de forma simultanea y ademas teniendo un control de versiones por si quiero regresarlo atras.

Lo unico que se me ocurrio es usar GIT para tener el control de versiones, pero no se si es posible o no se como hacer para integrar GIT y que lo reflejen los cambios.

Si alguien conoce alguna tecnica, enlace o documentacion que pueda ayudarme a aplicarlo, lo agradeceria.

Saludos.

#2
Gente,

Voy a aprovechar este espacio para hacerles una consulta, en una de esas les ha pasado.
Estoy utilizando una APi de google para reconocimiento de voz.
Desde el enlace que dejo, la pagina funciona segun lo esperado, me solicita permiso para usar el microfono y funciona adecuadamente.

https://www.google.com/intl/en/chrome/demos/speech.html

La utilizacion es muy simple, es copiar el codigo original y aplicarlo en nuestro codigo.

Estoy teniendo el siguiente problema con chrome cuando ejecuto el html. Nunca me solita permisos con el microfono.
Revise las excepciones pero estan correctas, incluso tengo la ultima version. Por la dudas agregue ls excepciones de google, pero aun asi me indica el mismo error al intentar dictar:

Permission to use microphone is blocked. To change, go to chrome://settings/contentExceptions#media-stream

Ahora, esto lo probe en otro navegador(Maxthon) el mismo codigo y funciona bien, reconoce bien la voz.

Quizas me puedan dar alguna idea para que funcione en chrome, en una de esas estoy pasando algo por alto del codigo que deba moficar o agregar.

Estoy probandolo para luego integrarlo en un proyecto con PHP.

Si me pueden dar una mano lo agradeceria.

Saludos.

#3
Estimados,

Les hago una pregunta sobre validaciones de password.
Necesito validar una contraseña que tenga la menos 2 valores numericos y 1 simbolo.
Tengo la estructura del condigo.

Me encontre con un problemas, por mas que ingreso un password que cumple la norma, el sistema me lo envia como valido. Esto a pesar de que aparece el mensaje con el error que no lo cumple. me lo termina validando en la bae de datos.

Me podrar dar una mano para ver a que se debe?
Les adjunto lo que tengo funcionado.

Código (asp) [Seleccionar]
<!-- Contraseña -->
                       
                            <asp:Label runat="server" Text="Contraseña" CssClass="control-label col-lg-3"></asp:Label>
                           
                                <asp:TextBox ID="password"  runat="server"   MaxLength="20" TextMode="Password" CssClass="form-control"  ></asp:TextBox>
                                <br />
                                <asp:RegularExpressionValidator ID="validapass" runat="server" ValidationExpression="^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{8,}$" ControlToValidate="password" ErrorMessage="La contraseña debe tener al menos un valor NO alfanumerico y 2 digitos"></asp:RegularExpressionValidator>
                                <asp:RequiredFieldValidator ID="ControlaPassword" ControlToValidate="password" runat="server" ErrorMessage="Ingrese su Contraseña"></asp:RequiredFieldValidator>
                                     

                    </div>
                    <!-- Botón enviar -->
                   
                        <asp:Label runat="server" Text="" CssClass="control-label col-lg-3"></asp:Label>
                           
                       
                            <asp:Button ID="registrar" CssClass="btn btn-sm btn-info" runat="server" Text="Registrarse" OnClick="registrar_Click" />
                            <!-- Validacion -->
#4
Camaradas,

Les hago una consulta.
Es estado realizando validaciones para un registro de usuario en ASP.NET
Me encontre con un problema que me esta frenando.

Puedo validar todos los campos con sus formatos(nombre, apellido, email, contraseña, confirmar contraseñar y captcha).

Tengo que agregar un valor No alfanumerico y minimo 2 campos numericos par el password pero al guardar el formulario no hace nada.

Voy a adjuntar lo que hice, por ahi me puedan dar una mano y quizas este dejando pasar algo.

Código (asp) [Seleccionar]


<div class="form-group">
<asp:Label runat="server" Text="Contraseña" CssClass="control-label col-lg-3"></asp:Label>

<asp:TextBox ID="password"  runat="server" MinimumSymbolCharacters="1" minRequiredNonalphanumericCharacters="1"  MaxLength="20" TextMode="Password" CssClass="form-control"  ></asp:TextBox>
                               <br />
<!--<asp:RegularExpressionValidator runat="server" ValidationExpression='@\"(?:.{7,})(?=(.*\d){1,})(?=(.*\W){1,})' ControlToValidate="password" ErrorMessage="La contraseña debe tener al menos un valor NO alfanumerico y 2 digitos"></asp:RegularExpressionValidator>-->

<asp:RequiredFieldValidator ID="ControlaPassword" ControlToValidate="password" runat="server" minRequiredNonalphanumericCharacters="1" ErrorMessage="Ingrese su Contraseña"></asp:RequiredFieldValidator>

</div>


Si observan intente agregar un <asp:RegularExpressionValidator , pero no me funciono y lo comente, la verdad no entendi como lo aplicaron, ya que lo saque de internet.

por otroa parte tambien coloque algo asi como el MinimumSymbolCharacters y  minRequiredNonalphanumericCharacters, pero no me funcionaron.

Agradeceria cualquier consejo par poder finalizarlo.
Lo unico que luego pense es utilizar jscript para terminarlo, pero queria ver si lo aplicaba aqui.

Saludos.

#5
PHP / Mostrar ip en mapa, con ajax
12 Julio 2013, 20:30 PM
Hola gente, hace uno dias yo habia consultado de una forma, de mostrar un mapa mediate la ip del usuario donde se conecta, encontre un codigo que me lo hacia muy facil por suerte.

Código (php) [Seleccionar]

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>

<style type="text/css">
html { height: 100% }
body { height: 100%; margin: 0px; padding: 0px }
#map_canvas { height: 100% }
</style>
<script type="text/javascript"
   src="http://maps.google.com/maps/api/js?sensor=true">
</script>
<script type="text/javascript">
function initialize(location) {
   var latlng = new google.maps.LatLng(location.coords.latitude,location.coords.longitude);
   var myOptions = {
     zoom: 19,
     center: latlng,
     mapTypeId: google.maps.MapTypeId.ROADMAP
   };
   var map = new google.maps.Map(document.getElementById("map_canvas"),
       myOptions);
var marker = new google.maps.Marker({
     position: latlng,
     map: map,
     title:"Mi ubicacion."
}); 
}

</script>
</head>
<body onload="navigator.geolocation.getCurrentPosition(initialize);">
<div id="map_canvas" style="width:30%; height:50%"></div>
</body>
</html>


Pero ahora necesito otra ayudita.

El caso es qu esoty implementando ajax para acer mas dinamico el sitio, pero cuando ingreso este mapa en un div central, no me figura, solo me funciona si abro el div een otra pestaña.
Tengo entendido, que javascript y ajax no se llevan bien, pero debe existir un metodo para insertarlo, y que me tome la accion.

Lo que hago es cargar los href y link ya sea dentro de el cuerpo principal, asi como en otra carpeta parte para ver si eso lo solucionaba.
Lamentablemente me lo toma como texto plano, e incluso no lo reconoce, como dije solo si lo abro por fuera.

Si alguien sabe alguna forma de implementarlo lo agradeceria.

Saludos Camaradas.
#6
PHP / Mostrar Mapa, mediante la ip
7 Julio 2013, 01:25 AM
Gente,

Los molesto con un asunto que no comprendo del todo.
Esoty realizando parte de una pagina donde el usuario puede ver su localizacion, mediante la ip.
Yo tengo una clave con api para utilizar en un codigo que usa google maps para mostraslo, no encuentro un codigo lo suficientemente sencillo, solo veo codigos con paramtros que no explican.

Tengo este pero muestra unas leyendas, yo solo quiero un mapa simple, no con todo esas leyendas.

Código (php) [Seleccionar]

<!-- BEGIN: GeoIPView.com IP Locator -->
<script type="text/javascript" src="http://api.geoipview.com/api.php?t=1&amp;lang=es&amp;w=230&amp;h=300&amp;bg=ECDDC0&amp;bd=8DADCC&amp;tx=222222"></script><br>
Motorizado por <a href="http://es.geoipview.com" title="Ver Dirección de Geo IP">GeoIPView</a>
<!-- END: GeoIPView.com IP Locator -->


No pretendo que me hagan la tarea, yo tengo el sitio casi cocinado, pero esto no me queda del todo claro, ya que habilite la api pero ando necsitando un codigo simple para insertarlo.

Gracias Camaradas.
#7
PHP / Ayuda con Formularios con listas Dobles
7 Octubre 2012, 16:52 PM
Hola Gente,

Soy nuevo en el tema de PHP, pero estoy teniendo una dificultad con lo siguiente:

tengo que crear un formulario que dado una lista de selección con las zonas de la República Argentina (Noroeste, Cuyo, Litoral, Centro, Noreste y Patagonia), ofrezca una segunda lista de selección(en otra pagina php) las provincias constituyentes de dicha Zona. El proceso de selección de zona debe realizarse mediante un submit de un formulario. Ademas, muestre en una página de resultado tanto la zona como la provincia seleccionada.

Lo que se me dificulta es que no se como tomar los datos del array para ver las provincias de la zona que elegi, les dejo lo que tengo.

Código (php) [Seleccionar]
<?php

$noroeste 
= array("Catamarca","Jujuy","Salta","Santiago del Estero","Tucuman");
$cuyo = array("La Rioja","Mendoza","San Juan","San Luis");
$litoral = array("Chaco","Corrientes","Entre Rios","Formosa","Misiones","Santa Fe");
$centro = array("Cordoba");
$patagonia = array("Chubut","La Pampa","Neuquen","Rio Negro","Santa Cruz","Tierra del Fuego");
$bsas = array("Buenos Aires","Capital Federal");

?>

<html>
<head>

</head>
<body>
<form action="tp5-2-a.php" method="POST">
<select name="region" onchange="provincias();">
<option value="noroeste">Noroeste</option>
<option value="cuyo">Cuyo</option>
<option value="centro">Centro</option>
<option value="litoral">Litoral</option>
<option value="bsas">Buenos Aires</option>
<option value="patagonia">Patagonia</option>
</select>

<input type="submit" value="submit"/>
</form>
</body>
</html>


y este es lodel segundo enlace que por cierto no lo termine.

Código (php) [Seleccionar]
<?php

$noroeste 
= array("Catamarca","Jujuy","Salta","Santiago del Estero","Tucuman");
$cuyo = array("La Rioja","Mendoza","San Juan","San Luis");
$litoral = array("Chaco","Corrientes","Entre Rios","Formosa","Misiones","Santa Fe");
$centro = array("Cordoba");
$patagonia = array("Chubut","La Pampa","Neuquen","Rio Negro","Santa Cruz","Tierra del Fuego");
$bsas = array("Buenos Aires","Capital Federal");

$region $_POST['region'];
echo 
"
<form action='tp5-2-b.php' method='POST'>
<select name='provincias'>


<option value='patagonia'>Patagonia</option>


</select>
<input type='submit' value='submit'/>
</form>
"

?>


Cualquier ayuda se agradece.
#8
Hola gente!!

Estoy haciendo un ejercicio en C++ que pide utilizar el concepto de LISTAS DOBLEMENTE ENLAZADAS y tengo algunos problemas para crear las funciones
de BORRAR un dato de la lista, MODIFICARLO, y BUSCARLO.
Si bien pude hacer lo de insertar los datos gracias a informacion que vi en estos foros, los demas se me hacen imposibles.
Incluso cree los menus y todo lo necesario para que este figurando, pero lo de las funciones no lo consigo crear y no veo ayuda en la red solo teoria.

si saben algo que pueda usar se agradece mucho...



Código (cpp) [Seleccionar]
#include <stdio.h>
#include <conio.h>
#include <ctype.h>
#include <string.h>



la consigna pedia ingresar datos de una persona y mostrarlos..

Código (cpp) [Seleccionar]
struct datos
{
int dni;
  char nombre[25];
  char apellido[25];
  int edad;
};



Código (cpp) [Seleccionar]
struct listaenlazada
{
      struct datos pers;
      struct listaenlazada *sig;
      struct listaenlazada *ant;
};



son las que pude crer sim problemas, faltaria las de borrado , modificacion, y busqueda

Código (cpp) [Seleccionar]
void listdoubleen(void);
struct listaenlazada *insertlistdouble(struct listaenlazada *primero);

void printlistdouble(struct listaenlazada *primero);



hay opciones que no las uso que estan con X, por que eran para filas colas, etc, eso lo pude hacer.

Código (cpp) [Seleccionar]
main()
{
int op;


  do
  {
  printf("\n*************Menu Inicial*************\n");
     printf("\n\tElija una Opcion:\n\t1-xxx\n\t2-xxx\n\t3-xxx\n\t4-LISTA DOBLEMENTE ENLAZADA\n\t5-SALIR\n");
   
 printf("\n\tIntroduzca el nro:");
     scanf("%d",&op);

     switch(op)
     {
      case 1:
       
        break;
        case 2:
       
        break;
        case 3:
       
        break;
        case 4:
        listdoubleen();
        break;
        case 5:
        break;
        default:
        printf("la opcion elegida es incorrecta\n");
        break;
     }
     
  }while(op!=5);


}




Código (cpp) [Seleccionar]
//+++++++++++++

void listdoubleen(void)
{
int op,op2,op3,doc;
  char apell[25],apell2[25],listaenlazada[30];
  struct listaenlazada *primero=NULL;


  do
  {
    // clrscr();
  printf("\nSeleccione una opcion:\n\n\t1-Insertar datos\n\t2-Quitar datos\n\t3-Imprimir datos en pantalla\n\t4-Modificar un Registro\n\t5-Buscar un Registro\n\t6-Volver al menu principal\n\n");
  printf("\n\tIngresar el nro: ");
     scanf("%d",&op);

     switch(op)
     {
      case 1:
        primero=insertlistdouble(primero);
        break;
        case 2:
        printf("Sacar un elemento de la lista:\nElija una opcion:\n\t1-DNI\n\t2-Apellido\n\n");
        printf("\n\tIngresar el nro: ");
        scanf("%d",&op2);
        switch(op2)
           {
            case 1:
              printf("Ingrese el numero de DNI: ");
                 scanf("%d",&doc);

              break;
              case 2:
              printf("Ingrese el Apellido que desea eliminar: ");
                 fflush(stdin);
                 gets(apell);
               
              break;
              default:
              printf("Opcion incorrecta\n");
              break;
           }
        break;
        case 3:
        printlistdouble(primero);
        break;
        case 4:
        printf("Ingrese el DNI del registro que desea modificar:\n");
      scanf("%d",&doc);
       
        break;
        case 5:
        printf("Desea buscar por?\n\t1-Apellido\n\t2-Dni\n\n");
           scanf("%d",&op3);
           switch(op3)
           {
            case 1:
                 printf("Ingrese el apellido que desea buscar: ");
                 fflush(stdin);
                 gets(apell2);
             
              break;
              case 2:
              printf("Ingrese el numero de DNI que desea buscar: ");
                 scanf("%d",&doc);
             
              break;
              default:
              printf("Opcion Incorrecta\n");
              break;
           }
        break;
        case 6:
       
        break;
      default:
        printf("Opcion Incorrecta\n");
        break;
     }
  }while(op!=6);


getch();

}



aca inserte los datos

Código (cpp) [Seleccionar]
struct listaenlazada *insertlistdouble(struct listaenlazada *primero)
{
struct listaenlazada *a,*b,*aux;

  int band=0,op,op2;
  char resp;
  a=b=primero;


  aux=new struct listaenlazada;

  if(!aux)
  {
  printf("No hay espacio disponible en memoria\n");
     getch();
     return (primero);
  }

do
{
  op2=0;
  band=0;
  printf("Ingresar el DNI: ");
  scanf("%d",&aux->pers.dni);

  while(b)
  {
  if(aux->pers.dni<b->pers.dni)
     {
      break;
     }
     if(aux->pers.dni==b->pers.dni)
     {
      band=1;
        break;
     }
     a=b;
     b=a->sig;
  }
  if(band==1)
  {
printf("\nEl Dni Ingresado ya se encuentra en la lista.\tElija una Opcion:\n\n\t1-Modificar dicho registro\n\t2-Ingresar otro DNI\n\t3-Volver al Menu\n");
printf("\n\tIngresar el nro: ");
     scanf("%d",&op2);
  }

}while(op2==2);

     if(op2==1)
     {
 
     return(primero);
     }
     else
     {
      if(op2==3)
        {
        return(primero);
        }
     }


  if(band!=1)    
  {
  printf("Ingresar el Apellido: ");
     fflush(stdin);
     gets(aux->pers.apellido);
     printf("Ingresar el Nombre: ");
     fflush(stdin);
     gets(aux->pers.nombre);
     printf("Ingresar la edad: ");
     scanf("%d",&aux->pers.edad);
  }

  if(b==primero)  
  {
  aux->sig=primero;
     if(primero!=NULL){
      primero->ant=aux;
  }
     primero=aux;
  }
  else      
  {
  aux->sig=b;
     if(b!=NULL){
      b->ant=aux;
     }
     a->sig=aux;
     aux->ant=a;
  }

  return(primero);

}



los imprimi...

Código (cpp) [Seleccionar]
void printlistdouble(struct listaenlazada *primero)
{
  struct listaenlazada *a,*b;

a=primero;
 // clrscr();

  printf("Se recorre desde el primero de la lista hasta el ultimo\n");
  while(a)
  {
  printf("Dni:%d\nApellido:%s\nNombre:%s\nEdad:%d\n\n",a->pers.dni,a->pers.apellido,a->pers.nombre,a->pers.edad);
     b=a;
     a=a->sig;
  }
  printf("Se recorre desde el ultimo de la lista hasta el primero\n");
  while(b)
  {
  printf("Dni:%d\nApellido:%s\nNombre:%s\nEdad:%d\n\n",b->pers.dni,b->pers.apellido,b->pers.nombre,b->pers.edad);
     b=b->ant;
  }
printf("\n\tPresione cualquier tecla para terminar... ");
getch();
}


es lo que llegue a hacer hasta el momento lo anterior no me parecio complicado, pero con lo de listas enlazadas se me hizo una laguna..

Gracias camaradas!!!! ::)
#9
hola gente. soy nuevo en esto y la hago corta,tengo dos problemas de validacion en el sig codigo.
1-primero no me toma los precios Mayorista, Minorista, y Costo en DECIMALES al momento de ingresarlos, solo en INT. :-\
2- En Nombre Y Descripcion de producto, no me los toma con espacios ni alfanumericos.
soy un desastre!!

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <conio.h>
#include <stdlib.h>

//los son para el primer menu

#define INGRESA_PRODU '1'
#define MODIFICA_PRODU   '2'
#define ELIMINA_PRODU '3'
#define VISUALIZA_LISTA '4'
#define MAYOR_DIFE '5'
#define GENERA_TXT '6'
#define MUESTRA_STOCK '7'
#define SALIR '8'

//queda para el otro menu

#define POR_NOMB '1'
#define POR_CODE  '2'
#define SALIR_2MENU   '3'

//para la estructura en general

#define MAX_NOMB 20
#define MAX_DESCRIP 50
#define MAX_CODE  6
#define MAX_STOCK 8
#define MAX_PRECIO 8


La definicion de la estructura y sus parametros

Código (cpp) [Seleccionar]
struct producto{
char nomb[MAX_NOMB+1];
   char descrip[MAX_DESCRIP+1];
   long code;
   int stock;
int pmayo;
   int pmino;
   int pcost;
};

char menu_prodpri (void); //para el principal
char menu_buscap (void);                     //es para la busqueda

int cargarint(int, int, int); //es para validar int

long buscar_nomb (char *, bool); //busco por nombre de producto

void ingresar_produ (void);    //es para el ingreso de productos
void cargarstr(char *, int); //es para validar string
void listado_produ (); //ver lista
void mejor_dife (); //es para la diferencia del punto 5)
void arch_texto (); //genera archivo de texto del punto6)
void ver_stock (); //ve el stock en 0
void modificar_produ (long);   //modifica el producto en el punto 2)
void eliminar_produ (long);                  //elimina el producto en el punto 3)

long cargarlong(int, int, int); //es para validar long

bool IsAlphabetic (char *);    //para el alfabetico
bool IsNumeric (char *);      //para el numero
bool ExistenProductosEnArchivo (long);    //cuando alla cargado el codigo
bool IngresarProductoOrdenado (producto);  
     

las condiciones del menu para las acciones

Código (cpp) [Seleccionar]
//void
main ()
{
   char opcion, busqueda, nomb[MAX_NOMB+1], descrip[MAX_DESCRIP+1];
   long code;
   int flag;

   opcion = menu_prodpri ();

   while (opcion != SALIR)
   {
    switch (opcion)
      {
      case INGRESA_PRODU:
          ingresar_produ ();
            break;
      case MODIFICA_PRODU:
            //clrscr ();
busqueda = menu_buscap();
while (busqueda != SALIR_2MENU)
{
               flag = 0;
switch (busqueda)
            {
            case POR_NOMB:
                  printf ("\nINGRESE EL NOMBRE DEL PRODUCTO: ");
                     cargarstr(nomb, MAX_NOMB);
                     code = buscar_nomb (nomb, true);
                     if (code == 0)
                      printf ("\nNo se encontro ningun producto con ese nombre\n");
else
                      modificar_produ (code);
                     break;
                case POR_CODE:
                  printf ("\nINGRESE EL CODIGO DEL PRODUCTO: ");
            code = cargarlong(MAX_CODE, 999999, 1);
modificar_produ (code);
                     break;
                default:
                  flag = 1;
    break;
               }

               if(flag == 1)
               {
                printf ("Opcion invalida\n");
printf ("\nPresione ENTER para continuar\n");
    getch ();
busqueda = menu_buscap();
               }
               else
                break;
}
            break;
      case ELIMINA_PRODU:
          //clrscr ();
busqueda = menu_buscap();

            while (busqueda != SALIR_2MENU)
{
               flag = 0;

            switch (busqueda)
            {
            case POR_NOMB:
                  printf ("\nINGRESE EL NOMBRE DEL PRODUCTO: ");
                     cargarstr(nomb, MAX_NOMB);
                     code = buscar_nomb (nomb, true);
                     if (code == 0)
                      printf ("\nNo se encontro ningun producto con ese nombre\n");
else
                      eliminar_produ (code);
                     break;
                case POR_CODE:
                  printf ("\nINGRESE EL CODIGO DEL PRODUCTO: ");
            code = cargarlong(MAX_CODE, 999999, 1);
eliminar_produ (code);
                     break;
                default:
                  flag = 1;
    break;
               }

               if(flag == 1)
               {
                printf ("Opcion invalida\n");
printf ("\nPresione ENTER para continuar\n");
    getch ();
busqueda = menu_buscap();
               }
               else
                break;
}
            break;
      case VISUALIZA_LISTA:
            listado_produ ();
          break;
      case MAYOR_DIFE:
          mejor_dife ();
          break;
      case GENERA_TXT:
          arch_texto ();
          break;
      case MUESTRA_STOCK:
            ver_stock ();
          break;
      default:
          printf ("Opcion invalida\n");
            break;
      }

      printf ("\nPresione ENTER para continuar\n");
    getch ();
opcion = menu_prodpri ();
   }

   printf ("\nPrograma creado por JORGE MIRANDA");
   printf ("\nFinalizado Exitosamente...");
   getch ();
}


lo que se aplico para definir que es numerico y alfanumerico

Código (cpp) [Seleccionar]
bool
IsAlphabetic (char *s)
{
while (*s)
    if (!isalpha (*s++))
      return false;

   return true;
}

bool
IsNumeric (char *s)
{
while (*s)
    if (!isdigit (*s++))
      return false;

   return true;
}


opciones del menu

Código (cpp) [Seleccionar]

char
menu_prodpri ()
{
   char auxvec [50];

   //clrscr ();

printf ("MENU PRINCIPAL DE OPCIONES\n");
printf ("1 - INGRESO DE PRODUCTO\n");
printf ("2 - MODIFICACION DE PRODUCTO\n");
printf ("3 - ELIMINACION DE PRODUCTO\n");
printf ("4 - VISUALIZACION DEL LISTADO DE PRODUCTOS COMPLETO Y DETALLADO\n");
printf ("5 - DIFERENCIA MAS ALTA ENTRE PRECIO MAYORISTA Y PRECIO MINOROSTA\n");
printf ("6 - GENERACION DE ARCHIVO ADICIONAL CON LOS PRODUCTOS QUE NO TENGAN STOCK\n");
printf ("7 - VER LISTADO DE PRODUCTOS SIN STOCK\n");
printf ("8 - Salir\n");

   printf ("\nIngrese la opcion: ");
   gets (auxvec);

   if (strlen(auxvec)!=1) //cant caracteres
    return '0';

   return auxvec [0];
}


para el segundo menu

Código (cpp) [Seleccionar]
char
menu_buscap ()
{
   char auxvec [50];

   //clrscr ();

printf ("1 - elegir PRODUCTO por NOMBRE\n");
printf ("2 - elegir PRODUCTO por CODIGO\n");
printf ("3 - Salir\n");

   printf ("\nIngrese la opcion: ");
   gets (auxvec);

   if (strlen(auxvec)!=1)
    return '0';

   return auxvec [0];
}


bool
ExistenProductosEnArchivo (long code)
{
   FILE * arch;
   int cant;
   struct producto produ;
   bool encontrado;

   if((arch=fopen("producto.dat","rb+"))==NULL)
   {
      if((arch=fopen("producto.dat","wb+"))==NULL)
      {
         printf("\nNo se puede abrir el archivo");
         return false;
      }
     }

   rewind (arch);
   encontrado = false;
   while (!feof(arch))
   {
      cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error al leer el ultimo registro\n");
         break;
      }

      if(produ.code == code)
      {
         encontrado = true;
         break;
      }
   }

   fclose (arch);

   return encontrado;
}

bool
IngresarProductoOrdenado (producto produnuevo)
{
   int cant;
   FILE *arch, *temp;
   bool productoNoIngresado;
   struct producto produ;

   if((arch=fopen("c:\\tp\\producto.dat","rb+"))==NULL)
   {
      if((arch=fopen("c:\\tp\\producto.dat","wb+"))==NULL)
      {
         printf("\nNo se puede abrir el archivo");
         return false;
      }
     }
     if((temp=fopen("c:\\tp\\temporal.dat","wb"))==NULL)
   {
      printf("\nNo se puede abrir el archivo");
        fclose (arch);
      return false;
   }

   productoNoIngresado = true;
   while (!feof(arch))
   {
        cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error leyendo ultimo registro\n");
         break;
      }

        if (productoNoIngresado && produ.code>produnuevo.code)
      {
           fwrite(&produnuevo, sizeof(produnuevo), 1, temp);
         productoNoIngresado=false;
      }

      fwrite(&produ, sizeof(produ), 1, temp);
   }

   if (productoNoIngresado)
       fwrite(&produnuevo, sizeof(produnuevo), 1, temp);

   fclose (temp);
   fclose (arch);

   if( remove( "c:\\tp\\producto.dat" ) != 0 )
      printf ( "Error borrando producto.dat" );

   if ( rename ("c:\\tp\\temporal.dat", "c:\\tp\\producto.dat") != 0 )
      printf ( "Error renombrando temporal.dat a producto.dat" );

   return true;
}

aca es el ingreso de los datos!!

Código (cpp) [Seleccionar]
void
ingresar_produ (void)
{
struct producto aux;
char rta='s';

   //clrscr ();

while(rta=='s')
{
   
    printf("\nINGRESE EL CODIGO DEL PRODUCTO: ");
      aux.code = cargarlong(MAX_CODE, 999999, 1);

      // Vemos si ya fue ingresado.
      if ( !ExistenProductosEnArchivo (aux.code) )
      {
     
printf("\nINGRESE NOMBRE DEL PRODUCTO: ");
cargarstr(aux.nomb, MAX_NOMB);
       printf("\nINGRESE LA DESCRIPCION DEL PRODUCTO: ");
      cargarstr(aux.descrip, MAX_DESCRIP);
       printf("\nINGRESE LA CANTIDAD DISPONIBLE DEL PRODUCTO: ");
      aux.stock = cargarint(MAX_STOCK, 99999999, 0);
printf("\nINGRESE EL PRECIO MAYORISTA: ");
aux.pmayo = cargarint(MAX_PRECIO, 99999999, 0);
      printf("\nINGRESE EL PRECIO MINORISTA: ");
aux.pmino = cargarint(MAX_PRECIO, 99999999, 0);
      printf("\nINGRESE EL PRECIO DE COSTO: ");
aux.pcost = cargarint(MAX_PRECIO, 99999999, 0);

         // Se guarda el produ en el archivo.
         if (!IngresarProductoOrdenado (aux))
          printf ("\nError, el nuevo producto no pudo ser insertado\n");
      }
      else
      printf ("\nESTE CODIGO YA FUE INGRESADO!!\n");

printf("\nDesea ingresar otro PRODUCTO?[s/n] ");
scanf("%c",&rta);
fflush(stdin);
      tolower(rta);
      //clrscr ();
}

   printf ("\nIngreso de productos terminado\n");
}




void
listado_produ ()
{
   struct producto produ;
   int cant, flag=0;
   FILE *arch;

   if((arch=fopen("c:\\tp\\producto.dat","rb+"))==NULL)
   {
      printf("\nNo se puede abrir el archivo, proceda primero a la carga de los productos");
      return;
   }

   //clrscr ();

   while(!feof(arch))
   {
      cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error leyendo ultimo registro\n");
         break;
      }

      if (flag==0)
      {
         printf("*******************   PRODUCTOS  ********************\n\n");
         printf("\nNombre    \t\tDescripcion\tCodigo\tStock\tMayorista\tMinorista\tCosto\n\n");
         flag = 1;
      }

      printf ("%-15s%-15s %8ld %9d $:%7d %7d %7d\n",
               produ.nomb, produ.descrip, produ.code, produ.stock,
               produ.pmayo, produ.pmino, produ.pcost);
   }

   fclose (arch);
}

void
mejor_dife ()
{
   struct producto produ;
   int dife, dife_mayor = 0;
   int cant, flag = 0;
   FILE *arch; //para abrir el archivo

   if((arch=fopen("c:\\tp\\producto.dat","rb+"))==NULL)
   {
      printf("\nNo se puede abrir el archivo, proceda primero a la carga de los productos");
      return;
   }

   //clrscr ();

   while(!feof(arch))
   {
      cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error leyendo ultimo registro\n");
         break;
      }
      dife = (produ.pmino-produ.pmayo);
     

      if (dife > dife_mayor)
         dife_mayor = dife;
   }

   rewind(arch);

   while (!feof(arch))
   {
      if (flag==0)
      {
         printf("***********************   diferencias  *********************\n\n");
         printf("\nNombre\tDescripcion\tCodigo\tDiferencia\n\n");
         flag = 1;
      }

      cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error leyendo ultimo registro\n");
         break;
      }
     dife = (produ.pmino-produ.pmayo);
     

      if (dife == dife_mayor)
         printf ("%-15s %-15s %8ld %12.2d\n", produ.nomb, produ.descrip, produ.code, dife);
   }

   fclose (arch);
}

void
arch_texto ()
{
   int flag = 0, cant;
   struct producto produ;
   FILE *arch, *txt;
   char buff [200]; //buffer para guardar caracteres

   if((arch=fopen("c:\\tp\\producto.dat","rb+"))==NULL)
   {
      printf("\nNo se puede abrir el archivo, proceda primero a la carga de los productos");
      return;
   }

   if((txt=fopen("c:\\tp\\producto_sin_stock.txt","w"))==NULL)
   {
      printf("\nNo se puede abrir el archivo");
      return;
   }

   //clrscr ();

   while(!feof(arch))
   {
      cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error leyendo ultimo registro\n");
         break;
      }
     
      if(produ.stock==0)

      {
         if (flag==0)
         {
            sprintf(buff, "*****************   sin stock   ******************\n\n"
                          "\nNombre\tDescripcion\tCodigo\tStock\n\n");

            if (fwrite(buff, strlen (buff), 1, txt)!= 1)
               printf ("\nERROR, no se pudo generar el archivo de texto\n");

            flag = 1;
         }

         sprintf (buff, "%-15s %-15s %8ld %9d\n",
                  produ.nomb, produ.descrip, produ.code, produ.stock);

         if (fwrite(buff, strlen (buff), 1, txt)!= 1)
            printf ("\nERROR, no se pudo generar el archivo de texto\n");
      }
   }

   printf ("\nSe genero un archivo adicional de texto con los productos sin stock\n");

   fclose (txt);
   fclose (arch);
}


void
ver_stock ()
{
   struct producto produ;
   int cant, flag = 0;
   FILE *arch;

   if((arch=fopen("c:\\tp\\producto.dat","rb+"))==NULL)
   {
      printf("\nNo se puede abrir el archivo, proceda primero a la carga de los productos");
      return;
   }

   //clrscr ();

   while(!feof(arch))
   {
      cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error leyendo ultimo registro\n");
         break;
      }

      if (produ.stock==0)
      {
         if (flag==0)
         {
            printf("   ****************   sin stock   *****************    \n\n");
            printf("\nNombre\t\t\t    Descripcion\t     Codigo\t      \tStock\n\n");
            flag = 1;
         }
         
         printf ( "%-15s %-15s %8ld %9d\n",
                  produ.nomb, produ.descrip, produ.code, produ.stock);

      }
   }

   fclose (arch);
}


long
buscar_nomb (char *str, bool BuscoporNombre)
{
   int cant, flag=0, cnt=0, norden;
   struct producto produ;
   FILE *arch;
   bool resultado;
   long code=0;

   //clrscr ();

   if((arch=fopen("c:\\tp\\producto.dat","rb"))==NULL)
   {
      printf("\nNo se puede abrir el archivo, proceda primero a la carga de los productos");
      return 0;
   }

   while (!feof (arch))
   {
      cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error leyendo ultimo registro\n");
         break;
      }

      if (BuscoporNombre)
         resultado = strcmp (produ.nomb, str);
      else
         resultado = strcmp (produ.descrip, str);

      if (resultado == 0)
      {
         if (flag == 0)
         {
            printf ("DATOS DEL PRODUCTO:\n\n"
                     "NRO Producto  Descripcion  Codigo  Cantidad  Mayorista  Minorista  Costo\n");
            flag = 1;
         }

         cnt++;
         printf ("%-3d %-15s %-15s %8ld %5d %5d %5d %5d\n", cnt,
                  produ.nomb, produ.descrip, produ.code, produ.stock,
               produ.pmayo, produ.pmino, produ.pcost);

         code = produ.code;
      }
   }

   if (cnt>1)
   {
      printf ("\nIngrese el producto elegido por nro de orden (1 a %d): ", cnt);
      norden = cargarint (5, cnt, 1);

      rewind (arch);
      cnt = 0;

      while (!feof (arch))
      {
         cant = fread (&produ, sizeof(produ), 1, arch);

         if ( cant != 1 )
         {
            if (!feof (arch))
               printf("Error leyendo ultimo registro\n");
            break;
         }

         if (BuscoporNombre)
            resultado = strcmp (produ.nomb, str);
         else
            resultado = strcmp (produ.descrip, str);

         if (resultado == 0)
         {
            cnt++;
            if (cnt == norden)
            {
               code=produ.code;
               break;
            }
          }
      }
   }

   fclose (arch);
   return code;
}

void
modificar_produ (long code)
{
   int cant, flag=0;
   struct producto produ;
   FILE *arch;

   //clrscr ();

   if((arch=fopen("c:\\tp\\producto.dat","rb+"))==NULL)
   {
      printf("\nNo se puede abrir el archivo, proceda primero a la carga de los producto");
      return;
   }

   while (!feof (arch))
   {
      cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error leyendo ultimo registro\n");
         break;
      }

      if (produ.code == code)
      {
         flag=1;

         printf ("DATOS DEL PRODUCTO:\n\nNombreE\tDescripcion\tCodigo\tCantidad\tMayorista\tMinorista\tCosto\n");
         printf ("%-15s %-15s %8ld %9d %7d %7d %7d\n", produ.nomb, produ.descrip, produ.code, produ.stock,
               produ.pmayo, produ.pmino, produ.pcost);

         // Actualizamos los datos del producto.
         printf("\nINGRESE EL NUEVO NOMBRE DEL PRODUCTO: ");
         cargarstr(produ.nomb, MAX_NOMB);
         printf("\nINGRESE LA NUEVA DESCRIPCION: ");
           cargarstr(produ.descrip, MAX_DESCRIP);
         printf("\nINGRSEE LA NUEVA CANTIDAD: ");
         produ.stock = cargarint(MAX_STOCK, 99999999, 0);
         printf("\nINGRESE EL NUEVO PRECIO MAYORISTA: ");
         produ.pmayo = cargarint(MAX_PRECIO, 99999999, 0);
         printf("\nINGRESE EL NUEVO PRECIO MINORISTA: ");
         produ.pmino = cargarint(MAX_PRECIO, 99999999, 0);
         printf("\nINGRESE EL NUEVO PRECIO DE COSTO: ");
         produ.pcost = cargarint(MAX_PRECIO, 99999999, 0);

         fseek (arch, (long)(-1)*sizeof(produ), SEEK_CUR);
         if (fwrite(&produ, sizeof(produ), 1, arch)!= 1)
            printf ("\nERROR, no se pudo actualizar el producto en el archivo\n");
         else
            //clrscr();
            printf ("Producto actualizado ... \n\nNomnre\tDescripcion\tCodigo\tCantidad\tMayorista\tMinorista\tCosto\n");
            printf ("%-15s %-15s %8ld %9d %7d %7d %7d\n", produ.nomb, produ.descrip, produ.code, produ.stock,
               produ.pmayo, produ.pmino, produ.pcost);
         break;
      }
   }

   if (flag==0)
      printf ("\nNo se encontro ningun producto con el codigo indicado\n");

   fclose (arch);
}

void
eliminar_produ (long code)
{
   int cant, flag=0;
   struct producto produ;
   FILE *arch, *temp;

   //clrscr ();

   if((arch=fopen("c:\\tp\\producto.dat","rb"))==NULL)
   {
      printf("\nNo se puede abrir el archivo, proceda primero a la carga de los producto");
      return;
   }

   if((temp=fopen("c:\\tp\\temporal.dat","wb"))==NULL)
   {
      printf("\nNo se puede abrir el archivo");
      return;
   }

   while (!feof (arch))
   {
      cant = fread (&produ, sizeof(produ), 1, arch);

      if ( cant != 1 )
      {
         if (!feof (arch))
            printf("Error leyendo ultimo registro\n");
         break;
      }

      if (produ.code != code)
         fwrite(&produ, sizeof(produ), 1, temp);
      else
         flag=1;
   }

   if (flag==0)
      printf ("\nNo se encontro ningun prodcuto con el codigo indicado\n");
   else
      printf ("\nSe elimino el producto correctamente...\n");

   fclose (temp);
   fclose (arch);

   if( remove( "c:\\tp\\producto.dat" ) != 0 )
      printf ( "Error borrando producto.dat" );

   if ( rename ("c:\\tp\\temporal.dat", "c:\\tp\\producto.dat") != 0)
      printf ( "Error renombrando temporal.dat a producto.dat" );
}

por ultimo las funciones para el tipo de datos a ingresar

Código (cpp) [Seleccionar]
void
cargarstr(char *str, int max)  //Funcion validar string
{
   int flag=0, len;
char auxvec[50];

gets(auxvec);

while(flag==0)
{
         len=strlen(auxvec);

         if (len==0 || len>max || len<1 || !IsAlphabetic (auxvec))
         {
          printf ("Error, vuelva a ingresar el dato: ");
gets(auxvec);
         }
         else
          flag = 1;
}

strcpy(str,auxvec);
}

long
cargarlong (int cant, int max, int min) //Funcion validar long
{
   int flag=0, len;
   long number;
char auxvec[50];

gets(auxvec);

while(flag==0)
{
    number = atol (auxvec);
      len = strlen (auxvec);

      if (!IsNumeric (auxvec) || len>cant || number<min ||number>max)
      {
      printf ("Error, vuelva a ingresar el dato: ");
         gets(auxvec);
      }
      else
      flag = 1;
}

return (number);
}

int
cargarint (int cant, int max, int min)    //Funcion validar int
{
   int flag=0, len, number;
char auxvec[50];

gets(auxvec);

while(flag==0)
{
    number = atoi (auxvec);
      len = strlen (auxvec);

      if (!IsNumeric (auxvec) || len>cant || number<min ||number>max)
      {
      printf ("Error, vuelva a ingresar el dato: ");
         gets(auxvec);
      }
      else
      flag = 1;
}

return (number);
}



hay esta el cod, y lo que costo, consulte y todo, nadie me dice que tiene.

lo principal es el ingreso de los datos, como dije, que los precios sean  en decimal y con espacios en el nombre y la descripcion, el resto lo modifico a la marcha y de corregir lo anterioro no seria complicado

gracias Camaradas!!!