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

[SOLUCIONADO] Estado de cuenta en C++

Estas en el tema de Estado de cuenta en C++ en el foro de C/C++ en Foros del Web. de verdad agradeceria su ayuda, tengo el siguiente codigo: @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código C++: Ver original #include<stdio.h> #include<stdlib.h> #include<conio.h>     struct clientData {     ...
  #1 (permalink)  
Antiguo 26/08/2014, 16:44
Avatar de aya199874  
Fecha de Ingreso: agosto-2014
Mensajes: 6
Antigüedad: 9 años, 7 meses
Puntos: 0
Información Estado de cuenta en C++

de verdad agradeceria su ayuda,

tengo el siguiente codigo:

Código C++:
Ver original
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3. #include<conio.h>
  4.  
  5.  
  6. struct clientData{
  7.        int acctNum;
  8.        char lastName[15];
  9.        char firstName[10];
  10.        double balance;
  11.        };
  12.  
  13. int enterChoice(void);
  14. void textFile(FILE *readPtr);
  15. void updateRecord(FILE *fPtr);
  16. void newRecord(FILE *fPtr);
  17. void deleteRecord(FILE *fPtr);
  18.  
  19. int main(void){
  20.     FILE *cfPtr; /*puntero al archivo credit.dat*/
  21.     int choice; /*eleccion del usuario*/
  22.  
  23.    
  24.     /*fopen abre el archivo; sale si el archivo no se puede abrir*/
  25.     if((cfPtr = fopen("credit.dat","rb+")) == NULL){
  26.          printf("file could not be opened.\n");
  27.          }//end dif 1
  28.          else {
  29.               /*permitir al usuario una acción específica*/
  30.               while ((choice=enterChoice())!= 5){
  31.                     switch(choice){
  32.                              /*crear archivo de texto de archivo de registro*/
  33.                              case 1:
  34.                                   textFile(cfPtr);
  35.                                   break;
  36.                       /*registro de actualización*/
  37.                              case 2:
  38.                                   updateRecord(cfPtr);
  39.                                   break;
  40.                       /*crea un registro*/
  41.                              case 3:
  42.                                   newRecord(cfPtr);
  43.                                   break;
  44.                       /*elimina registro existente*/
  45.                              case 4:
  46.                                   deleteRecord(cfPtr);
  47.                                   break;
  48.  
  49.                     /*muestra un mnsj x pantalla si el user no selecciona 1opción válida*/       
  50.                              default:
  51.                                      printf("Incorrec Choice. \n");
  52.                                      break;
  53.                              }//end swicth
  54.                     }//end while
  55.                     fclose(cfPtr); //cierra el archivo.
  56.               }//end else
  57.               return 0;
  58. }//end main
  59.  
  60. /*crear un archivo de texto con formato para impresión*/
  61. void textFile(FILE *readPtr){
  62.      FILE *writePtr; //puntero al archivo accounts.txt
  63.      
  64.      /*crear clientData con información predeterminada*/
  65.      struct clientData client = {0, "", "", 0.0};
  66.      
  67.      /*fopen abre el archivo; sale si el archivo no se puede abrir*/
  68.      if((writePtr = fopen("accounts.txt", "w")) == NULL){
  69.           printf("file could not be opened.\n");
  70.           }//end if
  71.           else{
  72.                rewind(readPtr); //establece puntero al principio del archivo
  73.                fprintf(writePtr, "%-6s%-16s%-11s%10s \n",
  74.                  "Acct", "Last Name", "Fist Name", "Balance");
  75.                /*copiar todos los registros de archivo de acceso aleatorio en un archivo de texto*/
  76.                while (!feof(readPtr)){
  77.                      fread(&client, sizeof(struct clientData),1, readPtr );
  78.                     /*escribir el registro sencillo del archivo de acceso aleatorio en un archivo de texto*/
  79.                     if(client.acctNum !=0){
  80.                          fprintf(writePtr, "%-6d%-16s%-11s%10.2f \n",
  81.                          client.acctNum, client.lastName, client.firstName, client.balance);
  82.                          }//end if
  83.                      }//end while
  84.                      fclose(writePtr);
  85.                }//end else
  86.      }//end void textFile
  87.  
  88. /*balance de actualización en el registro*/
  89. void updateRecord(FILE *fPtr){
  90.      int account;  //número de cuenta
  91.      double transaction; //monto de la transacción
  92.      
  93.      /*crear clientData sin información*/
  94.      struct clientData client = {0, "", "", 0.0 };
  95.      
  96.      /*obtener el número de cuenta para actualizar*/
  97.      printf("Enter account to update (1-100): ");
  98.      scanf("%d", &account);
  99.      
  100.      /*mover puntero de archivo para corregir el expediente en el archivo*/
  101.      fseek(fPtr, (account - 1) *sizeof(struct clientData), SEEK_SET);
  102.      
  103.      /*leer el registro del archivo*/
  104.      fread(&client, sizeof(struct clientData), 1, fPtr);
  105.      
  106.      /*Error de visualización si la cuenta no existe*/
  107.      if(client.acctNum == 0){
  108.           printf("Account #%d has no information. \n", account);
  109.           }//end fif
  110.           else{ //registro de actualización
  111.                printf("%-6d%-16s%-11s%10.2f \n\n",
  112.                  client.acctNum, client.lastName, client.firstName, client.balance);
  113.                
  114.                /*cantidad solicitud de transacción del usuario*/
  115.                printf("Enter charge (+) or payment (-): ");
  116.                scanf("%1f", &transaction);
  117.                client.balance += transaction; //saldo registro al día
  118.                printf("%-6d%-16s%-11s%10.2f \n",
  119.                  client.acctNum, client.lastName, client.firstName, client.balance);
  120.                
  121.                /*mover puntero de archivo para corregir el expediente en el archivo*/
  122.                fseek(fPtr, (account - 1) *sizeof(struct clientData), SEEK_SET);
  123.                
  124.                /*escribe sobre antiguo registro en el archivo*/
  125.                fwrite(&client, sizeof(clientData), 1, fPtr);
  126.                }//end else
  127.      }//end void updateRecord
  128.  
  129. /*elimina un registro existente*/
  130. void deleteRecord(FILE *fPtr){
  131.      struct clientData client; //almacenes de registro leída desde el archivo
  132.      struct clientData blankClient = {0, "", "", 0}; //cliente en blanco
  133.      
  134.      int accountNum; //numero de cuenta
  135.      
  136.      /*obtener el num de cuenta a eliminar*/
  137.      printf("Enter account number to delete (1-100): ");
  138.      scanf("%d", &accountNum);
  139.      
  140.      /*mover puntero de archivo para corregir el expediente en el archivo*/
  141.      fseek(fPtr, (accountNum - 1) *sizeof(struct clientData), SEEK_SET);
  142.      
  143.      /*leer el registro del archivo*/
  144.      fread(&client, sizeof(struct clientData), 1, fPtr);
  145.      
  146.      /*Error de visualización si la cuenta no existe*/
  147.      if(client.acctNum == 0){
  148.           printf("Account %d does not exist. \n", accountNum);
  149.           }//end if
  150.           else{ //elimina registro
  151.                /*mover puntero de archivo para corregir el expediente en el archivo*/
  152.                fseek(fPtr, (accountNum - 1) *sizeof(struct clientData), SEEK_SET);
  153.                
  154.                /*sustituir registro existente con registro en blanco*/
  155.                fwrite(&blankClient, sizeof(struct clientData), 1, fPtr);
  156.                }//end else
  157.      }//end void deleteRecord
  158.  
  159. /*crea e inserta un registro*/
  160. void newRecord(FILE *fPtr){
  161.      /*crear clientData sin información*/
  162.      struct clientData client = {0, "", "", 0.0};
  163.      int accountNum;
  164.      
  165.      /*obtener el num de cuenta para crearlo*/
  166.      printf("Enter new account number (1 - 100): ");
  167.      scanf("%d", &accountNum);
  168.      
  169.      /*mover puntero de archivo para corregir el expediente en el archivo*/
  170.      fseek(fPtr, (accountNum - 1) *sizeof(struct clientData), SEEK_SET);
  171.      
  172.      fread(&client, sizeof(struct clientData), 1, fPtr);
  173.      
  174.      /*Error de visualización si la cuenta ya existe*/
  175.      if(client.acctNum != 0){
  176.           printf("Account #%d already contains information. \n", client.acctNum);
  177.           }//end if
  178.           else{ //crea registro
  179.                printf("Enter lastname, firstname, balance\n?");
  180.                scanf("%s%s%1f", &client.lastName, &client.firstName, &client.balance);
  181.                
  182.                
  183.                client.acctNum = accountNum;
  184.                /*mover puntero de archivo para corregir el expediente en el archivo*/
  185.                fseek(fPtr, (client.acctNum - 1) *sizeof(struct clientData), SEEK_SET);
  186.                
  187.                /*inserta registro en archivo*/
  188.                fwrite(&client, sizeof(struct clientData), 1, fPtr);
  189.  
  190.                }//end else
  191.      }//end void newwRecord
  192.  
  193. /*permitir al usuario elegir el menú de entrada*/
  194. int enterChoice(void){
  195.     int menuChoice;
  196.    
  197.     printf("\nEnter your choice:\n"
  198.     "1 - store a formatted text file of accounts called\n"
  199.     "    \"accounts.txt\"for printing\n"
  200.     "2 - update an account\n"
  201.     "3 - add a new account\n"
  202.     "4 - delete an account\n"
  203.     "5 - end program?\n");
  204.     scanf("%d", &menuChoice);
  205.     return menuChoice;
  206. } // end enterChoice

ok en este codigo creo un archivo "credit.dat" la op 1 guardo ordenadamente los mismo pero en "accounts.txt" guardo lo que ingreso en la op 3 o actualizo cuando elimino (en la op 4).

mi problema es:
necesito aumentar en mi programa :
  • un procedimiento con el cual creo un nuevo archivo de transacciones.dat (deposito o retiro de dinero)
  • unprocedimiento que guarde las transacciones hechas pero que las guarde en un archivo de transacciones.txt

he aumentado el siguiente codigo en mi programa:

Código C++:
Ver original
  1. struct clientData client;
  2.               struct CData cdata;
  3.               int accountNum;
  4.              
  5.                /*obtener el num de cuenta para crearlo*/
  6.                printf("Enter new account number (1 - 100): ");
  7.                scanf("%d", &accountNum);
  8.                
  9.                /*mover puntero de archivo para corregir el expediente en el archivo*/
  10.                fseek(fPtr, (accountNum - 1) *sizeof(struct clientData), SEEK_SET);
  11.                
  12.                fread(&client, sizeof(struct clientData), 1, fPtr);
  13.                /*Error de visualización si la cuenta ya existe*/
  14.                if(client.acctNum == 0){
  15.                     printf("Account %d does not exist. \n", client.acctNum);
  16.                }//end if
  17.                else{
  18.                     printf("%-6d%-16s%-11s%10.2f \n\n",
  19.                        client.acctNum, client.firstName, client.lastName, client.balance);
  20.                     printf("Ingrese Monto: ");
  21.                     scanf("%2f",cdata.debito);
  22.                    
  23.                     client.balance = client.balance + cdata.debito;
  24.                    
  25.                     printf("%-6d%-16s%-11s%10.2f \n\n",
  26.                        client.acctNum, client.firstName, client.lastName, client.balance);
  27.                    
  28.                     /*mover puntero de archivo para corregir el expediente en el archivo*/
  29.                     fseek(fPtr, (client.acctNum - 1) *sizeof(struct clientData), SEEK_SET);
  30.                    
  31.                     /*inserta registro en archivo*/
  32.                     fwrite(&cdata, sizeof(struct CData), 1, fPtr);
  33.                     }//end else

cree una nueva estructura
Código C++:
Ver original
  1. struct CData{
  2.        double debito;
  3.        double credito;
  4.        };

lo que trato de hacer en el segundo codigo es hacer deposito, pero tengo errores al compilar.
si tan amable me yudarian me salvarian de un 0 .
de antemano gracias .
  #2 (permalink)  
Antiguo 27/08/2014, 11:49
Avatar de Drewermerc  
Fecha de Ingreso: febrero-2014
Mensajes: 185
Antigüedad: 10 años, 2 meses
Puntos: 5
Respuesta: Estado de cuenta en C++

Hola amigo.
bueno pues creo que tu error esta en el uso de fwrite en esta linea.
fwrite(&client, sizeof(clientData), 1, fPtr);
ya que lo que tu quieres hay es almacer el valor en la estructura pero no lo dices donde e intentas sacar el tamaño de la estructura pero recuerda que al definir un estructura de tu le asignaste el nombre de client por lo cual al usar tienes que hacer referencia a ese que es el nombre de la estructurta asi como tambien decirle el tamaño de que miembro de la estructura quieres.
algo asi.
Código C:
Ver original
  1. fwrite(&client.acctNum, sizeof(client.acctNum), 1, fPtr);

Bueno espero que me hayas entendido.
Saludos.
Drewermerc.

Etiquetas: case, estado, int, programa, txt
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 13:53.