Fiz esse código para aula de C++ onde faço que você disse que precisa. espero que ajude a expandir suas possibilidades.
#include<iostream>
#include<fstream>
#include<cstdlib>
#include<cstdio>
#include<conio.h>
#define PATH_ARQUIVO "C:\\Aula_Arquivos\\produtos.txt"
using namespace std;
struct Produto
{
int Codigo;
char Nome[50];
float preço;
int Ativo;
};
int recuperarOpcao();
void montarMenu();
void cadastrarProduto();
void listarTodos();
void editaProduto();
void contarProdutos();
void excluir();
int main()
{
int op;
do
{
montarMenu();
op = recuperarOpcao();
switch(op)
{
case 1:
cadastrarProduto();
break;
case 2:
listarTodos();
break;
case 3:
editaProduto();
break;
case 4:
excluir();
break;
case 5:
contarProdutos();
break;
case 6:
return 1;
break;
default:
cout << "Opcao invalida.";
break;
}
cout << "\n\nPressione ESC para sair.";
}
while(getch() != 27);
return 1;
}
int recuperarOpcao()
{
int opcao;
cout << "Digite sua opcao: ";
cin >> opcao;
cin.ignore();
return opcao;
}
void montarMenu()
{
system("CLS");
cout << "..:: Cadastro de Produtos ::.."
<< "\n\n1 - Cadastrar"
<< "\n2 - Listar todos"
<< "\n3 - Editar"
<< "\n4 - Excluir"
<< "\n5 - Contar Produtos"
<< "\n6 - Sair\n\n";
}
void contarProdutos()
{
fstream arq;
arq.open(PATH_ARQUIVO, ios::in | ios::app | ios::binary);
arq.seekg(0, ios::end);
double tamanhoArquivo;
tamanhoArquivo = arq.tellg();
int qtdProdutos;
qtdProdutos = tamanhoArquivo / sizeof(Produto);
system("CLS");
cout << "..:: Contagem de Produtos ::..\n\n";
cout << "Nosso arquivo contem " << qtdProdutos << " produtos.";
arq.close();
}
void listarTodos()
{
system("CLS");
cout << "..:: Produtos Cadastrados ::..\n";
fstream arq;
arq.open(PATH_ARQUIVO, ios::in | ios::app | ios::binary);
arq.seekg(0, ios::beg);
Produto prod;
while(arq.read((char*)&prod, sizeof(Produto)))
{
if(prod.Ativo == 1)
{
cout << "\nCodigo: " << prod.Codigo;
cout << "\nNome: " << prod.Nome;
cout << "\nPreco: " << prod.preço << "\n";
}
}
arq.close();
}
void cadastrarProduto()
{
Produto prod;
system("CLS");
cout << "..:: Cadastrar um Produto ::..";
cout << "\n\nDigite o codigo: ";
cin >> prod.Codigo;
cin.ignore();
cout << "Digite o nome: ";
gets(prod.Nome);
cout << "Digite o preço: ";
cin >> prod.preço;
cin.ignore();
prod.Ativo = 1;
fstream arq;
arq.open(PATH_ARQUIVO, ios::out | ios::app | ios::binary);
arq.seekp(0, ios::end);
arq.write((char*)&prod, sizeof(Produto));
arq.flush();
arq.close();
}
void editaProduto() //
{
system("CLS");
cout << "..:: Editar um Produto ::..\n\n";
//
int codEdit, posRegistro = -1, contador = 0;
Produto prod;
cout << "Digite o codigo a ser editado: ";
cin >> codEdit;
cin.ignore();
ifstream fin(PATH_ARQUIVO, ios::binary);
fin.seekg(0, ios::beg);
while(fin.read((char*)&prod, sizeof(Produto)))
{
if(prod.Codigo == codEdit && prod.Ativo == 1)
{
cout << "\nProduto a ser editado\n";
cout << "\nCodigo: " << prod.Codigo;
//cin >> (prod.Codigo = -1);
cout << "\nNome: " << prod.Nome << "\n";
cin >> prod.Nome;
cin.ignore();
cout << "\nPreco: " << prod.preço << "\n";
cin >> prod.preço;
cin.ignore();
posRegistro = contador;
break;
}
contador++;
}
fin.close();
if(posRegistro > -1)
{
char confirma;
cout << "\nConfirma a edicao do iten? (s/n): ";
cin >> confirma;
cin.ignore();
if(confirma == 'S' || confirma == 's')
{
fstream fout(PATH_ARQUIVO, ios::in | ios::out | ios::binary);
fout.seekp(posRegistro * sizeof(Produto), ios::beg);
fout.write((char*)&prod, sizeof(Produto));
fout.flush();
fout.close();
}
}
else
{
cout << "Produto não localizado.";
}
//
}
void excluir()
{
system("CLS");
cout << "..:: Excluir Produtos ::..\n";
int codExcluir, posRegistro = -1, contador = 0;
Produto prod;
cout << "\nDigite o codigo a ser excluido: ";
cin >> codExcluir;
cin.ignore();
ifstream fin(PATH_ARQUIVO, ios::binary);
fin.seekg(0, ios::beg);
while(fin.read((char*)&prod, sizeof(Produto)))
{
if(prod.Codigo == codExcluir && prod.Ativo == 1)
{
cout << "\nProduto a ser excluido\n";
cout << "\nCodigo: " << prod.Codigo;
cout << "\nNome: " << prod.Nome;
cout << "\nPreco: " << prod.preço << "\n";
posRegistro = contador;
break;
}
contador++;
}
fin.close();
if(posRegistro > -1)
{
char confirma;
cout << "\nDeseja realmente excluir (s/n): ";
cin >> confirma;
cin.ignore();
if(confirma == 'S' || confirma == 's')
{
fstream fout(PATH_ARQUIVO, ios::in | ios::out | ios::binary);
prod.Ativo = 0;
fout.seekp(posRegistro * sizeof(Produto), ios::beg);
fout.write((char*)&prod, sizeof(Produto));
fout.flush();
fout.close();
}
}
else
{
cout << "Produto não localizado.";
}
}