Ver Mensaje Individual
  #1 (permalink)  
Antiguo 26/08/2014, 16:44
Avatar de aya199874
aya199874
 
Fecha de Ingreso: agosto-2014
Mensajes: 6
Antigüedad: 10 años, 2 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 .