Foros del Web » Programación para mayores de 30 ;) » C/C++ »

problema con generar codigos en mi sistema

Estas en el tema de problema con generar codigos en mi sistema en el foro de C/C++ en Foros del Web. Hola maestros, lo que necesito es lo siguiente, es que estoy haciendo un sistema de peliculas con arriendo y todo eso... entonces quiero asignarle un ...
  #1 (permalink)  
Antiguo 02/06/2006, 21:39
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 22 años, 1 mes
Puntos: 16
problema con generar codigos en mi sistema

Hola maestros, lo que necesito es lo siguiente, es que estoy haciendo un sistema de peliculas con arriendo y todo eso... entonces quiero asignarle un código a cada película pero quiero que esto sea automatico y secuencial, vale decir que no se le pida al usuario y que ademas vayan aumentando de a uno, osea lo que quiero es lo siguiente:

Tengo esto en un archivo de texto

10010 El señor de los anillos
10011 La gran estafa
.
.
.

Pero hasta el momento lo logro pasandole el codigo yo mismo... lo que quiero es que por defecto el codigo de la primera pelicula ingresada sea 10010 y que las demas se le vaya agregando uno a ese numero osea 10011, 10012 automaticamente... osea tendria que leer el codigo de la pelicula anterior y sumarle uno y ese codigo usar en la funcion agregar que es la siguiente

Código:
int AgregarPelicula(int codigo, char *nombre, char *genero, int  n_copias)
{
  struct Pelicula a;
  
  a.codigo = codigo;
   strcpy(a.nombre, nombre);
  strcpy(a.genero, genero);
  a.n_copias =  n_copias;
  
   fseek(globfp, 0L, SEEK_END);
  fwrite(&a, sizeof (a), 1,  globfp);
  
   printf("\n\nPel%ccula agregada correctamente", 161);
   printf("\nPresione cualquier tecla para continuar");
  getch();
  
   return 1;
}

Espero que se entienda lo que quiero... les agradezco de antemano su ayuda muchas gracias
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #2 (permalink)  
Antiguo 02/06/2006, 23:27
 
Fecha de Ingreso: mayo-2006
Mensajes: 40
Antigüedad: 18 años, 7 meses
Puntos: 0
Bueno, para hacer eso quiza haya tantas soluciones como personas lo intenten resolver. A mi se me ocurre que podrias tener un encabezado en tu archivo de peliculas al comienzo de este y enseguida de el los registros con la informacion de cada pelicula. En el encabezado pondrias un campo de codigo el cual inicializarias con el numero que quieras, y cada vez que agregues una pelicula, le pondrias como codigo este campo del encabezado, lo incrementarias en uno y actualizarias con este valor al campo del encabezado. De esta manera, cada vez que corras el programa de las peliculas tendrias a tu disposicion el siguiente codigo que se incorporaria a una nueva pelicula.
  #3 (permalink)  
Antiguo 03/06/2006, 03:02
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
Si algo parecido, yo usaria una funcion muy similar a la que tienes pero en lugar de ingresar automaticamente el codigo este se genere con una funcion.

int obtenerCodigo()
{
static bool leido = false;
static int codigo = 0;

if(leido)
{
codigo++;
}
else
{
codigo = leerCodigo();
leido = true;
}

return codigo;
}

para esto tendrias un fichero donde guardaris el ultimo codigo manejado, iniciando tu inventario con el numero deseado.


antes de serrar la aplicacion usarias :

guardarCodigo(obtenerCodigo);

implementar las funciones leerCodigo y guardarCodigo es una tarea comun.

Saludos.
  #4 (permalink)  
Antiguo 03/06/2006, 05:56
 
Fecha de Ingreso: abril-2005
Mensajes: 3.083
Antigüedad: 19 años, 8 meses
Puntos: 17
Cita:
Iniciado por Nivel7
static bool leido = false;
static int codigo = 0;
Al final te gustaron los static, eh ;)
  #5 (permalink)  
Antiguo 03/06/2006, 06:04
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
Dependiendo de la aplicacion se pueden o no utilizar en este caso no tienen inconvenientes.
como puedes ver la funcion retorna una copia de la variable static codigo y no un puntero, esto evita tener problemas, como sucedia con las cadenas o arrays.
si yo retornara un puntero si que habria problemas ya que todos los campos .codigo de los registros compartirian el mismo espacio en memoria.

Saludos.

Última edición por Nivel7; 03/06/2006 a las 06:09
  #6 (permalink)  
Antiguo 03/06/2006, 14:41
Avatar de El_Metallick  
Fecha de Ingreso: noviembre-2002
Ubicación: Santiago, Chile
Mensajes: 1.718
Antigüedad: 22 años, 1 mes
Puntos: 16
trate de hacerlo como me comentas nivel 7 pero me surgieron algunos problemas, la cosa es que rescato la variblae asi

Código:
fscanf(fp, "%d", &codigo);

if (codigo == 0)
   codigo = 10010;
else
   codigo = codigo + 1;

fprintf(fp, "%d", codigo);
pero cuando parte de 0 en vez de asignarle el 10010 le asigna un 4 y no se porque... me gustaria saber cual es el problema... saludos
__________________
Haz la guerra en la cama y el amor donde se te de la gana...
El tiempo es el mejor maestro, lo único malo es que te mata...¡¡Aprovecha tu tiempo!!
  #7 (permalink)  
Antiguo 04/06/2006, 02:10
 
Fecha de Ingreso: abril-2006
Ubicación: Acapulco Gro. México
Mensajes: 483
Antigüedad: 18 años, 8 meses
Puntos: 2
en el mensaje anterior te mecione que si tu fichero inicial tiene el valor 10010, la funcion que te escribi funciona sin ser neceasrio validar nada,

este valor estara ahi solol al iniciar el ejercicio de rentas, despues sera 10020, 10070, etc.

si aun asi quieres que sea 0, puedes hacerlo en la funcion leerCodigo();

int leerCodifo()
{
int codigo;
fscanf(fp, "%d", &codigo);
if (codigo == 0)
return 10010;
return codigo;
}

para esto tu fichero tendira en el campo codigo el valor 0.

ahora , para responder a tu pregunta:
pero cuando parte de 0 en vez de asignarle el 10010 le asigna un 4 y no se porque... me gustaria saber cual es el problema

es probable que al leer no se lea 0 si no 3, esto depende de como creaste el fichero y si ya tienen un campo codigo con valor 0.

pero te repito puedes usar la funcion que te mostre mas la funcion leerCodigo
Saludos.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:21.