Ciao, riprendo questa discussione perchè ho risolto il problema (però non penso sia la soluzione migliore).
In pratica, quando utilizzavo la funzione inserisci_attrezzo() aprivo l'oggetto ofstream con la modalità ios:ut | ios::ate , ma questa modalità cancella l'intero file!
Ho avuto la conferma su questa discussione (che però non risolve il problema)

codice:
void inserisci_attrezzo(char* name1){
	Record tool;
	cout << "\nInserisci numero identificativo attrezzo: ";
	cin >> tool.n_id;
	cout << "Inserisci nome (usa il carattere di linea per lo spazio): ";
	cin >> tool.nome;
	cout << "Inserisci quantita': ";
	cin >> tool.qnt;
	cout << "Inserisci costo: ";
	cin >> tool.costo;
	cout << "Inserisci note: ";
        getline(cin, tool.note); 
	ofstream f(name1, ios::out | ios::ate);
	if(!f){
		cout << "\nIl file non e' stato aperto!\n";
		return;
	}
	f.seekp((tool.n_id-1)*sizeof(Record));
	f.write(reinterpret_cast<const char*>(&tool), sizeof(Record));
	f.close();
}
Ho risolto istanziando un oggetto fstream aperto in modalità standard, in modo che posso inserire dati all'interno del file senza che vengano distrutti quelli già esistenti:

codice:
void inserisci_attrezzo(char* name1){
	Record tool;
	cout << "\nInserisci numero identificativo attrezzo: ";
	cin >> tool.n_id;
	cout << "Inserisci nome (usa il carattere di linea per lo spazio): ";
	cin >> tool.nome;
	cout << "Inserisci quantita': ";
	cin >> tool.qnt;
	cout << "Inserisci costo: ";
	cin >> tool.costo;
	cout << "Inserisci note: ";
        getline(cin, tool.note); 
	fstream f(name1);
	if(!f){
		cout << "\nIl file non e' stato aperto!\n";
		return;
	}
	f.seekp((tool.n_id-1)*sizeof(Record));
	f.write(reinterpret_cast<const char*>(&tool), sizeof(Record));
	f.close();
}
Se apro il file con ios::app, i dati non vengono cancellati ma posso inserire i dati solo alla fine e non all'interno.


Secondo voi è la soluzione migliore? Conoscete una modalità di apertura in output che mi permette di inserire i dati all'interno del file senza cancellare i dati già presenti?