PDA

Visualizza la versione completa : [C++] Errore su modifica elemento: ne inserisce uno nuovo


davidegh
16-02-2018, 10:29
salve a tutti, sono nuovo avevo già cercato aiuto in altri forum ma con pochi risultati, ho un programmino per salvare varie password, ho un problema nella fase di modifica (funzione void modifica() ) dei record..invece di modificarli mene crea un'altro.....grazie in anticipo allego il sorgente :)


#include<iostream>#include<fstream>
#include<string.h>
#include <stdio.h>
using namespace std;
int indice();
void modifica();
void lista();
void inserisci();
void cerca();
//string scrivi();
struct account{
int indice;
char nsito[50];
char nutente[20];
char psw[30];
};
struct account nuovo;
ofstream of;
ifstream ifs;
char menu;
int main () {
int ctrl,scelta,ctrl2;
char sbagliato, mod;
string psw;
sbagliato:
cout<<"inserisci la password:"; // psw per acceddere al programma
cin>>psw;
if(psw!="password"){
cout<<"password sbagliata!!!!!! riprovare"<<endl;
goto sbagliato;
}
menu:
system("cls"); //menu
cout<<"benvenuto in gestione psw, cosa vuoi fare?\n";
cout<<" 1) visualizzare| modificare gli account in memoria \n";
cout<<" 2) aggiungere un nuovo account\n";
cout<<" 3) uscire \n";
cout<<" digitare 1 2 o 3 e premere invio! :";
cin>> scelta;
if (scelta==1) {

lista();
cout<<"vuoi modificare/cercare un account?(s=modifica/c=cerca/n=menu/x=uscita)"<<endl;
cin>>mod;
if(mod=='s'){
modifica();
cout<<"premere 1 per tornare al menu o premere 0 per uscire";
cin>>ctrl2;
if(ctrl2==1) goto menu;
else return 0;

}else if(mod=='n'){
goto menu;
}else if(mod=='x'){
return 0;
}else if(mod=='c'){
cerca();
}

}else if (scelta==2){


do{


nuovo.indice=indice();
cout<<"inserisci nome del sito(senza spazi): ";
cin>>nuovo.nsito;
cout<<"\n inserisci nome utente: ";
cin>>nuovo.nutente;
cout<<"\n inserisci la password del sito: ";
cin>>nuovo.psw;
ofstream of("pswww.txt", ios::app| ios::out | ios::binary);
of.write((char *) &nuovo, sizeof(struct account));

cout<<"\n inserire un altro account?(1=si/2=no(torna al menu)):";
cin>>ctrl;
}while(ctrl!=2);
of.close();
goto menu;
}


return 0;


}
int indice(){
int a;
ifstream ifs("pswww.txt", ios::in | ios::binary);

while(ifs.read((char *) &nuovo, sizeof(struct account))){

a=nuovo.indice+1;

}
if(a<1 ) a=1;
return a;
}


void modifica(){
int temp,unodue;
char temputente[20];


cout<<"digitare l'indice dell'account da modificare"<<endl;
cin>>temp;
system("cls");
fstream ifs("pswww.txt", ios::in | ios::out | ios::binary);




while(ifs.read((char *) &nuovo, sizeof(struct account))){ // qui c'è il problema da qualche parte:(

if(temp==nuovo.indice){

cout<<nuovo.indice<<") "<<nuovo.nsito<<" -- "<<nuovo.nutente<<" -- "<<nuovo.psw;
cout<<"cosa vuoi modificare?(1: nomeutente, 2: password)";
cin>>unodue;
if(unodue==1){
cout<<"inserisci un nuovo nutente: ";
cin>>nuovo.nutente;
}
if(unodue==2){
cout<<"inserisci la nuova password:";
cin>>nuovo.psw;
}
ifs.write((char *) &nuovo, sizeof(struct account));
break;
}
}
ifs.close();
cout<<"modifica effettuata!"<<endl;
}
void lista(){ // visualizzo lista
ifstream ifs("pswww.txt", ios::in | ios::binary);

while(ifs.read((char *) &nuovo, sizeof(struct account))){

cout<<nuovo.indice<<") "<<nuovo.nsito<<" -- "<<nuovo.nutente<<" -- "<<nuovo.psw<<endl;
}
ifs.close();


}
void cerca(){
char sito[50];
int i;
char * pch;
cout<<"inserisci in nome del sito da cercare:"<<endl;
cin>>sito;
ifstream ifs("pswww.txt", ios::in | ios::binary);

while(ifs.read((char *) &nuovo, sizeof(struct account))){


while((pch=strstr(nuovo.nsito,sito))!=NULL){ //strstr(x,y) cerca y in x se la trova punta alla prima corrispendenza, altrimenti il puntatore a valore null
cout<<"trovato: "<<nuovo.indice<<") "<<nuovo.nsito<<" -- "<<nuovo.nutente<<" -- "<<nuovo.psw<<endl;
break;
}


}
ifs.close();
}

davidegh
19-02-2018, 17:01
nessuno? :(

oregon
19-02-2018, 17:36
Probabilmente devi impegnarti di più a spiegare il problema, la parte di codice che dovrebbe fare quello che dici e che invece non lo fa, ecc..

Se lasci tutto il lavoro a chi ti deve rispondere, non hai molte attenzioni ...

davidegh
20-02-2018, 10:31
Probabilmente devi impegnarti di più a spiegare il problema, la parte di codice che dovrebbe fare quello che dici e che invece non lo fa, ecc..

Se lasci tutto il lavoro a chi ti deve rispondere, non hai molte attenzioni ...

allora, se provate a compilare ed eseguire forse capite meglio, cmq come ho detto prima il problema si insidia nella funzione modifica(); gli step logici sono: l'utente digita l'indice di un sito-> (sono strutturati cosi: 1) www.aaa.it --nutente -- psw, 2)www.bbb.it -- nutente -- psw ecc..)cerco l'indice all'interno del file-> mi posiziono sul record interessato->chiedo cosa si vuole modificare->input dati-> sovrascrivo i dati. ma invece che sovrascriverli , mi crea un nuovo record :(, spero di essere stato chiaro(altrimenti chiedetemi pure)

davidegh
22-02-2018, 13:49
nessuni ?|?

davidegh
27-02-2018, 11:21
if(nonecandothis)this forum sucks
else this forum rocks

davidegh
14-03-2018, 11:19
deludente gente.... :)

Loading