0
I’m making a database to store names of rock bands. But I’m not able to implement band removal separately. Can anyone help? Follow the code.
#include <iostream>
#include <fstream>
using namespace std;
void banda(){
ifstream arquivo("layout.txt");
if(arquivo){
string bandas;
while(getline(arquivo,bandas)){
cout<<bandas<<endl;
}
arquivo.close();
}
else{
cout<<"erro";
}
}
void inserir(){
ofstream arquivo("bandass.txt", ios::app);
if(arquivo){
int a;
string g;
int b;
string c;
string nome;
cout<<"nome da banda"<<endl;
cin>>nome;
arquivo<<nome<<endl;
cout<<"genero"<<endl;
cin>>g;
arquivo<<"Genero: "<<g<<endl;
cout<<"ano de criacao"<<endl;
cin>>a;
arquivo<<"Ano de criacao: "<<a<<endl;
cout<<"ano de encerramento"<<endl;
cin>>b;
arquivo<<"Ano de enceramento: "<<b<<endl;
cout<<"descrição"<<endl;
cin>>c;
arquivo<<"Descricao: "<<c<<endl;
arquivo.close();
}
else{
cout<<"erro";
}
}
void remover(){
ifstream arquivos("bandas.txt");
ofstream arquivon("bandas.txt");
string c;
cout<<"Digite o nome da banda que deseja remover"<<endl;
cin>>c;
string aux;
if(arquivos and arquivon){
while (arquivos>>aux){
if ( aux!= c ){
arquivon<<aux;
}
}
}
}
void buscar(){
string a;
cout<<"Digite o nome da banda desejada"<<endl;
cin>>a;
ifstream arquivo("bandass.txt");
string aux;
bool x=false;
if(arquivo){
while( arquivo>>aux){
if( aux==a){
cout<<"Essa banda encontra-se no arquivo"<<endl;
x=true;
}
}
arquivo.close();
}
if( x==false){
cout<<"Banda nao encontrada no Arquivo."<<endl;
cout<<"Tenha certeza que escreveu o nome corretamente"<<endl;
}
}
void exibir(){
ifstream arquivo("bandass.txt");
if(arquivo){
string bandas;
while(getline(arquivo,bandas)){
cout<<bandas<<endl;
}
arquivo.close();
}
else{
cout<<"erro";
}
}
int main(int argc, char **argv)
{
bool n=false;
char x;
while( n==false){
banda(); //cabeçario
cout<<"Inserir uma letra"<<endl;
cin>>x; //opção escolhida
if( x=='i' or x=='I'){
inserir();
char u;
cout<<"Deseja retornar ao menu? Se nao, pressione a letra n, caso contrario letra s"<<endl;
cin>>u;
if( u=='n' or u=='N' ){
n=true;
}
}
else if( x=='r' or x=='R'){
remover();
}
else if( x=='b' or x=='B'){
buscar();
}
else if( x=='e' or x=='E'){
exibir();
}
else if( x=='s' or x=='S'){
n=true;
}
else{
cout<<"Foi inserido uma letra nao existente no menu. Deseja continuar? Se nao, pressione a letra n, caso contrario aperte qualquer letra"<<endl;
char y;
cin>>y;
if( y=='n' or y=='N'){
n=true;
}
}
}
return 0;
}
No error, it is just not removing the data from the file. In case the registered bands
What problem does the code present ? Gives error ? If yes which ?
– Isac
No error, it is just not removing the data from the file. In case the registered bands
– Rafael Bastos
I haven’t tested your code yet I have at least two things to say. You’re always fiddling like everything else right in the archive, and that’s usually not a good idea for all sorts of reasons. It is better to read everything for memory, do all the manipulations you want in memory and when it is necessary to write to archive. This greatly simplifies things like changing 1 record only. Another point you got wrong in your code is that in function
remover
you open the same file for reading and writing simultaneously. This is wrong and will not work properly.– Isac