Hilfe bei C++ Aufgabe

phpMars

Erfahrenes Mitglied
Also ich soll von einem Buch eine Aufgabe machen und dazu habe ich ein paar Fragen.
Ich arbeite mti dem Microsoft Visual Studio.

Für eine Bank soll ein Programm erstellt werden, mit dem man Kontokorrent- und Sparkonten verwalten kann. Die Verwaltung der Konten soll mit Hilfe eines Dialogmenüs erfolgen.

Programm: Kontenverwaltung
=============================
1. Neues Konto anlegen
2. Kontoauszahlung
3. Einzahlung
4. Auszahlung
5. Konto löschen

0. Programm beenden

Erleuterungen zu den Menüpunkten:

• Neues Konto anlegen
Mit diesem Menüpunkt ist dynamisch ein neues Konto zu erzeugen. Dabei muss jeweils, wie auch bei den folgenden Menüpunkten unterscheiden werden, welche Art von Konto angelegt werden soll. Sparkonten und Kontokorrentkonten sollen unterschiedliche Nummernkreise als Kontonummer erhalten.

• Kontoauszug
In einer Dialogmaske soll der Benutzer die Kontonummer eingeben, für die ein Kontoauszug angefordert wird. Sofern das Konto vorhanden ist, wird mit einer Methode Kontoauszug() die Information ausgegeben. Ist das Konto noch nicht angelegt, so ist eine Fehlermeldung auf den Bildschirm zu geben.

• Einzahlung
In einer Dialogmaske soll der Benutzer die Kontonummer eingeben, für die eine Einzahlung zu verbuchen ist

• Auszahlung
siehe Erläuterung Einzahlung

• Konto löschen
Beim Aufruf des Menüpunktes Konto löschen soll nicht tatsächlich der von diesem Objekt benutzte Speicherplatz wieder freigegeben werden, sondern es soll lediglich logisch gelöscht werden, so dass ein versehentliches Löschen wieder rückgängig gemacht werden kann.

-----------------------------------------------------------------------------------

Ich habe ein neues Projekt gestartet (Win32) Konsolenapplikation -> Leeres projekt.
So nun habe ich in meine Resource Files meine main.cpp, in der ich das Hauptprogramm schreiben will.

Ist es möglich das ich jeden Menüpunkt in eine eigene .cpp speicher und diese dann Includiere. Damit das ganze nicht zu arg unübersichtlich wird ?


Mein Programm habe ich so angefangen:

Code:
//--------------Kontenverwaltung--------------------------------------------------------------------------
# include <iostream>
# include <stdio.h>
# include <conio.h>
# include <stdlib.h>
# include <time.h>
# include <stdio.h>
# include <string>
# include <algorithm>
# include <iomanip>
using namespace std;
//--------------Stephan Liebig 2006-----------------------------------------------------------------------


# ifdef WIN32
# ifdef __BORLANDC__					
# include <conio.h>						
# else

void clrscr (void) {					
  system ("cls");
}
# endif
# else /* WIN32 */						
void clrscr(void) { }
# endif


int main()
{
	int AuswahlHptMenu;

	cout << "Programm: Kontenverwaltung" << endl;
	cout << "===================================" << endl;
	cout << "1. Neues Konto anlegen" << endl;
	cout << "2. Kontoauszug" << endl;
	cout << "3. Einzahlung" << endl;
	cout << "4. Auszahlung" << endl;
	cout << "5. Konto loeschen" << endl << endl;
	cout << "0. Programm beenden" << endl << endl;
	cout << "Ihre Auswahl: ";
	cin >> AuswahlHptMenu;

	switch(AuswahlHptMenu)
	{
	case 1:
		// Neues Konto anlegen
		break;
	case 2:
		// Kontoauszug
		break;
	case 3:
		// Einzahlung
		break;
	case 4:
		// Auszahlung
		break;
	case 5:
		// Konto löschen
		break;
	case 0:
		// Programm beenden
		break;
	default:
		cout << "\n Falsche Eingabe" << endl;
		system("PAUSE");
	}

return 0;
}

Kann mir jemand sagen wie ich am besten wietermache ?
 
Zuletzt bearbeitet:
1. Du legst eine Klasse 'Konto' an, die den Kontentyp, die Kontonummer, den Betrag (Kontostand), eine Liste der auf dem Konto ausgeübten Aktionen sowie Funktionen zum Einzahlen und Abheben enthält. Eine Aktion sollte den Typ (Einzahlung oder Auszahlung), das Datum, einen Beschreibungstext und den Betrag enthalten. Das sollte auch mit einer Klasse 'Aktion' gemacht werden, von der Du eine Liste anlegst. Für Listen siehe STL-Template 'list'.
2. Du legst eine (sortierte) Liste für Objekte der Klasse 'Konto' an, welche Funktionen zum Hinzufügen und Löschen eines Kontos und zum Suchen eines Kontos anhand der Kontonummer enthält.
3. Für jeden Menüpunkt (außer '0') schreibst Du eine Fumktion:
3.1 Neues Konto anlegen:
- Untermenü zur Abfrage des Kontentyps
- Erzeugung der Kontonummer
- Erzeugung eines Objektes der Klasse 'Konto' tes erfragten Typs mit der erzeugten Kontonummer
- Einfügen des Kontenobjektes in die Liste
3.2 Kontoauszug
- Kontonummer abfragen
- Konto in der Liste suchen
- Ausgabe aller in der Aktionen-Liste des Kontos gespeicherten Aktionen
- Leeren der Aktionen-Liste
3.3 Einzahlung
- Kontonummer abfragen
- Konto in Liste suchen
- Konto-Funktion Einzahlung aufrufen. Dieser Funktion wird der Betrag und eine Beschreibung (z.B.:'Bareinzahlung' oder 'Überweisung') übergeben. Sie legt ein Aktionsobjekt an, fügt es in die Aktionsliste ein und summiert den Einzahlbetrag zum Kontostand
3.4 Auszahlung
- Kontonummer abfragen
- Konto in Liste suchen
- Konto-Funktion Auszahlung aufrufen. Dieser Funktion wird der Betrag und eine Beschreibung (z.B.:'Barauszahlung' oder 'Abbuchung') übergeben. Sie legt ein Aktionsobjekt an, fügt es in die Aktionsliste ein und zieht den Auszahlbetrag vom Kontostand ab
3.5 Konto löschen
- Kontonummer abfragen
- Konto in Liste suchen und aus dieser löschen

Ich hoffe, das hilft dir schonmal weiter.

EDIT:
Du solltest das Hauptmenü in eine Schleife legen, die Du verläßt, wenn '0' ausgewählt wurde
 
ich habe dann noch eine Frage:

Muss ich unbedingt eine Schleife verwenden, um wieder an den Anfang zu kommen bei einer Fehleingabe?
Ich möchte das bei einer Fehleingabe wieder das Menü erscheint. Wie kann ich das machen ohne ein goto zu verwenden ?

[edit]

Könnte so die Klasse aussehen ?

Code:
	class Konto
	{
	public:
		string Vorname;
		string Nachname;
		char[20] Kontotyp;
		int Kontonummer;

		//Methoden

		void SchreibVorname(void);
		void SchreibNachname(void);
		void SchreibKontotyp(void);
		void SchreibKontonummer(void);
		void ZeigVorname(void);
		void ZeigNachname(void);
		void ZeigKontotyp(void);
		void ZeigKontonummer(void);
		
	}
 
Zuletzt bearbeitet:
moin


Ne, wirst dann um eine Schleife nicht herumkommen, aber ist ja auch kein Aufwand. Beachten musst du dann aber das du
Code:
case 0:
// Programm beenden
     break;
in
Code:
case 0:
// Programm beenden
     return 0;
ändern musst.


mfg
umbrasaxum
 
phpMars hat gesagt.:
Könnte so die Klasse aussehen ?
Code:
	class Konto
	{
	public:
		string Vorname;
		string Nachname;
		char[20] Kontotyp;
		int Kontonummer;

		//Methoden

		void SchreibVorname(void);
		void SchreibNachname(void);
		void SchreibKontotyp(void);
		void SchreibKontonummer(void);
		void ZeigVorname(void);
		void ZeigNachname(void);
		void ZeigKontotyp(void);
		void ZeigKontonummer(void);
		
	}
Deine Klasse ist nicht schön aufgebaut ! :-)

Mache deine Membervariablen lieber private und nur benötigte
Methoden public. Für den dirketen Zugriff auf Membervariablen benutzte
setter und getter Methoden.

Gruß,
Christian
 
Wie Mr. Undertaker schon sagte, es ist besser, die Membervariablen private zu deklarieren. Weiterhin würde ich, wie schon beschrieben, nur Funktionen zum Einzahlen, Auszahlen, Kontostandsabfrage und Kontoauszug implementieren.
Die Eigenschaften Name, Kontonummer und Kontentyp würde ich im Konstruktor schon bei der Objekterzeugung setzen. Weiterhin brauchst Du natürlich noch eine Membervariable für den Kontostand (ohne macht ein Konto wenig Sinn ;-)) und eine Liste, in der die auf dem Konto getätigten Aktionen gespeichert werden.
Wenn das Programm später noch erweitert werden soll und die Kontentypen dann vielleicht unterschiedliche Aktionen ausführen sollen, könntest Du ja eine Basisklasse 'Konto' erstellen, von der Du die Klassen 'Girokonto' und Korrentkonto' ableitest. So kannst Du Dich etwas mit der Vererbung vertraut machen.

[OBERLEHRER ON]
Es wäre natürlich einfacher, wenn ich Dir ein implementiertes Beispiel posten würde, aber das möchte ich noch vermeiden, da der Lerneffekt beim selber probieren wesentlich besser ist.
[OBERLEHRER OFF]
 
Hi,

muss jetzt genau die gleiche Aufgabe machen, aber leider bleibe ich am schwierigen main Teil hängen.

Könnt ihr mal überprüfen ob ich bis jetzt alles richtig habe?

Header:
Code:
//Headerdatei: Kontoverwaltung.h
#ifndef Konto_h
#define Konto_h

class Konto
{
private:
int m_Kontonummer;
string m_Kontoinhaber;
double m_Kontostand;
double m_Habenzinssatz;

public:
double Einzahlung();
double Auszahlung();
void Kontoauszug(int Kontonummer, string Kontoinhaber, double Kontostand);
double Zinsberechnung();
double HabenZinsberechnungKontokorrentkonto();
double SollZinsberechnungKontokorrentkonto();
Konto(int m_Kontonummer, string m_Kontoinhaber, double m_Kontostand, double m_Habenzinssatz);
Konto();
~Konto();
};
#endif

Methoden:
Code:
//Definition Methoden
#include <iostream>
#include <string>

using namespace std;
#include "Konto.h"

double Konto::Einzahlung()
{
	return m_Kontostand;
}

double Konto::Auszahlung()
{
	return m_Kontostand;
}

void Konto::Kontoauszug(int Kontonummer, string Kontoinhaber, double Kontostand)
{
	m_Kontonummer=Kontonummer;
	m_Kontoinhaber=Kontoinhaber;
	m_Kontostand=Kontostand;
}

double Konto::Zinsberechnung()
{
	return m_Habenzinssatz;
}


Konto::Konto(int Kontonummer, string Kontoinhaber, double Kontostand, double Habenzinssatz)//Überladener Konstruktor
{
m_Kontonummer=Kontonummer;
m_Kontoinhaber=Kontoinhaber;
m_Kontostand=Kontostand;
m_Habenzinssatz=Habenzinssatz;
}

Konto::Konto()//Konstruktor
{
m_Kontonummer=0;
m_Kontoinhaber=" ";
m_Kontostand=0.0;
m_Habenzinssatz=0.0;
}

Konto::~Konto()//Dekonstruktor
{}

Main:

Code:
#include <iostream>
#include<string>
using namespace std;
#include "Konto.h"

int main()
{
	
int menuepunkt;
int zinsen;
double habenzinssatz;
int sollzinssatz;
string Kontoinhaber;
int Kontonummer

cout<<"Kontenverwaltung"<<endl;
cout<<"================="<<endl;
cout<<"1. Neues Konto anlegen"<<endl;
cout<<"2. Kontoauszug"<<endl;
cout<<"3. Einzahlung"<<endl;
cout<<"4. Auszahlung"<<endl;
cout<<"5. Konto löschen"<<endl;
cout<<"0. Programm beenden"<<endl;
cout<<"Bitte geben SIe ihr Menuepunkt ein:";
cin>>menuepunkt;

switch(menuepunkt)
{
case 1:cout<<"Fuer ein Sparkonto geben sie die 1 ein und für ein Kontokorrenkonto geben Sie bitte die 2 ein."<<endl;
	   break;
case 2:cout<<"Geben Sie bitte ihre Kontonummer ein";
	   cin>>Kontonummer;
	   break;


		   


system("PAUSE");
return 0;
}

EDIT:
Wie soll ich das mit der unterschiedlichen Kontonummern realisieren, Wie mache ich, dass das Programm unterschiedliche Kontonummern vergibt?
• Neues Konto anlegen
Mit diesem Menüpunkt ist dynamisch ein neues Konto zu erzeugen. Dabei muss jeweils, wie auch bei den folgenden Menüpunkten unterscheiden werden, welche Art von Konto angelegt werden soll. Sparkonten und Kontokorrentkonten sollen unterschiedliche Nummernkreise als Kontonummer erhalten.
 
Zuletzt bearbeitet:
Kann mir keiner weiterhelfen?

ich möchte ein neues Konto anlegen wo das Programm selbst die Kontonummer generiert und immer unterschiedliche. Ich will das wie man in meinem code sieht mit einer For-Schleife machen, aber das bekomme ich irgendwie nicht hin:(

Code:
//Alexander Berger KI071
#include <iostream>
#include<string>
using namespace std;
#include "Konto.h"

int main()
{
	
int menuepunkt;
int zinsen;
double habenzinssatz;
int sollzinssatz;
string Kontoinhaber;
int Kontonummer;
int wahl;
int i;

do
{
cout<<"Kontenverwaltung"<<endl;
cout<<"================="<<endl;
cout<<"1. Neues Konto anlegen"<<endl;
cout<<"2. Kontoauszug"<<endl;
cout<<"3. Einzahlung"<<endl;
cout<<"4. Auszahlung"<<endl;
cout<<"5. Konto loeschen"<<endl;
cout<<"0. Programm beenden"<<endl<<endl;
cout<<"Bitte geben Sie ihr Menuepunkt ein:";
cin>>menuepunkt;
cout<<endl;


switch(menuepunkt)
{
case 1:cout<<"Fuer ein Sparkonto geben Sie die 1 ein. "<<endl<< "Fuer ein Kontokorrenkonto geben Sie bitte die 2 ein."<<endl;
	   cout<<"Eingabe:";
	   cin>>wahl;
	   
	   if (wahl==1)
	   {
	   cout<<endl<<"Auswahl Sparkonto"<<endl<<endl;
	   for (i=1;i=1;i++)
	   {
		   cout<<"Kontonummer:"<<i<<"."<<endl;
		   cout<<"Geben Sie ihren Vor-undZunamen ein: ";
		   cin>>Kontoinhaber;
	   }
	   }
	   else if (wahl==2)
	   {
	   cout<<"Kontokorrentkonto"<<endl;
	   }
	   if(wahl>2)
	   {
	   cout<<"Falsche Eingabe"<<endl;
	   }
	   break;
case 2:cout<<"Geben Sie bitte ihre Kontonummer ein";
	   cin>>Kontonummer;
	   break;

}
}
while(menuepunkt!=0);
		   


system("PAUSE");
return 0;

}
 
C++:
for (i=1;i=1;i++)
Guck dir mal deine Abbruchbedingung an ;)

Endlich einer der mir helfen möchte :)

Ja ich weiß sieht bisschen dumm aus, aber das ist die letzte Abbruchbedingung die ich ausprobiert habe. Dieses Sch*** Konto anlegen bekomme das einfach nicht hin. Die anderen Menüpunkte sind nicht so schwer aber das mit dem Konto anlegen...:(
 
Zurück