Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ayuda con esto..

Estas en el tema de Ayuda con esto.. en el foro de C/C++ en Foros del Web. necesito ayuda para agregar una funcion para imprimir por impresora un archivo.. creo que mi cod tiene algunos errores...si lo arreglan mejor aun agreguen las ...
  #1 (permalink)  
Antiguo 13/07/2010, 11:26
 
Fecha de Ingreso: julio-2010
Mensajes: 16
Antigüedad: 13 años, 9 meses
Puntos: 0
Exclamación Ayuda con esto..

necesito ayuda para agregar una funcion para imprimir por impresora un archivo..
creo que mi cod tiene algunos errores...si lo arreglan mejor aun agreguen las bibliotecas..con me entraron en el mens


int selecc;

void insertar(void);
void lista (void);
void mostrar (void);
void borrar (void);
void guardar (void);
void recuperar (void);
void memo (void);
void visualizar ();
void cliente_menu();
void menu();
void opcion();

void memoria(void);

struct cliente *pantalla ();
struct cliente *buscar ();



struct pelicula *pantalla1 ();
struct pelicula *buscar1 ();

struct pelicula
{
char cod_pelicula[10];
char nombre_pelicula[20];
char genero[20];
char precio[10];
char alquilada[1];

struct pelicula *siguiente;
};

struct pelicula *uno, *novo, *indi;


struct cliente
{
char nombre [30];
char apellido [30];
char ci[15];
char telefono[10];
char domicilio[20];
char cd1[10];
char cd2[10];
char cd3[10];
char cd4[10];
char cd5[10];
char retiro[10];
char entrega[10];
char costo[10];


struct cliente *sigte;
};

struct cliente *primero, *nuevo, *indice;


void memo(void)
{
nuevo= (struct cliente *) malloc (sizeof (struct cliente));

if (nuevo == NULL)
{
printf ("\nEspacio insuficiente de memoria");
return;
}
if (primero == (struct cliente *) NULL)
primero = indice = nuevo;
else
{
indice = primero;

while (indice -> sigte!= (struct cliente *)NULL)
indice = indice ->sigte;
indice -> sigte =nuevo;
indice =nuevo;
}
}

main()
{
menu();
}

void menu ()
{
system("cls");
printf("\n\t -------MENU PRINCIPAL--------\n\n");
printf("\n\t 1.--- PELICULAS\n\n");
printf("\n\t 2.--- CLIENTES\n\n");
printf("\n\t 3.--- SALIR\n");
printf("\n\t -----------------------------\n");

fflush(stdin);
selecc=getch();
opcion();
}


void opcion()
{

switch(selecc)
{
case'1': system("cls");pelicula_menu();//crear despues
break;
case'2': system("cls");cliente_menu();
break;
case'3':exit(0);
}
}

void cliente_menu()
{
primero =(struct cliente *) NULL ;
while (TRUE)
{

puts("\n\t\t\t CONTROL DE CLIENTES");
puts("\t\t\tOJOS DORMIDOS DVD CLUB");
puts("\t\t\t**********************");
puts ("\n\t\t\t MENU");
puts ("\t\t ------------------------");
puts ("\t\t 1.------ DATOS DEL CLIENTE.");
puts ("\t\t 2.------ LISTAR TODOS LOS CLIENTES.");
puts ("\t\t 3.------ MOSTRAR DATOS POR CLIENTE.");
puts ("\t\t 4.------ BORRAR CLIENTE.");
puts ("\t\t 5.------ GUARDAR.");
puts ("\t\t 6.------ RECUPERAR.");
puts ("\t\t 7.------ MENU PRINCIPAL.");

switch (toupper (getche()))
{
case '1': insertar(); break;
case '2': lista(); break;
case '3': mostrar(); break;
case '4': borrar(); break;
case '5': guardar(); break;
case '6': recuperar(); break;
case '7': menu();
}
}
}


void insertar(void)
{

memo();
system("cls");

printf("\n\t\t NOMBRES: ");
gets(indice ->nombre);

printf ("\n\t\t APELLIDOS: ");
gets (indice -> apellido);

printf ("\n\t\t C_I Nro.: ");
gets (indice -> ci);

printf ("\n\t\t DOMICILIO: ");
gets (indice -> domicilio);

printf ("\n\t\t CD1<000>: ");
gets (indice -> cd1);

printf ("\n\t\t CD2<000>: ");
gets (indice -> cd2);

printf ("\n\t\t CD3<000>: ");
gets (indice -> cd3);

printf ("\n\t\t CD4<000>: ");
gets (indice -> cd4);

printf ("\n\t\t CD5<000>: ");
gets (indice -> cd5);


printf ("\n\t\t FECHA DE RETIRO <dd/mm/aa>: ");
gets (indice -> retiro);

printf ("\n\t\t FECHA DE ENTREGA<dd/mm/aa>: ");
gets (indice -> entrega);

printf ("\n\t\t COSTO: ");
gets (indice -> costo);

indice -> sigte = (struct cliente *) NULL;
}


void lista(void)
{
system("cls");
if (primero == (struct cliente *) NULL)
{
puts("\n Lista Vacia...");
return;
}
indice = primero;
do
{
visualizar (indice);
indice = indice->sigte;
}while (indice != (struct cliente *) NULL);
}


void visualizar(struct cliente *ver)
{
system("cls");
printf("\n\t Nombre: %s", ver -> nombre);
printf("\n\t Apellido: %s", ver -> apellido);
printf("\n\t C_I Nro.: %s", ver -> ci);
printf("\n\t Domicilio: %s", ver -> domicilio);
printf("\n\t CD1: %s", ver -> cd1);
printf("\n\t CD2: %s", ver -> cd2);
printf("\n\t CD3: %s", ver -> cd3);
printf("\n\t CD4: %s", ver -> cd4);
printf("\n\t CD5: %s", ver -> cd5);
printf("\n\t Fecha de retiro: %s", ver -> retiro);
printf("\n\t Fecha de entrega: %s", ver -> entrega);
printf("\n\t Costo: %s\n", ver -> costo);
printf("\n---------------------------------------------------\n\n");
}

void mostrar (void)
{

char inbuf [30];

system("cls");
printf("\nEscriba el NOMBRE a buscar: ");
while (kbhit());
gets (inbuf);
pantalla (inbuf);
}

void borrar (void)
{
struct cliente *borra;
char inbuf[30];

system("cls");
printf("\nEscriba el NOMBRE a borrar: ");

while (kbhit());
gets(inbuf);
borra=(struct cliente *)pantalla (inbuf);

if (borra==(struct cliente *)NULL) return;
printf("\n Desea BORRAR esta ficha.. s/n ");

switch (toupper (getch()))
{
case 'N': return ;
case 'S': break;
}

if (borra==primero) primero = primero -> sigte;
else
{
indice = primero;
while (indice -> sigte !=borra)
indice= indice -> sigte;
indice -> sigte = borra -> sigte;
}

free (borra);
}

void guardar (void)
{

FILE *almacena ;
char inbuf [20];

system("cls");
printf("\nAlmacenar con nombre.dat: ");

while (kbhit());
gets (inbuf);
if ((almacena= fopen (inbuf, "wb"))==NULL)
{
perror ("\n NO puedo abrir el fichero de datos... ");
return;
}
indice=primero;


do
{
fwrite(indice, sizeof(struct cliente),1,almacena);
indice= indice ->sigte;
}while (indice != (struct cliente *)NULL);

fclose (almacena);

}


void recuperar(void)
{

FILE *lee;
char inbuf[20];

system("cls");
printf("\nLeer datos del archivo nombre.dat: ");

while (kbhit());
gets (inbuf);
if ((lee= fopen (inbuf, "rb"))==NULL)
{
perror("\n Error de acceso ");
return;
}
memo();

do
{
indice ->sigte = nuevo;
indice= nuevo;
fread (indice, sizeof(struct cliente), 1, lee);
nuevo= (struct cliente *) malloc (sizeof(struct cliente));
}while (indice-> sigte != NULL);
fclose (lee);

}


struct cliente *busca(char *inbuf)
{
indice = primero;

system("cls");
while (indice)
{
if (!strcmp(inbuf, indice -> nombre)) return indice;
indice = indice -> sigte;
}
puts("\n Dato no encontrado.... ");
return NULL;
}


struct cliente *pantalla (char *n_dato)
{
struct cliente *dato;

system("cls");
puts("\t Buscando dato... ");
if (!(dato = (struct cliente *) busca (n_dato)))
{
puts("\n Dato no encontrado..." );
return NULL;
}
else visualizar(dato);
return dato;

}

void memoria(void)
{
novo= (struct pelicula *) malloc (sizeof (struct pelicula));

if (novo == NULL)
{
printf ("\nEspacio insuficiente de memoria");
return;
}
if (uno == (struct pelicula *) NULL)
uno = indi = novo;
else
{
indi = uno;

while (indi -> siguiente!= (struct pelicula *)NULL)
indi = indi ->siguiente;
indi -> siguiente =novo;
indi =novo;
}
}


v

Última edición por keiko007; 16/07/2010 a las 09:52
  #2 (permalink)  
Antiguo 14/07/2010, 21:28
 
Fecha de Ingreso: julio-2010
Mensajes: 16
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Ayuda con esto..

necesito para el viernes esta mierda....
nadie me puede ayudar???

quiero que me imprima en papel

Nombre: xxxxx
apellido: xxxxx
c_i: 000000

etc.
no tengo idea de como hacer para que mi puntero vaya a la estructura
  #3 (permalink)  
Antiguo 15/07/2010, 01:35
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Ayuda con esto..

yo lo puedo hacer, y no te cobro caro
  #4 (permalink)  
Antiguo 15/07/2010, 10:39
 
Fecha de Ingreso: julio-2010
Mensajes: 16
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Ayuda con esto..

jaj...core..cuanto es...no caroOO
  #5 (permalink)  
Antiguo 15/07/2010, 10:51
 
Fecha de Ingreso: julio-2010
Mensajes: 16
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Ayuda con esto..

jaj...no creo tener forma de pagarte aunque quisiera
estas muy lejos..jaja
  #6 (permalink)  
Antiguo 15/07/2010, 10:55
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Ayuda con esto..

fijate que tanto windows como linux tienen comandos para imprimir cosas sencillas. Como las que dijiste. En windows si no me equivoco el comando es print.

Y ahora para usar ese comando usa la instruccion System....
Ahora si, investiga en google, y cuando tengas algo formado te sigo ayudando.
  #7 (permalink)  
Antiguo 15/07/2010, 14:03
 
Fecha de Ingreso: julio-2010
Mensajes: 16
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Ayuda con esto..

gracias por tu respuesta...este es un cod q imprime un archivo..pero me lo imprime asi:
nombre========apellido=======etc
yo necesito de la otra forma que mostre
ah y tampoco logro adaptarlo como funcion

creo que para imprimirlo como quiero tengo
que acceder al c/ elemento a la vez..y este cod
accede al archivo y lo imprime

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

#define VOLCADO "\33"

main()
{
FILE *entrada, *salida;
char byte, nom[35];

system ("cls");
printf("\nNombre del archivo a imprimir: ");
gets(nom);

if((salida= fopen("PRN","wb"))==NULL)
{
puts("IMPRESORA NO PREPARADA....");
exit(1);
}
if((entrada= fopen(nom, "rb"))==NULL)
{
printf("\nEL ARCHIVO %s NO EXISTE..",nom);
exit(1);
}
while(!feof(entrada))
{
byte= fgetc(entrada);
fputc(byte, salida);
}
fputs(VOLCADO,salida);
fclose(entrada);

return 0;
}
  #8 (permalink)  
Antiguo 15/07/2010, 14:04
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Ayuda con esto..

paypal : D
  #9 (permalink)  
Antiguo 15/07/2010, 14:06
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Ayuda con esto..

quiero aclarar que no te cobro por la ayuda, opino igual que sam90, cuando tengas algo te ayudo
  #10 (permalink)  
Antiguo 15/07/2010, 14:07
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Ayuda con esto..

guardalo como quieres que se imprima en un fichero y luego mandas el fichero entero a imprecion
  #11 (permalink)  
Antiguo 15/07/2010, 14:36
 
Fecha de Ingreso: julio-2010
Mensajes: 16
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Ayuda con esto..

jaj...ya me lo guarda asi...
nombrefffffffffffffffffffffffffffffffffffffffapell idofffffffffffffffffffffffffffffetc

noc si al insertar ya lo hace asi o es cuando lo guardo.....
  #12 (permalink)  
Antiguo 15/07/2010, 15:10
 
Fecha de Ingreso: julio-2010
Mensajes: 16
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Ayuda con esto..

creo que la forma de cargar los datos esta el tema...pero como coño
ago para cargar bien...
  #13 (permalink)  
Antiguo 15/07/2010, 19:17
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Ayuda con esto..

mostranos como estas guardando los datos en ese archivo.......

Te sugiero que primero hagas unas pruebas simple de impresion. Supongo que ya las hiciste. Cuando logras calibrar bien eso, ahi segui con leer el archivo. Si te surge algun problema avisa.

PD: iwkillyou si no tenes ganas de ayudar, deja de insistir en que te paguen.
  #14 (permalink)  
Antiguo 15/07/2010, 20:01
 
Fecha de Ingreso: julio-2010
Mensajes: 153
Antigüedad: 13 años, 9 meses
Puntos: 1
Respuesta: Ayuda con esto..

Cita:
Iniciado por sam90 Ver Mensaje
PD: iwkillyou si no tenes ganas de ayudar, deja de insistir en que te paguen.
repito lo que ya dije

quiero aclarar que no te cobro por la ayuda, opino igual que sam90, cuando tengas algo te ayudo
  #15 (permalink)  
Antiguo 15/07/2010, 20:49
 
Fecha de Ingreso: julio-2010
Mensajes: 16
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Ayuda con esto..

iwkillyou ahi esta el codigo de como lo guardo...noc si esta bien...que opinas
  #16 (permalink)  
Antiguo 15/07/2010, 21:00
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Ayuda con esto..

Bien, tu problema esta en que en el archivo se genera caracteres basura.


Tu problema reside en que estas guardando la estructura completa. Fijate por ejemplo struct cliente tiene un campo llamado nombre de tamaño 30.

Supongamos ahora que ingreso el nombre del cliente que tiene un tamaño de 10 caracteres. Por cosecuencia existe los restantes 20 caracteres que se almacenan valores basuras, y al momento de guardarlos tambien son escritos.

Una modificacion seria al momento de guardar, ir variable por variable.

Código C++:
Ver original
  1. void guardar (void)
  2. {
  3.  
  4. FILE *almacena ;
  5. char inbuf [20];
  6.  
  7. system("cls");
  8. printf("\nAlmacenar con nombre.dat: ");
  9.  
  10. while (kbhit());
  11. gets (inbuf);
  12. if ((almacena= fopen (inbuf, "wb"))==NULL)
  13. {
  14. perror ("\n NO puedo abrir el fichero de datos... ");
  15. return;
  16. }
  17. indice=primero;
  18.  
  19.  
  20. do
  21. {
  22. //fwrite(indice, sizeof(struct cliente),1,almacena);
  23. fprintf(almacena,"%s\n",indice->nombre);
  24. fprintf(almacena,"%s\n",indice->apellido);
  25.  
  26. indice= indice ->sigte;
  27. }while (indice != (struct cliente *)NULL);
  28.  
  29. fclose (almacena);
  30.  
  31. }
  #17 (permalink)  
Antiguo 15/07/2010, 21:40
 
Fecha de Ingreso: julio-2010
Mensajes: 16
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Ayuda con esto..

jaj
GRACIAS LOCO.....!!!!ME ESTAS SALVANDO DE UNAAAAAAAA
FUNCIONA ASI.....
noc como carajo agradecerte......mañana recien pruebo
en una puta impresora porq no cuento con una que sea paralelo
jaja...disculpa que haya sido tan pesado con esto....
  #18 (permalink)  
Antiguo 16/07/2010, 09:06
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Ayuda con esto..

De nada... cuando lo pruebes en una impresora, contanos como salio....

Por el tipo de ejercicio estimo que es para la facultad o escuela. Sugiero que te acostumbre a ir a clases de consulta y preguntar sobre estas cosas. Ya que despues de todo deberia ser material dado en clase.
  #19 (permalink)  
Antiguo 16/07/2010, 09:56
 
Fecha de Ingreso: julio-2010
Mensajes: 16
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Ayuda con esto..

la impresion ya sale como queria..bueno por lo
menos basicamente..ya es solo cuestion de jugar
un poco para mejorarlo...gracias
estamos empezando con eso en la facultad
pasa que el prof no llego a desarrollar eso..
pero el muy boludo quiere asi..con la impresion
ahora estoy teniendo problemas con recuperar
todos ficheros despues de salir del programa...para despues poder buscar ficheros individuales...
  #20 (permalink)  
Antiguo 16/07/2010, 10:24
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Ayuda con esto..

Pasa que ahora guardaste los datos de otra forma. Entonces no te sirve leer la estructura completa. Prueba asi:


fscanf(archivo,"%s",indice->nombre);
fscanf(archivo,"%s",indice->apellido);


Sino te recomendaria que el guardar lo dejes como estaba antes....y para imprimi hagas un caso especial, y en vez de guardarlo al archivo lo pasas a la impresora. Algo asi seria:

fprintf(impresora,"%s\n",indice->nombre);
fprintf(impresoria,"%s\n",indice->apellido);

antes deberias abriri el archivo de la impresora. Bueno estos son distintos metodos, fijate cual te convence mas.
  #21 (permalink)  
Antiguo 16/07/2010, 11:23
 
Fecha de Ingreso: julio-2010
Mensajes: 16
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Ayuda con esto..

este es el cod que hice....noc donde me equivoco...
si no existe..sale el mens de error...pero despues
no hace nada y sale la ventana de error y sale del progr


void recuperar(void)
{

FILE *f;
char nombre[20];


printf("\nNombre del fichero: ");
while (kbhit());
gets(nombre);

if ((f= fopen(nombre, "rb"))== NULL)
{
perror ("\n NO puedo abrir el fichero de datos... ");
return ;
}

indice=primero;
while(!feof(f))
{
fscanf(f, "%s ", indice->nombre);
fscanf(f, "%s ", indice->apellido);
indice= indice ->sigte;
}
fclose(f);
}
  #22 (permalink)  
Antiguo 16/07/2010, 11:30
 
Fecha de Ingreso: abril-2010
Ubicación: Rosario
Mensajes: 1.850
Antigüedad: 14 años
Puntos: 228
Respuesta: Ayuda con esto..

Que errores da? Que tenes adentro del archivo?
  #23 (permalink)  
Antiguo 16/07/2010, 11:36
 
Fecha de Ingreso: julio-2010
Mensajes: 16
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Ayuda con esto..

aparece la ventana esa de enviar errores a microsoft...
nombre, apellido, y otros seis datos mas..
  #24 (permalink)  
Antiguo 16/07/2010, 11:58
 
Fecha de Ingreso: julio-2010
Mensajes: 16
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Ayuda con esto..

sali de una entre en otra..jajaja
  #25 (permalink)  
Antiguo 16/07/2010, 15:28
 
Fecha de Ingreso: julio-2010
Mensajes: 16
Antigüedad: 13 años, 9 meses
Puntos: 0
Respuesta: Ayuda con esto..

este es otro cod que ejecuta sin problemas...pero cuando imprime en pantalla
"fichero encontrado" se queda colgado y no vuelve al menu para verificar si
realmente encontro o no el fichero.....ya me esta jodiendo esto..encima mañana lo tengo que presentar...

void recuperar(void)
{

FILE *f;
char nombre[20];


printf("\nNombre del fichero: ");
while (kbhit());
gets(nombre);

if ((f= fopen(nombre, "rb"))== NULL)
{
perror ("\n NO puedo abrir el fichero de datos... ");
return ;
}
if(f)
{
printf("\nFichero encontrado..\n");
}
memo();

indice= primero;
do
{
fscanf(f,"%s %s\n",indice->nombre, indice->apellido);
fscanf(f,"%s\n",indice->ci);
......
indice ->sigte = nuevo;
indice= nuevo;
nuevo= (struct cliente *) malloc (sizeof(struct cliente));
}while (indice-> sigte != NULL);
fclose (f);

}
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:41.