C++Banking Programm laden/speichern

  • #1
D

Dr-Hammer

Neues Mitglied
Themenersteller
Dabei seit
14.01.2007
Beiträge
3
Reaktionspunkte
0
Hallo,
ich versuche grade ein Onlinebanking Programm zu programmieren. Aber ich hänge nun irgendwie fest.

ich brauche 3 konton, die sollen in einer .txt gespeichert und wieder geladen werden. aber da liegt mein problem. ich bin mit meinem latein am ende. Habe versucht es mit einer Funktion zu machen, das eventuell die Kontonanzahl unbegrenzt ist. aber ich komme nicht weiter.
wäre für jede hilfe sehr sehr dankebar!!!
 
  • #2
Ich grüble schon eine Weile darüber nach, was ich Dir schreiben soll. Einerseits kennst Du ja schon viele wichtige Dinge (Variablen, Funktionen, bedingte Verzweigung, Schleifen usw.), andererseits gibt es ganz grundlegende Lücken bezüglich mindestens ebenso wichtiger Themen wie Datenstrukturen, objektorientierte Programmierung, Programmplanung etc. Zumindest bilde ich mir ein, dies an Deiner Herangehensweise ablesen zu können. Widersprich mir ruhig, wenn ich falsch liege.
Selbst wenn man das Programm flicken und für die Verwaltung einiger bzw. (fast) beliebig viele Konten fit machen würde (z.B., indem man die Konten in einem Array, einer eigenen Liste oder einem STL-Container ablegt), wäre es immer noch nicht einmal halb-gar oder die Grundlage für einen weiteren Ausbau.
So, wie es ist, funktioniert es gar nicht (nicht wegen der drei Konten). Eine Endlosschleife gleich ziemlich zu Beginn ... Abgesehen davon: Deine Konto-Eigentümer haben Namen, die aus einem Zeichen bestehen; globale Variablen sind keine gute Idee; es wird bei Cursor runter abgebrochen (wenn es funktionieren würde), im Menü steht jedoch 3. Beenden; Du beachtest nicht, ob ein Konto aktiv ist; es ist kein rechter Plan erkennbar, wie Du Menüs und Untermenüs handhaben willst; das Ganze ist eher C als C++ etc. pp. Richtig angesehen habe ich es mir noch nicht.

Mein Vorschlag - wenn es nicht supereilig ist und auf Biegen und Brechen zum Laufen gebracht werden muss -:
Lehne Dich zurück, lies ein Buch über C++ (und objektorientierte Programmierung) oder zumindest ein wenig im Internet, z.B.




Grundlegenden Dinge (s.o.) kennst Du ja, wie gesagt, das ist schon mal eine ganze Menge. Schau' Dir noch mal Strings an, dynamische Speicherverwaltung (die ist auch schon für Dein Kontoprogramm notwendig, wenn die Anzahl der Konten vorher nicht bekannt ist), grundlegende Datenstrukturen (wie funktioniert eine Liste u.ä.) sowie Klassen und was damit zusammen hängt. Werfe früher oder später auch einen Blick oder zwei auf Templates und die STL.

Vor allem aber plane Dein Kontoprogramm, bevor Du anfängst, Code einzugeben, auch wenn es sich um ein kleines Übungs-Projekt handelt.
Das ist jetzt wahrscheinlich alles nicht sehr hilfreich, aber das Beste, was mir eingefallen ist. Und mögliche Lösungen des von Dir angesprochenen Problems, zumindest was mehrere Konten angeht, sind ja auch dabei. ;)
 
  • #3
erstmal danke für die tipps. das problem ist. das ich dieses programm nicht alleine mache. den quellcode oben muss ich leider so verwenden, daher auch meine probleme.
der quellcode so wird nicht funktionieren, das ist klar, da die funktionalität erst durch die gui und deren quellcode gegeben wird.
ich hatte mir vielleicht ne einfacherer lösung mit append etc vorgestellt. allerdings bin ich auch kein genie was c++ angeht. die links die du mir gegeben hast sind sehr hilfreich, dafür danke ich dir schoneinmal. das problem ist, es sollte nächste woche fertig sein, da bald meine klausuren anfangen und ich dann keine zeit bzw sehr wenig zeit für dieses programm aufbringen kann.
ein template habe ich auch schon mal in betracht gezogen, leider habe ich noch kein passendes gefunden, da bei google eben nicht alle suchanfragen immer erfolgreich sind.
 
  • #4
den quellcode oben muss ich leider so verwenden, daher auch meine probleme.

das problem ist, es sollte nächste woche fertig sein

Aha, also doch der Fall es ist eilig und muss auf Biegen und Brechen zum Laufen gebracht werden ...
Ich würde vorschlagen, dass Du dann mehr oder weniger bei C bleibst und es möglichst einfach hältst (s.u.). Auf Kompatibilität zu anderen Compilern/Betriebssystemen musst Du sicher auch nicht achten.

Zu den Konten und deren permanenter Speicherung: Vielleicht erst einmal in einem Array ablegen? Das bringt Dir
natürlich keine zur Laufzeit variable Anzahl von Konten, macht aber die weitere Verarbeitung einfacher.

Code:
#include <cassert>

const int nAccounts = 3;
const char* fileName = accounts.txt;

struct account {
  char name;
  double money;
  int pin;
  int act;
};

account accs[nAccounts];

Damit sonst nichts geändert werden muss, kannst Du die Funktionen get_acc und set_acc umschreiben, so dass
statt der Variablen acc1, acc2, acc3 das Array verwendet wird:

Code:
// accIdx: 1 .. nAccounts
int get_acc(int accIdx) {
	
  if(accIdx > nAccounts)
    return 2;
		
  assert(accIdx > 0);

  accIdx -= 1;
	
  if (accs[accIdx].act = 1) {
    act_acc.pin =   accs[accIdx].pin;
    act_acc.money = accs[accIdx].money;
    act_acc.name =  accs[accIdx].name;			
    act_acc.act =   accs[accIdx].act;
    return 1;
  } else
    return 0;
}

// accIdx: 1 .. nAccounts
void set_acc(int accIdx) {

    assert(accIdx > 0 && accIdx <= nAccounts);

    accIdx -= 1;

    accs[accIdx].pin   = act_acc.pin;
    accs[accIdx].act   = act_acc.act;
    accs[accIdx].money = act_acc.money;
    accs[accIdx].name  = act_acc.name;	
}

Index von 1 .. nAccounts (also hier 3) statt wie normal von 0 .. nAccounts-1, damit es ohne Einfluss auf den Rest
des Programms bleibt.

Vorgegeben:
sollen in einer .txt gespeichert und wieder geladen werden

int store(); //Speichert den Datensatz in eine Datei. return 1 bei Erfolg
int load();  //Läd den Datensatz aus einer Date. return 1 bei Erfolg

Speichern in C-Manier kannst Du die Konten z.B., indem Du eine Datei öffnest (der Inhalt einer vorhandenen wird dabei gelöscht)

Code:
int store() {

  FILE* fh;
  if((fh = fopen(fileName, wt)) == NULL)
    return 0;

...

in einer Schleife fprintf benutzt

Code:
// Hier 0 .. nAccounts-1, da wir direkt auf das Array zugreifen
for(int accIdx = 0; accIdx < nAccounts; accIdx++)
  // TODO: Fehlerprüfung!
  fprintf(fh, %c\n%lf\n%d\n%d\n, accs[accIdx].name, accs[accIdx].money, accs[accIdx].pin, accs[accIdx].act);

und die Datei wieder schließt

Code:
  fclose(fh);
  return 1;
}

Lesen: Auch wieder die Datei öffnen, aber mit rt

Code:
int load() {
  FILE* fh;
  if((fh = fopen(fileName, rt)) == NULL)
    return 0;

mit fscanf einlesen

Code:
for(int accIdx = 0; accIdx < nAccounts; accIdx++)
  // TODO: Fehlerprüfung!
  fscanf(fh, %c %lf %d %d , &accs[accIdx].name, &accs[accIdx].money, &accs[accIdx].pin, &accs[accIdx].act);

und schließen wie oben

Code:
  fclose(fh);
  return 1;
}

Die Datei wird so geschrieben, dass man sie in einem Texteditor einfach lesen kann (Zeilenumbrüche). Darum bitte auf die Leerzeichen im fscanf-Formatstring achten (%c %lf %d %d ), sonst wird Müll gelesen. Zumindest den Rückgabewert von fprintf und fscanf solltest Du überprüfen (in der Doku oder im Internet nachschauen, was zurückgegeben wird). Auf Dinge wie Header, Größencheck und Plausibilitätsprüfungen werden store/load wohl verzichten müssen, denke ich.

BTW: Ausprobiert habe ich da aber nichts, auch nicht groß nach weiteren Problemen im vorhandenen Code geschaut. Da muss ohnehin noch einiges gemacht werden. Achte darauf, dass bei einer Änderung der Struktur account (z.B. Datentyp von account.name von Einzelcharakter zu Zeichenkette) u.U. nicht nur die Parameter einiger Funktionen, sondern auch store() und load() geändert werden müssen.
 
  • #5
Danke, läuft jetzt ;D
 
Thema:

C++Banking Programm laden/speichern

ANGEBOTE & SPONSOREN

Statistik des Forums

Themen
113.840
Beiträge
707.963
Mitglieder
51.494
Neuestes Mitglied
Flensburg45
Oben