de verdad agradeceria su ayuda,
tengo el siguiente codigo:
Código C++:
Ver original#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
struct clientData{
int acctNum;
char lastName[15];
char firstName[10];
double balance;
};
int enterChoice(void);
void textFile(FILE *readPtr);
void updateRecord(FILE *fPtr);
void newRecord(FILE *fPtr);
void deleteRecord(FILE *fPtr);
int main(void){
FILE *cfPtr; /*puntero al archivo credit.dat*/
int choice; /*eleccion del usuario*/
/*fopen abre el archivo; sale si el archivo no se puede abrir*/
if((cfPtr
= fopen("credit.dat","rb+")) == NULL
){ printf("file could not be opened.\n"); }//end dif 1
else {
/*permitir al usuario una acción específica*/
while ((choice=enterChoice())!= 5){
switch(choice){
/*crear archivo de texto de archivo de registro*/
case 1:
textFile(cfPtr);
break;
/*registro de actualización*/
case 2:
updateRecord(cfPtr);
break;
/*crea un registro*/
case 3:
newRecord(cfPtr);
break;
/*elimina registro existente*/
case 4:
deleteRecord(cfPtr);
break;
/*muestra un mnsj x pantalla si el user no selecciona 1opción válida*/
default:
printf("Incorrec Choice. \n"); break;
}//end swicth
}//end while
fclose(cfPtr
); //cierra el archivo. }//end else
return 0;
}//end main
/*crear un archivo de texto con formato para impresión*/
void textFile(FILE *readPtr){
FILE *writePtr; //puntero al archivo accounts.txt
/*crear clientData con información predeterminada*/
struct clientData client = {0, "", "", 0.0};
/*fopen abre el archivo; sale si el archivo no se puede abrir*/
if((writePtr
= fopen("accounts.txt", "w")) == NULL
){ printf("file could not be opened.\n"); }//end if
else{
rewind(readPtr
); //establece puntero al principio del archivo fprintf(writePtr
, "%-6s%-16s%-11s%10s \n", "Acct", "Last Name", "Fist Name", "Balance");
/*copiar todos los registros de archivo de acceso aleatorio en un archivo de texto*/
fread(&client
, sizeof(struct clientData
),1, readPtr
); /*escribir el registro sencillo del archivo de acceso aleatorio en un archivo de texto*/
if(client.acctNum !=0){
fprintf(writePtr
, "%-6d%-16s%-11s%10.2f \n", client.acctNum, client.lastName, client.firstName, client.balance);
}//end if
}//end while
}//end else
}//end void textFile
/*balance de actualización en el registro*/
void updateRecord(FILE *fPtr){
int account; //número de cuenta
double transaction; //monto de la transacción
/*crear clientData sin información*/
struct clientData client = {0, "", "", 0.0 };
/*obtener el número de cuenta para actualizar*/
printf("Enter account to update (1-100): ");
/*mover puntero de archivo para corregir el expediente en el archivo*/
fseek(fPtr
, (account
- 1) *sizeof(struct clientData
), SEEK_SET
);
/*leer el registro del archivo*/
fread(&client
, sizeof(struct clientData
), 1, fPtr
);
/*Error de visualización si la cuenta no existe*/
if(client.acctNum == 0){
printf("Account #%d has no information. \n", account
); }//end fif
else{ //registro de actualización
printf("%-6d%-16s%-11s%10.2f \n\n", client.acctNum, client.lastName, client.firstName, client.balance);
/*cantidad solicitud de transacción del usuario*/
printf("Enter charge (+) or payment (-): "); scanf("%1f", &transaction
); client.balance += transaction; //saldo registro al día
printf("%-6d%-16s%-11s%10.2f \n", client.acctNum, client.lastName, client.firstName, client.balance);
/*mover puntero de archivo para corregir el expediente en el archivo*/
fseek(fPtr
, (account
- 1) *sizeof(struct clientData
), SEEK_SET
);
/*escribe sobre antiguo registro en el archivo*/
fwrite(&client
, sizeof(clientData
), 1, fPtr
); }//end else
}//end void updateRecord
/*elimina un registro existente*/
void deleteRecord(FILE *fPtr){
struct clientData client; //almacenes de registro leída desde el archivo
struct clientData blankClient = {0, "", "", 0}; //cliente en blanco
int accountNum; //numero de cuenta
/*obtener el num de cuenta a eliminar*/
printf("Enter account number to delete (1-100): "); scanf("%d", &accountNum
);
/*mover puntero de archivo para corregir el expediente en el archivo*/
fseek(fPtr
, (accountNum
- 1) *sizeof(struct clientData
), SEEK_SET
);
/*leer el registro del archivo*/
fread(&client
, sizeof(struct clientData
), 1, fPtr
);
/*Error de visualización si la cuenta no existe*/
if(client.acctNum == 0){
printf("Account %d does not exist. \n", accountNum
); }//end if
else{ //elimina registro
/*mover puntero de archivo para corregir el expediente en el archivo*/
fseek(fPtr
, (accountNum
- 1) *sizeof(struct clientData
), SEEK_SET
);
/*sustituir registro existente con registro en blanco*/
fwrite(&blankClient
, sizeof(struct clientData
), 1, fPtr
); }//end else
}//end void deleteRecord
/*crea e inserta un registro*/
void newRecord(FILE *fPtr){
/*crear clientData sin información*/
struct clientData client = {0, "", "", 0.0};
int accountNum;
/*obtener el num de cuenta para crearlo*/
printf("Enter new account number (1 - 100): "); scanf("%d", &accountNum
);
/*mover puntero de archivo para corregir el expediente en el archivo*/
fseek(fPtr
, (accountNum
- 1) *sizeof(struct clientData
), SEEK_SET
);
fread(&client
, sizeof(struct clientData
), 1, fPtr
);
/*Error de visualización si la cuenta ya existe*/
if(client.acctNum != 0){
printf("Account #%d already contains information. \n", client.
acctNum); }//end if
else{ //crea registro
printf("Enter lastname, firstname, balance\n?"); scanf("%s%s%1f", &client.
lastName, &client.
firstName, &client.
balance);
client.acctNum = accountNum;
/*mover puntero de archivo para corregir el expediente en el archivo*/
fseek(fPtr
, (client.
acctNum - 1) *sizeof(struct clientData
), SEEK_SET
);
/*inserta registro en archivo*/
fwrite(&client
, sizeof(struct clientData
), 1, fPtr
);
}//end else
}//end void newwRecord
/*permitir al usuario elegir el menú de entrada*/
int enterChoice(void){
int menuChoice;
printf("\nEnter your choice:\n" "1 - store a formatted text file of accounts called\n"
" \"accounts.txt\"for printing\n"
"2 - update an account\n"
"3 - add a new account\n"
"4 - delete an account\n"
"5 - end program?\n");
scanf("%d", &menuChoice
); return menuChoice;
} // 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 originalstruct clientData client;
struct CData cdata;
int accountNum;
/*obtener el num de cuenta para crearlo*/
printf("Enter new account number (1 - 100): "); scanf("%d", &accountNum
);
/*mover puntero de archivo para corregir el expediente en el archivo*/
fseek(fPtr
, (accountNum
- 1) *sizeof(struct clientData
), SEEK_SET
);
fread(&client
, sizeof(struct clientData
), 1, fPtr
); /*Error de visualización si la cuenta ya existe*/
if(client.acctNum == 0){
printf("Account %d does not exist. \n", client.
acctNum); }//end if
else{
printf("%-6d%-16s%-11s%10.2f \n\n", client.acctNum, client.firstName, client.lastName, client.balance);
scanf("%2f",cdata.
debito);
client.balance = client.balance + cdata.debito;
printf("%-6d%-16s%-11s%10.2f \n\n", client.acctNum, client.firstName, client.lastName, client.balance);
/*mover puntero de archivo para corregir el expediente en el archivo*/
fseek(fPtr
, (client.
acctNum - 1) *sizeof(struct clientData
), SEEK_SET
);
/*inserta registro en archivo*/
fwrite(&cdata
, sizeof(struct CData
), 1, fPtr
); }//end else
cree una nueva estructura
Código C++:
Ver originalstruct CData{
double debito;
double credito;
};
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
.