6
« en: Marzo 18, 2016, 12:06:10 pm »
El usuario rollth hiso un gran trabajo en ayudar en otras funciones. El programa se basa en un registro de datos y en el menu hay una funcion eliminar los nodos ya registrado y cuando le doy eliminar me pide el codigo que ha sido registro en el nodo, lo coloco y al meter la variable me dice la condicion que la lista ha sido eliminada. El problema está que no lo borra, porque cuando abro el registro de los datos se crashea el programa y se cierra o a veces simplemente me aparece toda la lista que ha sido registrada anteriormente.
Código Completo del Registro
/*////////////////////////////////////////////////////////////////////////////////////////////////////////
* ///
* | | | | ///
* |--- , ' |--- , | ' ,---. |--- ,---. ,---. ,---. ///
* | | | | | | | | | | |---' | ,---| ///
* `---' ' `---' `---' ' `---' `---' `---' `---' `---^ ///
* ///
* Jose L. Montaner ///
* 24432283 ///
* 16/03/2016 ///
*///////////////////////////////////////////////////////////////////////////////////////////////
#include<stdlib.h>// Permite ingresar al archivo de cabecera estandar de libreria, que reconoce los system
#include<stdio.h>// Perime crear archivo de cabecera estandar de entrada y salida que reconoce los printf, fflush y scanf
#include<string.h> //Cadena de textos que se puede comprobar el valor de una cadenas
//-------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------
//-------------------------------------------------------------------------------------------------------
struct nodo //Declaración de "nodo" como una estructura de datos
{
char titulo[100];//caracte que posee una variable llamada "titulo", finalizando en punto y coma (;)
char autor [100];//caracte que posee una variable llamada "autor", finalizando en punto y coma (;)
int publicacion;//Entero que posee una variable llamada "publicacion",finalizando en punto y coma (;)
int codigo;//Entero que posee una variable llamada "Código",finalizando en punto y coma (;)
nodo *ant, *sig;//Declaración de "sig" de tipo nodo, se denota por (*) antes de la variables ant y sig
};//finaliza el bloque del struct y el punto y coma (;) indica
//--------------------------------------------------------------------------------------------------
typedef nodo lista; //Declaracion de "lista" como tipo nodo
lista *primero,*ultimo; //Declaración de punteros "primero" y "ultimo" de tipo lista
void menu();//Prototipo de función
void ingresar();//Prototipo de función
void mostrar();//Prototipo de función
void busquedatitulo();//Prototipo de función
void busquedaautor();//Prototipo de función
void busquedapublicacion();//Prototipo de función
void busquedacodigo();//Prototipo de función
void eliminar ();//propio de la funcion
//--------------------------------------------------------------------------------------------------
void ingresar() //
{ //inicio del bloque del void ingresar
system("cls");
lista *nuevo;
nuevo=new(nodo);//Se crea un nuevo nodo para la lista enlazada, new nuevo tipo de instruccion
system("cls");//Borrador de pantalla
printf("\n\n\n\t****************** INGRESAR DATOS ******************\n\n");
for (int i=0;i<1;i++)
{ // inicio del for
printf("Nombre del libro: ");// muestra el mensaje que se encuentra en comillas
fflush(stdin);//Limpiar buffer de entrada de datos
gets(nuevo->titulo);//Almacenar el titulo en el nuevo nodo
printf("autor: ");// muestra el mensaje que se encuentra en comillas
fflush(stdin);//Limpiar buffer de entrada de datos
gets(nuevo->autor);//Almacenar la vatiable autor en el nuevo nodo
printf("Año de publicacion: ");// muestra el mensaje que se encuentra en comillas
fflush(stdin);//Limpiar buffer de entrada de datos
scanf ("%i",&nuevo->publicacion);
printf("Ingrese los 3 codigo del libro: ");// muestra el mensaje que se encuentra en comillas
scanf ("%i",&nuevo->codigo);// entrada de dato con formato
}// finalizar el for
nuevo->sig=NULL; //nuevo es igual al sig y sig es igual a null
nuevo->ant=NULL;// el nuevo nodo de la lista no tiene un nodo anterior
if(primero==NULL)// estructura de control que indica Si el registro es el primero a ingresar
{//inicia el if
primero=nuevo; // entonces el nuevo nodo es tanto el primero..
ultimo=nuevo;// como el último
}
else //De no ser así
{
/*doblemente enlazado*/
ultimo->sig=nuevo; //Entonces el nodo anterior ahora apunta al nuevo
nuevo->ant=ultimo;// el nodo anterio es el ultimo
ultimo=nuevo; //Y el nuevo ahora es el último nodo de la lista
}
menu();//regresa al menu
}
//--------------------------------------------------------------------------------------------------
void mostrar()
{
system("cls"); //Borra pantalla
printf("\n\n\n\t****************** DATOS INGRESADOS ******************\n\n");
lista *i=ultimo;//Declaracion de puntero i y asignación del valor del primer nodo
while(i !=NULL)//Mientras que i(nodo) no esté vacio
{
printf("titulo:%s\n",i->titulo);//Mostrar el titulo almacenado en el nodo
printf("Autor:%s\n", i->autor);
printf("Publicacion:%i\n", i->publicacion);
printf("Codigo:%i\n", i->codigo);
printf("____________________________\n\n");
i=i->ant;// Pasar al siguiente nodo
}
system("pause>>null");//realiza una pause
menu();//regresa al menu
}
//-------------------------------------------------------------------------------------------------
void eliminar()
{
system ("cls");//Borrador de pantalla//
lista *i=primero;// creando nodo como auxiliar (i) para hacer comparacion o mostar
printf("\n\n\n\t****************** ELIMINAR LISTA ******************\n\n");
int e, codigoe;// Variable tipo entero
printf ("Imgrese el codigo a eliminar: ");
scanf ("%d",&codigoe); // escane el codigo y muestras
while (i!=NULL)//Mientras que i(nodo) no esté vacio
{
if (codigoe==i->codigo)
{
printf("titulo:%s\n",i->titulo);//Mostrar el nombre almacenado en el nodo actual
printf("Autor:%s\n", i->autor);
printf("Publicacion:%i\n", i->publicacion);
printf("Codigo:%i\n", i->codigo);
printf ("seguro desea elimnar presione 1: ");
scanf ("%i", &e);
break;
}
else
{
i=i->sig;
}
}
if (e==1)
{
delete i;
printf("\nLista borrada.");
}
system("pause>>null");
menu();
}
//--------------------------------------------------------------------------------------------------
void busquedatitulo()
{//inicia el bloque de void busquedatitulo
system ("cls");// borrador de pantalla
lista *i=primero;//Declaracion de puntero i y asignación del valor del primer nodo
char titulob [20];// Varianle tipo caracter
bool encontrado = false;
printf ("Ingrese el titulo del libro:");// muestra un mensaje
fflush(stdin);//sirve para limpiar el buffer de entrada de teclado
gets (titulob);//la funcion gets() te permite almacenar la cadena de caracteres que ingreses por teclado en el arreglo de caracteres que tengas creada
while (i!=NULL)
{
if (strcmp (titulob, i->titulo)==0) //hace comparacion con la funcion strcmp
{
printf("\ntitulo:%s\n",i->titulo);//Mostrar el titulo del libro ingresado
printf("Autor:%s\n", i->autor);//Muestra el nombre del autor
printf("Publicacion:%i\n", i->publicacion);// Muestra el año de publicacion
printf("Codigo:%i\n", i->codigo);//Muestra el codigo
printf("____________________________\n\n"); // muestra las barra
i=i->sig;
encontrado = true;
}
else {
i=i->sig;
}
}
if (encontrado == false){
printf("\n\t Titulo del libro no registrado \t");
}
system("pause>>null");
menu();
}//finaliza el bloque del voi busquedatitulo
//--------------------------------------------------------------------------------------------------
void busquedaautor()
{
system ("cls");
lista *i=primero;
char autorb [20];
bool encontrado = false;
printf ("Ingrese el nombre del autor:");// muestra el mensaje que se encuentra en comillas
printf("\n");
fflush(stdin);
gets (autorb);
while (i!=NULL)
{
if (strcmp (autorb, i->autor)==0)
{
printf("titulo:%s\n\n",i->titulo);//Mostrar el titulo del libro ingresado
printf("Autor:%s\n", i->autor);//Muestra el nombre del autor
printf("Publicacion:%i\n", i->publicacion);// Muestra el año de publicacion
printf("Codigo:%i\n", i->codigo);//Muestra el codigo
printf("____________________________\n\n"); // muestra las barra
i=i->sig;
encontrado = true;
}
else {
i=i->sig;
}
}
if (encontrado == false){
printf("\n\t Autor no registrado\t");
}
system("pause>>null");
menu();
}
//--------------------------------------------------------------------------------------------------
void busquedapublicacion ()
{
system ("cls");
lista *i=primero;
printf ("Ingrese el año de publicacion: ");// muestra el mensaje que se encuentra en comillas
int publicacionb=0;
bool encontrado = false;
scanf ("%i",&publicacionb);
while (i !=NULL)
{
if (publicacionb==i->publicacion)
{
printf("titulo:%s\n",i->titulo);//Mostrar el titulo del libro ingresado
printf("Autor:%s\n", i->autor);//Muestra el nombre del autor
printf("Publicacion:%i\n", i->publicacion);// Muestra el año de publicacion
printf("Codigo:%i\n", i->codigo);//Muestra el codigo
printf("____________________________\n\n"); // muestra las barra
encontrado = true;
i=i->sig;
}
else {
i=i->sig;
}
}
if (encontrado == false){
printf("\n\t No se encuentra registado\t");
}
system("pause>>null");
menu();
}
//--------------------------------------------------------------------------------------------------
void busquedacodigo ()
{
system ("cls");
lista *i=primero;
printf("\n\n\n\t****************** BUSQUEDA ******************\n\n");
int codigo1;
bool encontrado = false;
printf ("Ingrese el codigo que desea buscar:");
scanf ("%i",&codigo1);
while (i !=NULL)
{
if (codigo1== i->codigo )
{
printf("titulo:%s\n",i->titulo);//Mostrar el titulo del libro ingresado
printf("Autor:%s\n", i->autor);//Muestra el nombre del autor
printf("Publicacion:%i\n", i->publicacion);// Muestra el año de publicacion
printf("Codigo:%i\n", i->codigo);//Muestra el codigo
break;
encontrado = true;
}
else if (codigo1!=0)
{
i=i->sig;
}
}
if (encontrado == false){
printf("\n\t No se encuentra registado\t");
}
system("pause>>null");
menu();
}
//--------------------------------------------------------------------------------------------------
void menu()
{ //inicia el void menu
system("cls");//borra el contenido de la pantalla
int op; //variable tipo entera op
printf("\n\n\n\t****************** CONTROL DE REGISTRO ******************\n\n");//muestra el mensaje que se encuentra en comillas
printf("\t\t\t1.-Ingresar libro\n");// muestra el mensaje que se encuentra en comillas
printf("\t\t\t2.-Mostrar Registros de libros\n");// muestra el mensaje que se encuentra en comillas
printf("\t\t\t3.-Buscar libro por titulo\n");// muestra el mensaje que se encuentra en comillas
printf("\t\t\t4.-Buscar libro por autor\n");// muestra el mensaje que se encuentra en comillas
printf("\t\t\t5.-buscar libro por codigo\n");// muestra el mensaje que se encuentra en comillas
printf("\t\t\t6.-Buscar libro por año de de publicacion\n");// muestra el mensaje que se encuentra en comillas
printf("\t\t\t7.-Eliminar libro del registro\n");// muestra el mensaje que se encuentra en comillas
printf("\t\t\t8.-Salir\n\n");// muestra el mensaje que se encuentra en comillas
printf("\t\t\tSelecciona una opcion: ");// muestra el mensaje que se encuentra en comillas
scanf("%i",&op);
switch(op)
{//inicia el switch
case 1:
ingresar();
break;
case 2:
mostrar();
system("pause>null");
menu();
break;
case 3:
busquedatitulo();
system("pause>null");
menu();
break;
case 4:
busquedaautor ();
system("pause>null");
menu();
break;
case 5:
busquedacodigo();
system("pause>null");
menu();
break;
case 6:
busquedapublicacion ();
system ("pause>>null");
menu ();
break;
case 7:
eliminar ();
system ("pause>>null");
menu ();
case 8:
system ("cls");
printf("\nGRACIAS POR UTILIZAR EL SISTEMA\n");
break;
while (op!=8);
default:
printf("\n\tOpcion invalidan\t");
printf("\n\t Seleccione un numero que se muestre en pantalla\n\t");
system("pause>null");
menu();
}//finaliza el switch
}//finaliza el void menu
//--------------------------------------------------------------------------------------------------
int main() //* Función principal *//
{
system("title Biblioteca Universal Alonso de Ojeda");
system("color 1f");
menu();
system("pause>null");
}
Función Eliminar
void eliminar()
{
system ("cls");//Borrador de pantalla//
lista *i=primero;// creando nodo como auxiliar (i) para hacer comparacion o mostar
printf("\n\n\n\t****************** ELIMINAR LISTA ******************\n\n");
int e, codigoe;// Variable tipo entero
printf ("Imgrese el codigo a eliminar: ");
scanf ("%d",&codigoe); // escane el codigo y muestras
while (i!=NULL)//Mientras que i(nodo) no esté vacio
{
if (codigoe==i->codigo)
{
printf("titulo:%s\n",i->titulo);//Mostrar el nombre almacenado en el nodo actual
printf("Autor:%s\n", i->autor);
printf("Publicacion:%i\n", i->publicacion);
printf("Codigo:%i\n", i->codigo);
printf ("seguro desea elimnar presione 1: ");
scanf ("%i", &e);
break;
}
else
{
i=i->sig;
}
}
if (e==1)
{
delete i;
printf("\nLista borrada.");
}
system("pause>>null");
menu();
}
La verdad es que necesito la ayuda, el programa lo tengo que presentar y defender hoy en la universidad y mi conocimiento con C es realmente limitado.
Saludos.