[C con Clase] UNA DUDA

Sergio Diaz sdiaz1983 en gmail.com
Sab Mar 24 19:37:49 CET 2007


Steven Buen dia.

Soy un estudiante de ingenieria de sistemas de tercer semestre, nuestro
tutor de programación nos planteo el siguiente programa para hacer,  usando
archivos, structs y funciones, le escribo el enunciado:

"Definir una estructura que permita capturar la información de un cliente
que tiene una deuda con la compañia, con: cédula, nombre, dirección,
teléfono, valor de la compra, fecha de la compra y un vector donde se guarda
la información correspondiente a los ultimo seis pagos realizados( para cada
uno se registra dia, mes, año y valor), todas las ventas son a credito y con
6 meses de plazo para cancerlas.

El tutor me pide hacer una serie de opciones como son: crear clientes,
 incluir cliente, registrar venta, registrar pagos, mostrar informacion del
cliente, listado de ingresos por pagos para cada cliente totalizando el
valor que se recibe, listado de clientes con deuda, listado de pagos por mes
y esta es la opcion de la que no he podido hacer y es la siguiente: "*cuentas
de cobro: crear un archivo de texto, con cuentas de cobro dirigidas a los
clientes que no han cancelado el pago en un mes especifico. Debe tenerse en
cuenta que si el cliente ya cancelo toda su deuda, de manera que no se le
genere cuenta de cobro.* "

Ahora le anexo aca mismo el codigo de lo que llevo hasta el momento:


*#include<stdio.h>
#include<conio.h>
#include<string.h>
#include<ctype.h>*

*struct fecha
{
 int dia;
 int mes;
 int an;
};*

*struct cliente
{
 char nombre[30];
 char direccion[30];
 char cedula[20];
 char telefono[10];
 long int saldo;
 long int compra;
 long int pago;
 fecha venta;
 fecha abono;*

*};
void crear()
{*

* cliente datos={"","","","",0,0,0,{0,0,0},{0,0,0}};
 fflush(stdin);
 printf("DIGITE EL NOMBRE: ");
 gets(datos.nombre);
 fflush(stdin);
 printf("DIGITE LA CEDULA: ");
 scanf("%s",&datos.cedula);
 fflush(stdin);
 printf("DIGITE LA DIRECCION: ");
 gets(datos.direccion);
 printf("DIGITE EL TELEFONO: ");
 scanf("%s",&datos.telefono);
 FILE *arch;
 arch=fopen("c:\\cliente.txt","a");
 if(arch!=NULL)
 {
  fwrite(&datos,sizeof(datos),1,arch);
 }
 else
  printf("ERROR EN LA CREACION\n\r");
 fclose(arch);
 printf("CLIENTE CREADO");
}*

*void mostrar()
{
 long sitio;
 int band=0;
 char cedula[30];
 printf("DIGITE LA CEDULA A BUSCAR: ");
 scanf("%s",&cedula);
 clrscr();
 cliente datos={"","","","",0,0,0,{0,0,0},{0,0,0}};
 FILE *arch;
 arch=fopen("c:\\cliente.txt","r");
 if(arch!= NULL)
 {
  sitio=ftell(arch);
  fread(&datos,sizeof(datos),1,arch);*

*   while(!feof(arch))
   {
     if(strcmp(cedula,datos.cedula)==0)
     {
      band=1;
      printf("NOMBRE:  %s\n",datos.nombre);
      printf("CEDULA:  %s\n",datos.cedula);
      printf("DIRECCION:  %s\n",datos.direccion);
      printf("TELEFONO:  %s\n",datos.telefono);
      printf("VALOR DE LA VENTA: $ %ld\n",datos.compra);
      printf("FECHA DE LA VENTA: %d / %d / %d \n",datos.venta.dia,
datos.venta.mes,datos.venta.an);
      printf("SALDO ACTUAL: $ %ld\n\n",datos.saldo);
      fseek(arch,sitio,SEEK_SET);
      fread(&datos,sizeof(datos),1,arch);
     }
    sitio=ftell(arch);
    fread(&datos,sizeof(datos),1,arch);*

*   }
   if(band==0)
   {
    printf("DATO NO ENCONTRADO");
   }*


* }
 else*

*  printf("REGISTRO NO ENCONTRADO");
 fclose(arch);
}*

*void venta()
{
 long sitio=0;
 int band=0;
 char cedula[30];
 cliente datos={"","","","",0,0,0,{0,0,0},{0,0,0}};
 printf("DIGITE CEDULA CLIENTE: ");
 scanf("%s",&cedula);
 clrscr();
 FILE *arch;
 arch=fopen("c:\\cliente.txt","r+");
 if(arch!= NULL)
 {
  sitio=ftell(arch);
  fread(&datos,sizeof(datos),1,arch);
   while(!feof(arch))
   {
     if(strcmp(cedula,datos.cedula)==0)
     {
      band=1;
      printf("NOMBRE:  %s\n",datos.nombre);
      printf("CEDULA:  %s\n\n",datos.cedula);
      printf("DIGITE EL VALOR DE LA VENTA: ");
      scanf("%ld",&datos.compra);
      printf("DIGITE LA FECHA DE LA VENTA (dd/mm/aaaa)\n ");
      printf("DIA: ");
      scanf("%d",&datos.venta.dia);
      printf("MES: ");
      scanf("%d",&datos.venta.mes);
      printf("A¥O: ");
      scanf("%d",&datos.venta.an);
      printf("\n");
      datos.saldo=datos.compra;
      fseek(arch,sitio,SEEK_SET);
      fwrite(&datos,sizeof(datos),1,arch);
     }
     sitio=ftell(arch);
     fread(&datos,sizeof(datos),1,arch);
   }
   if(band==0)
   {
    printf("CLIENTE NO EXISTE, DEBE CREARLO");
   }*


* }
 else
  printf("REGISTRO NO ENCONTRADO");
 fclose(arch);
}*

*void pago()
{
 long sitio=0;
 int band=0;
 char cedula[30];*


* cliente datos={"","","","",0,0,0,{0,0,0},{0,0,0}};
 printf("DIGITE CEDULA CLIENTE: ");
 scanf("%s",&cedula);
 clrscr();
 FILE *arch;
 arch=fopen("c:\\cliente.txt","r+");
 if(arch!= NULL)
 {
  sitio=ftell(arch);
  fread(&datos,sizeof(datos),1,arch);
   while(!feof(arch))
   {
     if(strcmp(cedula,datos.cedula)==0)
     {
      band=1;
      printf("NOMBRE:  %s\n",datos.nombre);
      printf("CEDULA:  %s\n\n",datos.cedula);
      if(datos.saldo==0)
      {
       printf("USTED NO TIENE SALDO ACTUAL CON LA EMPRESA");
      }
      else
      {
       fflush(stdin);
       printf("DIGITE EL VALOR DEL PAGO: $");
       scanf("%ld",&datos.pago);
       if(datos.pago>datos.saldo)
        printf("ABONO MAXIMO: $ %ld", datos.saldo);
       else
       {
        printf("DIGITE LA FECHA DEL ABONO (dd/mm/aaaa)\n ");
        printf("DIA: ");
        scanf("%d",&datos.abono.dia);
        printf("MES: ");
        scanf("%d",&datos.abono.mes);
        printf("A¥O: ");
        scanf("%d",&datos.abono.an);
        datos.saldo=datos.saldo-datos.pago;
        clrscr();
       }
      FILE *arch2;
      arch2=fopen("c:\\pagos.txt","a+");
      if(arch2!=NULL)
       fwrite(&datos,sizeof(datos),1,arch2);
      else
       printf("ERROR EN LA CREACION");
      fclose(arch2);
      }
      printf("\n");
      fseek(arch,sitio,SEEK_SET);
      fwrite(&datos,sizeof(datos),1,arch);*

*     }
     sitio=ftell(arch);
     fread(&datos,sizeof(datos),1,arch);
   }
   if(band==0)
   {
    printf("CLIENTE NO EXISTE, DEBE CREARLO");
   }
 }
 else
  printf("REGISTRO NO ENCONTRADO");
 fclose(arch);*

*}*

*void lista5()
{
 long sitio;
 int band=0;
 int m;
 cliente datos={"","","","",0,0,0,{0,0,0},{0,0,0}};
 printf("DIGITE EL MES A BUSCAR: ");
 scanf("%d",&m);
 clrscr();
 printf("\t\tLISTADO DE VENTAS POR MES\n\n");
 FILE *arch;
 arch=fopen("c:\\cliente.txt","r");
 if(arch!= NULL)
 {
  sitio=ftell(arch);
  fread(&datos,sizeof(datos),1,arch);*

*   while(!feof(arch))
   {
     if(datos.venta.mes==m)
     {
      band=1;
      printf("NOMBRE:  %s\n",datos.nombre);
      printf("CEDULA:  %s\n",datos.cedula);
      printf("DIRECCION:  %s\n",datos.direccion);
      printf("TELEFONO:  %s\n",datos.telefono);
      printf("VALOR DE LA VENTA: $ %ld\n",datos.compra);
      printf("FECHA DE LA VENTA: %d / %d / %d \n\n\n",datos.venta.dia,
datos.venta.mes,datos.venta.an);
      fseek(arch,sitio,SEEK_SET);
      fread(&datos,sizeof(datos),1,arch);
     }
    sitio=ftell(arch);
    fread(&datos,sizeof(datos),1,arch);*

*   }
   if(band==0)
   {
    printf("DATO NO ENCONTRADO");
   }*


* }
 else
  printf("REGISTRO NO ENCONTRADO");
 fclose(arch);
}*

*void lista8()
{
 long sitio;
 int band=0;
 int mes;*

* cliente datos={"","","","",0,0,0,{0,0,0},{0,0,0}};
 fflush(stdin);
 printf("DIGITE EL MES A BUSCAR: ");
 scanf("%d",&mes);
 clrscr();
 FILE *arch2;
 arch2=fopen("c:\\pagos.txt","r");
 if(arch2!= NULL)
 {
  sitio=ftell(arch2);
  fread(&datos,sizeof(datos),1,arch2);*

*   while(!feof(arch2))
   {
     if(datos.abono.mes==mes)
     {
      band=1;
      printf("NOMBRE:  %s\n",datos.nombre);
      printf("CEDULA:  %s\n",datos.cedula);
      printf("VALOR DEL PAGO: $ %ld\n",datos.pago);
      printf("FECHA: %d / %d / %d \n\n\n",datos.abono.dia,datos.abono.mes,
datos.abono.an);
      printf("\n\n");
      fseek(arch2,sitio,SEEK_SET);
      fread(&datos,sizeof(datos),1,arch2);
     }*

*    sitio=ftell(arch2);
    fread(&datos,sizeof(datos),1,arch2);
   }*

*   if(band==0)
   printf("DATO NO ENCONTRADO");*


* }
 else
  printf("REGISTRO NO ENCONTRADO");
 fclose(arch2);
}
void lista6()
{
 long sitio;
 int band=0;
 char o[30];
 long int suma=0;
 cliente datos={"","","","",0,0,0,{0,0,0},{0,0,0}};
 printf("DIGITE LA CEDULA A BUSCAR: ");
 scanf("%s",&o);
 clrscr();
 FILE *arch2;
 arch2=fopen("c:\\pagos.txt","r");
 if(arch2!= NULL)
 {
  sitio=ftell(arch2);
  fread(&datos,sizeof(datos),1,arch2);*

*   while(!feof(arch2))
   {
     if(strcmp(datos.cedula,o)==0)
     {
      band=1;
      printf("NOMBRE:  %s\n",datos.nombre);
      printf("CEDULA:  %s\n",datos.cedula);
      printf("VALOR DEL PAGO: $ %ld\n",datos.pago);
      printf("FECHA: %d / %d / %d \n\n\n",datos.abono.dia,datos.abono.mes,
datos.abono.an);
      suma=suma+datos.pago;
      fseek(arch2,sitio,SEEK_SET);
      fread(&datos,sizeof(datos),1,arch2);
     }
    sitio=ftell(arch2);
    fread(&datos,sizeof(datos),1,arch2);
   }*

*   if(band==0)
   printf("DATO NO ENCONTRADO");
   else
   printf("VALOR TOTAL: %ld ",suma);*

* }
 else
  printf("REGISTRO NO ENCONTRADO");
 fclose(arch2);
}*

*void lista7()
{
 long sitio;
 int band=0;
 clrscr();
 printf("\t\tLISTADO DE CLIENTES CON DEUDA\n\n");
 cliente datos={"","","","",0,0,0,{0,0,0},{0,0,0}};
 FILE *arch;
 arch=fopen("c:\\cliente.txt","r");
 if(arch!= NULL)
 {
  sitio=ftell(arch);
  fread(&datos,sizeof(datos),1,arch);*

*   while(!feof(arch))
   {
     if(datos.saldo!=0)
     {
      band=1;
      printf("NOMBRE:  %s\n",datos.nombre);
      printf("CEDULA:  %s\n",datos.cedula);
      printf("TELEFONO:  %s\n",datos.telefono);
      printf("SALDO ACTUAL: $ %ld\n\n",datos.saldo);
      fseek(arch,sitio,SEEK_SET);
      fread(&datos,sizeof(datos),1,arch);
     }*

*    sitio=ftell(arch);
    fread(&datos,sizeof(datos),1,arch);*

*   }
   if(band==0)
   {
    printf("FELICIDADES NO TIENE CARTERA PENDIENTE");
   }*


* }
 else
  printf("REGISTRO NO ENCONTRADO");
 fclose(arch);
}*

* void main()
{
 int opc;
 textcolor(WHITE);
 textbackground(BLUE);
 clrscr();
 do
 {
  printf("\tMUEBLES PALOMAR\n\n\n\r\r\r");
  printf("DIGITE LA OPCION DESEADA\n\n\r");
  printf("1. INCLUIR NUEVO CLIENTE\n\r");
  printf("2. MOSTRAR INFORMACION DE UN CLIENTE\n\r");
  printf("3. REGISTRAR  VENTA \n\r");
  printf("4. REGISTRAR PAGO \n\r");
  printf("5. LISTADO DE VENTAS\n\r");
  printf("6. LISTADO DE INGRESOS\n\r");
  printf("7.  LISTADO DE PERSONAS CON CUENTAS PENDIENTES\n\r");
  printf("8. LISTADO DE PAGOS DE CLIENTES POR MES\n\r");
  printf("9. GENERAR CUENTA DE COBRO\n\r");
  printf("0. SALIR\n\n\r");
  printf("OPCION: ");
  scanf("%d",&opc);
  clrscr();
  switch(opc)
  {
   case 1: crear();
       getch();
       clrscr();
       break;*

*   case 2: mostrar();
       getch();
       clrscr();
       break;*

*   case 3: venta();
       getch();
       clrscr();
       break;*

*   case 4: pago();
       getch();
       clrscr();
       break;*

*   case 5: lista5();
       getch();
       clrscr();
       break;
   case 6: lista6();
       getch();
       clrscr();
       break;
   case 7: lista7();
       getch();
       clrscr();
       break;
   case 8: lista8();
       getch();
       clrscr();
       break;*

* **  }
 }while(opc!=0);
 getch();
}*

Las funciones que hago aca, y manejo de archivos estan con la libreria
stdio.h.

Hasta el momento el programa me hace todas las opciones correctamente, en la
parte de los pagos, bueno yo abri el archivo clientes en modo de lectura,
pide digitar la cedula, ahi me muestra el nombre y la cedula del cliente,
valido si el cliente tiene saldo con al empresa, si si tiene saldo le pido
los datos correspondientes al abono, cuando termino de ingresarlos esos
datos me los guarda en otro archivo llamado pagos (el archivo de pagos lo
abre en modo append), o sea tengo dos archivos, uno de pagos y otro de
clientes.

Hice un intento tratando de generar las cuentas de cobro (el cual no esta
aca), pidiendo primero el mes a buscar,  luego valido del archivo clientes
que clientes tenian deuda con la empresa, si algun cliente tenia deuda con
la empresa, dentro de esa misma función  abria el archivo 2, de ahi trate de
decirle que si el mes que yo ingrese arriba era diferente a la variable
correspondiente al abono del mes (datos.abono.mes), me generara la cuenta de
cobro, y bueno y me guardara esa cuenta dentro del archivo 3.

el problema es por ejemplo: Un cliente de nombre 1, que tiene saldo con la
empresa,  que tiene dos pagos uno en el mes 3 y otro en el mes 4, por decir
algo, le ingreso que me busque el mes 5, y me esta generando dos cuentas de
cobro.

Quisera por favor que me de una orientación, primero si como llevo el codigo
lo llevo bien, si depronto tengo que mejorarle algo, y por favor me de una
orientación acerca de la mejor manera de hacer la opcion de generar cuentas
de cobro.

Le adjunto los archivos de clientes y pagos.



Muchas gracias por su colaboración,



SERGIO DIAZ RIBERO







**
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20070324/30b872ad/attachment.html>
------------ próxima parte ------------
1                             1                             1                   1         L ?? ?    ?  ?2                             2                             2                   2             ?I ?$   ?  ?3                             3                             3                   3         ?  ?$ p   ?  ?4                             4                             4                   4         ? ?? 0u    ?  ?
------------ próxima parte ------------
1                             1                             1                   1         ?_ ?? '    ?  ?1                             1                             1                   1         L ?? ?    ?  ?2                             2                             2                   2         ?8 ?I p   ?  ?2                             2                             2                   2         ?$ ?I ?    ?  ?2                             2                             2                   2             ?I ?$   ?  ?3                             3                             3                   3         ?  ?$ p   ?  ?4                             4                             4                   4         ? ?? 0u    ?  ?


Más información sobre la lista de distribución Cconclase