Speichern und neue Funktion?
-
Hi Leute,
ich habe 2 kleine Probleme.
1. Ich möchte aus der Funktion hier 2 machen, also die Abfrage der Daten soll eine eigenständige Funktion werden. Das heißt, ich möchte, wenn die Funktion gestartet wird meine vorherigen Einträge wieder haben also
2. muss ich die Einträge irgendwie speichern (ifstream?), nur wie geht das? Und sie müssen dann bei jedem Aufruf der Funktion neu geladen werden.
Hier mal die Funktion:
[cpp] //Methode die die Umsätze festhält void Konto::kontoUmsaetze() { bool auswahl_umsatz = false; string tag; string datum; string grund; string art; signed short int betrag; // Betrag der eingeht oder abgezogen wird do { //daten werden nach der Reihe abgefragt cout << "Tag: "; cin >> tag; cout << "\nDatum: "; cin >> datum; cout << "\nEinkommen/Ausgabe: "; cin >> art; cout << "\nGrund: "; cin >> grund; cout << "\nBetrag: "; cin >> betrag; // Alle Daten werden ausgegeben vorher wird Display gelöscht system("cls"); cout << "\n" << tag << "\t" << datum << "\t" << art << "\t" << grund << "\t" << betrag << endl; //kontostand wird neu berechnet USI aktuellerKontostand = kontoStand(); //Variable die den neu berechneten Kontostand liefert aktuellerKontostand += betrag; //Neu berechneter kontostand wird ausgeben cout << endl << endl << endl; cout << "-------------------------" << endl; cout << "Neuer Kontostand : " << aktuellerKontostand << endl; cout << "-------------------------" << endl; cout << endl; cout << endl << endl << endl << endl; cout << "Geben Sie 'z' ein um zurueck zu kehren."; //System wartet auf Eingabe switch(getch()) { case 'z': system("cls"); auswahl_umsatz = true; break; default: system("cls"); cout << "---------------------------------" << endl; cout << "Achtung! Fehler bei der Eingabe!" << endl; cout << "Bitte geben Sie 'z' ein!" << endl; cout << "---------------------------------"; break; } } while(! auswahl_umsatz); } [/cpp]
Wie gesagt, dass cout und cin am Anfang soll in eine eigene Funktion, die dann zB. Abfrage heißt, das wäre vielleicht gar nicht mal das Problem. AUs der Funktion kontoUmsaetze() soll Abfrage dann aufgerufen werden können. Ist auch kein Problem, aber wie bekomme ich das hin, dass mir dann alle eingegebenen Daten in kontoUebersicht zu verfügung stehen? Kann ich
[cpp] return wort1, wort2, wort3, value1; [/cpp]
schreiben? Sollte ich die abzufragenden Daten vielleicht als private ind er Klasse deklarieren und dann abfragen?
hoffe ihr könnt mir helfen?
Danke schon mal!
-
Hallo,
Ohne Klasse könntest du das so machen:
void toA(char &toA){ toA = 'a'; } void toB(char &toB){ toB = 'b'; } int main(){ char ch = 'c'; cout << ch << endl; toA(ch); cout << ch << endl; toB(ch); cout << ch << endl; }
Mit Klasse kannst du das so machen:
class Klasse{ public: void deineMethode(); void weiterbenutzen(); private: int kontonummer; }; void Klasse::deineMethode(){ kontonummer = 1445465; } void Klasse::weiterbenutzen(){ int kde = kontonummer; cout << kde; //... } int main(){ Klasse a; a.deineMethode(); a.weiterbenutzen(); }
Ein ähnliches Programm, wie du es machen möchtest:
#include <iostream> #include <fstream> #include <string> #include <iomanip> using namespace std; class Bankkunde { private: string vorname; string nachname; int kto_nr; double kto_stand; double limit; public: Bankkunde() {} void setVorname(string v) {vorname = v;} string getVorname() {return vorname;} void setNachname(string n) {nachname = n;} string getNachname() {return nachname;} void setKontonr(int nr) {kto_nr = nr;} int getKontonr() {return kto_nr;} void setKontostand(double betrag) {kto_stand = betrag;} double getKontostand() {return kto_stand;} void setLimit(double l); double getLimit() {return limit;} void einzahlen(double betrag); int auszahlen(double betrag); }; // end class Bankkunde void Bankkunde::setLimit(double l) { if (l >= 0) limit = l; } void Bankkunde::einzahlen(double betrag) { if (betrag > 0) kto_stand += betrag; } int Bankkunde::auszahlen(double betrag) { if (betrag <= 0) return 2; // negativer Auszahlungsbetrag if (kto_stand -betrag >= -limit) { kto_stand -= betrag; return 0; // Auszahlung ist erfolgt } else return 1; // Auszahlung nicht moeglich } class Bank { private: int Anzahl; public: Bankkunde *Kunden; Bank() {KundenEinlesen();} ~Bank() {delete[] Kunden;} int KundeSuchen(int nr); int ueberweisen(int auftr, int empf, double betrag); void KundenEinlesen(); void KundenInDatei(); }; // end class Bank int Bank::KundeSuchen(int nr) // Rueckgabewert ist -1, falls Konto nicht vorhanden, // ansonsten der Index des Kunden { for (int i = 0; i < Anzahl; i++) { if (Kunden[i].getKontonr() == nr) return i; } return -1; } int Bank::ueberweisen(int auftr, int empf, double betrag) { if (betrag <= 0) return -1; // Programmierfehler if (Kunden[auftr].auszahlen(betrag) == 0) { Kunden[empf].einzahlen(betrag); return 0; // Ueberweisung ausgefuehrt } else return 1; // Konto nicht gedeckt } void Bank::KundenEinlesen() { int hilf; string name; double help; ifstream lesen("Kunden.txt"); lesen >> Anzahl; Kunden = new Bankkunde[Anzahl]; for (int i = 0; i < Anzahl; i++) { lesen >> hilf; Kunden[i].setKontonr(hilf); lesen >> name; Kunden[i].setVorname(name); lesen >> name; Kunden[i].setNachname(name); lesen >> help; Kunden[i].setLimit(help); lesen >> help; Kunden[i].setKontostand(help); } lesen.close(); } void Bank::KundenInDatei() { int hilf; string name; double help; ofstream schreiben("Kunden.txt"); schreiben << endl << endl << Anzahl; for (int i = 0; i < Anzahl; i++) { hilf = Kunden[i].getKontonr(); schreiben << endl << endl << hilf << ' '; name = Kunden[i].getVorname(); schreiben << name << ' '; name = Kunden[i].getNachname(); schreiben << name << ' '; help = Kunden[i].getLimit(); schreiben << help << ' '; help = Kunden[i].getKontostand(); schreiben << help; } schreiben.close(); } int main(void) { Bank Entenhausener; Entenhausener.KundenEinlesen(); int index, index_empf, ktonr, ktonr_empf; double betrag; char wahl; cout << "Deine Kontonummer: "; cin >> ktonr; index = Entenhausener.KundeSuchen(ktonr); if (index == -1) { cout << "Falsche Kontonummer" << endl; return 0; } cout << fixed << setprecision(2); cout << "Hallo " << Entenhausener.Kunden[index].getVorname() << ' ' << Entenhausener.Kunden[index].getNachname() << endl; do { cout << endl; cout << "(K)ontostandsanzeige" << endl; cout << "(E)inzahlung" << endl; cout << "(A)uszahlung" << endl; cout << "(U)eberweisung" << endl; cout << "E(N)DE" << endl; cin >> wahl; switch (wahl) { case 'k': case 'K': cout << "Dein Kontostand: " << Entenhausener.Kunden[index].getKontostand() << " Euro" << endl; break; case 'e': case 'E': cout << "Betrag: "; do { cin >> betrag; } while (betrag < 0); Entenhausener.Kunden[index].einzahlen(betrag); break; case 'a': case 'A': cout << "Betrag: "; do { cin >> betrag; } while (betrag < 0); if (Entenhausener.Kunden[index].auszahlen(betrag) == 1) cout << "Nicht liquide!" << endl; else cout << "Sollst Du haben!" << endl; break; case 'u': case 'U': cout << "Kontonummer des Empf\x84ngers: "; cin >> ktonr_empf; index_empf = Entenhausener.KundeSuchen(ktonr_empf); if (index_empf == -1) { cout << "Falsche Kontonummer" << endl; break; } cout << "An " << Entenhausener.Kunden[index_empf].getVorname() << ' ' << Entenhausener.Kunden[index_empf].getNachname(); cout << '!' << endl << "Betrag: "; do { cin >> betrag; } while (betrag < 0); if (Entenhausener.ueberweisen (index, index_empf, betrag) != 0) cout << '\x9A' << "berweisung konnte nicht" << " ausgef\x81hrt werden" << endl; break; case 'n': case 'N': cout << "Tsch\x81ss" << endl; break; default: cout << "Falsche Eingabe" << endl; } // end switch } while (wahl != 'n' && wahl != 'N'); Entenhausener.KundenInDatei(); return 0; } // end main()
MFG winexec*
-
Danke für deine Hilfe, also dein programm geht bei mir nicht.
Egal!
Aber wenn ich das nach deinem Vorschlag mit den Klassen mache, den verstehe ich ja so weit, aber ist es dann nicht so, dass ich die Daten setze, hier die Kontonr. aber ich möchte sie ja eingeben, also jedesmal kommen neue Daten hinzu. Also der tag ändert sich, der Monat usw und am wichtigsten der Kontostand.
So würde das dann ja nicht gehen oder?
-
Hallo,
Geht nicht ist keine Fehlerbeschreibung.
Natürlich kannst du es so machen, aber du möchtest denke ich
1.) Nach dem Neustart des Programmes die Werte wieder vorhanden haben.
2.) Die Werte verändernBeides ist also kein Problem.
Wenn du mit dem Heap arbeitest, dann kannst du dir übrigens am Anfang einer Textdatei die Anzahl der Parameterreihen merken.
Wie gesagt: Schreib mich einmal per E-Mail an.
MFG winexec*