[C con Clase] ayuda

luis alfonso jimenez mejia viejolajimenez en gmail.com
Mie Nov 10 19:03:13 CET 2010


aqui  le anexo  un cvodigo parecido  que  hice  para  una biblioteca  ojo
solo tienes  que  cambiar  los  datos de  entrada  y ya  esta  este codigo
trabaja  sobre  memoria  dinamica  , si quieres  lo puedes  poner  a
trabajar  con  ficheros  y sera  mucho mejor

#include<iostream.h>
#include<stdlib.h>
#include<stdio.h>
#include<conio.h>
#include<string.h>

struct libro
{
char nomlib[50];
char autlib[50];
char editlib[50];
char  cod[30];
struct libro *sig;
struct libro *ant;
};
struct libro *final;
struct libro *ppio;

struct libro *buscar(char*);
void portada();
void ingresar(void);
void buscar(void);
void listar(void);
void eliminar(struct libro **, struct libro **);
void dl_insert(struct libro *i, struct libro **ppio, struct libro **final);
void leecad(char *, char *, int), mostrar(struct libro *);
void menu(void);
int main(void)
{
portada();
system("cls");
system("color 74");
ppio = final = NULL; //INICIALIZA LOS PUNTEROS
menu();

}


void menu(void)
{
system("cls");
int opc=0;
cout<<"\nInventario de Libro en la Biblioteca de TUCHIN\n\n";
do
{

cout<<"1. Introducir un libro" <<endl;
cout<<"2. Eliminar un libro" <<endl;
cout<<"3. Listar el archivo" <<endl;
cout<<"4. Buscar" <<endl;
cout<<"5. Salir" <<endl;
cout<<"\nIntroduce una opcion: ";
cin>>opc;

switch(opc)
{
case 1: ingresar(); //INTRODUCIR UN libro
break;
case 2: eliminar(&ppio, &final); //ELIMINA UNA DIRECCION
break;
case 3: listar();//MOSTRAR LA LISTA
break;
case 4: buscar();//ENCONTRAR UNA DIRECCION
break;
case 5: exit(0);
}




}while(opc!=5);
clrscr();

}


void ingresar(void)
{
struct libro *b;
char n;
system("cls");


b = (struct libro *)malloc(sizeof(struct libro));
do
  {
system("cls");
if(!b)
{
cout<<endl <<"no hay memoria";
return;
}

leecad("\nIntroduce el nombre del libro: ", b->nomlib, 50);
if(!b->nomlib[0]) break; //parar el proceso
leecad("Introduce el autor del libro: ", b->autlib, 50);
leecad("Introduce la editorial del libro: ", b->editlib, 50);
leecad("Introduce el codigo ISBN: ", b->cod,30);
dl_insert(b, &ppio, &final);
gotoxy(5,15);cout<<"Para introducir otro libro intro S/N"<<endl;
gotoxy(5,16);cin>>n;

}
while((n=='s')||(n=='S'));
menu();
clrscr();
}


void leecad(char *indic, char *s, int cont)
{
char p[255];
do
{
printf(indic);
fgets(p, 254, stdin);
}while(strlen(p) > cont);
p[strlen(p)-1] = 0; //Eliminar el salto de linea
strcpy(s, p);
}

void dl_insert(
struct libro *i, //nuevo elemento
struct libro **ppio, //primer elemento de la lista
struct libro **final //ultimo elemento de la lista
)
{
struct libro *ant, *p;
if(*final == NULL) //primer elemento de la lista
{
i->sig = NULL;
i->ant = NULL;
*final = i;
*ppio = i;
return;
}
p = *ppio; //principio de la lista
ant = NULL;
while(p)
{
if(strcmp(p->nomlib, i->nomlib) <0)
{
ant = p;
p = p->sig;
}
else
{
if(p->ant)
{
p->ant->sig = i;
i->sig = p;
i->ant = p->ant;
p->ant = i;
*ppio = i;
return;
}
i->sig = p; //nuevo primer elemento
i->ant = NULL;
p->ant = i;
*ppio = i;
return;
}
}
ant->sig = i; //ponerlo en el final
i->sig = NULL;
i->ant = ant;
*final = i;
}


void eliminar(struct libro **ppio, struct libro **final)
{
struct libro *b;
char s[80];
leecad("Introduce el nombre del libro: ", s, 30);
b = buscar(s);
if(b)
{
if(*ppio==b)
{
*ppio=b->sig;
if(*ppio) (*ppio)->ant =NULL;
else *final = NULL;
}
else
{
b->ant->sig = b->sig;
if(b != *final)
b->sig->ant = b->ant;
else
*final = b->ant;
}
free(b); //devolver la memoria al sistema
}
clrscr();
}


struct libro *buscar(char *nomlib)
{
struct libro *b;
b = ppio;
while(b)
{
if(!strcmp(nomlib, b->nomlib))
return b;
b = b->sig; //obtener siguiente direccion
}
cout<<"nombre no encontrado" <<endl;
return NULL; //no encontrado
}



void listar(void)
{
struct libro *b;
b = ppio;
while(b)
{
mostrar(b);
b = b->sig; //obtener la siguiente direccion
}
cout<<endl <<endl;
}


void mostrar(struct libro *b)
{
cout<<b->nomlib<<"-";
cout<<b->autlib<<"-";
cout<<b->editlib<<"-";
cout<<b->cod<<"-";
cout<<endl <<endl;
}

void buscar(void)
{
char nomlib[50];
struct libro *b;
cout<<"Introduce el nombre del libro a encontrar: ";
gets(nomlib);
b = buscar(nomlib);
if(!b)
cout<<"no encontrado";
else mostrar(b);
getch();
clrscr();
}
void portada()

{
system("color 73");
gotoxy(10,2);cout<<"ESTRUCTURA DE DATOS"<<endl;
gotoxy(10,6);cout<<"TRABAJO COLABORATIVO NO 2"<<endl;
gotoxy(10,9);cout<<"PROFESOR HERMES MOSQUERA"<<endl;
gotoxy(10,14);cout<<"ESCRITO By ISAAC GARCIA SALGADO"<<endl;
gotoxy(10,15);cout<<"UNIVERSIDAD NACIONAL ABIERTA Y A
DISTANCIA(UNAD)"<<endl;
gotoxy(10,19);system("pause");
system("cls");
gotoxy(10,2);cout<<"Postulado Semantico"<<endl;
gotoxy(10,8);cout<<"la biblioteca publica del municipio de  tuchin "<<endl;
gotoxy(10,9);cout<<"nesesita  crear  un software  para  que  haga el
inventario"<<endl;
gotoxy(10,10);cout<<"de  libros  que   tiene  la  biblioteca  en
stock"<<endl;
gotoxy(10,11);cout<<",por tanto se  contacta  la compañia  de soluciones
software"<<endl;
gotoxy(10,12);cout<<"softisaacs, tal programa  debe  incluir  el nombre del
libro"<<endl;
gotoxy(10,13);cout<<",autor,editorial y codigo isbn, tal programa
debe"<<endl;
gotoxy(10,14);cout<<"permitir  remocion libre de  libros,busqueda,"<<endl;
gotoxy(10,15);cout<<"eliminacion del stock,actualizacion y mostrar"<<endl;
gotoxy(10,16);cout<<"listado de libros."<<endl;
gotoxy(10,19);system("pause");

}





El 10 de noviembre de 2010 15:00, luis alfonso jimenez mejia <
viejolajimenez en gmail.com> escribió:

> eso lo haces  con una  lista doblemente  enlazada  o una estructura  tipo
> arbol, y trabajar  con memoria  dinamica
>
> El 7 de noviembre de 2010 23:56, james rojas arciniegas <
> james4521 en hotmail.com> escribió:
>
>>  hola a todo necesito una ayuda.
>> necesito crear un programa donde pueda ingresar cedula, numero historia
>> clinica, nombre y muchas otras cosas mas y que pueda ingrsar informacion,
>> modificar, buscar, eliminar.
>> c hoooooooo espero me colaboren
>>
>>
>> *James Rojas*
>>
>>
>>
>> _______________________________________________
>> Lista de correo Cconclase Cconclase en listas.conclase.net
>> http://listas.conclase.net/mailman/listinfo/cconclase_listas.conclase.net
>> Bajas: http://listas.conclase.net/index.php?gid=2&mnu=FAQ
>>
>
>
------------ próxima parte ------------
Se ha borrado un adjunto en formato HTML...
URL: <http://listas.conclase.net/pipermail/cconclase_listas.conclase.net/attachments/20101110/9a734574/attachment.html>


Más información sobre la lista de distribución Cconclase