Galera beleza, to precisando de ajuda na elaboração de um trabalho. Meu projeto e um programa de cadastro de produtos, estou fazendo o registro dos mesmos em pilhas, preciso criar uma opção que faça busca destes produtos na pilha, por exemplo buscar pelo codigo do produto e ele exibir o registro completo do produto, criei uma opçaõ de ver a pilha completa mas tambem preciso da opção de busca pois é exigida no projeto. Alem disso esta tendo erros para salvar os dados em um arquivo txt, o programa roda normalmente mas sempre da que o arquivo não foi encontrado mesmo ja sendo criado e adicionado na mesma pasta. Se alguém puder solucionar este problemas para mim eu ficaria muito grato!
#include <iostream>
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <locale.h>
using namespace std;
typedef struct cadastro
{
char produto[30];
int codigo;
int quant;
char valor;
struct cadastro *estoque;
} cadastro;
cadastro *lista, *topo = NULL;
int i=0;
int n;
FILE *arquivo;
void inserir()
{ printf ("\n\n Quantos produtos deseja cadastrar?: ");
scanf ("%d",&n);
for (i=0; i<n; i++)
{
lista=(cadastro *) malloc (2*sizeof(cadastro));
fflush(stdin);
printf("\n\n Produto: ");
gets(lista->produto);
printf(" Codigo: ");
scanf("%d",&lista->codigo);
printf(" Quantidade: ");
scanf("%d",&lista->quant);
printf(" Valor: R$");
scanf("%f",&lista->valor);
lista->estoque=NULL;
if(topo==NULL) //pilha vazia?
{
topo=lista;
}
else
{
lista->estoque=topo;
topo=lista;
}
}
}
void imprimir ()
{
cadastro *tmp;
tmp=topo;
if (tmp==NULL) //aqui ele testa p/ saber se a pilha está vazia
{
printf ("\n\n PILHA VAZIA! INSIRA UM DADO E TENTE NOVAMENTE.\n");
}
else
{
while (tmp!=NULL)
{
printf("\n\n Produto: %s\n", tmp->produto);
printf(" Codigo: %d\n",tmp->codigo);
printf(" Quantidade: %d\n",tmp->quant);
printf(" Valor: R$%0.2f\n\n",tmp->valor);
tmp=tmp->estoque;
}
}
}
void deletar ()
{
char alerta;
cadastro *del;
del = topo;
if (topo == NULL)
{
printf ("\n\n Pilha vazia!\n");
}
else
{
printf("\n\n Tem certeza que deseja excluir pilha? (S/N): ");
scanf("%c",&alerta);
//tolower
if (alerta=='s')
{
topo = topo -> estoque;
free(del);
printf("\n Pilha apagada! \n");
}
if (alerta=='n')
{
printf("\n Pilha apagada! \n");
}
if (alerta!='s' && alerta!='n')
{
printf("\n\n Opcao invalida\n");
}
}
}
void buscar()
{
// ?????
}
void backup ()
{
FILE *arquivo;
cadastro *tmp;
tmp = topo;
arquivo=fopen("estoque.txt","wb");
if(arquivo==NULL)
{printf("\n Erro na abertura do arquivo \n");
}else{
if(tmp==NULL)
{printf("\n Erro ao salvar pois a pilha esta vazia \n");
}
while (tmp!=NULL)
{
fprintf(arquivo,"\n\n Produto: %s \n",tmp->produto);
fprintf(arquivo," Codigo: %d \n",tmp->codigo);
fprintf(arquivo," Quantidade: %d \n",tmp->quant);
fprintf(arquivo," Valor: %f ",tmp->valor);
tmp=tmp->estoque;
}
fclose(arquivo);
printf("\n\n ARQUIVO SALVO COM SUCESSO!\n");
}
}
int main ()
{
char op_menu=0, op_menu_interno=0;
do
{//Menu
printf("\n\t____________________\n\n\tREGISTRO DE PRODUTOS\n\t____________________\n\n\n");
printf("\t1 - Cadastro\n");
printf("\t2 - Ver cadastros\n");
printf("\t3 - Excluir cadastro\n");
printf("\t4 - Buscar produto\n");
printf("\t5 - Copiar (Backup)\n");
printf("\t6 - Sair\n\n");
printf("\tInforme a opcao desejada: ");
scanf("%d",&op_menu );
op_menu=tolower(op_menu);
fflush(stdin);
switch(op_menu)
{
case 1 :
fflush(stdin);
system("cls"); //limpa a tela
inserir();
printf("\n");
do
{
printf(" 0 - Menu principal: ");
scanf("%s",&op_menu_interno);
}
while (op_menu_interno!='0');
system("cls");
break;
fflush(stdin);
case 2:
system("cls");
imprimir();
printf("\n");
do
{
printf(" 0 - Menu principal: ");
scanf("%s",&op_menu_interno);
}
while (op_menu_interno!='0');
system("cls");
break;
case 3:
fflush(stdin);
system("cls");
deletar();
printf("\n");
do
{
printf(" 0 - Menu principal: ");
scanf("%s",&op_menu_interno);
}
while (op_menu_interno!='0');
system("cls");
break;
case 4: // buscar
case 5:
fflush(stdin);
system("cls");
backup();
printf("\n");
do
{
printf(" 0 - Menu principal: ");
scanf("%s",&op_menu_interno);
}
while (op_menu_interno!='0');
system("cls");
break;
case 6:
system("cls");
printf("\n");
printf("Finalizando programa...");
printf("\n");
exit(0);
break;
default:
system("cls");
printf("Codigo invalido! Digite novamente");
break;
}
}
while (op_menu!=7);
return (0);
}