subdark 0 Denunciar post Postado Julho 28, 2014 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
CL4nG 36 Denunciar post Postado Julho 29, 2014 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
subdark 0 Denunciar post Postado Julho 29, 2014 Ja resolvi o problema... fiz outra forma e ja esta Ok. Pode fechar o topico Compartilhar este post Link para o post Compartilhar em outros sites