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."; 
	    } 
	}