#include<iostream>
#include <cstdlib>
#include <cstring>
using namespace std;
int strcmp(const char[], const char[]);
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);
while(strlen(x
->editorial
)==0){ 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;
}
}