Soy relativamente nuevo en este mundo de la programacion y cualquier consejo para solucionar este problema se lo agradeceria mucho
creo que el problema tiene que ver con algo de punteros pero no estoy seguro
este es el main cpp
Código
#include <iostream> #include "usalibro.h" #include "UsaBibliografia.h" #include "bibliografia.h" #include <cstring> #include <stdlib.h> #include <stdio.h> using namespace std; void menu(); int main() { menu(); return 0; } void menu(){ int opcion, control=0; tbibliografia bd; tlibro t; do{ cout<< "1.- Crear bibliografía" << endl; cout<< "2.- Añadir libro "<< endl; cout<< "3.- Modificar año de libro" << endl; cout<< "4.- Listar libros por ISBN" << endl; cout<< "5.- Listar libros por orden decreciente de año" << endl; cout<< "6.- Terminar" << endl; cout<< "Elegir opción:"<< endl; cin >> opcion; switch(opcion){ case 1:{ if(control==0){ crear(bd); control=1; cout<<"Se ha creado la bibliogarfia"<<endl; }else cout<<"Ya habia sido creada la bibliografia, el sistema solo puede manterner a una"<<endl; } break; case 2:{ if(control==0){ cout<<"Primero tiene que crear la bibliografia, use opcion 1"<<endl; }else{ leerLibro(t); anadir(bd,t); } } break; case 3:{ if(control==0) cout<<"Primero tiene que crear la bibliografia, use opcion 1"<<endl; else{ cout<<"Introduce ISBN del libro a modificar año"<<endl; cin>>t.isbn; if(existe(bd,t.isbn)){ cout<<"Introduce el año que desea intruducir"<<endl; cin>>t.ano; modificarAnoLibro(bd, t.isbn, t.ano); }else cout<<"El libro no esta en la bibliografia"<<endl; } } break; case 4:{ if(control==0) cout<<"Primero tiene que crear la bibliografia, use opcion 1"<<endl; else{ mostrarOrdenisbn (bd); } } break; case 5:{ if(control==0) cout<<"Primero tiene que crear la bibliografia, use opcion 1"<<endl; else{ mostrarOrdenAno(bd); } } break; } }while(opcion!=6); }
este es el UsaBibliogrsafia.h
Código
este es UsaBibliografia.cpp
#ifndef USABIBLIOGRAFIA_H_INCLUDED #define USABIBLIOGRAFIA_H_INCLUDED #include <iostream> #include "bibliografia.h" #include "usalibro.h" #include <cstring> #include <stdlib.h> #include <stdio.h> using namespace std; void copiaBibliografia (tbibliografia &nuevo,tbibliografia viejo); void mostrarOrdenisbn (tbibliografia li); void mostrarOrdenAno(tbibliografia bibli); #endif
Código
este es bibliografia.h
#include "UsaBibliografia.h" void copiaBibliografia (tbibliografia &nuevo,tbibliografia viejo){ int conta,conta2=0; crear(nuevo); tlibro t; conta= numeroLibros (viejo); while(conta2<=conta){ extraerPosicion(viejo, conta2,t); anadir(nuevo,t); conta2++; } }; void mostrarOrdenisbn (tbibliografia li){ int conta,conta2=0; tlibro t; conta= numeroLibros (li); while(conta2<=conta){ extraerPosicion(li, conta2,t); mostrarLibro(t); conta2++; } }; void mostrarOrdenAno(tbibliografia bibli) { int conta,conta2=0; tlibro t; conta= numeroLibros (bibli); tbibliografia prueba, prueba2; copiaBibliografia(prueba, bibli); crear(prueba2); while(conta2<=conta){ masNuevo(prueba,t); eliminar(prueba,t.isbn); mostrarLibro(t); conta2++; } };
Código
este es bobliografia.cpp
#ifndef BIBLIOGRAFIA_H_INCLUDED #define BIBLIOGRAFIA_H_INCLUDED #include <iostream> #include "usalibro.h" #include <cstring> #include <stdlib.h> #include <stdio.h> using namespace std; typedef struct _nodo { tlibro t; struct _nodo *siguiente; } tipoNodo; typedef tipoNodo *pNodo; typedef tipoNodo *tbibliografia; void crear(tbibliografia &nuevo); void anadir(tbibliografia &b, tlibro l); void eliminar(tbibliografia &b, char isbn[]);//mirar bool bibliografiaSinLibros(tbibliografia b); void extraer(tbibliografia b, char isbn[], tlibro & l); int numeroLibros (tbibliografia b); void extraerPosicion(tbibliografia b, int pos, tlibro &l); bool existe (tbibliografia b, char isbn[]); void modificarAnoLibro(tbibliografia &b, char isbn[], int ano); void masNuevo(tbibliografia b, tlibro &l); #endif
Código
#include "bibliografia.h" void crear(tbibliografia &nuevo){ nuevo=NULL; } void anadir(tbibliografia &b, tlibro l){ pNodo nuevo, anterior; crear(nuevo); copiaLibro((*nuevo).t,l); // Si la lista está vacía if(bibliografiaSinLibros(b)==true || strcmp(b->t.isbn, l.isbn)>0) { /* Añadimos la lista a continuación del nuevo nodo */ nuevo->siguiente = b; /* Ahora, el comienzo de nuestra lista es en nuevo nodo */ b = nuevo; } else { /* Buscar el nodo de valor menor al isbn */ anterior = b; /* Avanzamos hasta el último elemento o hasta que el siguiente tenga un valor mayor que el isbn*/ while(anterior->siguiente && strcmp(anterior->siguiente->t.isbn,l.isbn) <=0) anterior = anterior->siguiente; /* Insertamos el nuevo nodo después del nodo anterior */ nuevo->siguiente = anterior->siguiente; anterior->siguiente = nuevo; } } void eliminar(tbibliografia &b, char isbn[]){ pNodo anterior, nodo; nodo = b; crear(anterior); while(nodo && strcmp(nodo->t.isbn, isbn)<0) { anterior = nodo; nodo = nodo->siguiente; } if(!nodo || strcmp(nodo->t.isbn, isbn)!=0) return; else { /* Borrar el nodo */ if(!anterior) /* Primer elemento */ b = nodo->siguiente; else /* un elemento cualquiera */ anterior->siguiente = nodo->siguiente; free(nodo); } } bool bibliografiaSinLibros(tbibliografia b){ return (b == NULL); } void extraer(tbibliografia b, char isbn[], tlibro & l){ pNodo anterior; anterior = b; /* Avanzamos hasta el último elemento o hasta que el siguiente tenga un valor mayor de isbn*/ while(anterior->siguiente && strcmp(anterior->t.isbn,isbn) <=0){ if(strcmp(anterior->t.isbn,isbn) ==0) copiaLibro(l,anterior->t); anterior = anterior->siguiente; } } int numeroLibros (tbibliografia b){ pNodo anterior; anterior = b; int conta=0; /* Avanzamos hasta el último elemento */ while(anterior->siguiente){ conta++; anterior = anterior->siguiente; } return conta; } void extraerPosicion(tbibliografia b, int pos, tlibro &l){ pNodo anterior; anterior = b; int conta=0; while(anterior->siguiente && pos>=conta){ if(pos==conta) copiaLibro(l,anterior->t); conta++; anterior = anterior->siguiente; } } bool existe (tbibliografia b, char isbn[]){ pNodo anterior; anterior = b; bool sal=false; /* Avanzamos hasta el último elemento o hasta que el siguiente tenga un valor mayor de isbn*/ while(anterior->siguiente && strcmp(anterior->t.isbn,isbn) <=0){ if(strcmp(anterior->t.isbn,isbn)==0){ sal=true;} anterior = anterior->siguiente; } return sal; } void modificarAnoLibro(tbibliografia &b, char isbn[], int ano){ pNodo anterior; anterior = b; /* Avanzamos hasta el último elemento o hasta que el siguiente tenga un valor mayor de isbn*/ while(anterior->siguiente && strcmp(anterior->t.isbn,isbn) <=0){ if(strcmp(anterior->t.isbn,isbn) ==0){ anterior->t.ano=ano; } anterior = anterior->siguiente; } } void masNuevo(tbibliografia b, tlibro &l){ pNodo anterior; anterior = b; copiaLibro(l,anterior->t); anterior = anterior->siguiente; /* Avanzamos hasta el último elemento */ while(anterior->siguiente){ if(anterior->t.ano > l.ano) copiaLibro(l,anterior->t); anterior = anterior->siguiente; } }
este usalibro.cpp
Código
este es usalibro
#include "usalibro.h" void leerLibro(tlibro &t){//COMPROBADO char isbn[10]; char titulo[20]; int ano; cin.clear(); cout<<"Introduce el isbn del libro"<<endl; cin>>isbn; cout<<"Introduce el titulo del libro"<<endl; cin>>titulo; cout<<"Introduce el año de publicacion del libro"<<endl; cin>>ano; crearLibro(titulo,t,isbn,ano); } void mostrarLibro(tlibro t){ char isbn[10]; char titulo[20]; int ano; obtenerTitulo(titulo,t); obtenerAno(ano,t); obtenerisbn(isbn,t); cout<<isbn<<" "<<titulo<<" "<<ano<<endl; } void copiaLibro(tlibro &nuevo,tlibro t){ char isbn[10]; char titulo[20]; int ano; obtenerTitulo(titulo,t); obtenerAno(ano,t); obtenerisbn(isbn,t); crearLibro(titulo,nuevo,isbn,ano); }
Código
este libro.h
#ifndef USALIBRO_H_INCLUDED #define USALIBRO_H_INCLUDED #include <iostream> #include "libro.h" #include <cstring> using namespace std; void leerLibro(tlibro &t); void mostrarLibro(tlibro t); void copiaLibro(tlibro &nuevo, tlibro t); #endif
Código
este libro.cpp
#ifndef LIBRO_H_INCLUDED #define LIBRO_H_INCLUDED #include <iostream> #include <cstring> #include <stdio.h> #include <string.h> using namespace std; struct tlibro{ char isbn[10]; char titulo[20]; int ano; }; void crearLibro(char titulo[],tlibro &t,char isbn[],int ano); void modificarAno(int ano,tlibro &t); void obtenerTitulo(char titulo[],tlibro t); void obtenerAno(int &ano,tlibro t); void obtenerisbn(char isbn[],tlibro t); #endif
Código
#include "libro.h" void crearLibro(char titulo[],tlibro &t,char isbn[],int ano){//comprabado strcpy(t.isbn,isbn); strcpy(t.titulo,titulo); t.ano=ano; cout<<"sal"; }; void modificarAno(int ano,tlibro &t){ t.ano=ano; }; void obtenerTitulo(char titulo[],tlibro t){ strcpy(titulo,t.titulo); }; void obtenerAno(int &ano,tlibro t){ ano=t.ano; }; void obtenerisbn(char isbn[],tlibro t){ strcpy(isbn,t.isbn); };