Código C++:
Ver original
#include<iostream> #include <string.h> #include <cstdlib> using namespace std; struct E_Libro{ char* titulo; char* autor; char* editorial; int precio; }; typedef E_Libro* libro; libro crear_libro(){ libro x=new E_Libro; x->titulo=new char[50]; x->autor=new char[50]; x->editorial=new char[30]; return x; } void liberar_libro(libro x){ delete[] x->titulo; delete[] x->autor; delete[] x->editorial; delete[] x; } libro leer_libro(libro x){ cout<<"Digite el titulo del libro: "; cin.getline(x->titulo,50); cin.getline(x->titulo,50); } cout<<"Digite el autor del libro: "; cin.getline(x->autor,50); cin.getline(x->autor,50); } cout<<"Digite la editorial del libro: "; cin.getline(x->editorial,30); cin.getline(x->editorial,50); } cout<<"Digite el precio del libro: "; cin>>x->precio; while(x->precio<0){ cout<<"No valido, digite el precio del libro"; cin>>x->precio; } return x; } void imprimir_libro(libro x){ cout<<"\nInformacion del libro\n"; cout<<"-------------------------\n"; cout<<"Titulo: \t"<<x->titulo; cout<<"\nAutor: \t\t"<<x->autor; cout<<"\nEditorial: \t"<<x->editorial; cout<<"\nPrecio: \t"<<x->precio<<"\n\n"; } libro* leer_conjunto_libros(libro* c, int n){ for(int i=0;i<n;i++){ cout<<"\n\nLibro "<<i+1<<":\n\n"; libro a=crear_libro(); a=leer_libro(a); c[i]=a; } return c; } void imprimir_conjunto_libros(libro* c, int n){ cout<<"TITULO \t\tAUTOR \t\tEDITORIAL \t\tPRECIO \n"; for(int i=0;i<n;i++){ cout<<c[i]->titulo<<"\t\t"<<c[i]->autor<<"\t\t"; cout<<c[i]->editorial<<"\t\t\t"<<c[i]->precio<<"\n"; } } libro* ordenar_por_precio(libro* c, int n){ libro aux; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if(c[j]->precio<c[i]->precio){ aux=c[i]; c[i]=c[j]; c[j]=aux; } } } return c; } libro* ordenar_por_autor(libro* c, int n){ libro aux; // int m=0; // for(int k=0;k<n;i++){ // if(c[]->autor=) // } for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if((c[j]->autor)[0]<(c[i]->autor)[0]){ aux=c[i]; c[i]=c[j]; c[j]=aux; } // if(c[j]->autor==c[i]->autor){ // libro* x=new libro[2]; // x[0]=c[j]; // x[1]=c[i]; // ordenar_por_precio(x,2); // } } } return c; } libro* ordenar_por_titulo(libro* c, int n){ libro aux; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if((c[j]->titulo)[0]<(c[i]->titulo)[0]){ aux=c[i]; c[i]=c[j]; c[j]=aux; } } } return c; } libro* ordenar_por_editorial(libro* c, int n){ libro aux; for(int i=0;i<n;i++){ for(int j=i+1;j<n;j++){ if((c[j]->editorial)[0]<(c[i]->editorial)[0]){ aux=c[i]; c[i]=c[j]; c[j]=aux; } } } return c; } void ordenar(libro* c,int n,int x){ switch(x){ case 1: cout<<"\n___________________________________\n"; cout<<"\nLIBROS ORDENADOS POR TITULO\n"; cout<<"___________________________________\n\n"; c=ordenar_por_titulo(c,n); imprimir_conjunto_libros(c,n); break; case 2: cout<<"\n___________________________________\n"; cout<<"\nLIBROS ORDENADOS POR AUTOR\n"; cout<<"___________________________________\n\n"; c=ordenar_por_autor(c,n); imprimir_conjunto_libros(c,n); break; case 3: cout<<"\n___________________________________\n"; cout<<"\nLIBROS ORDENADOS POR EDITORIAL\n"; cout<<"___________________________________\n\n"; c=ordenar_por_editorial(c,n); imprimir_conjunto_libros(c,n); break; default: cout<<"el numero tiene que ser 1, 2 o 3"<<endl; } } //void comparar_cadenas() int main(){ int n=0; cout<<"Cuantos libros desea ingresar? \n"; cin>>n; libro* conjunto=new libro[n]; conjunto=leer_conjunto_libros(conjunto,n); cout<<"\n___________________________________\n"; cout<<"\nLIBROS INGRESADOS POR EL USUARIO\n"; cout<<"___________________________________\n\n"; imprimir_conjunto_libros(conjunto,n); conjunto=ordenar_por_precio(conjunto,n); cout<<"\n___________________________________\n"; cout<<"\nLIBROS ORDENADOS POR PRECIO\n"; cout<<"___________________________________\n\n"; imprimir_conjunto_libros(conjunto,n); cout<<"\n"; cout<<"\n"; cout<<"\n"; cout<<"presione 1, 2 o 3 si quiere el ordenamiento por titulo,"<<endl<<" autor o editorial respectivamente"<<endl; int o; cin>>o; while(0<=o<4){ ordenar(conjunto,n,o); cout<<"\n"; cout<<"presione 1, 2 o 3 si quiere el ordenamiento por titulo,"<<endl<<" autor o editorial respectivamente"<<endl; cin>>o; } }