Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

subdark

Escrever e Ler registros de arquivo Binario em C++

Recommended Posts

Bom pessoal estou com um problema um tanto chato.

 

tenho que criar um programa para que o mesmo cadastre varios produtos em um vetor de registro, e apos isso devo salvar no arqvuio binario..

 

mais o problema começa com o seguinte, ao abrir o programa ele deve abrir o arquivo binario caso haja 1, se nao houver deve criar e copiar todos os produtos que estao nele para um vetor de registro apartir desse vetor eu posso alterar, o preço, ou a quantidade ou adicionar novos, e ao final ele deve copiar tudo do vetor para o arquivo binario substituindo o que tinha la.

 

se eu abrir o programa, na primeira vez faz tudo direito, cadastra ai se eu quiser atualizar ele mostra todos meus produtos e talz, so nao conseguir criar a parte em que ele deleta o algum registro, mais ai quando eu abrir novamente o programa ele nao copia exatamente como eu escrevi, e a função de atualizar ja nao sabe mais quantos registros tem dai nao exibe direito.

 

mais o problema maior e nao conseguir carregar coretamente o que tem no arquivo para o vetor.

Abaixo segue meu codigo porem desde ja aviso desculpa a bagunça, e pq eu estou alterando ele constantemente entao so estou testando parte por parte ate terminar ai so depois irei moldar.

struct Produtos{

	char nome[10];
	float preco;
	float quantidade;

};
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
#include "Header.h"

using namespace std;

//alterar opção de atualizar e excluir pois quando reabrir o programa nao se sabe quanto vale o i ja que ele zerou

int main() {

	Produtos produto[20];
	FILE *arquivo;
	char opcao;
	int IndiceProd = 0; //Variavel para contagem de cadastro dos produtos


	arquivo = fopen("C:\\Projetos Visual Studio\\BancoDeDados.bin", "a+b"); // cria/abre o arquivo para leitura e edição

        if (arquivo == NULL) // Teste se o arquivo foi criado/aberto
        {
          printf("Houve algum problemas na criacao do arquivo\n");
          system("pause");
          exit(1);

        }

	//loop para ler ate o fim do arquivo e nao copiar todas as 20 posições se nao nescessario
	int leitura = 0;
	while (!feof(arquivo)) {
		fread(&produto[leitura], sizeof(Produtos), 1, arquivo); // copia o conteudo do arquivo para o vetor de produtos
		leitura++;
	}




	cout << "Supermecado ABC\n";
	cout << "----------------\n";
	cout << "(C)adastrar\n";
	cout << "(E)xcluir\n";
	cout << "(A)tualizar\n";
	cout << "(S)air\n\n";

	cout << " >> _\b";
	cin >> opcao;
	cout << endl;


	while (opcao != 's' && opcao != 'S')
	{

		switch (opcao)
		{
		case 'C':
		case 'c': // Opção Cadastrar um Produto
			cout << "Cadastrar Produto\n";
			cout << "------------------\n";
			cout << "Produto: ";
			cin >> produto[IndiceProd].nome;

			cout << "Preco: ";
			cin >> produto[IndiceProd].preco;

			cout << "Quantidade: ";
			cin >> produto[IndiceProd].quantidade;

			cout << endl;

			IndiceProd++; //Adição para controlar o indice do vetor
			break;

			/*case 'E':
		case 'e': // Opção Excluir um produto
			int numprodut;
			char excluir;


			cout << "Excluir Produto\n";
			cout << "----------------\n";

			for (int j = 0; j < i; j++)
				cout << j + 1 << ") " << produto[j].nome << "\n";

			cout << endl;
			cout << "Numero do produto: ";
			cin >> numprodut;
			cout << "Deseja excluir " << produto[numprodut - 1].nome << " (s/n)? ";
			cin >> excluir;
			if (excluir == 's')
			{
				strcpy(produto[numprodut - 1].nome, '\0');

			}

			break;*/


		case 'A':
		case 'a': // Opção para Atualizar um produto
			int num;

			cout << "Atualizar Produto\n";
			cout << "------------------\n";

			for (int j = 0; j < leitura; j++) //loop para exibir todos os produtos cadastrados, de 0 ate i = quanditade obtida no cadastro
				cout << j + 1 << ") " << produto[j].nome << " - R$ " << produto[j].preco << "/Kg - " << produto[j].quantidade << " Kg\n\n";

			cout << "Numero do produto: ";
			cin >> num;

			cout << "Novo preco do " << produto[num - 1].nome << ": ";
			cin >> produto[num - 1].preco;
			cout << "Nova Quantidade em estoque: ";
			cin >> produto[num - 1].quantidade;
			cout << endl;

			break;

		default:
			cout << "Opcao Invalida.\n";
			break;
		}


		cout << "Qual a proxima opcao?: ";
		cin >> opcao;
		cout << endl;

	}

	fclose(arquivo); //fechamendo do arquivo em modo de leitura

	arquivo = fopen("C:\\Projetos Visual Studio\\BancoDeDados.bin", "wb");		//abertura do arquivo para escrever toda a edição



	fwrite(produto, sizeof(Produtos), 20, arquivo);


	fclose(arquivo); //fechamento do arquivo apos editar
	system("pause");
	return 0;
}

Compartilhar este post


Link para o post
Compartilhar em outros sites

Carregar:

fread(&produto, sizeof(produto), 1, arquivo);

Salvar:

fwrite(&produto, sizeof(produto), 1, arquivo);

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.