Visualizzazione dei risultati da 1 a 7 su 7
  1. #1

    [C++] Errore su modifica elemento: ne inserisce uno nuovo

    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

    codice:
    #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();
    }

  2. #2
    nessuno?

  3. #3
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,462
    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 ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  4. #4
    Quote Originariamente inviata da oregon Visualizza il messaggio
    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)

  5. #5
    nessuni ?|?

  6. #6
    if(nonecandothis)this forum sucks
    else this forum rocks

  7. #7
    deludente gente....

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.