10/07/09 19:15
frenk88
buonasera a tutti...ho ancora bisogno del vostro aiuto:
per una parte di progetto sto creando una funzione che mi va a leggere dei dati di persone da un file txt come (nome,cogonme,eta...ecc) e me li stampa a video.Nel file txt c'è una lista del tipo:
1;Marco;Rossi;43;Roma;
2;diego;Verdi;21;Torino;
Le varie caratteristiche sono separate da ; e io utilizzo la funzione strtok per farmele scrivere dal compilatore separate cosi in lettura mi trovo esattamente ciò che c'è scritto nel db separati anche qui da ;
Posto il cosdice che ho fatto:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <vector>
#include "caratteristiche.h"
#include "cliente.h"
#include "clienti.h"
Clienti::Clienti()
{
ifstream is;
char linea[100];
is.open("clienti.txt", ios::in );
while (!is.getline(linea,100).eof()){
// cout << linea << endl;
char* pch;
pch = strtok (linea,";"
int num_cliente=atoi(pch);
char* nome_cliente=strtok(NULL,";"
char* cognome_cliente=strtok(NULL,";"
int eta=atoi(strtok(NULL,";");
char* citta=strtok(NULL,";"
Cliente prova(num_cliente,nome_cliente,cognome_cliente,eta,citta);
utenti.push_back(prova);}
is.close();
/*cout << num_ricetta<<endl;
cout << nome_ricetta<<endl;
cout << calorie<<endl; */
}
void Clienti::AggiungiCliente(){
int num_cliente;
string nome_cliente;
string cognome_cliente;
int eta;
string citta;
cout <<"numero ";
cin >> num_cliente;
cout << endl << "nome ";
cin >>nome_cliente;
cout << endl << "cognome ";
cin >>cognome_cliente;
cout << endl << "eta ";
cin >>eta;
cout << endl << "citta ";
cin >>citta;
Cliente prova(num_cliente,nome_cliente,cognome_cliente,eta,citta);
utenti.push_back(prova);
ofstream is;
ofstream outfile("clienti.txt", ios::app);
outfile << num_cliente << ';' << nome_cliente << ';' <<cognome_cliente<<';'<< eta << ';'<<citta<<';' <<'\n';
outfile.close();
}
void Clienti::Stampa(){
char linea[100];
ifstream is;
is.open("clienti.txt",ios::in);
while(!is.getline(linea,100).eof())
cout << linea << endl;
}
questo codice è contenuto in un file.cpp.
IL codice di qui sopra mi permette di inserire un ulteriore utente nella lista e lo scrive nel file txt ma ora devo fare il controllo dell'esistenza già di un cliente con gli stessi dati.Cioè se in lista ho un Mario Rossi e da tastiera inserisco nuovamente Mario Rossi vorrei che il programma mi dice che c'è già un cliente con gli stessi dati e perciò non scrive niente nel db e passa ad una altra operazione.ringfrazio chi mi aiuta a modificare il codice..
per una parte di progetto sto creando una funzione che mi va a leggere dei dati di persone da un file txt come (nome,cogonme,eta...ecc) e me li stampa a video.Nel file txt c'è una lista del tipo:
1;Marco;Rossi;43;Roma;
2;diego;Verdi;21;Torino;
Le varie caratteristiche sono separate da ; e io utilizzo la funzione strtok per farmele scrivere dal compilatore separate cosi in lettura mi trovo esattamente ciò che c'è scritto nel db separati anche qui da ;
Posto il cosdice che ho fatto:
#include <cstdlib>
#include <iostream>
#include <fstream>
#include <vector>
#include "caratteristiche.h"
#include "cliente.h"
#include "clienti.h"
Clienti::Clienti()
{
ifstream is;
char linea[100];
is.open("clienti.txt", ios::in );
while (!is.getline(linea,100).eof()){
// cout << linea << endl;
char* pch;
pch = strtok (linea,";"
int num_cliente=atoi(pch);
char* nome_cliente=strtok(NULL,";"
char* cognome_cliente=strtok(NULL,";"
int eta=atoi(strtok(NULL,";");
char* citta=strtok(NULL,";"
Cliente prova(num_cliente,nome_cliente,cognome_cliente,eta,citta);
utenti.push_back(prova);}
is.close();
/*cout << num_ricetta<<endl;
cout << nome_ricetta<<endl;
cout << calorie<<endl; */
}
void Clienti::AggiungiCliente(){
int num_cliente;
string nome_cliente;
string cognome_cliente;
int eta;
string citta;
cout <<"numero ";
cin >> num_cliente;
cout << endl << "nome ";
cin >>nome_cliente;
cout << endl << "cognome ";
cin >>cognome_cliente;
cout << endl << "eta ";
cin >>eta;
cout << endl << "citta ";
cin >>citta;
Cliente prova(num_cliente,nome_cliente,cognome_cliente,eta,citta);
utenti.push_back(prova);
ofstream is;
ofstream outfile("clienti.txt", ios::app);
outfile << num_cliente << ';' << nome_cliente << ';' <<cognome_cliente<<';'<< eta << ';'<<citta<<';' <<'\n';
outfile.close();
}
void Clienti::Stampa(){
char linea[100];
ifstream is;
is.open("clienti.txt",ios::in);
while(!is.getline(linea,100).eof())
cout << linea << endl;
}
questo codice è contenuto in un file.cpp.
IL codice di qui sopra mi permette di inserire un ulteriore utente nella lista e lo scrive nel file txt ma ora devo fare il controllo dell'esistenza già di un cliente con gli stessi dati.Cioè se in lista ho un Mario Rossi e da tastiera inserisco nuovamente Mario Rossi vorrei che il programma mi dice che c'è già un cliente con gli stessi dati e perciò non scrive niente nel db e passa ad una altra operazione.ringfrazio chi mi aiuta a modificare il codice..
aaa