hola, soy nuevo en el foro y vengo por ayuda resulta que estoy en programación y me han dejado hacer un código que pide lo siguiente:
Utilizar dos archivos de texto, los cuales ambos serán utilizados para almacenar registros. En uno de ellos van a ingresar los datos del encabezado de la factura y en el otro el detalle de la factura. Utilice la estrategia de separación de registros y campos por medio de caracteres especiales.
La estructura del Encabezado de la Factura es: Número de factura, NIT, nombre
La estructura del Detalle de la Factura es: Número de factura, producto, monto unitario
Opciones del menu:
1. Agregar nuevas facturas. Debe permitir ingresar una factura completa, es decir, el encabezado y "n" líneas de detalle para cada factura.
2. Realizar busquedas por número de factura, para que el usuario ingrese el número y el sistema recorra todos los registros y al encontrarla debe mostrar en pantalla el encabezado y el detalle.
le compartiré lo que llevo
aquí he creado una librería
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include<cstdlib>
#include<cstring>
using namespace std;
#define FIN_CAMPO '~'
#define FIN_REGISTRO '|'
fstream archivo;
ofstream archivo2;
int noRegistroLeido=0;
struct Factura //Creamos una estructura para el archivo de la factura
{
string NoFactura;
int Nit;
string Nombre;
};
struct Detalle //Creamos una estructura para el detalle de la factura
{
string NoFactura;
char producto;
float MontoUnit;
};
//Este método nos permitira abrir el archivo del archivo archivo
//lectura (true=lectura, false=escritura)
int abrirArchivo(bool lectura){
string nombreArchivo;
string nombreArchivo2;
cout<<"Ingrese el nombre del archivo para encabezado: ";
cin>>nombreArchivo;
cout<<"Ingrese el nombre del archivo para detalle: ";
cin>>nombreArchivo2;
if(lectura)
archivo.open(nombreArchivo.c_str(),ios::in);
else
archivo.open(nombreArchivo.c_str(),ios::out|ios::a pp);
if(lectura)
archivo2.open(nombreArchivo2.c_str(),ios::in);
else
archivo2.open(nombreArchivo2.c_str(),ios::out|ios: :app);
return archivo2.is_open();
return archivo.is_open();
}
void cerrarArchivo()
{
archivo.close();
}
//Grabar el registro de a nueva Factura en el archivo
//utilizando la nomenclatura de separación por caracter
void escribirRegistro(Factura FacturaNuevo, Detalle DetalleNuevo)
{
archivo<<FacturaNuevo.NoFactura<<FIN_CAMPO<<Factur aNuevo.Nit<<FIN_CAMPO<<FacturaNuevo.Nombre<<FIN_RE GISTRO;
archivo2<<DetalleNuevo.NoFactura<<FIN_CAMPO<<Detal leNuevo.producto<<FIN_CAMPO<<DetalleNuevo.MontoUni t<<FIN_REGISTRO;
}
Factura leerRegistro()
{
Factura FacturaLeido;
string tempNit;
char caracter;
int noCampo=1;
while(archivo.get(caracter))
{
if(caracter==FIN_CAMPO)//fin del campo
noCampo++;
else if (caracter==FIN_REGISTRO)
{//fin del registro
noRegistroLeido++;
FacturaLeido.Nit=atoi( tempNit.c_str() );
return FacturaLeido;
}else
{//valores de los campos
switch(noCampo)
{
case 1:
FacturaLeido.NoFactura=FacturaLeido.NoFactura+cara cter;
break;
case 2:
tempNit=tempNit+caracter;
break;
case 3:
FacturaLeido.Nombre=caracter;
}
}
}
}
///// aquí el código///
#include <iostream>
#include <fstream>
#include "MgrTextFilel.h"
using namespace std;
int opcion;
//creamos el menu de opciones
void menu()
{
cout<<"------------------------------------"<<endl;
cout<<"1. Nueva Factura"<<endl;
cout<<"2. Registro de facturas"<<endl;
cout<<"------------------------------------"<<endl;
cout<<"Seleccione una opción: ";
cin>>opcion;
}
void escrituraRegistros()
{
Factura FacturaNuevo;
Detalle DetalleNuevo;
do
{
cout<<"Ingrese el numero de factura (o escriba fin para terminar el ingreso):";
cin>>FacturaNuevo.NoFactura;
if(FacturaNuevo.NoFactura=="fin")
return;
cout<<"Ingrese numero de nit de cliente:\n";
cin>>FacturaNuevo.Nit;
cout<<"Ingrese el nombre del cliente:\n";
cin>>FacturaNuevo.Nombre;
cout<<"Ingrese producto:\n";
cin>>DetalleNuevo.producto;
cout<<"Ingrese precio unitario:\n";
cin>>DetalleNuevo.MontoUnit;
escribirRegistro(FacturaNuevo,DetalleNuevo);
}while(true);
}
void lecturaRegistros(){
Factura Factura;
Factura=leerRegistro();
cout<<"No. NoFactura Nit Nombre\n";
cout<<"___________________________________________ _____\n";
while(Factura.NoFactura.length()>0)
{
cout<<noRegistroLeido <<" "<<Factura.NoFactura<<" "<<Factura.Nit<<" "<<Factura.Nombre<<endl;
Factura=leerRegistro();
}
}
int main()
{
menu();
if(abrirArchivo(opcion==1?false:true))
{
if(opcion==1)
escrituraRegistros();
else if(opcion==2)
lecturaRegistros();
cerrarArchivo();
}else
cout<<"Ocurrió un error al abrir el archivo";
}
/// LO PUEDE REVISAR Y ME COMPILA SIN ERRORES PERO NO LOGRO HACER TODO LO QUE ME PIDEN
estoy trabajando en dev c++
gracias por si me pueden ayudar