Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - the_jocker

#21
Buenas, estoy de nuevo, lo modifique al programa un cachito y segui el consejo y lo separe en funciones, lo muestro para que lo vean y me den una mano para continuar.

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

FILE *ventas;
FILE *stock;
FILE *clientes;

float VENTAS_CONTADO(FILE *ventas1, FILE *stock1, FILE *clientes1);
float VENTAS_CTACTE(FILE *ventas1, FILE *stock1, FILE *clientes1);
void ALTAS_ARTICULOS(FILE *stock1);
void CONSULTA_ARTICULOS(FILE *stock1);
void ALTAS_CLIENTES(FILE *clientes1);
void CONSULTA_CLIENTES(FILE *clientes1);

main()
{
/*op,v,cl,st son variables para la eleccion de la opreacio*/
int op,v,cl,st;
float cta,cont;
printf("\nBienvenido/a: ");
printf("\nIngrese la opcion: ");
printf("\n1 - VENTAS ");
printf("\n2 - STOCK");
printf("\n3 - CLIENTES");
printf("\n0 - SALIR: ");
scanf("%d",&op);
while(op != 0)
{
switch(op)
{
case 0:
return 0;
case 1:
if(op == 1)
{
printf("\n___________________________");
printf("\nBienvenido al modulo de ventas: ");
printf("\nEscoja la opcion: ");
printf("\n1 - Ventas Contado");
printf("\n2 - Ventas Cuenta Corriente");
printf("\n0 - Salir: ");
scanf("%d",&v);
printf("\n___________________________\n");
switch(v)
{
case 0:
return 0;
case 1:
if(v == 1)
cont = VENTAS_CONTADO(ventas,clientes,stock);
break;
case 2:
if(v == 2)
cta = VENTAS_CTACTE(ventas,clientes,stock);
break;
default:
printf("\nSu opcion no es correcta\n");
break;
}
}
break;
case 2:
if(op == 2)
{
printf("\n____________________________");
printf("\nBienvenidoal modulo de stock: ");
printf("\nEscoja la opcion: ");
printf("\n1 - Alta de un articulo");
printf("\n2 - Consulta de un articulo ");
printf("\n0 - Salir: ");
scanf("%d",&st);
printf("\n___________________________\n");
switch(st)
{
case 0:
return 0;
break;
case 1:
if(st == 1)
ALTAS_ARTICULOS(stock);
break;
case 2:
if(st == 2)
CONSULTA_ARTICULOS(stock);
break;
default:
printf("\nLa opcion no es correcta ");
break;
}
break;
}
case 3:
if(op == 3)
{
printf("\n___________________________");
printf("\nBienvenido al modulo de clientes");
printf("\nEscoja la opcion: ");
printf("\n1 - Alta de un cliente");
printf("\n2 - Consulta de un cliente");
printf("\n0 - Salir: ");
scanf("%d",&cl);
printf("\n____________________________\n");
switch(cl)
{
case 0:
return 0;
break;
case 1:
if(cl == 1)
{
ALTAS_CLIENTES(clientes);
}
break;
case 2:
if(cl == 2)
CONSULTA_CLIENTES(clientes);
break;
default:
printf("\nLa opcion no es correcta ");
break;
}
}
break;
default:
printf("\nLa opcion ingresada no es correcta");
break;
}
printf("\n_____________________");
printf("\nBienvenido/a: ");
printf("\nIngrese la opcion: ");
printf("\n1 - VENTAS ");
printf("\n2 - STOCK");
printf("\n3 - CLIENTES");
printf("\n0 - SALIR: ");
scanf("%d",&op);
printf("\n_______________________\n");
}
}

void ALTAS_ARTICULOS(FILE *stock1)
{
int cantidad,codigo;
float precio;
char art[50];
cantidad = 0;codigo = 0; precio = 0;
stock1 = fopen("Stock.dat","ab");//Solo escribir el archivo, en caso de existir escribe al final
printf("\nIngrese el codigo del articulo: ");
scanf("%d",&codigo);
while(codigo != 0)
{
printf("\nIngresar el nombre del articulo y una breve descripcion: ");
scanf("%s",art);
printf("\nIngrese la cantidad: ");
scanf("%d",&cantidad);
printf("\nIngrese el precio: ");
scanf("%f",&precio);
fwrite(&codigo,sizeof(int),1,stock1);
fwrite(&art,sizeof(art),1,stock1);
fwrite(&cantidad,sizeof(int),1,stock1);
fwrite(&precio,sizeof(float),1,stock1);
printf("\nIngresar el codigo del articulo: ");
scanf("%d",&codigo);
}
fclose(stock1);
printf("\nEl/los articulos fueron guardados con exito\n");
}

void CONSULTA_ARTICULOS(FILE *stock1)
{/*Funcion que hace lo mismo que CONSULTA_CLIENTES */
int codigo,cantidad,x;
float precio;
char art[50];
stock1 = fopen("Stock.dat","rb");//rb para solo lectura ya que el archivo existe
printf("\nIngrese el codigo del articulo: ");
scanf("%d",&codigo);
fread(&x,sizeof(int),1,stock1);
fread(&precio,sizeof(float),1,stock1);
fread(&cantidad,sizeof(int),1,stock1);
fread(&art,sizeof(art),1,stock1);
while(!feof(stock1))
{
if(codigo == x)
{
printf("\n____________________");
printf("\nCodigo: %d",codigo);
printf("\nDescripcion: %s",art);
printf("\nCantidad: %d",cantidad);
printf("\nPrecio: %.2f",precio);
printf("\n____________________\n");
fseek(stock1,2,SEEK_END);
}
fread(&x,sizeof(int),1,stock1);
fread(&precio,sizeof(float),1,stock1);
fread(&cantidad,sizeof(int),1,stock1);
fread(&art,sizeof(art),1,stock1);
}
fclose(stock1);
}

void ALTAS_CLIENTES(FILE *clientes1)
{
char nombre[50];
int cod;
float saldo;
clientes1 = fopen("Clientes.dat","ab");//Solo escribir el archivo, en caso de existir escribe al final
printf("\nIngrese el codigo de identificacion del cliente: ");
scanf("%d",&cod);
while(cod != 0)
{
printf("\nIngrese el nombre del cliente: ");
scanf("%s",nombre);
printf("\nIngrese el saldo de tener alguno: ");
scanf("%f",&saldo);
fwrite(&saldo,sizeof(float),1,clientes1);
fwrite(&cod,sizeof(int),1,clientes1);
fwrite(&nombre,sizeof(nombre),1,clientes1);
printf("\nIngrese el codigo: ");
scanf("%d",&cod);
}
fclose(clientes1);
}

void CONSULTA_CLIENTES(FILE *clientes1)
{
/*Funcion que busca por codigo y si encuentra imprime codigo,nombre y
saldo y posiciona la lectura al final del archivo */
int cod,x;
float saldo;
char nombre[50];
saldo = 0;
clientes1 = fopen("Clientes.dat","rb");//rb para solo lectura ya que el archivo existe
printf("\nIngrese el codigo de idectificacion del cliente: ");
scanf("%d",&cod);
fread(&saldo,sizeof(float),1,clientes1);
fread(&x,sizeof(int),1,clientes1);
fread(&nombre,sizeof(nombre),1,clientes1);
while(!feof(clientes1))
{
if(cod == x)
{
printf("\n________________");
printf("\nCodigo: %d",cod);
printf("\nNombre %s",nombre);
printf("\nSaldo: %.2f",saldo);
printf("\n__________________\n");
fseek(clientes1,2,SEEK_END);
}
fread(&saldo,sizeof(float),1,clientes1);
fread(&x,sizeof(int),1,clientes1);
fread(&nombre,sizeof(nombre),1,clientes1);
}
fclose(clientes1);
}

float VENTAS_CONTADO(FILE *ventas1, FILE *stock1, FILE *clientes1)
{
}

float VENTAS_CTACTE(FILE *ventas1, FILE *stock1, FILE *clientes1)
{
}


Como veran, esta un poco mejor y estoy manejando las exepciones, pero yo de la unica forma de leer y escribir un archivo es esa, no se de estructuras, ya lo voy a mejorar, pero sigo con el problema de la lectura, me esta costando y todavia faltan las funciones mas importantes com las ventas.Gracias a todos por ayudarme.
#22
Eso es lo que quiero, muchas gracias por hacer criticas, si bien es cierto lo del progrma, es el primer proyecto por asi decir en el que me meto de lleno, lo de los vectores es cierto, archivos los vi bien y el problema es que como bien lo marcas la falla en el ciclo para volver a leer, no lo puedo solucionar, ya que el problema está en donde lo ubico a la apertura del archivo para que cuando se seleccione esa opción se lo pueda leer correctamente, más preciso yo queria poner los datos en un vector, para no usar tantas variables, y comparar con un for, pero me es imposible, los archivos ademas son como bd en el programa, gracias de verdad por las criticas.
#23
Buenas, de nuevo, siempre tengo mas dudas de las que puedo solucionar, pero bueno, resulta de que mi vieja cumple años, y tiene un negocio, yo le prometi un programa, es pequeño el negocio, osea que no necesita un super software, lo pongo aqui por que lo estoy haciendo en c, bien voy a postear el codigo, en realidad el problema radica en la lectura de los archivos, tengo 3, uno para ventas, uno para el stock y el ultimo para clientes, es bastante entendible el codigo, para que no haya confusión, recien estoy aprendiendo vectores, asi que estructuras y demás todavia no, las funciones se preguntaran porque son void, bueno en realidad, no devuelven nada, hacen trabajos pero no devuelven nada, se que es un mala practica de programación, ya lo voy a corregir, posteo el codigo y les digo que pasa:


#include <stdio.h>
#include <string.h>

void STOCK(FILE *stock1);
void CLIENTES(FILE *clientes1);

main()
{
FILE *clientes;
FILE *stock;
int op,cod,v,cantidad,cl;/*v y cl Variable para la la opcion del modulo de stock y clientes*/
char descripcion[100] = "";
char nombre[100] = "";
float total,precio,saldo;
clientes = fopen("Clientes.dat","wb");
stock = fopen("Stock.dat","wb");
printf("\n____________________");
printf("\nBienvenido/a: ");
printf("\nEscoja su opcion: ");
printf("\n1 - Ventas: ");
printf("\n2 - Stock: ");
printf("\n3 - Clientes: ");
printf("\n0 - Salir");
printf("\nSu opcion es: ");
scanf("%d",&op);
printf("\n___________________\n");
while(op != 0)
{
if(op == 1)
{
}
if(op == 2)
{
printf("\nBienvenido al modulo de stock");
printf("\n_______________________");
printf("\nElija su opcion: ");
printf("\n1 - Alta de un articulo: ");
printf("\n2 - Consulta de un articulo: ");
printf("\n3 - Modificar el inventario: ");
printf("\n0 - Salir del modulo de Stock: ");
scanf("%d",&v);
printf("\n_______________________\n");
if(v == 1)
{
printf("\nIngrese el codigo del producto: ");
scanf("%d",&cod);
while(cod != 0)
{
printf("\nIngrese el nombre y la descripcion: ");
scanf("%s",descripcion);
printf("\nIngrese la cantidad: ");
scanf("%d",&cantidad);
printf("\nIngrese el precio del articulo: ");
scanf("%f",&precio);
printf("\n__________________________\n");
fwrite(&cod,sizeof(int),1,stock);
fwrite(&descripcion,sizeof(int),1,stock);
fwrite(&cantidad,sizeof(int),1,stock);
fwrite(&precio,sizeof(int),1,stock);
printf("\nIngrese el codigo del articulo: ");
scanf("%d",&cod);
}
fclose(stock);
printf("\nEl articulo fue guardado con exito\n");
}
if(v == 2)
{
STOCK(stock);
}
}
if(op == 3)
{
printf("\n________________________");
printf("\nBienvenido al modulo de clientes: ");
printf("\nSeleccione su opcion: ");
printf("\n1 - Alta de un cliente");
printf("\n2 - Consulta de un cliente");
printf("\n0 - Salir: ");
scanf("%d",&cl);
printf("\n_________________________\n");
while(cl != 0)
{
printf("\nIngrese el nombre y apellido: ");
scanf("%s",nombre);
while(nombre != NULL)
{
printf("\nIngrese el saldo de tener alguno: ");
scanf("%f",&saldo);
fwrite(&nombre,sizeof(int),1,clientes);
fwrite(&saldo,sizeof(int),1,clientes);
printf("\nIngrese el nombre y apellido: ");
scanf("%s",nombre);
}
fclose(clientes);
}
}
printf("\n____________________");
printf("\nBienvenido/a ");
printf("\nEscoja su opcion: ");
printf("\n1 - Ventas ");
printf("\n2 - Stock ");
printf("\n3 - Clientes ");
printf("\n0 - Salir");
printf("\nSu opcion es: ");
scanf("%d",&op);
printf("___________________\n");
}
return 0;
}

void STOCK(FILE *stock1)
{
int cod,cantidad;
int x;/*Variable para extraer los datos del archivo.*/
char descripcion[50] = "";
float precio;
x = 0;
precio = 0;
cantidad = 0;
printf("\nIngrese el codigo del articulo: ");
scanf("%d",&cod);
stock1 = fopen("Stock.dat","r+b");
fread(&x,sizeof(int),1,stock1);
while(!feof(stock1))
{
if(x == cod)
{
printf("\n_____________________");
printf("\nCodigo: %d",cod);
printf("\nArticulo: %s",descripcion);
printf("\nCantidad: %d",cantidad);
printf("\nPrecio: %.2f",precio);
printf("\n_____________________\n");
fseek(stock1,2,SEEK_END);
}
fread(&x,sizeof(int),1,stock1);
}
fclose(stock1);
}

void CLIENTES(FILE *clientes1)
{
int op,n;
char x[100] = "";
float saldo;
char nombre[50] = "";
clientes1 = fopen("Clientes.dat","r+b");
printf("\nIngresar el nombre del cliente: ");
scanf("%s",nombre);
fread(&x,sizeof(int),1,clientes1);
while(!feof(clientes1))
{
if(x == nombre)
{
printf("\nNombre: %s",nombre);
printf("\nSaldo %.2f",saldo);
fseek(clientes1,2,SEEK_END);
}
fread(&x,sizeof(int),1,clientes1);
}
fclose(clientes1);
}


Como dije es bastante entendible, creo. Pero el problema esta en las funciones,cuando yo en el main cargo los datos del producto por ejemplo, cuando elijo consultar, lo comparo y me encuentra el código, pero no me muestra nada más que el codigo, cuando la carga y la consulta la hacia dentro de la funcion stock lo podia consultar bien, bueno como está, lo que yo no puedo es, nose si podra, leer en linea,nose si me explico.
código - nombre - cantidad - precio. Y de ahí comparar,para poder imprimir, y en la funcion clientes, ingreso el nombre y probe de mil formas no puedo salir del ciclo, osea, si presiono 0 no sale, si lo dejo en blanco no sale, si pongo una letra no sale, Desde ya gracias a todos.
#24
Yo use un tiempo el geany, pero lo deje porque no me compilaba C, y le dije hasta la vista baby, por eso uso nano.
#25
Muchas gracias a todos por las respuestas, en realidad el problema lo solucione invocando manualmente las cabeceras, como math.h y lo hice gcc xxx.c -o xxx.exe -lm y anduvo de maravilla martinez, entonces a la otra pregunta si estoy aprendiendo C, pero creo que la razón por la cual se les paso a todos es que el dev guardan los  archivos .cpp entonces compilan y no hay ningún problema, si le cambias la extensión ahí se ven los errores, como yo edito con nano y compilo con gcc me saltaron como leche hervida, gracias por las respuestas.
#26
Es cierto, por ahí soy medio gil para explicarme, el dev-c++ el archivo .c como lo dejamos al final funcion, es decir con los apuntadore, compila bien, y de la otra forma con el archivo cambiado con los & y .cpp tambien me lo toma bien, en la consola me da problemas con la libreria math.h porque el error me lo marca en sqrt y pow, nose porque, no me animo a opinar ya que nose si vienen activado por defecto o no. Gracias.
#27
Es correcto lo que decis, es que en la facultad donde estoy son muy wondows-dependientes, entonces tengo que preogramar en dev-c++ y usar programas asi, entonces los archivos que se crean son cpp, los compila el dev-c++ y los ejecuta, es obvio que aqui en linux todo lo que se me permite en dev no me lo permite el gcc, aún asi no me quedo con esta solución, voy a entregar el trabajo asi como ellos me lo piden pero por mi cuenta quiero saber por que no me sale. Pero igual tenés razón. Gracias.
#28
Si lo compile con g++ y no me chisto nada, pero voy a probar lo que decis, cualquier cosa lo posteo, gracias por tu ayuda hermano.
#29
avesudra, genial lo tuyo, yo ni me había percatado de la extensión del archivo, claro, los archivos son cpp, asi compilan perfecto sin ningun problema, pero aqui como es c puro no lo agarra ni en pedo, es decir que el error sigue, me dice que no esta definida sqrt ni pow, pero ahora me di cuenta recian gracias.
#30
Gracias por responder, lo del editor nose, me gusta la pantalla negra, es todo, nano es mi amigo, pero volviendo al problema entiendo lo que me dicen con lo del los apuntadores, ahora todos en la facultad lo hacen con el dev-c++, y les funciona como yo lo tenia, posteo lo que tengo y les muestro el error:

#include <stdio.h>
#include <math.h>

void opera(int n1, int m1, float *raiz1, int *potencia1);

main()
{
        int n,m,potencia;
        float raiz;
        printf("Ingresar un valor para n: ");
        scanf("%d",&n);
        printf("\nIngrese un valor para m: ");
        scanf("%d",&m);
        opera(n,m,&raiz,&potencia);
        printf("\nLa raiz de n es: %.2f",raiz);
        printf("\nLa potencia de n elevado a la m es: %d\n",potencia);
}
void opera(int n1, int m1, float *raiz1, int *potencia1)
{
        *raiz1 = 0;
        *potencia1 = 0;
        *raiz1 = sqrt(n1);
        *potencia1 = pow(n1,m1);
}



Este es lo que me sale


/tmp/cc4qmQWd.o: In function `opera':
ejemplo.c:(.text+0xee): undefined reference to `sqrt'
ejemplo.c:(.text+0x10d): undefined reference to `pow'
collect2: ld devolvió el estado de salida 1