Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - C++ problema scritttura lettura file
Forum - C/C++ - C++ problema scritttura lettura file

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
carlito00w (Normal User)
Newbie


Messaggi: 10
Iscritto: 20/06/2009

Segnala al moderatore
Postato alle 17:10
Sabato, 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" :D

questo è il codice che ho scritto:

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <string>
  5. #include <fstream>
  6. using namespace std;
  7.  
  8. int scelta_mpazienti=0;
  9. int scelta_mprincipale=0;
  10. int scelta_mprestazioni=0;
  11.  
  12. struct data{
  13.                 int gg;
  14.                 int mm;
  15.                 int aa;
  16.         };
  17.  
  18.  
  19. class Paziente
  20. {
  21.         public:
  22.         string nome;
  23.         string residenza;
  24.         string comune_di_nascita;
  25.         struct data nascita;
  26.         struct data presa_in_carico;
  27.        
  28.         public:
  29.         Paziente(string name, string city, string city_born, int g, int m, int a, int gp, int mp, int ap){
  30.                
  31.          nome=name;
  32.          residenza=city;
  33.          comune_di_nascita=city_born;
  34.          nascita.gg=g;
  35.          nascita.mm=m;
  36.          nascita.aa=a;
  37.          presa_in_carico.gg=gp;
  38.          presa_in_carico.mm=mp;
  39.          presa_in_carico.aa=ap;
  40.                
  41.                 }
  42.                
  43.         void Visualizza();
  44.         void modifica(string, string, string, int, int, int, int, int, int);
  45.        
  46.         };
  47.  
  48.        
  49. void Paziente::Visualizza(){
  50.        
  51.         cout << nome << '\t' << residenza << '\t' << comune_di_nascita;
  52.         cout << '\t' << nascita.gg << "/" << nascita.mm << "/" << nascita.aa;
  53.         cout << '\t' << presa_in_carico.gg << "/" <<  presa_in_carico.mm;
  54.         cout << "/" <<  presa_in_carico.aa << endl;
  55.        
  56.         }
  57.  
  58.  
  59. void Paziente::modifica(string name, string city, string city_born, int g, int m, int a, int gp, int mp, int ap){
  60.        
  61.          nome=name;
  62.          residenza=city;
  63.          comune_di_nascita=city_born;
  64.          nascita.gg=g;
  65.          nascita.mm=m;
  66.          nascita.aa=a;
  67.          presa_in_carico.gg=gp;
  68.          presa_in_carico.mm=mp;
  69.          presa_in_carico.aa=ap;
  70.        
  71.         }
  72.  
  73.  
  74.  
  75. class prestazione{
  76.  
  77.         //attributi
  78.         int cod;
  79.         string descrizione;
  80.         float prezzo;
  81.  
  82.         //metodi
  83.         public:
  84.         prestazione(string desc, float price){
  85.                 descrizione=desc;
  86.                 prezzo=price;
  87.         }
  88.         void visualizza();
  89.         void modifica(string, float);
  90.        
  91. };
  92.  
  93.  
  94. void prestazione::visualizza(){
  95.  
  96.     cout<<descrizione<<'\t';
  97.     cout<<prezzo<<endl;
  98. }
  99.  
  100.  
  101. void prestazione::modifica(string desc, float price){
  102.        
  103.         descrizione=desc;
  104.         prezzo=price;
  105.        
  106. }
  107.  
  108.  
  109. void menu_principale();
  110.  
  111. void menu_pazienti();
  112.  
  113. void menu_prestazioni();
  114.  
  115.  
  116. int main()
  117. {
  118.  
  119.         vector<Paziente> assistito;             //istanza del vettore dei pazienti
  120.         string name;                                    //nome e cognome del paziente
  121.         string city;                                    //città di residenza del paziente
  122.         string city_born;                               //città di nascita del paziente
  123.         int g, m, a;                                    //giorno, mese, anno, di nascita del paziente
  124.         int gp, mp, ap;                                 //giorno, mese, anno, di presa in carico del paziente
  125.         int i, dim, cod_paz;                    //i, indice per il vettore pazienti
  126.                                                                                 //dim, dimensione del vettore pazienti
  127.                                                                                         //cod_paz, codice identificativo del paziente
  128.                                                                                         //(cod_paz-1, posizione del paziente cod_paz nel vettore)
  129.                                                                                        
  130.         vector<prestazione> vett_prestazione;           //istanza del vettore delle prestazioni
  131.         int codice;                                                                     //codice, codice identificativo del paziente(codice-1, posizione della prestazione codice nel vettore)
  132.         string desc;                                                            //desc, descrizione della prestazione
  133.         float price;                                                            //price, prezzo della prestazione
  134.         int k, dim_prest;                                                       //k, indice per il vettore prestazioni
  135.                                                                                                 //dim_prest, dimensione del vettore prestazioni
  136.        
  137.         string line; //stringa d'appoggio per PazienteX
  138.         int j;
  139.  
  140. ifstream myfile_pazienti_leggi ("pazienti.txt");
  141.  
  142. //acquisizione dati dal file pazienti
  143.  
  144.                                 while (!myfile_pazienti_leggi.eof()){
  145.                                
  146.                                         myfile_pazienti_leggi>>line;
  147.                                         myfile_pazienti_leggi>>name;
  148.                                         myfile_pazienti_leggi>>city;
  149.                                         myfile_pazienti_leggi>>city_born;
  150.                                         myfile_pazienti_leggi>>g;
  151.                                         myfile_pazienti_leggi>>m;
  152.                                         myfile_pazienti_leggi>>a;
  153.                                         myfile_pazienti_leggi>>gp;
  154.                                         myfile_pazienti_leggi>>mp;
  155.                                         myfile_pazienti_leggi>>ap;
  156.                                        
  157.                                         assistito.push_back(Paziente(name, city, city_born, g, m, a, gp, mp, ap));
  158.                                         }
  159.                                        
  160.  
  161. myfile_pazienti_leggi.close();
  162.  
  163. fstream myfile_pazienti_svuota ("pazienti.txt", ios::in | ios::out | ios::trunc);
  164. myfile_pazienti_svuota.close();
  165. //remove("pazienti.txt");
  166.  
  167. //fine acquisizione dati da file pazienti
  168.        
  169.         cout<<"--------------Programma gestione fatturazioni per infermieri professionali a domicilio--------------"<<endl;
  170.  
  171.         //do-while MENU PRINCIPALE
  172.  
  173.         do{
  174.            menu_principale();
  175.            cin >> scelta_mprincipale;
  176.            
  177.                 switch(scelta_mprincipale){
  178.                 case 1:
  179.                         //menu_griglia();
  180.                         break;
  181.  
  182.                 case 2:
  183.                         //menu_fattura();
  184.                         break;
  185.  
  186.                 case 3:
  187.                         //do-while MENU PAZIENTI
  188.  
  189.                         do{
  190.                 menu_pazienti();
  191.                 cin >> scelta_mpazienti;
  192.  
  193.                         switch(scelta_mpazienti){
  194.                 case 1:                        
  195.                                 cout<<"Inserisci Nome: ";
  196.                                 getchar();
  197.                                 getline(cin, name);
  198.                                 cout<<"Inserisci Residenza: ";
  199.                                 getline(cin, city);
  200.                                 cout<<"Inserisci Comune di nascita: ";
  201.                                 getline(cin, city_born);
  202.        
  203.                                 cout<<"Inserisci giorno Nascita: ";
  204.                                 cin>>g;
  205.                                 cout<<"Inserisci mese Nascita: ";
  206.                                 cin>>m;
  207.                                 cout<<"Inserisci anno Nascita: ";
  208.                                 cin>>a;
  209.        
  210.                                 cout<<"Inserisci Giorno Presa in carico: ";
  211.                                 cin>>gp;
  212.                                 cout<<"Inserisci mese Presa in carico: ";
  213.                                 cin>>mp;
  214.                                 cout<<"Inserisci anno Presa in carico: ";
  215.                                 cin>>ap;
  216.                                
  217.                                 assistito.push_back(Paziente(name, city, city_born, g, m, a, gp, mp, ap));                                     
  218.                                 break;
  219.                 case 2:
  220.                                 if(assistito.empty()){
  221.                                         cout << endl;
  222.                                         cout << "Non sono presenti pazienti da eliminare, inserirne uno!" << endl;
  223.                                 }else
  224.                                         {
  225.                                                 cout << endl;
  226.                                                 cout << "Inserisci codice paziente da eliminare: ";
  227.                                                 cin >> cod_paz;
  228.                                                 cod_paz=cod_paz-1;
  229.                                                 assistito.erase(assistito.begin()+cod_paz);
  230.                                         }
  231.                                 break;
  232.  
  233.                 case 3:
  234.                                 if(assistito.empty()){
  235.                                         cout << endl;
  236.                                         cout << "Non sono presenti pazienti da modificare, inserirne uno!" << endl;
  237.                                 }else
  238.                                 {
  239.                                 cout << "Inserisci codice paziente: ";
  240.                                 cin >> cod_paz;
  241.                                
  242.                                 cout<<"Inserisci Nome: ";
  243.                                 getchar();
  244.                                 getline(cin, name);
  245.                                 cout<<"Inserisci Residenza: ";
  246.                                 getline(cin, city);
  247.                                 cout<<"Inserisci Comune di nascita: ";
  248.                                 getline(cin, city_born);
  249.        
  250.                                 cout<<"Inserisci Giorno Nascita: ";
  251.                                 cin>>g;
  252.                                 cout<<"Inserisci mese Nascita: ";
  253.                                 cin>>m;
  254.                                 cout<<"Inserisci anno Nascita: ";
  255.                                 cin>>a;
  256.        
  257.                                 cout<<"Inserisci Giorno Presa in carico: ";
  258.                                 cin>>gp;
  259.                                 cout<<"Inserisci mese Presa in carico: ";
  260.                                 cin>>mp;
  261.                                 cout<<"Inserisci anno Presa in carico: ";
  262.                                 cin>>ap;
  263.                                
  264.                                 assistito[cod_paz-1].modifica(name, city, city_born, g, m, a, gp, mp, ap);
  265.                                 cout << "\n" << "Paziente modificato con successo" << endl;
  266.                                 }
  267.                                 break;
  268.                
  269.                 case 4:
  270.                                 if(!assistito.empty()){
  271.                                 dim=assistito.size();
  272.                                 cout << endl;
  273.                                 cout << "Cod" << '\t' << "Nome e cognome"<<'\t'<<"Nato a"<<'\t'<<"il giorno"<<'\t'<<"residente in"<<'\t'<<"assistito dal"<<endl;
  274.                                 for (i=0; i<dim; i++) {
  275.                                         cout << i+1 << '\t';
  276.                                         assistito[i].Visualizza();
  277.                                         }
  278.                                 }else
  279.                                         {
  280.                                                 cout << endl;
  281.                                                 cout << "Non sono presenti pazienti, inserirne uno!" << endl;
  282.                                         }
  283.                                 break;
  284.                 case 5:
  285.                                 break;
  286.                         }
  287.                                 }while(scelta_mpazienti!=5);
  288.                         //fine do-while MENU PAZIENTI
  289.                         break;
  290.  
  291.         case 4:
  292.                         //do-while MENU PRESTAZIONI
  293.                         do{
  294.                             menu_prestazioni();
  295.                             cin >> scelta_mprestazioni;
  296.                        
  297.                                 switch(scelta_mprestazioni){
  298.                
  299.                 case 1:
  300.                                 if(!vett_prestazione.empty()){
  301.                                 cout << "Codice" << '\t' << "Descrizione" << '\t' << "Costo" << endl;
  302.                                 dim_prest=vett_prestazione.size();
  303.                                 for (k=0; k<dim_prest; k++) {
  304.                                         cout << k+1 << '\t';
  305.                                         vett_prestazione[k].visualizza();
  306.                                         }
  307.                                 }else
  308.                                         {
  309.                                                 cout << endl;
  310.                                                 cout << "Non sono presenti prestazioni, inserirne una!" << endl;
  311.                                         }
  312.                                 break;
  313.                                
  314.                 case 2:
  315.                                 if(vett_prestazione.empty()){
  316.                                         cout << endl;
  317.                                         cout << "Non sono  presenti prestazioni da modificare, inserirne una!" << endl;
  318.                                 }else
  319.                                 {
  320.                                 cout << "Inserisci codice prestazione: ";
  321.                                 cin >> codice;
  322.                                 cout << "Inserisci nuova descrizione: ";
  323.                                 getchar();
  324.                                 getline(cin, desc);
  325.                                 cout << "Inserisci nuovo prezzo: ";
  326.                                 cin >> price;
  327.                                 vett_prestazione[codice-1].modifica(desc, price);
  328.                                 cout << "\n" << "Prestazione modificata con successo" << endl;
  329.                                 }
  330.                                 break;
  331.                                
  332.                 case 3:
  333.                                 if(vett_prestazione.empty()){
  334.                                         cout << endl;
  335.                                         cout << "Non sono presenti prestazioni da eliminare, inserirne una!" << endl;
  336.                                 }else
  337.                                         {
  338.                                                 cout << endl;
  339.                                                 cout << "Inserisci codice prestazione da eliminare: ";
  340.                                                 cin >> codice;
  341.                                                 codice=codice-1;
  342.                                                 vett_prestazione.erase(vett_prestazione.begin()+codice);
  343.                                         }                              
  344.                                 break;
  345.                                
  346.                 case 4:
  347.                                 cout<<"Inserisci descrizione: ";
  348.                                 getchar();
  349.                                 getline(cin, desc);
  350.                                 cout<<"Inserisci costo: ";
  351.                                 cin>>price;
  352.                                 vett_prestazione.push_back(prestazione(desc, price));
  353.                                 cout << "\n" << "Prestazione aggiunta con successo" << endl;
  354.                                 break;
  355.                                
  356.                 case 5:
  357.                                 break;
  358.        
  359.                 }
  360.                                         }while(scelta_mprestazioni!=5);
  361.                         //fine do-while MENU PRESTAZIONI
  362.                         break;
  363.  
  364.                 case 5:
  365.                 //chiusura file aperti
  366.                 //------------scrittura su file
  367. ofstream myfile_pazienti_scrivi ("pazienti.txt", ios::in | ios:: out | ios::ate);
  368.  
  369. j=assistito.size();
  370.                                
  371.                                 for(i=0;i<j;i++){
  372.                                 myfile_pazienti_scrivi << "Paziente"<<i+1<<"\n";
  373.                                 myfile_pazienti_scrivi << assistito[i].nome<<"\n"<<assistito[i].residenza<<"\n"<<assistito[i].comune_di_nascita<<"\n";
  374.                                 myfile_pazienti_scrivi << assistito[i].nascita.gg<<"\n"<<assistito[i].nascita.mm<<"\n"<<assistito[i].nascita.aa<<"\n";
  375.                                 myfile_pazienti_scrivi << assistito[i].presa_in_carico.gg<<"\n"<<assistito[i].presa_in_carico.mm<<"\n"<<assistito[i].presa_in_carico.aa<<"\n";
  376.                                 }
  377. //------------fine scrittura file
  378.                                 myfile_pazienti_scrivi.close();
  379.                 //fine chiusura file aperti
  380.                         cout << endl;
  381.                         cout << "Arrivederci e Grazie!" << endl;
  382.                         break;
  383.                 }
  384.        
  385.         }while(scelta_mprincipale!=5);
  386.         //fine do-while MENU PRINCIPALE
  387.        
  388. //      system("PAUSE");
  389.         return 0;
  390. }
  391.  
  392.  
  393. void menu_principale(){
  394.        
  395.         cout << endl;
  396.         cout << "--------------Menu Principale--------------" << endl;
  397.         cout << endl;
  398.         cout<<"1. Vai a griglia mensile"<<endl;
  399.         cout<<"2. Vai a fatturazione mensile"<<endl;
  400.         cout<<"3. Vai a Menu Pazienti"<<endl;
  401.         cout<<"4. Vai a Menu Prestazioni"<<endl;
  402.         cout<<"5. ESCI"<<endl;
  403.        
  404.         cout << "Scelta : ";
  405.  
  406. }
  407.  
  408. void menu_pazienti(){
  409.        
  410.         cout << endl;
  411.         cout << "--------------Menu Pazienti--------------" << endl;
  412.         cout << endl;
  413.         cout << "1. Aggiungi Paziente" << endl;
  414.         cout << "2. Elimina Paziente" << endl;
  415.         cout << "3. Modifica Paziente" << endl;
  416.         cout << "4. Visualizza tutti i pazienti" << endl;
  417.         cout << "5. Torna al menu principale" << endl;
  418.         cout << endl;
  419.  
  420.         cout << "Scelta : ";
  421.        
  422. }
  423.                
  424. void menu_prestazioni(){
  425.        
  426.         cout << endl;
  427.         cout << "--------------Menu Prestazioni--------------" << endl;
  428.         cout << endl;
  429.         cout << "1. Visualizza database prestazioni"<<endl;
  430.         cout << "2. Modifica prestazione"<<endl;
  431.         cout << "3. Elimina prestazione"<<endl;
  432.         cout << "4. Aggiungi prestazione"<<endl;
  433.         cout << "5. Torna al menu principale"<<endl;
  434.        
  435.         cout << "Scelta : ";
  436.        
  437. }



TNX guys:D

edit: ho aggiornato il codice :D 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
PM Quote
Avatar
Xaratroom (Ex-Member)
Expert


Messaggi: 526
Iscritto: 03/04/2008

Segnala al moderatore
Postato alle 14:21
Domenica, 21/06/2009
Fai così:
Codice sorgente - presumibilmente C/C++

  1. myfile_pazienti_leggi>>line;
  2. while (!myfile_pazienti_leggi.eof()){
  3.         myfile_pazienti_leggi>>name;
  4.         myfile_pazienti_leggi>>city;
  5.         myfile_pazienti_leggi>>city_born;
  6.         myfile_pazienti_leggi>>g;
  7.         myfile_pazienti_leggi>>m;
  8.         myfile_pazienti_leggi>>a;
  9.         myfile_pazienti_leggi>>gp;
  10.         myfile_pazienti_leggi>>mp;
  11.         myfile_pazienti_leggi>>ap;
  12.  
  13.         assistito.push_back(Paziente(name, city, city_born, g, m, a, gp, mp, ap));
  14.         myfile_pazienti_leggi>>line;
  15. }


Poi spiegami perchè così funziona, mentre, come facevi tu no.

PM Quote
Avatar
carlito00w (Normal User)
Newbie


Messaggi: 10
Iscritto: 20/06/2009

Segnala al moderatore
Postato alle 16:58
Domenica, 21/06/2009
non funziona

PM Quote
Avatar
Xaratroom (Ex-Member)
Expert


Messaggi: 526
Iscritto: 03/04/2008

Segnala al moderatore
Postato alle 17:48
Domenica, 21/06/2009
Testo quotato

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
PM Quote
Avatar
carlito00w (Normal User)
Newbie


Messaggi: 10
Iscritto: 20/06/2009

Segnala al moderatore
Postato alle 19:27
Domenica, 21/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:D

Ultima modifica effettuata da carlito00w il 21/06/2009 alle 19:27
PM Quote
Avatar
Xaratroom (Ex-Member)
Expert


Messaggi: 526
Iscritto: 03/04/2008

Segnala al moderatore
Postato alle 19:53
Domenica, 21/06/2009
Testo quotato

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:D


È 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.

PM Quote
Avatar
carlito00w (Normal User)
Newbie


Messaggi: 10
Iscritto: 20/06/2009

Segnala al moderatore
Postato alle 11:46
Lunedì, 22/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++

  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <string>
  5. #include <fstream>
  6. #include <iomanip>
  7. using namespace std;
  8.  
  9. int scelta_mpazienti=0;
  10. int scelta_mprincipale=0;
  11. int scelta_mprestazioni=0;
  12.  
  13. struct data{
  14.                 int gg;
  15.                 int mm;
  16.                 int aa;
  17.         };
  18.  
  19.  
  20. class Paziente
  21. {
  22.         public:
  23.         string nome;
  24.         string residenza;
  25.         string comune_di_nascita;
  26.         struct data nascita;
  27.         struct data presa_in_carico;
  28.        
  29.         public:
  30.         Paziente(string name, string city, string city_born, int g, int m, int a, int gp, int mp, int ap){
  31.                
  32.          nome=name;
  33.          residenza=city;
  34.          comune_di_nascita=city_born;
  35.          nascita.gg=g;
  36.          nascita.mm=m;
  37.          nascita.aa=a;
  38.          presa_in_carico.gg=gp;
  39.          presa_in_carico.mm=mp;
  40.          presa_in_carico.aa=ap;
  41.                
  42.                 }
  43.                
  44.         void Visualizza();
  45.         void modifica(string, string, string, int, int, int, int, int, int);
  46.        
  47.         };
  48.  
  49.        
  50. void Paziente::Visualizza(){
  51.        
  52.         cout << setw(20) << nome << setw(20) << residenza << setw(20) << comune_di_nascita;
  53.         cout << setw(7) << nascita.gg << "/" << nascita.mm << "/" << nascita.aa;
  54.         cout << setw(7) << presa_in_carico.gg << "/" <<  presa_in_carico.mm;
  55.         cout << "/" <<  presa_in_carico.aa << endl;
  56.        
  57.         }
  58.  
  59.  
  60. void Paziente::modifica(string name, string city, string city_born, int g, int m, int a, int gp, int mp, int ap){
  61.        
  62.          nome=name;
  63.          residenza=city;
  64.          comune_di_nascita=city_born;
  65.          nascita.gg=g;
  66.          nascita.mm=m;
  67.          nascita.aa=a;
  68.          presa_in_carico.gg=gp;
  69.          presa_in_carico.mm=mp;
  70.          presa_in_carico.aa=ap;
  71.        
  72.         }
  73.  
  74.  
  75.  
  76. class prestazione{
  77.  
  78.         //attributi
  79.         int cod;
  80.         string descrizione;
  81.         float prezzo;
  82.  
  83.         //metodi
  84.         public:
  85.         prestazione(string desc, float price){
  86.                 descrizione=desc;
  87.                 prezzo=price;
  88.         }
  89.         void visualizza();
  90.         void modifica(string, float);
  91.        
  92. };
  93.  
  94.  
  95. void prestazione::visualizza(){
  96.  
  97.     cout<<descrizione<<'\t';
  98.     cout<<prezzo<<endl;
  99. }
  100.  
  101.  
  102. void prestazione::modifica(string desc, float price){
  103.        
  104.         descrizione=desc;
  105.         prezzo=price;
  106.        
  107. }
  108.  
  109.  
  110. void menu_principale();
  111.  
  112. void menu_pazienti();
  113.  
  114. void menu_prestazioni();
  115.  
  116.  
  117. int main()
  118. {
  119.  
  120.         vector<Paziente> assistito;             //istanza del vettore dei pazienti
  121.         string name;                                    //nome e cognome del paziente
  122.         string city;                                    //città di residenza del paziente
  123.         string city_born;                               //città di nascita del paziente
  124.         int g, m, a;                                    //giorno, mese, anno, di nascita del paziente
  125.         int gp, mp, ap;                                 //giorno, mese, anno, di presa in carico del paziente
  126.         int i, dim, cod_paz;                    //i, indice per il vettore pazienti
  127.                                                                                 //dim, dimensione del vettore pazienti
  128.                                                                                         //cod_paz, codice identificativo del paziente
  129.                                                                                         //(cod_paz-1, posizione del paziente cod_paz nel vettore)
  130.                                                                                        
  131.         vector<prestazione> vett_prestazione;           //istanza del vettore delle prestazioni
  132.         int codice;                                                                     //codice, codice identificativo del paziente(codice-1, posizione della prestazione codice nel vettore)
  133.         string desc;                                                            //desc, descrizione della prestazione
  134.         float price;                                                            //price, prezzo della prestazione
  135.         int k, dim_prest;                                                       //k, indice per il vettore prestazioni
  136.                                                                                                 //dim_prest, dimensione del vettore prestazioni
  137.        
  138.         string line;    //stringa d'appoggio per PazienteX
  139.         int j;                  //j, intero per il ciclo for finale, che scrive sul file txt i dati
  140.         int length;             //length, intero per la dimensione del file
  141.  
  142. //acquisizione dati dal file pazienti
  143. ifstream myfile_pazienti_leggi ("pazienti.txt");
  144.  
  145.  
  146. myfile_pazienti_leggi.seekg(0, ios::end);       //check per vedere se il file è vuoto
  147. length = myfile_pazienti_leggi.tellg();
  148. myfile_pazienti_leggi.seekg(0, ios::beg);
  149.  
  150.  
  151. if(length==03){
  152.         cout<<"il file pazienti è vuoto\n";
  153. }else{
  154.                                 while (!myfile_pazienti_leggi.eof()){
  155.                                
  156.                        
  157.                                         myfile_pazienti_leggi>>line;
  158.                                         myfile_pazienti_leggi>>name;
  159.                                         myfile_pazienti_leggi>>city;
  160.                                         myfile_pazienti_leggi>>city_born;
  161.                                         myfile_pazienti_leggi>>g;
  162.                                         myfile_pazienti_leggi>>m;
  163.                                         myfile_pazienti_leggi>>a;
  164.                                         myfile_pazienti_leggi>>gp;
  165.                                         myfile_pazienti_leggi>>mp;
  166.                                         myfile_pazienti_leggi>>ap;
  167.                                        
  168.                                         assistito.push_back(Paziente(name, city, city_born, g, m, a, gp, mp, ap));
  169.                                         }
  170.                                 }
  171.  
  172. myfile_pazienti_leggi.close();
  173.  
  174. //elimina paziente preso 2 volte
  175. dim=assistito.size();
  176. assistito.erase(assistito.begin()+dim);
  177. //fine elimina paziente preso 2 volte
  178.  
  179. //svuota il file pazienti
  180. fstream myfile_pazienti_svuota ("pazienti.txt", ios::in | ios::out | ios::trunc);
  181. myfile_pazienti_svuota.close();
  182.  
  183. //fine acquisizione dati da file pazienti
  184.  
  185.  
  186.        
  187.         cout<<"--------------Programma gestione fatturazioni per infermieri professionali a domicilio--------------"<<endl;
  188.  
  189.         //do-while MENU PRINCIPALE
  190.  
  191.         do{
  192.            menu_principale();
  193.            cin >> scelta_mprincipale;
  194.            
  195.                 switch(scelta_mprincipale){
  196.                 case 1:
  197.                         //menu_griglia();
  198.                         break;
  199.  
  200.                 case 2:
  201.                         //menu_fattura();
  202.                         break;
  203.  
  204.                 case 3:
  205.                         //do-while MENU PAZIENTI
  206.  
  207.                         do{
  208.                 menu_pazienti();
  209.                 cin >> scelta_mpazienti;
  210.  
  211.                         switch(scelta_mpazienti){
  212.                 case 1:                        
  213.                                 cout<<"Inserisci Nome: ";
  214.                                 getchar();
  215.                                 getline(cin, name);
  216.                                 cout<<"Inserisci Residenza: ";
  217.                                 getline(cin, city);
  218.                                 cout<<"Inserisci Comune di nascita: ";
  219.                                 getline(cin, city_born);
  220.        
  221.                                 cout<<"Inserisci giorno Nascita: ";
  222.                                 cin>>g;
  223.                                 cout<<"Inserisci mese Nascita: ";
  224.                                 cin>>m;
  225.                                 cout<<"Inserisci anno Nascita: ";
  226.                                 cin>>a;
  227.        
  228.                                 cout<<"Inserisci Giorno Presa in carico: ";
  229.                                 cin>>gp;
  230.                                 cout<<"Inserisci mese Presa in carico: ";
  231.                                 cin>>mp;
  232.                                 cout<<"Inserisci anno Presa in carico: ";
  233.                                 cin>>ap;
  234.                                
  235.                                 assistito.push_back(Paziente(name, city, city_born, g, m, a, gp, mp, ap));                                     
  236.                                 break;
  237.                 case 2:
  238.                                 if(assistito.empty()){
  239.                                         cout << endl;
  240.                                         cout << "Non sono presenti pazienti da eliminare, inserirne uno!" << endl;
  241.                                 }else
  242.                                         {
  243.                                                 cout << endl;
  244.                                                 cout << "Inserisci codice paziente da eliminare: ";
  245.                                                 cin >> cod_paz;
  246.                                                 cod_paz=cod_paz-1;
  247.                                                 assistito.erase(assistito.begin()+cod_paz);
  248.                                         }
  249.                                 break;
  250.  
  251.                 case 3:
  252.                                 if(assistito.empty()){
  253.                                         cout << endl;
  254.                                         cout << "Non sono presenti pazienti da modificare, inserirne uno!" << endl;
  255.                                 }else
  256.                                 {
  257.                                 cout << "Inserisci codice paziente: ";
  258.                                 cin >> cod_paz;
  259.                                
  260.                                 cout<<"Inserisci Nome: ";
  261.                                 getchar();
  262.                                 getline(cin, name);
  263.                                 cout<<"Inserisci Residenza: ";
  264.                                 getline(cin, city);
  265.                                 cout<<"Inserisci Comune di nascita: ";
  266.                                 getline(cin, city_born);
  267.        
  268.                                 cout<<"Inserisci Giorno Nascita: ";
  269.                                 cin>>g;
  270.                                 cout<<"Inserisci mese Nascita: ";
  271.                                 cin>>m;
  272.                                 cout<<"Inserisci anno Nascita: ";
  273.                                 cin>>a;
  274.        
  275.                                 cout<<"Inserisci Giorno Presa in carico: ";
  276.                                 cin>>gp;
  277.                                 cout<<"Inserisci mese Presa in carico: ";
  278.                                 cin>>mp;
  279.                                 cout<<"Inserisci anno Presa in carico: ";
  280.                                 cin>>ap;
  281.                                
  282.                                 assistito[cod_paz-1].modifica(name, city, city_born, g, m, a, gp, mp, ap);
  283.                                 cout << "\n" << "Paziente modificato con successo" << endl;
  284.                                 }
  285.                                 break;
  286.                
  287.                 case 4:
  288.                                 if(!assistito.empty()){
  289.                                 dim=assistito.size();
  290.                                 cout << endl;
  291.                                 cout << "Cod" << setw(20)<<"Nome e cognome"<<setw(20)<<"Nato a"<<setw(20)<<"residente in"<<setw(15)<<"il giorno"<<setw(15)<<"assistito dal"<<endl;
  292.                                 for (i=0; i<dim; i++) {
  293.                                         cout << setw(3) << i+1;
  294.                                         assistito[i].Visualizza();
  295.                                         }
  296.                                 }else
  297.                                         {
  298.                                                 cout << endl;
  299.                                                 cout << "Non sono presenti pazienti, inserirne uno!" << endl;
  300.                                         }
  301.                                 break;
  302.                 case 5:
  303.                                 break;
  304.                         }
  305.                                 }while(scelta_mpazienti!=5);
  306.                         //fine do-while MENU PAZIENTI
  307.                         break;
  308.  
  309.         case 4:
  310.                         //do-while MENU PRESTAZIONI
  311.                         do{
  312.                             menu_prestazioni();
  313.                             cin >> scelta_mprestazioni;
  314.                        
  315.                                 switch(scelta_mprestazioni){
  316.                
  317.                 case 1:
  318.                                 if(!vett_prestazione.empty()){
  319.                                 cout << "Codice" << '\t' << "Descrizione" << '\t' << "Costo" << endl;
  320.                                 dim_prest=vett_prestazione.size();
  321.                                 for (k=0; k<dim_prest; k++) {
  322.                                         cout << k+1 << '\t';
  323.                                         vett_prestazione[k].visualizza();
  324.                                         }
  325.                                 }else
  326.                                         {
  327.                                                 cout << endl;
  328.                                                 cout << "Non sono presenti prestazioni, inserirne una!" << endl;
  329.                                         }
  330.                                 break;
  331.                                
  332.                 case 2:
  333.                                 if(vett_prestazione.empty()){
  334.                                         cout << endl;
  335.                                         cout << "Non sono  presenti prestazioni da modificare, inserirne una!" << endl;
  336.                                 }else
  337.                                 {
  338.                                 cout << "Inserisci codice prestazione: ";
  339.                                 cin >> codice;
  340.                                 cout << "Inserisci nuova descrizione: ";
  341.                                 getchar();
  342.                                 getline(cin, desc);
  343.                                 cout << "Inserisci nuovo prezzo: ";
  344.                                 cin >> price;
  345.                                 vett_prestazione[codice-1].modifica(desc, price);
  346.                                 cout << "\n" << "Prestazione modificata con successo" << endl;
  347.                                 }
  348.                                 break;
  349.                                
  350.                 case 3:
  351.                                 if(vett_prestazione.empty()){
  352.                                         cout << endl;
  353.                                         cout << "Non sono presenti prestazioni da eliminare, inserirne una!" << endl;
  354.                                 }else
  355.                                         {
  356.                                                 cout << endl;
  357.                                                 cout << "Inserisci codice prestazione da eliminare: ";
  358.                                                 cin >> codice;
  359.                                                 codice=codice-1;
  360.                                                 vett_prestazione.erase(vett_prestazione.begin()+codice);
  361.                                         }                              
  362.                                 break;
  363.                                
  364.                 case 4:
  365.                                 cout<<"Inserisci descrizione: ";
  366.                                 getchar();
  367.                                 getline(cin, desc);
  368.                                 cout<<"Inserisci costo: ";
  369.                                 cin>>price;
  370.                                 vett_prestazione.push_back(prestazione(desc, price));
  371.                                 cout << "\n" << "Prestazione aggiunta con successo" << endl;
  372.                                 break;
  373.                                
  374.                 case 5:
  375.                                 break;
  376.        
  377.                 }
  378.                                         }while(scelta_mprestazioni!=5);
  379.                         //fine do-while MENU PRESTAZIONI
  380.                         break;
  381.  
  382.                 case 5:
  383.                 //------------scrittura su file pazienti
  384. ofstream myfile_pazienti_scrivi ("pazienti.txt", ios::in | ios:: out | ios::ate);
  385.  
  386. j=assistito.size();
  387.                                
  388.                                 for(i=0;i<j;i++){
  389.                                 myfile_pazienti_scrivi << "Paziente"<<i+1<<"\n";
  390.                                 myfile_pazienti_scrivi << assistito[i].nome<<"\n"<<assistito[i].residenza<<"\n"<<assistito[i].comune_di_nascita<<"\n";
  391.                                 myfile_pazienti_scrivi << assistito[i].nascita.gg<<"\n"<<assistito[i].nascita.mm<<"\n"<<assistito[i].nascita.aa<<"\n";
  392.                                 myfile_pazienti_scrivi << assistito[i].presa_in_carico.gg<<"\n"<<assistito[i].presa_in_carico.mm<<"\n"<<assistito[i].presa_in_carico.aa<<"\n";
  393.                                 }
  394. //------------fine scrittura file pazienti
  395.  
  396.                 //------------scrittura su file prestazioni
  397.  
  398. //------------fine scrittura file prestazioni
  399.  
  400.                 //chiusura file aperti
  401.                                 myfile_pazienti_scrivi.close();
  402.                 //fine chiusura file aperti
  403.                         cout << endl;
  404.                         cout << "Arrivederci e Grazie!" << endl;
  405.                         break;
  406.                 }
  407.        
  408.         }while(scelta_mprincipale!=5);
  409.         //fine do-while MENU PRINCIPALE
  410.        
  411. //      system("PAUSE");
  412.         return 0;
  413. }
  414.  
  415.  
  416. void menu_principale(){
  417.        
  418.         cout << endl;
  419.         cout << "--------------Menu Principale--------------" << endl;
  420.         cout << endl;
  421.         cout<<"1. Vai a griglia mensile"<<endl;
  422.         cout<<"2. Vai a fatturazione mensile"<<endl;
  423.         cout<<"3. Vai a Menu Pazienti"<<endl;
  424.         cout<<"4. Vai a Menu Prestazioni"<<endl;
  425.         cout<<"5. ESCI"<<endl;
  426.        
  427.         cout << "Scelta : ";
  428.  
  429. }
  430.  
  431. void menu_pazienti(){
  432.        
  433.         cout << endl;
  434.         cout << "--------------Menu Pazienti--------------" << endl;
  435.         cout << endl;
  436.         cout << "1. Aggiungi Paziente" << endl;
  437.         cout << "2. Elimina Paziente" << endl;
  438.         cout << "3. Modifica Paziente" << endl;
  439.         cout << "4. Visualizza tutti i pazienti" << endl;
  440.         cout << "5. Torna al menu principale" << endl;
  441.         cout << endl;
  442.  
  443.         cout << "Scelta : ";
  444.        
  445. }
  446.                
  447. void menu_prestazioni(){
  448.        
  449.         cout << endl;
  450.         cout << "--------------Menu Prestazioni--------------" << endl;
  451.         cout << endl;
  452.         cout << "1. Visualizza database prestazioni"<<endl;
  453.         cout << "2. Modifica prestazione"<<endl;
  454.         cout << "3. Elimina prestazione"<<endl;
  455.         cout << "4. Aggiungi prestazione"<<endl;
  456.         cout << "5. Torna al menu principale"<<endl;
  457.        
  458.         cout << "Scelta : ";
  459.        
  460. }



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
PM Quote
Avatar
Xaratroom (Ex-Member)
Expert


Messaggi: 526
Iscritto: 03/04/2008

Segnala al moderatore
Postato alle 21:16
Mercoledì, 24/06/2009
qual'è la traccia dell'esercizio (che espone le features che l'applicativo dovrà avere)?

PM Quote
Avatar
carlito00w (Normal User)
Newbie


Messaggi: 10
Iscritto: 20/06/2009

Segnala al moderatore
Postato alle 16:42
Lunedì, 29/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

  1. string line, name, citta, nascita;
  2. int gn, mn, an, gp, mp, ap;
  3. int length;
  4.  
  5. ifstream leggi_paz;
  6.  
  7. leggi_paz.open("pazienti.txt", ios::in | ios::beg);
  8.  
  9. if(leggi_paz.fail()){
  10.                 cout<<"Errore lettura file pazienti."<<endl;
  11.         }else
  12.                 {
  13.                         leggi_paz.seekg(0, ios::end);
  14.                         length = leggi_paz.tellg();
  15.                         leggi_paz.seekg(0, ios::beg);
  16.  
  17.                         if(length!=0){
  18.  
  19.                         while (!leggi_paz.eof()){
  20.  
  21.                                         leggi_paz>>line;        
  22.                                         leggi_paz>>name;
  23.                                         leggi_paz>>nascita;
  24.                                         leggi_paz>>citta;
  25.                                         leggi_paz>>gn;
  26.                                         leggi_paz>>mn;
  27.                                         leggi_paz>>an;
  28.                                         leggi_paz>>gp;
  29.                                         leggi_paz>>mp;
  30.                                         leggi_paz>>ap;
  31.                                        
  32.                                         assistito.push_back(paziente(name, nascita, citta, gn, mn, an, gp, mp, ap));
  33.                                         }
  34.                         }else
  35.                                 {
  36.                                         cout<<endl;
  37.                                         cout<<"Il file pazienti e' vuoto!"<<endl;
  38.                                         cout<<endl;
  39.                         }
  40.                 }
  41.  
  42. 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:k:

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo