Autor Tema: C++ Archivos grabar datos actualizar FILE fopen fwrite fseek fread feof ficheros  (Leído 3348 veces)

OzerLord

  • Sin experiencia
  • *
  • APR2.COM
  • Mensajes: 1
    • Ver Perfil
Hola soy nuevo en el foro y necesito ayuda con un código.

El ejercicio consiste en escribir tres codigos. El primero guarda las ventas realizadas de un negocio en un archivo, cada venta con las cantidad de cuotas que solicito el comprador. El segundo codigo guarda en un archivo las cuota y el monto que va a pagar el comprador. El tercer codigo se encarga de actualizar las cuotas que va pagando cada consumidor.

El codigo de ventas y cuotas me funcionan bien, pero no puedo lograr que se actualize el de ventas con las cuotas pagas.

Tengo las siguientes dudas...

¿Hay diferentes formas de manejar archivos en c++?

¿Mi forma es la correcta?

Paso a dejar los 3 codigos. Yo necesito que funcione el de actualizar. Es decir que el archivo de ventas se valla actualizando con las cuotas que se pagan en el archivo cuotas


Ventas


Código: [Seleccionar]
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;

//Tipo de datos

typedef struct {
float valor;
char pago;
}cuota;

typedef struct {
int nro_cliente;
int cantidad_cuotas;
int monto;
cuota cuotas[12];
//cuotas
}maestrocobranzas;

void venta (int &ultimaFactura, maestrocobranzas &aux);
void nuevaFactura (char &a);
void identificarUltimaFactura(FILE* archMc, int &ultimaFactura);

int main(){
//VARIABLES
char respuesta;
int ultimaFactura;
maestrocobranzas aux;

//ALGORITMO
FILE* archMc = fopen("ventas.dat","wb");
ultimaFactura = 0;
// identificarUltimaFactura(archMc, ultimaFactura);
nuevaFactura(respuesta);
while(respuesta == 'S') {
venta(ultimaFactura, aux);
fwrite(&aux,sizeof(maestrocobranzas),1, archMc);
nuevaFactura(respuesta);
}

fclose(archMc);
system("pause");
return 0;
}


void venta (int &ultimaFactura, maestrocobranzas &aux){
//VARIABLES
//inicio
ultimaFactura = ultimaFactura + 1;
aux.nro_cliente = ultimaFactura;

do{
cout<<"Cual es el monto a pagar?"<<endl;
cin>>aux.monto;
    cout<<endl;
}while( aux.monto < 0);

do{
cout<<"En cuantas cuotas desea realizar el pago?"<<endl;
cin>>aux.cantidad_cuotas;
cout<<endl;

}while(aux.cantidad_cuotas > 11 || aux.cantidad_cuotas <= 0);

for(int i = 0; i <= aux.cantidad_cuotas - 1; i++){
aux.cuotas[i].valor = (aux.monto/aux.cantidad_cuotas);
aux.cuotas[i].pago = 'I';
}

for(int i = aux.cantidad_cuotas ; i <= 11; i++) {
aux.cuotas[i].valor = 0;
aux.cuotas[i].pago = 'P';
}
}

void nuevaFactura (char &a){
do{
cout<<"Desea ingresar una nueva factura? S/N"<<endl;
cin>>a;
cout<<endl;
}while(a != 'S' && a != 'N');

}


Cuotas

Código: [Seleccionar]
#include <iostream>
#include <string.h>
#include <stdio.h>

using namespace std;

//TIPO DE DATOS
typedef struct {
int nro_punto_cobro;
int nro_cliente;
int cuota_pagar;
float monto_abonado;
}cobranzas;

void nuevaCuota (char &a);
void cuota (cobranzas &aux);

int main() {

//VARIABLES
char respuesta;
cobranzas aux;
//INICIO
FILE* archC = fopen("cobros.dat","wb");
nuevaCuota(respuesta);
while( respuesta == 'S') {
cuota(aux);
fwrite( &aux, sizeof(cobranzas), 1, archC);
nuevaCuota(respuesta);
}

fclose(archC);
system("pause");
return 0;
}


void nuevaCuota (char &a){
do{
cout<<"Desea ingresar una cuota? S/N"<<endl;
cin>>a;
cout<<endl;
}while(a != 'S' && a != 'N');

}


void cuota (cobranzas &aux) {
do{
cout<<"Ingrese el numero de Cliente: ";
cin>>aux.nro_cliente;
cout<<endl;
}while( aux.nro_cliente <= 0);

do{
cout<<"Cuota a pagar: ";
cin>>aux.cuota_pagar;
cout<<endl;
}while( aux.cuota_pagar > 11 || aux.cuota_pagar < 0);

do{
cout<<"Monto abonado: ";
cin>>aux.monto_abonado;
cout<<endl;
}while(aux.monto_abonado <= 0);

do{
cout<<"Punto de cobro: ";
cin>>aux.nro_punto_cobro;
cout<<endl<<endl;
}while(aux.nro_punto_cobro < 0 || aux.nro_punto_cobro > 5);

}

Actualizacion

Código: [Seleccionar]
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
//Tipo de datos

typedef struct {
float valor;
char pago;
}cuota;

typedef struct {
int nro_cliente;
int cantidad_cuotas;
int monto;
cuota cuotas[11];
//cuotas
}maestrocobranzas;

typedef struct {
int nro_punto_cobro;
int nro_cliente;
int cuota_pagar;
float monto_abonado;
}cobranzas;

void buscarCliente(FILE* &archMc, cobranzas &regC, maestrocobranzas &regMc, bool &existe);
void actualizar (cobranzas &regC, maestrocobranzas &regMc, FILE* &archMc);
void resultados(FILE* &archMc, maestrocobranzas &regMc);

int main(){
//Variables
cobranzas regC;
maestrocobranzas regMc;
bool existe;
//Inicio
FILE* archC = fopen("cobros.dat","rb");
FILE* archMc = fopen("ventas.dat","r+b");
fread (&regC, sizeof(cobranzas), 1, archC);

while( !feof(archC) ) {
buscarCliente(archMc, regC, regMc, existe);
if ( existe == true) {
actualizar(regC, regMc, archMc);
}

fread (&regC, sizeof(cobranzas), 1, archC);
}

//resultados(archMc, regMc);

fclose(archC);
fclose(archMc);
system("pause");
return 0;
}


void buscarCliente(FILE* &archMc, cobranzas &regC, maestrocobranzas &regMc, bool &existe) {
//Variables
int pri, ult, central;
//Inicio
pri = 0;
existe = false;

fseek(archMc, 0, SEEK_END);
ult = ( ftell(archMc)/sizeof(maestrocobranzas) ) - 1;

cout<<"Registros en el archivo ventas: "<<ult<<endl;
while( pri <= ult && existe == false) {
central = (pri + ult) / 2;
//cout<<"a: "<<central<<endl;
fseek(archMc, central * sizeof(maestrocobranzas), SEEK_SET);
fread(&regMc, sizeof(maestrocobranzas), 1, archMc );
//cout<<"nro C: "<<regC.nro_cliente<<endl;
cout<<"nro cliente MC: "<<regMc.nro_cliente<<endl;
if (regC.nro_cliente == regMc.nro_cliente) {
existe = true;
} else if (regC.nro_cliente > regMc.nro_cliente) {
pri = central + 1;
} else {
ult = central - 1;

}



}

if ( existe == false) {
cout<<"La cuota del cliente "<<regC.nro_cliente<<" es invalida"<<endl;
}

}


void actualizar (cobranzas &regC, maestrocobranzas &regMc, FILE* &archMc) {
if (regC.monto_abonado < regMc.cuotas[regC.cuota_pagar].valor ){
cout<<"Monto insuficiente";
}
else if (regC.monto_abonado == regMc.cuotas[regC.cuota_pagar].valor) {

regMc.cuotas[regC.cuota_pagar].valor = 0;
regMc.cuotas[regC.cuota_pagar].pago = 'P';
cout<<"Cuota pagada1"<<endl;
fwrite(&regMc, sizeof(maestrocobranzas), 1, archMc);

}
else {

cout<<"Monto sobrante: "<<regC.monto_abonado - regMc.cuotas[regC.cuota_pagar].valor<<endl;
cout<<"Punto de cobro: "<<regC.nro_punto_cobro<<endl;
regMc.cuotas[regC.cuota_pagar].valor = 0;
regMc.cuotas[regC.cuota_pagar].pago = 'P';
fwrite(&regMc, sizeof(maestrocobranzas), 1, archMc);
cout<<"Cuota pagada2"<<endl;
}
}

void resultados(FILE* &archMc, maestrocobranzas &regMc) {
//Varibales
int cont;
//Inicio
cont = 0;
fseek(archMc, 0, SEEK_SET);
fread(&regMc, sizeof(maestrocobranzas), 1, archMc);
while( !feof(archMc) ) {
for( int i = 0; i <= 11; i++) {
if ( regMc.cuotas[i].pago == 'I') {
cont = cont + 1;
}
}

if (cont > 5) {
cout<<"Cliente: "<<regMc.nro_cliente<<endl;
cout<<"Cantidad de cuotas impagas: "<<cont<<endl;
}

fread(&regMc, sizeof(maestrocobranzas), 1, archMc);
}

}
« Última modificación: 08 de Febrero 2016, 09:52 por Ogramar »

javi in the sky

  • Avanzado
  • ****
  • Mensajes: 393
    • Ver Perfil
Re:Ejercicio C++ (Archivos)
« Respuesta #1 en: 06 de Febrero 2016, 20:11 »
Hola OzerLord supongamos que una venta realizada es la venta1 con importe 200 USD y 10 cuotas. ¿A partir de aquí que es lo que tendría que ir ocurriendo?

Saludos

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".