Forum - C/C++
- C++ problema scritttura lettura file
Pagine: [ 1 2 ]
|
carlito00w (Normal User)
Newbie
Messaggi: 10
Iscritto: 20/06/2009
salve a tutti, il mio problema è il seguente:
quando vado ad eseguire il programma, questo dovrebbe subito leggermi il file pazienti.txt ed inserirmi i dati scritti al suo interno in memoria...
il problema è che lo fa correttamente...
ma mi metti in memoria 2 volte l'ultimo paziente, ovvero è come se il ciclo while lo fecesse una volta di troppo, e quindi l'ultimo paziente della lista viene caricato 2 volte.
il PRoblema dovrebbe essere nella parte di codice che ho commentato dicendo "QUI DOVREBBE ESSERE IL PROBLEMA" "FINE DEL RPOBLEMA"
questo è il codice che ho scritto:
Codice sorgente - presumibilmente C++
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <fstream>
using namespace std;
int scelta_mpazienti= 0 ;
int scelta_mprincipale= 0 ;
int scelta_mprestazioni= 0 ;
struct data{
int gg;
int mm;
int aa;
} ;
class Paziente
{
public :
string nome;
string residenza;
string comune_di_nascita;
struct data nascita;
struct data presa_in_carico;
public :
Paziente( string name, string city, string city_born, int g, int m, int a, int gp, int mp, int ap) {
nome= name;
residenza= city;
comune_di_nascita= city_born;
nascita.gg = g;
nascita.mm = m;
nascita.aa = a;
presa_in_carico.gg = gp;
presa_in_carico.mm = mp;
presa_in_carico.aa = ap;
}
void Visualizza( ) ;
void modifica( string, string, string, int , int , int , int , int , int ) ;
} ;
void Paziente:: Visualizza ( ) {
cout << nome << '\t ' << residenza << '\t ' << comune_di_nascita;
cout << '\t ' << nascita.gg << "/" << nascita.mm << "/" << nascita.aa ;
cout << '\t ' << presa_in_carico.gg << "/" << presa_in_carico.mm ;
cout << "/" << presa_in_carico.aa << endl;
}
void Paziente:: modifica ( string name, string city, string city_born, int g, int m, int a, int gp, int mp, int ap) {
nome= name;
residenza= city;
comune_di_nascita= city_born;
nascita.gg = g;
nascita.mm = m;
nascita.aa = a;
presa_in_carico.gg = gp;
presa_in_carico.mm = mp;
presa_in_carico.aa = ap;
}
class prestazione{
//attributi
int cod;
string descrizione;
float prezzo;
//metodi
public :
prestazione( string desc, float price) {
descrizione= desc;
prezzo= price;
}
void visualizza( ) ;
void modifica( string, float ) ;
} ;
void prestazione:: visualizza ( ) {
cout << descrizione<< '\t ' ;
cout << prezzo<< endl;
}
void prestazione:: modifica ( string desc, float price) {
descrizione= desc;
prezzo= price;
}
void menu_principale( ) ;
void menu_pazienti( ) ;
void menu_prestazioni( ) ;
int main( )
{
vector< Paziente> assistito; //istanza del vettore dei pazienti
string name; //nome e cognome del paziente
string city; //città di residenza del paziente
string city_born; //città di nascita del paziente
int g, m, a; //giorno, mese, anno, di nascita del paziente
int gp, mp, ap; //giorno, mese, anno, di presa in carico del paziente
int i, dim, cod_paz; //i, indice per il vettore pazienti
//dim, dimensione del vettore pazienti
//cod_paz, codice identificativo del paziente
//(cod_paz-1, posizione del paziente cod_paz nel vettore)
vector< prestazione> vett_prestazione; //istanza del vettore delle prestazioni
int codice; //codice, codice identificativo del paziente(codice-1, posizione della prestazione codice nel vettore)
string desc; //desc, descrizione della prestazione
float price; //price, prezzo della prestazione
int k, dim_prest; //k, indice per il vettore prestazioni
//dim_prest, dimensione del vettore prestazioni
string line; //stringa d'appoggio per PazienteX
int j;
ifstream myfile_pazienti_leggi ( "pazienti.txt" ) ;
//acquisizione dati dal file pazienti
while ( ! myfile_pazienti_leggi.eof ( ) ) {
myfile_pazienti_leggi>> line;
myfile_pazienti_leggi>> name;
myfile_pazienti_leggi>> city;
myfile_pazienti_leggi>> city_born;
myfile_pazienti_leggi>> g;
myfile_pazienti_leggi>> m;
myfile_pazienti_leggi>> a;
myfile_pazienti_leggi>> gp;
myfile_pazienti_leggi>> mp;
myfile_pazienti_leggi>> ap;
assistito.push_back ( Paziente( name, city, city_born, g, m, a, gp, mp, ap) ) ;
}
myfile_pazienti_leggi.close ( ) ;
fstream myfile_pazienti_svuota ( "pazienti.txt" , ios:: in | ios:: out | ios:: trunc ) ;
myfile_pazienti_svuota.close ( ) ;
//remove("pazienti.txt");
//fine acquisizione dati da file pazienti
cout << "--------------Programma gestione fatturazioni per infermieri professionali a domicilio--------------" << endl;
//do-while MENU PRINCIPALE
do {
menu_principale( ) ;
cin >> scelta_mprincipale;
switch ( scelta_mprincipale) {
case 1 :
//menu_griglia();
break ;
case 2 :
//menu_fattura();
break ;
case 3 :
//do-while MENU PAZIENTI
do {
menu_pazienti( ) ;
cin >> scelta_mpazienti;
switch ( scelta_mpazienti) {
case 1:
cout << "Inserisci Nome: " ;
getchar ( ) ;
getline( cin , name) ;
cout << "Inserisci Residenza: " ;
getline( cin , city) ;
cout << "Inserisci Comune di nascita: " ;
getline( cin , city_born) ;
cout << "Inserisci giorno Nascita: " ;
cin >> g;
cout << "Inserisci mese Nascita: " ;
cin >> m;
cout << "Inserisci anno Nascita: " ;
cin >> a;
cout << "Inserisci Giorno Presa in carico: " ;
cin >> gp;
cout << "Inserisci mese Presa in carico: " ;
cin >> mp;
cout << "Inserisci anno Presa in carico: " ;
cin >> ap;
assistito.push_back ( Paziente( name, city, city_born, g, m, a, gp, mp, ap) ) ;
break ;
case 2:
if ( assistito.empty ( ) ) {
cout << endl;
cout << "Non sono presenti pazienti da eliminare, inserirne uno!" << endl;
} else
{
cout << endl;
cout << "Inserisci codice paziente da eliminare: " ;
cin >> cod_paz;
cod_paz= cod_paz- 1 ;
assistito.erase ( assistito.begin ( ) + cod_paz) ;
}
break ;
case 3:
if ( assistito.empty ( ) ) {
cout << endl;
cout << "Non sono presenti pazienti da modificare, inserirne uno!" << endl;
} else
{
cout << "Inserisci codice paziente: " ;
cin >> cod_paz;
cout << "Inserisci Nome: " ;
getchar ( ) ;
getline( cin , name) ;
cout << "Inserisci Residenza: " ;
getline( cin , city) ;
cout << "Inserisci Comune di nascita: " ;
getline( cin , city_born) ;
cout << "Inserisci Giorno Nascita: " ;
cin >> g;
cout << "Inserisci mese Nascita: " ;
cin >> m;
cout << "Inserisci anno Nascita: " ;
cin >> a;
cout << "Inserisci Giorno Presa in carico: " ;
cin >> gp;
cout << "Inserisci mese Presa in carico: " ;
cin >> mp;
cout << "Inserisci anno Presa in carico: " ;
cin >> ap;
assistito[ cod_paz- 1] .modifica ( name, city, city_born, g, m, a, gp, mp, ap) ;
cout << "\n " << "Paziente modificato con successo" << endl;
}
break ;
case 4:
if ( ! assistito.empty ( ) ) {
dim= assistito.size ( ) ;
cout << endl;
cout << "Cod" << '\t ' << "Nome e cognome" << '\t ' << "Nato a" << '\t ' << "il giorno" << '\t ' << "residente in" << '\t ' << "assistito dal" << endl;
for ( i= 0 ; i< dim; i++ ) {
cout << i+ 1 << '\t ' ;
assistito[ i] .Visualizza ( ) ;
}
} else
{
cout << endl;
cout << "Non sono presenti pazienti, inserirne uno!" << endl;
}
break ;
case 5:
break ;
}
} while ( scelta_mpazienti! = 5) ;
//fine do-while MENU PAZIENTI
break ;
case 4 :
//do-while MENU PRESTAZIONI
do {
menu_prestazioni( ) ;
cin >> scelta_mprestazioni;
switch ( scelta_mprestazioni) {
case 1:
if ( ! vett_prestazione.empty ( ) ) {
cout << "Codice" << '\t ' << "Descrizione" << '\t ' << "Costo" << endl;
dim_prest= vett_prestazione.size ( ) ;
for ( k= 0 ; k< dim_prest; k++ ) {
cout << k+ 1 << '\t ' ;
vett_prestazione[ k] .visualizza ( ) ;
}
} else
{
cout << endl;
cout << "Non sono presenti prestazioni, inserirne una!" << endl;
}
break ;
case 2:
if ( vett_prestazione.empty ( ) ) {
cout << endl;
cout << "Non sono presenti prestazioni da modificare, inserirne una!" << endl;
} else
{
cout << "Inserisci codice prestazione: " ;
cin >> codice;
cout << "Inserisci nuova descrizione: " ;
getchar ( ) ;
getline( cin , desc) ;
cout << "Inserisci nuovo prezzo: " ;
cin >> price;
vett_prestazione[ codice- 1] .modifica ( desc, price) ;
cout << "\n " << "Prestazione modificata con successo" << endl;
}
break ;
case 3:
if ( vett_prestazione.empty ( ) ) {
cout << endl;
cout << "Non sono presenti prestazioni da eliminare, inserirne una!" << endl;
} else
{
cout << endl;
cout << "Inserisci codice prestazione da eliminare: " ;
cin >> codice;
codice= codice- 1 ;
vett_prestazione.erase ( vett_prestazione.begin ( ) + codice) ;
}
break ;
case 4:
cout << "Inserisci descrizione: " ;
getchar ( ) ;
getline( cin , desc) ;
cout << "Inserisci costo: " ;
cin >> price;
vett_prestazione.push_back ( prestazione( desc, price) ) ;
cout << "\n " << "Prestazione aggiunta con successo" << endl;
break ;
case 5:
break ;
}
} while ( scelta_mprestazioni! = 5) ;
//fine do-while MENU PRESTAZIONI
break ;
case 5 :
//chiusura file aperti
//------------scrittura su file
ofstream myfile_pazienti_scrivi ( "pazienti.txt" , ios:: in | ios:: out | ios:: ate ) ;
j= assistito.size ( ) ;
for ( i= 0 ; i< j; i++ ) {
myfile_pazienti_scrivi << "Paziente" << i+ 1 << "\n " ;
myfile_pazienti_scrivi << assistito[ i] .nome << "\n " << assistito[ i] .residenza << "\n " << assistito[ i] .comune_di_nascita << "\n " ;
myfile_pazienti_scrivi << assistito[ i] .nascita .gg << "\n " << assistito[ i] .nascita .mm << "\n " << assistito[ i] .nascita .aa << "\n " ;
myfile_pazienti_scrivi << assistito[ i] .presa_in_carico .gg << "\n " << assistito[ i] .presa_in_carico .mm << "\n " << assistito[ i] .presa_in_carico .aa << "\n " ;
}
//------------fine scrittura file
myfile_pazienti_scrivi.close ( ) ;
//fine chiusura file aperti
cout << endl;
cout << "Arrivederci e Grazie!" << endl;
break ;
}
} while ( scelta_mprincipale! = 5) ;
//fine do-while MENU PRINCIPALE
// system("PAUSE");
return 0 ;
}
void menu_principale( ) {
cout << endl;
cout << "--------------Menu Principale--------------" << endl;
cout << endl;
cout << "1. Vai a griglia mensile" << endl;
cout << "2. Vai a fatturazione mensile" << endl;
cout << "3. Vai a Menu Pazienti" << endl;
cout << "4. Vai a Menu Prestazioni" << endl;
cout << "5. ESCI" << endl;
cout << "Scelta : " ;
}
void menu_pazienti( ) {
cout << endl;
cout << "--------------Menu Pazienti--------------" << endl;
cout << endl;
cout << "1. Aggiungi Paziente" << endl;
cout << "2. Elimina Paziente" << endl;
cout << "3. Modifica Paziente" << endl;
cout << "4. Visualizza tutti i pazienti" << endl;
cout << "5. Torna al menu principale" << endl;
cout << endl;
cout << "Scelta : " ;
}
void menu_prestazioni( ) {
cout << endl;
cout << "--------------Menu Prestazioni--------------" << endl;
cout << endl;
cout << "1. Visualizza database prestazioni" << endl;
cout << "2. Modifica prestazione" << endl;
cout << "3. Elimina prestazione" << endl;
cout << "4. Aggiungi prestazione" << endl;
cout << "5. Torna al menu principale" << endl;
cout << "Scelta : " ;
}
TNX guys
edit: ho aggiornato il codice
resta sempre e solo il problema che l'acquisizione da file, per l'ultima esecuzione del ciclo while avviene 2 volte.
Ultima modifica effettuata da carlito00w il 20/06/2009 alle 18:06
Xaratroom (Ex-Member)
Expert
Messaggi: 526
Iscritto: 03/04/2008
Fai così:
Codice sorgente - presumibilmente C/C++
myfile_pazienti_leggi>>line;
while (!myfile_pazienti_leggi.eof()){
myfile_pazienti_leggi>>name;
myfile_pazienti_leggi>>city;
myfile_pazienti_leggi>>city_born;
myfile_pazienti_leggi>>g;
myfile_pazienti_leggi>>m;
myfile_pazienti_leggi>>a;
myfile_pazienti_leggi>>gp;
myfile_pazienti_leggi>>mp;
myfile_pazienti_leggi>>ap;
assistito.push_back(Paziente(name, city, city_born, g, m, a, gp, mp, ap));
myfile_pazienti_leggi>>line;
}
Poi spiegami perchè così funziona, mentre, come facevi tu no.
carlito00w (Normal User)
Newbie
Messaggi: 10
Iscritto: 20/06/2009
non funziona
Xaratroom (Ex-Member)
Expert
Messaggi: 526
Iscritto: 03/04/2008
Postato originariamente da carlito00w :
non funziona
Posta il file pazienti.txt
Comunque il programma ha grossi errori.
Ultima modifica effettuata da Xaratroom il 21/06/2009 alle 17:51
carlito00w (Normal User)
Newbie
Messaggi: 10
Iscritto: 20/06/2009
è inutile postartelo, il file pazienti.txt è un file dove vengono scritti prima della chiusura del programma i dati contenuti nel vector assistito, come puoi vedere dal codice.
quindi potrebbe essere vuoto se elimini tutti i dati durante l'esecuzione del programma, o potrebbe contenere 800 pazienti.
cmq i dati all'interno del file sono di questo tipo:
Paziente1
Mario Rossi
Roma
Roma
12
2
75
14
2
2002
Paziente2
Carlo Bianco
Milano
Milano
3
3
3
4
4
4
etc....
edti: ti sarei molto grato se mi segnalassi gli errori
Ultima modifica effettuata da carlito00w il 21/06/2009 alle 19:27
Xaratroom (Ex-Member)
Expert
Messaggi: 526
Iscritto: 03/04/2008
Postato originariamente da carlito00w :
è inutile postartelo, il file pazienti.txt è un file dove vengono scritti prima della chiusura del programma i dati contenuti nel vector assistito, come puoi vedere dal codice.
quindi potrebbe essere vuoto se elimini tutti i dati durante l'esecuzione del programma, o potrebbe contenere 800 pazienti.
cmq i dati all'interno del file sono di questo tipo:
Paziente1
Mario Rossi
Roma
Roma
12
2
75
14
2
2002
Paziente2
Carlo Bianco
Milano
Milano
3
3
3
4
4
4
etc....
edti: ti sarei molto grato se mi segnalassi gli errori
È completamente sbagliato il modo di strutturare l'applicativo.
Hai fatto una mistura di cattiva programmazione OO e strutturata.
Non esegui controlli sull'esistenza del file, in fase di apertura.
Utilizzi un file di testo, per memorizzare i dati, quando potresti utilizzare un file binario.
Potresti implementare la tua applicazione su più layer, dividendo logicamente, il codice, in più parti.
Non mi hai postato la fine del file di prova: voglio vedere se l'ultimo "record" è ripetuto più volte.
carlito00w (Normal User)
Newbie
Messaggi: 10
Iscritto: 20/06/2009
1) Sul partizionamento del codice su più file hai perfettamente ragione, ma non sono ancora in grado di farlo per bene, quindi ho pensato di farlo prima tutto su un sorgente e poi rivederlo con i vari header e .cpp
2)l'ultimo record come è scritto nel codice, viene cancellato proprio perchè doppio.
e non ho capito perchè, se me lo dici mi fai un favore, ho provato e riprovato non sono sono riuscito a capire... quindi ho usato un'esamotage... almeno fino a quando non capisco perchè leggendo dal file l'ultimo record viene acquisito 2 volte
3) Ho fatto il controllo sul file per vedere se è vuoto, e mi pare funzioni... lo devo mettere anche per vedere se il file esiste?
4) francamente sul fatto del file binario/txt, lo avevo pensato, ma dato che mi serve avere un file txt alla fine dell'esecuzione del programma, non vedevo un motivo per lavorare su 2 tipologie di file diverse... potresti spiegarmi perchè è meglio binario?
questo è il codice a cui sono arrivato, che sembra funzionare
Codice sorgente - presumibilmente C++
#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <fstream>
#include <iomanip>
using namespace std;
int scelta_mpazienti= 0 ;
int scelta_mprincipale= 0 ;
int scelta_mprestazioni= 0 ;
struct data{
int gg;
int mm;
int aa;
} ;
class Paziente
{
public :
string nome;
string residenza;
string comune_di_nascita;
struct data nascita;
struct data presa_in_carico;
public :
Paziente( string name, string city, string city_born, int g, int m, int a, int gp, int mp, int ap) {
nome= name;
residenza= city;
comune_di_nascita= city_born;
nascita.gg = g;
nascita.mm = m;
nascita.aa = a;
presa_in_carico.gg = gp;
presa_in_carico.mm = mp;
presa_in_carico.aa = ap;
}
void Visualizza( ) ;
void modifica( string, string, string, int , int , int , int , int , int ) ;
} ;
void Paziente:: Visualizza ( ) {
cout << setw( 20) << nome << setw( 20) << residenza << setw( 20) << comune_di_nascita;
cout << setw( 7 ) << nascita.gg << "/" << nascita.mm << "/" << nascita.aa ;
cout << setw( 7 ) << presa_in_carico.gg << "/" << presa_in_carico.mm ;
cout << "/" << presa_in_carico.aa << endl;
}
void Paziente:: modifica ( string name, string city, string city_born, int g, int m, int a, int gp, int mp, int ap) {
nome= name;
residenza= city;
comune_di_nascita= city_born;
nascita.gg = g;
nascita.mm = m;
nascita.aa = a;
presa_in_carico.gg = gp;
presa_in_carico.mm = mp;
presa_in_carico.aa = ap;
}
class prestazione{
//attributi
int cod;
string descrizione;
float prezzo;
//metodi
public :
prestazione( string desc, float price) {
descrizione= desc;
prezzo= price;
}
void visualizza( ) ;
void modifica( string, float ) ;
} ;
void prestazione:: visualizza ( ) {
cout << descrizione<< '\t ' ;
cout << prezzo<< endl;
}
void prestazione:: modifica ( string desc, float price) {
descrizione= desc;
prezzo= price;
}
void menu_principale( ) ;
void menu_pazienti( ) ;
void menu_prestazioni( ) ;
int main( )
{
vector< Paziente> assistito; //istanza del vettore dei pazienti
string name; //nome e cognome del paziente
string city; //città di residenza del paziente
string city_born; //città di nascita del paziente
int g, m, a; //giorno, mese, anno, di nascita del paziente
int gp, mp, ap; //giorno, mese, anno, di presa in carico del paziente
int i, dim, cod_paz; //i, indice per il vettore pazienti
//dim, dimensione del vettore pazienti
//cod_paz, codice identificativo del paziente
//(cod_paz-1, posizione del paziente cod_paz nel vettore)
vector< prestazione> vett_prestazione; //istanza del vettore delle prestazioni
int codice; //codice, codice identificativo del paziente(codice-1, posizione della prestazione codice nel vettore)
string desc; //desc, descrizione della prestazione
float price; //price, prezzo della prestazione
int k, dim_prest; //k, indice per il vettore prestazioni
//dim_prest, dimensione del vettore prestazioni
string line; //stringa d'appoggio per PazienteX
int j; //j, intero per il ciclo for finale, che scrive sul file txt i dati
int length; //length, intero per la dimensione del file
//acquisizione dati dal file pazienti
ifstream myfile_pazienti_leggi ( "pazienti.txt" ) ;
myfile_pazienti_leggi.seekg ( 0, ios:: end ) ; //check per vedere se il file è vuoto
length = myfile_pazienti_leggi.tellg ( ) ;
myfile_pazienti_leggi.seekg ( 0, ios:: beg ) ;
if ( length== 03) {
cout << "il file pazienti è vuoto\n " ;
} else {
while ( ! myfile_pazienti_leggi.eof ( ) ) {
myfile_pazienti_leggi>> line;
myfile_pazienti_leggi>> name;
myfile_pazienti_leggi>> city;
myfile_pazienti_leggi>> city_born;
myfile_pazienti_leggi>> g;
myfile_pazienti_leggi>> m;
myfile_pazienti_leggi>> a;
myfile_pazienti_leggi>> gp;
myfile_pazienti_leggi>> mp;
myfile_pazienti_leggi>> ap;
assistito.push_back ( Paziente( name, city, city_born, g, m, a, gp, mp, ap) ) ;
}
}
myfile_pazienti_leggi.close ( ) ;
//elimina paziente preso 2 volte
dim= assistito.size ( ) ;
assistito.erase ( assistito.begin ( ) + dim) ;
//fine elimina paziente preso 2 volte
//svuota il file pazienti
fstream myfile_pazienti_svuota ( "pazienti.txt" , ios:: in | ios:: out | ios:: trunc ) ;
myfile_pazienti_svuota.close ( ) ;
//fine acquisizione dati da file pazienti
cout << "--------------Programma gestione fatturazioni per infermieri professionali a domicilio--------------" << endl;
//do-while MENU PRINCIPALE
do {
menu_principale( ) ;
cin >> scelta_mprincipale;
switch ( scelta_mprincipale) {
case 1 :
//menu_griglia();
break ;
case 2 :
//menu_fattura();
break ;
case 3 :
//do-while MENU PAZIENTI
do {
menu_pazienti( ) ;
cin >> scelta_mpazienti;
switch ( scelta_mpazienti) {
case 1:
cout << "Inserisci Nome: " ;
getchar ( ) ;
getline( cin , name) ;
cout << "Inserisci Residenza: " ;
getline( cin , city) ;
cout << "Inserisci Comune di nascita: " ;
getline( cin , city_born) ;
cout << "Inserisci giorno Nascita: " ;
cin >> g;
cout << "Inserisci mese Nascita: " ;
cin >> m;
cout << "Inserisci anno Nascita: " ;
cin >> a;
cout << "Inserisci Giorno Presa in carico: " ;
cin >> gp;
cout << "Inserisci mese Presa in carico: " ;
cin >> mp;
cout << "Inserisci anno Presa in carico: " ;
cin >> ap;
assistito.push_back ( Paziente( name, city, city_born, g, m, a, gp, mp, ap) ) ;
break ;
case 2:
if ( assistito.empty ( ) ) {
cout << endl;
cout << "Non sono presenti pazienti da eliminare, inserirne uno!" << endl;
} else
{
cout << endl;
cout << "Inserisci codice paziente da eliminare: " ;
cin >> cod_paz;
cod_paz= cod_paz- 1 ;
assistito.erase ( assistito.begin ( ) + cod_paz) ;
}
break ;
case 3:
if ( assistito.empty ( ) ) {
cout << endl;
cout << "Non sono presenti pazienti da modificare, inserirne uno!" << endl;
} else
{
cout << "Inserisci codice paziente: " ;
cin >> cod_paz;
cout << "Inserisci Nome: " ;
getchar ( ) ;
getline( cin , name) ;
cout << "Inserisci Residenza: " ;
getline( cin , city) ;
cout << "Inserisci Comune di nascita: " ;
getline( cin , city_born) ;
cout << "Inserisci Giorno Nascita: " ;
cin >> g;
cout << "Inserisci mese Nascita: " ;
cin >> m;
cout << "Inserisci anno Nascita: " ;
cin >> a;
cout << "Inserisci Giorno Presa in carico: " ;
cin >> gp;
cout << "Inserisci mese Presa in carico: " ;
cin >> mp;
cout << "Inserisci anno Presa in carico: " ;
cin >> ap;
assistito[ cod_paz- 1] .modifica ( name, city, city_born, g, m, a, gp, mp, ap) ;
cout << "\n " << "Paziente modificato con successo" << endl;
}
break ;
case 4:
if ( ! assistito.empty ( ) ) {
dim= assistito.size ( ) ;
cout << endl;
cout << "Cod" << setw( 20 ) << "Nome e cognome" << setw( 20 ) << "Nato a" << setw( 20 ) << "residente in" << setw( 15 ) << "il giorno" << setw( 15 ) << "assistito dal" << endl;
for ( i= 0 ; i< dim; i++ ) {
cout << setw( 3) << i+ 1 ;
assistito[ i] .Visualizza ( ) ;
}
} else
{
cout << endl;
cout << "Non sono presenti pazienti, inserirne uno!" << endl;
}
break ;
case 5:
break ;
}
} while ( scelta_mpazienti! = 5) ;
//fine do-while MENU PAZIENTI
break ;
case 4 :
//do-while MENU PRESTAZIONI
do {
menu_prestazioni( ) ;
cin >> scelta_mprestazioni;
switch ( scelta_mprestazioni) {
case 1:
if ( ! vett_prestazione.empty ( ) ) {
cout << "Codice" << '\t ' << "Descrizione" << '\t ' << "Costo" << endl;
dim_prest= vett_prestazione.size ( ) ;
for ( k= 0 ; k< dim_prest; k++ ) {
cout << k+ 1 << '\t ' ;
vett_prestazione[ k] .visualizza ( ) ;
}
} else
{
cout << endl;
cout << "Non sono presenti prestazioni, inserirne una!" << endl;
}
break ;
case 2:
if ( vett_prestazione.empty ( ) ) {
cout << endl;
cout << "Non sono presenti prestazioni da modificare, inserirne una!" << endl;
} else
{
cout << "Inserisci codice prestazione: " ;
cin >> codice;
cout << "Inserisci nuova descrizione: " ;
getchar ( ) ;
getline( cin , desc) ;
cout << "Inserisci nuovo prezzo: " ;
cin >> price;
vett_prestazione[ codice- 1] .modifica ( desc, price) ;
cout << "\n " << "Prestazione modificata con successo" << endl;
}
break ;
case 3:
if ( vett_prestazione.empty ( ) ) {
cout << endl;
cout << "Non sono presenti prestazioni da eliminare, inserirne una!" << endl;
} else
{
cout << endl;
cout << "Inserisci codice prestazione da eliminare: " ;
cin >> codice;
codice= codice- 1 ;
vett_prestazione.erase ( vett_prestazione.begin ( ) + codice) ;
}
break ;
case 4:
cout << "Inserisci descrizione: " ;
getchar ( ) ;
getline( cin , desc) ;
cout << "Inserisci costo: " ;
cin >> price;
vett_prestazione.push_back ( prestazione( desc, price) ) ;
cout << "\n " << "Prestazione aggiunta con successo" << endl;
break ;
case 5:
break ;
}
} while ( scelta_mprestazioni! = 5) ;
//fine do-while MENU PRESTAZIONI
break ;
case 5 :
//------------scrittura su file pazienti
ofstream myfile_pazienti_scrivi ( "pazienti.txt" , ios:: in | ios:: out | ios:: ate ) ;
j= assistito.size ( ) ;
for ( i= 0 ; i< j; i++ ) {
myfile_pazienti_scrivi << "Paziente" << i+ 1 << "\n " ;
myfile_pazienti_scrivi << assistito[ i] .nome << "\n " << assistito[ i] .residenza << "\n " << assistito[ i] .comune_di_nascita << "\n " ;
myfile_pazienti_scrivi << assistito[ i] .nascita .gg << "\n " << assistito[ i] .nascita .mm << "\n " << assistito[ i] .nascita .aa << "\n " ;
myfile_pazienti_scrivi << assistito[ i] .presa_in_carico .gg << "\n " << assistito[ i] .presa_in_carico .mm << "\n " << assistito[ i] .presa_in_carico .aa << "\n " ;
}
//------------fine scrittura file pazienti
//------------scrittura su file prestazioni
//------------fine scrittura file prestazioni
//chiusura file aperti
myfile_pazienti_scrivi.close ( ) ;
//fine chiusura file aperti
cout << endl;
cout << "Arrivederci e Grazie!" << endl;
break ;
}
} while ( scelta_mprincipale! = 5) ;
//fine do-while MENU PRINCIPALE
// system("PAUSE");
return 0 ;
}
void menu_principale( ) {
cout << endl;
cout << "--------------Menu Principale--------------" << endl;
cout << endl;
cout << "1. Vai a griglia mensile" << endl;
cout << "2. Vai a fatturazione mensile" << endl;
cout << "3. Vai a Menu Pazienti" << endl;
cout << "4. Vai a Menu Prestazioni" << endl;
cout << "5. ESCI" << endl;
cout << "Scelta : " ;
}
void menu_pazienti( ) {
cout << endl;
cout << "--------------Menu Pazienti--------------" << endl;
cout << endl;
cout << "1. Aggiungi Paziente" << endl;
cout << "2. Elimina Paziente" << endl;
cout << "3. Modifica Paziente" << endl;
cout << "4. Visualizza tutti i pazienti" << endl;
cout << "5. Torna al menu principale" << endl;
cout << endl;
cout << "Scelta : " ;
}
void menu_prestazioni( ) {
cout << endl;
cout << "--------------Menu Prestazioni--------------" << endl;
cout << endl;
cout << "1. Visualizza database prestazioni" << endl;
cout << "2. Modifica prestazione" << endl;
cout << "3. Elimina prestazione" << endl;
cout << "4. Aggiungi prestazione" << endl;
cout << "5. Torna al menu principale" << endl;
cout << "Scelta : " ;
}
abbi pietà, non sono un mostro del c++, che il programma non è perfetto lo so, e sto postando qui proprio per un aiuto.
Ultima modifica effettuata da carlito00w il 22/06/2009 alle 11:55
Xaratroom (Ex-Member)
Expert
Messaggi: 526
Iscritto: 03/04/2008
qual'è la traccia dell'esercizio (che espone le features che l'applicativo dovrà avere)?
carlito00w (Normal User)
Newbie
Messaggi: 10
Iscritto: 20/06/2009
non c'è nessun esercizio... il progetto è ideato da me...
cmq ho risolto tutti i problemi che avevo... ne resta solo uno, e dato che il codice non è poco ed è su più file estrapolo il pezzo di interesse:
Codice sorgente - presumibilmente Delphi
string line, name, citta, nascita;
int gn, mn, an, gp, mp, ap;
int length ;
ifstream leggi_paz;
leggi_paz. open ( "pazienti. txt ", ios:: in | ios:: beg) ;
if ( leggi_paz. fail ( ) ) {
cout<<"Errore lettura file pazienti."<<endl;
} else
{
leggi_paz.seekg(0, ios::end);
length = leggi_paz.tellg();
leggi_paz.seekg(0, ios::beg);
if(length!=0){
while (!leggi_paz.eof()){
leggi_paz>>line;
leggi_paz>>name;
leggi_paz>>nascita;
leggi_paz>>citta;
leggi_paz>>gn;
leggi_paz>>mn;
leggi_paz>>an;
leggi_paz>>gp;
leggi_paz>>mp;
leggi_paz>>ap;
assistito.push_back(paziente(name, nascita, citta, gn, mn, an, gp, mp, ap));
}
} else
{
cout<<endl;
cout<<"Il file pazienti e' vuoto!"<<endl;
cout<<endl;
}
}
leggi_paz. close ( ) ;
questo è il corpo della funzione che acquisisce i dati dal file pazienti.txt
nel file pazienti.txt c'è scritto questo:
Paziente1
man_maria
milano
bari
20
5
1918
19
12
2006
Paziente2
Mart_Ann
Rovigo
Napoli
26
9
1918
4
12
2006
il problema è che non posso acquisire le variabili di tipo stringa con spazi...
se uso la funzione getline(leggi_paz, name) mi acquisisce le stringhe con spazi, però dato che devo acquisire anche interi, non posso usare la getline anche per quelli...
e quindi la combinazione tra le due sintassi, ovvero:
getline(leggi_paz, name);
leggi_paz>>gn;
(con tutti i relativi campi) da problemi, ovvero va in loop il ciclo...
come posso fare per acquisire contemporaneamente le stringhe con gli spazi e di seguito gli interi?
TNX