[ Foro de C ]

duda sobre programa

12-Nov-2009 22:40
Roberto rrs
3 Respuestas

Hola.
Aunque esta pregunta no es directamente sobre el curso, me gustaría si me podéis ayudar.
Para practicar conceptos quiero hacer un  programa para poder llevar la contabilidad domestica.
La pregunta que me surge es si meter todo en un fichero, o crear un fichero para cada mes.
También mes gustaría que me comentarais que os parece el struct, ya que es la primera vez que los uso anidados.
Gracias.

#include <stdio.h>
#include <string.h>
int leerDatos ();
int ingresarDatos ();

struct ficha
{ char mesAnyo[20];
  char fechaImporte[10];
  char textoImporte[100];
  short int importe;
  };

struct concepto
{ struct ficha alimentacion;
  struct ficha recibos;
  struct ficha prestamos;
  struct ficha retiradaEfectivo;
  struct ficha gasoil;
  struct ficha mantenimientoCoche;
  struct ficha varios;
  struct ficha mes;
  };

struct concepto dato[5000];


13-Nov-2009 22:09
Nacho Cabanes (+32)

Yo usaria sólo un fichero en el que estén los datos de todos los meses. Eso simplifica las búsquedas, y te permite hacer con facilidad cosas como el mover datos de un mes a otro.

En cuanto a tu forma de hacerlo, yo no veo claro el struct "concepto", porque un "struct" indica un conjunto de datos que forman parte de "un todo". Por ejemplo, cada persona tiene un nombre, un apellido y una fecha de nacimiento. Pero un "concepto" no debería tener siempre un gasto de alimentación, y otro de recibos, y otro de gasoil.

El struct "ficha" se parece mucho más a como yo lo haría. Yo en mi contabilidad doméstica tengo los siguientes campos para cada "movimiento":

- Fecha del movimiento (día, mes y año, esto sí puede ser un struct anidado).
- Concepto (una descripción detallada)
- Categoría (una descripción breve, ej: "gasolina", o un código aún más breve, ej: "gs", para poder sacar resúmenes con facilidad).
- Importe del gasto (o ingreso).

(En realidad, el mío es un poco más complejo, porque distingo entre gastos ya realizados y gastos previstos -por ejemplo, el mes XX cerca del día YY preveo que tendré que pagar el Impuesto de ZZZ-, pero esas son las ideas básicas)


13-Dec-2009 19:18
Roberto rrs

Hola Nacho.
Siento el retraso en contestar, pero es que he estado con mucho trabajo y no me ha dado tiempo a seguir estudiando el curso; ahora continuare con ello.
Gracias por la ayuda, la verdad es que como tu comentas es mucho mas fácil.
De echo ya llevo el programa bastante adelantado.
Una duda que tengo es cuando hago una lectura de datos de un determinado tiempo a consultar, los datos me aparecen en el orden del fichero, pero no siempre en orden cronológico.
Para solucionar esto he pensado que cuando leo los datos del fichero en vez de llevarlos directamente a la pantalla, meterlos en un fichero vacío temporalmente y luego de ahí leerlos por orden y mostrarlos en pantalla ordenados por fecha.
¿Podría ser esta la solución?
Gracias y saludos.


13-Dec-2009 21:03
Nacho Cabanes (+32)

Yo leería todos los datos a memoria y los reordenaría en memoria (cada vez que se añade o modifica un dato). Ten en cuenta que el buscar algo en memoria puede ser unas 1.000 veces más rápido que hecho en disco.

Además, una contabilidad doméstica debería ocupar poco, así que es fácil guardar todo en memoria. Por ejemplo, los datos de la mía son poco más de 200 Kb, algo insignificante para la memoria que tienen los ordenadores actuales.






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)