예제 #1
0
int main(int argc, char** argv)
{
	ListaD<Receta>* recetas = new ListaD<Receta>();
	Archivo* libro_txt = new Archivo("Libro.txt");
	libro_txt->abrir(); 
	string* buffer;
	
	
	while( !libro_txt->isFinal() )
	{
		 buffer = libro_txt->leerCampos( ',', 3 );
		 recetas->agregar( new Receta( atoi( buffer[0].c_str() ), buffer[1] , atoi( buffer[2].c_str() )) );
	}
	
	
	delete libro_txt;
	
	
	Archivo* ingrediente_txt = new Archivo("Ingrediente.txt");
	ingrediente_txt->abrir();
	bool continuar;
	Ingrediente* ingredAux; 
	string linea;
	string nom;
	int cal;
	int codigo;
	
	
	
	while( !ingrediente_txt->isFinal() )
	{ 
		linea = ingrediente_txt->leerLinea();
		
		nom = linea.substr(0, linea.find(','));
		linea = linea.substr( linea.find(',') + 1 );
		cal = atoi( linea.substr(0, linea.find(',')).c_str() );
		linea = linea.substr( linea.find(',') + 1 );
		
		ingredAux = new Ingrediente( nom, cal );
		
		continuar = true;
		
		
		while( continuar )
		{
			if ( linea.find(',') == string::npos )  
				continuar = false;
			
			
			
			codigo = atoi( linea.substr(0, linea.find(',')).c_str() );
			linea = linea.substr( linea.find(',') + 1);
			
			
			
			for( int x = 0; x < recetas->getSize(); x++ )
			{
				if( recetas->getElemento_info(x)->codigo == codigo )
				{
		//			recetas->getElemento_info(x)->ingredientes->agregar(ingredAux); 
					recetas->getElemento_info(x)->ingredientes->agregar( new Ingrediente(*ingredAux) ); 
				}
			}
				
		} // fin del while
	} // fin del while 	
	
	recetas->imprimir();
	cout << endl;
	
	
	for( int x = 0; x < recetas->getSize(); x++ )
	{
		recetas->getElemento_info(x)->ingredientes->imprimir();
	}
	
	
	
	ingredAux = new Ingrediente();
	Nodo<Ingrediente>* nodoIngAux;
	Nodo<Receta>* nodoRecAux;
	Receta*  recAux = new Receta(); 
	cout << endl << endl;
	cout << "Ingrese el codigo de una receta... ";
	recetas->imprimir();
	cout << "Codigo: ";
	cin >> codigo;
	
	
	recAux->codigo = codigo;
	nodoRecAux = recetas->buscar(recAux);
	
	
	if( nodoRecAux )
	{
		cout << "Lo ingredientes de la receta son: " << endl;
		nodoRecAux->getInfo()->ingredientes->imprimir();
		
		
		cout << "Desea modificar las calorias totales(Ingrese 1)" << endl;
		cout <<  "Dese modificar las calorias de un ingrediente(Ingrese 2)" << endl;
		cin >> codigo;
		
		
		if( codigo == 1 )
		{
			cout << "Ingrese las calorias de la receta: ";
			cin >> cal;
			
			nodoRecAux->getInfo()->calorias = cal;
		}else if( codigo == 2 )
예제 #2
0
// procesa los datos
void procesarDatos()
{
	ListaD<char>* lista_claves = new ListaD<char>( true, true ); // instancio lista doble
	string buffer; // almacena datos
	
	
	
	// crea la lista doblemente enlazada de letras
	Archivo* claves = new Archivo( "claves.txt" ); // asocio archivo claves.txt
	cout << claves->abrir() << endl << endl; // abro claves.txt
	
	
	// mientras no llegue al final de claves.txt
	while( !claves->isFinal() )
	{
		buffer = claves->leerCampo( ' ' ); // leo clave
		lista_claves->agregar( (char*)buffer.c_str(), ListaD<char>::AGRE_CRE, true ); // agrego clave a la lista
	} // fin del while
	
	lista_claves->imprimir();
	lista_claves->imprimir(true);
	
	delete claves; // libero recursos
	cout << endl << endl;
	
	
	// descifrar el mensaje
	Nodo<char>* clave = lista_claves->getCab(); // apunto a la cab de la lista
	Archivo* mensa = new Archivo( "mensa.txt" ); // asocio archivo mensa.txt
	Archivo* salida = new Archivo( "salida.txt" ); // asocio archivo salida.txt(no existe)
	int sentido; // sentido del recorrido
	int recorrido; // distancia(Nodos) a recorrer
	char clave_escribir; // clave a escribir en el archivo salida.txt
	
	
	cout << mensa->abrir() << endl; // aperturo mensa.txt
	cout << salida->crear() << endl; // creo salida.txt para escritura 
	
	
	// mientras no llegue al fin de mensa.txt
	while( !mensa->isFinal() )
	{
		buffer = mensa->leerCampo( ' ' ); // leo los tres digitos
		sentido = atoi( buffer.c_str() ) / 100; // obtengo sentido del recorrido
		recorrido = ( atoi( buffer.c_str() ) % 100 ) - 1; // obtengo la distancia
		
		
		// recorrido hasta la clave especificada por recorrido
		for( ; recorrido > 0; recorrido-- )
		{
			// si el sentido es a la dereche, clave sera su sucesor, de lo contrario, clave sera
			clave = ( sentido == 1 ? clave->getLink_suc() : clave->getLink_pre() ); // su predecesor
		} // fin del for 
		
		clave_escribir = clave->getInfo(); // obtengo clave del Nodo
		salida->escribir( clave_escribir ); // escribo clave en salida.txt
	} // fin del while
	
	
	salida->escribir( "", true ); // obligo al flujo a escribir
	
	
	delete mensa, salida; // libero recursos de archivos
} // fin de procesarDatos