PDA

Visualizza la versione completa : [C++] Sovrascrittura File


Pacio88
12-10-2008, 16:22
Ho creato questo programma banale che salva i movimenti su un file e ne calcola il saldo, per esercitarmi. Tuttavia non riesco a risolvere un problema, ovvero che ogni volta che lancio il programma, il file in cui salvavo i movimenti viene sovrascritto da uno nuovo.

Non ho molta esperienza (sono alle prime armi) quindi se avete delle illuminazioni su come migliorare il codice sono ben accette.



#include <iostream>
#include <fstream>

using namespace std;

/* Dichiarazione Funzioni */

void fileCreator();
void titol();
void menu();
void insertChar();
double saldo();

/* Dichiarazione Variabili Globali */

double tot = 0;

int main()
{
fileCreator();
titol();
menu();

return 0;
}



/* Apertura e Creazione File */

void fileCreator()
{
fstream file;

file.open("testo.txt", ios::out);
file << "CONTABILITA'"
<< endl
<< endl
<< "DATA" << "\t\t" << "MOVIMENTO" << "\t\t" << "CAUSALE" << "\t\t\t\t" << "SALDO";
file.close();
}

/* Titolo */

void titol()
{
cout << endl
<< "**GESTIONE CONTABILITA'**"
<< endl;
}




/* Menu Principale */

void menu()
{
int status;

cout << endl
<< "1. Inserire un nuovo movimento.\n"
<< "2. Visualizza il Saldo.\n"
<< "0. Esci\n"
<< endl
<< "Inserisci la tua scelta: ";
cin >> status;
cout << endl;

switch(status)
{
case 1:
insertChar();
menu();
break;
case 2:
cout << "Saldo corrente: " << saldo() << " Euro." << endl;
menu();
case 0:
break;
default:
cout << endl
<< "ERRORE: Inserisci un valore compreso tra 0 ed 1!"
<< endl;
menu();
break;
}
}

void insertChar()
{
int giorno, mese, anno;
double mov = 0;
fstream file;

cout << "Inserisci la data del movimento(giorno/mese/anno)"
<< endl;
cin >> giorno >> mese >> anno;
cout << "Inserisci il movimento: ";
cin >> mov;

tot = tot + mov;

file.open("testo.txt", ios::out | ios::app);
file << endl
<< giorno << "/" << mese << "/" << anno
<< "\t"
<< mov
<< "\t\t"
<< "Funzione non disponibile"
<< "\t\t"
<< tot;
file.close();
}

double saldo()
{
return tot;
}

shodan
12-10-2008, 17:03
Nella funzione fileCreator devi aprire il file in modalita ios::app (come peraltro fai nella insertChar())



file.open("testo.txt", ios::out|ios::app);

Pacio88
12-10-2008, 21:17
Grazie, non ci avevo proprio pensato.
Però avrei bisogno di un altro suggerimento. Quando devo inserire una data (relativa ad un movimento) sono obbligato a dover inserire ogni valore andando a capo in questo modo:
10
10
2008

mentre vorrei poter scrivere: 10/10/2008.

Come posso fare?

shodan
12-10-2008, 21:37
Aggiungi l'header <string>, poi:


cout << "Inserisci la data del movimento(giorno/mese/anno)" << endl;
string data;
getline(cin,data);

Così puoi digitare la data come ti serve / comprese.

Loading