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.
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.
Código (c) [Seleccionar]
#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.