Advertisement
Guest User

Untitled

a guest
Jun 28th, 2017
69
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.40 KB | None | 0 0
  1. // KontenCPP.cpp : Definiert den Einstiegspunkt für die Konsolenanwendung.
  2.  
  3.  
  4. #include <iostream>
  5. #include <fstream>
  6. #include <cstring>
  7.  
  8. using namespace std;
  9.  
  10.  
  11.  
  12. /*****************************************************************************
  13. *                           Basisklasse: cKonto                              *
  14. *****************************************************************************/
  15. class cKonto{
  16. protected:                      // protected um cSparkonto Zugriff auf Kontostand zu gewähren,
  17.     int mAccNo;                 // theoretisch könnten Name und AccNo private bleiben
  18.     float mBalance;            
  19.     char* pmName;
  20.  
  21. public:
  22.     /************************************************************
  23.     *               Konstruktoren / Destruktor                  *
  24.     ************************************************************/
  25.     cKonto( int accNo = 123456, float balance = 1234.56f, char* name = "Max Mustermann")
  26.     {
  27.         mAccNo = accNo;
  28.         mBalance = balance;
  29.  
  30.         pmName = new char[strlen(name)+1];
  31.         strcpy(pmName, name);
  32.     }
  33.  
  34.     cKonto( const char* fileName )                  // 2. Konstruktor um Objekte direkt über Dateien zu initialisieren
  35.     {
  36.         ifstream db;
  37.         db.open( fileName, ios::in);
  38.         if(db.fail())
  39.         {
  40.             cout << "Dateiname nicht gefunden";
  41.         }
  42.         char buffer1[30], buffer2[30];
  43.         db >> mAccNo >> buffer1 >> buffer2 >> mBalance;
  44.        
  45.         pmName = new char[strlen(buffer1) + 1 + strlen(buffer2) + 1];
  46.        
  47.         strcpy(pmName, buffer1);
  48.         strcat(pmName, " ");
  49.         strcat(pmName, buffer2);
  50.  
  51.         db.close();
  52.     }
  53.  
  54.     cKonto( const cKonto& source )
  55.     {
  56.         pmName = new char[ strlen(source.pmName) + 1 ];
  57.         strcpy(pmName, source.pmName);
  58.         mBalance = source.mBalance;
  59.         mAccNo = source.mAccNo;
  60.     };
  61.  
  62.     virtual ~cKonto(){
  63.         delete [] pmName;
  64.     };
  65.  
  66.     /************************************************************
  67.     *                       Set/Get                             *
  68.     ************************************************************/
  69.     int getAccNo()
  70.     {
  71.         return mAccNo;
  72.     }
  73.     void setAccNo(int neu)
  74.     {
  75.         mAccNo = neu;
  76.     }
  77.  
  78.     float getBalance()
  79.     {
  80.         return mBalance;
  81.     }
  82.     void setBalance(float neu)
  83.     {
  84.         mBalance = neu;
  85.     }
  86.  
  87.     char* getName()
  88.     {
  89.         return pmName;
  90.     }
  91.     void setName(const char* neu)           // Reallokation des Speichers auf neue Stringgröße
  92.     {
  93.         if(pmName)
  94.             delete [] pmName;
  95.         pmName = new char[strlen(neu) +1 ];
  96.         strcpy(pmName, neu);
  97.     }
  98.  
  99.     /************************************************************
  100.     *                   Methoden                                *
  101.     ************************************************************/
  102.     virtual void einauszahlen(float amount)                         // virtual, da die Funktion in cSparkonto überschrieben wird
  103.     {
  104.         mBalance += amount;
  105.     }
  106.  
  107.     virtual void ueberweisung(cKonto& empfaenger, float amount)     // s.o.
  108.     {
  109.         mBalance -= amount;
  110.         empfaenger.mBalance += amount;
  111.     }
  112.  
  113.     void print()
  114.     {
  115.         cout << "-----------------------\n";
  116.         cout << "- " << pmName << "\n";
  117.         cout << "- Kontonummer:\n";
  118.         cout << "- \t" << mAccNo << "\n";
  119.         cout << "- Guthaben:\n";
  120.         cout << "- \t" << mBalance << "\n";
  121.         cout << "-----------------------\n";
  122.     }
  123.  
  124.     void saveToFile(char* fileName)
  125.     {
  126.         ofstream output;
  127.         output.open(fileName, ios::out);
  128.         output << mAccNo << " " << pmName << " " << mBalance;
  129.         output.close();
  130.     }
  131.  
  132.     bool loadFromFile( const char* fileName )       // Einlesen aus Datei als Methode, um dynamisch erstellte Objekte
  133.     {                                               // auch ausserhalb des Konstruktors über Dateien mit Daten zu füllen
  134.         ifstream db;
  135.         db.open( fileName, ios::in);
  136.         if(db.fail())
  137.         {
  138.             cout << "Dateiname nicht gefunden";
  139.             return false;
  140.         }
  141.         char buffer1[30], buffer2[30];
  142.         db >> mAccNo >> buffer1 >> buffer2 >> mBalance;
  143.        
  144.         if(pmName)
  145.             delete [] pmName;
  146.         pmName = new char[strlen(buffer1) + 1 + strlen(buffer2) + 1];
  147.        
  148.         strcpy(pmName, buffer1);
  149.         strcat(pmName, " ");
  150.         strcat(pmName, buffer2);
  151.  
  152.         db.close();
  153.         return true;
  154.     }
  155.    
  156.     void init( int accno, float stand, const char* name)
  157.     {
  158.         setName(name);
  159.         mBalance = stand;
  160.         mAccNo = accno;
  161.     }
  162. };
  163.    
  164. /*****************************************************************************
  165. *                   Klasse: cSparkonto -> cKonto                             *
  166. *****************************************************************************/
  167. class cSparkonto:public cKonto{             // abgeleitete Klasse
  168. private:
  169.     float mPraemie;                         // Hoehe der Praemie
  170.  
  171. public:
  172.     cSparkonto(float praemie = 50.00f, int accNo = 123456, float balance = 1234.56f, char* name = "Max Mustermann" ) : cKonto(accNo, balance, name)     // Standardkonstruktor
  173.     {
  174.         mPraemie = praemie;
  175.         mBalance += mPraemie;
  176.     }
  177.  
  178.     void einauszahlen(float amount)         // Funktion "überschrieben", um Überziehung zu verhindern
  179.     {
  180.         if( mBalance+amount >= 0 )
  181.         {
  182.             mBalance += amount;
  183.         }
  184.         else
  185.         {
  186.             cout << "Konto nicht gedeckt" << endl;
  187.         }
  188.     }
  189.  
  190.     void ueberweisung(cKonto& empfaenger, float amount)         // Polymorphie: Funktion akzeptiert sowohl Basisklasse
  191.     {                                                           // als auch abgeleitete Kontoklassen
  192.         if( mBalance-amount >= 0 )
  193.         {
  194.             mBalance -= amount;
  195.             empfaenger.einauszahlen(amount);
  196.         }
  197.         else
  198.         {
  199.             cout << "Konto nicht gedeckt" << endl;
  200.         }
  201.     }
  202. };
  203.  
  204.  
  205. int main(int argc, char argv[])
  206. {
  207.  
  208.     cSparkonto konto1;
  209.     cKonto konto2(345345, 1000.00f, "Max Meier");
  210.     konto1.init(12345, 33.33f, "Dob Dob");  // vererbte init-Fuktion
  211.     konto1.einauszahlen(-50);               // sollte Fehler produzieren
  212.     konto1.print();
  213.     konto1.einauszahlen(+50);               // möglich
  214.     konto1.print();
  215.  
  216.     cout << "----------- Ueberweisung ------------" << endl;
  217.     konto2.ueberweisung(konto1, 300.00f);
  218.     konto1.print();
  219.     konto2.print();
  220.     return 0;
  221. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement