Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » -k0nt0-

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: > 1 <
000
17.09.2002, 17:50 Uhr
uTaNG



hallo, ich schreibe an einem K0nt0 Programm und bin an einer stelle angekommen wo ich nicht mehr weiter weiss. Im Unten habe ich das Programm gepostet. Ich arbeite an dem Menüpunkt 3. Der soll beinhalten:
- GiroKonto
• KtoNr
• Stand
• Zinssatz
• Name
• Vorname
-------------------
• zahleEin
• zahleAus
• verzinse
• belegen
• drucken

Ich habe einen Vektor der den Nemen und KontoNr. +Stand speichert, aber mir fehlen die Ideen für die Methoden, damit ich den STAND (einzahlen bzw. auszahlen ) verändern kann.. Könnt ihr mir bitte helfen ?


C++:
// ------------------------------------------------------
// k0nt0.h
// Eine Klasse k0nt0 zur Darstellung einer
// Liste mit Namen und k0nt0nummern.
// ------------------------------------------------------

#ifndef _k0nt0_
#define _k0nt0_

#include <string>
using namespace std;

#define CLS system("cls")    
#define PSEUDO -1          // Pseudo-Position
#define MAX 100            // Maximale Anzahl Elemente

// Typ eines Listen-Elementes:
struct Element { string name, KtoNr,stand; };  

class k0nt0
{
  private:
    Element v[MAX];        // Der Vektor und die
    int count;             // aktuelle Anzahl Elemente

  public:
    k0nt0(){ count = 0;}

    int getCount() const { return count; }

    Element *retrieve( int i )
    {
       return (i >= 0 && i < count)? &v[i] : NULL;
    }
    bool append( const Element& el )
    {
       return append( el.name, el.KtoNr, el.stand);
    }
    bool append( const string& name, const string& KtoNr, const string& stand);
    int  search( const string& name) const;
    void print() const;
    int  printn( const string& name) const;
    int  printk( const string& KtoNr) const;
    int  getNewEntries();
};

#endif  // _k0nt0_



// -------------------------------------------------------
// k0nt0.cpp
// Implementierung der k0nt0-Methoden.
// -------------------------------------------------------

#include "k0nt0.h"      // Definition der Klasse k0nt0
#include <iostream>
#include <iomanip>
using namespace std;

bool k0nt0::append(   const string& name,      // Anhängen
                      const string& KtoNr,
                      const string& stand)
{
    if( count < MAX                 // noch Platz
        && name.length() > 1        // mindestens 2 Zeichen
        && search(name) == PSEUDO)  // noch nicht vorhanden
    {
      v[count].name  = name;
      v[count].KtoNr = KtoNr;
      v[count].stand = stand;
      ++count;
      return true;
    }
    return false;
}

int k0nt0::search( const string& key ) const   // Suchen
{
   for( int i = 0; i < count; i++ ) // Suchen.
     if( v[i].name == key )
       return i;                // Gefunden

   return PSEUDO;               // Nicht gefunden
}

// Hilfsfunktionen für die Ausgabe:
inline void tabHeader()         // Überschrift der Tabelle
{
   cout << "\nName                     Konto-Nr      Konto-Stand\n"
           "--------------------------------------------------"
        << endl;
}
inline void printline( const Element& el)      // Eine Zeile
{
   cout << left << setw(20)
                << setw(25) << el.name
                << setw(14) << el.KtoNr
                << el.stand << " EURO" << endl;
}

void k0nt0::print() const     // Alle Einträge ausgeben
{
   if( count == 0)
      cout << "\nDie k0nt0-Liste ist leer!" << endl;
   else
   {
      tabHeader();
      for( int i = 0; i < count; ++i)
          printline( v[i]);
   }
}

// Einträge, die mit einer bestimmten Zeichenfolge beginnen:
int k0nt0::printn( const string& name) const
{
   int matches = 0, len = name.length();
  
   for( int i = 0; i < count; ++i)
   {
      if( v[i].name.compare(0, len, name) == 0)
      {
        if( matches == 0) tabHeader();  // Überschrift vor
                                        // erster Ausgabe.
        ++matches;
        printline( v[i]);
      }
   }
   if( matches == 0)
      cout << "Kein passender Eintrag gefunden!" << endl;

   return matches;
}

int k0nt0::printk( const string& KtoNr) const
{
   int matches = 0, len = KtoNr.length();
  
   for( int i = 0; i < count; ++i)
   {
      if( v[i].KtoNr.compare(0, len, KtoNr) == 0)
      {
        if( matches == 0) tabHeader();  // Überschrift vor
                                        // erster Ausgabe.
        ++matches;
        printline( v[i]);
      }
   }
   if( matches == 0)
      cout << "Kein passender Eintrag gefunden!" << endl;

   return matches;
}

int k0nt0::getNewEntries()            // Neue Einträge
{                                       // im Dialog einlesen.
    int inputCount = 0;

    cout << "\nNeue Namen und Konto-Nummer und Konto-Stand eingeben :"
            "\nEnde mit leerer Eingabe"  
         << endl;
    Element el;
    while( true)
    {
      cout << "\nNeuer Nachname, Vorname:  ";
      cin.sync(); getline( cin, el.name);
      if( el.name.empty())
        break;
      cout << "\nKonto-Nummer: ";
      cin.sync(); getline( cin, el.KtoNr);
      cout << "\nKonto-Stand: ";
      cin.sync(); getline( cin, el.stand );
      if( !append( el))
      {
         cout << "Name wurde nicht eingefuegt!" << endl;
         if( count == MAX)
         {
            cout << "Die Tabelle ist voll!" << endl;
            break;
         }
         if( search( el.name) != PSEUDO)
            cout << "Name schon vorhanden!" << endl;
      }
      else
      {
         ++inputCount;
         cout << "Neues Element wurde eingefuegt!" << endl;
      }
    }
    return inputCount;
}

// -------------------------------------------------------
// k0nt0_.cpp
// Mit der Klasse k0nt0 eine k0nt0-Liste verwalten.
// -------------------------------------------------------

#include "k0nt0.h"      // Definition der Klasse k0nt0
#include <iostream>
#include <string>
#include <cctype>
using namespace std;

inline void weiter()
{
   cout << "\n\nWeiter mit der Return-Taste! ";
   cin.sync();  cin.clear();        // Nur neue Eingabe
   while( cin.get() != '\n')
       ;
}

int menu();              // Ein Kommando einlesen
char header[] =
"\n\n                *****  k0nt0-Liste  *****\n\n";

k0nt0 myfriends; // Eine Kontenliste

int main()
{
  int aktion = 0;  // Kommando
  string name, KtoNr; int stand;           // Zum Einlesen eines Namens

  myfriends.append("Helle, Fry","012345678","100");

  while( aktion != '0')
  {
    aktion = menu();
    CLS;
    cout << header << endl;

    switch( aktion)
    {
      case '1': cout << "\n--- Noch nicht implementiert. ---\n ";weiter(); break;        
      case '2': cout << "\n--- Noch nicht implementiert. ---\n ";weiter(); break;
      case '3': cout << "\n--- Cashkonto anlegen. ---\n ";
                myfriends.getNewEntries();      // Hinzufügen
                break;
      case '4': cout << "\n--- Noch nicht implementiert. ---\n ";weiter(); break;
      case '5': cout << "\n--- Konto finden. ---\n "
                         "\nDie Konto-Nr eines Kontos eingeben: ";
                 getline( cin, KtoNr);
                 if( !KtoNr.empty())
                 {
                   myfriends.printk( KtoNr);
                   weiter();
                 };
                 break;
      case '6': cout << "\n--- Kunden finden. ---\n "
                         "\nDen Anfang eines Namens eingeben: ";
                 getline( cin, name);
                 if( !name.empty())
                 {
                   myfriends.printn( name);
                   weiter();
                 }
                 break;

      case '7': myfriends.print();              // Alles anzeigen
                weiter();
      case '0':  CLS;                          // Beenden
                 break;
    }
  } // Ende while

  return 0;
}

int menu()
{
   static char menuStr[] =
   "\n\n          1 = Girokonto anlegen"
   "\n\n          2 = Sparkonto anlegen"
   "\n\n          3 = Cashkonto anlegen"
   "\n\n"
   "\n\n          4 = Buchung auf Konto unter Angabe der KtoNr"
   "\n\n          5 = Kontoauszug eines Kontos unter Angabe der KtoNr"
   "\n\n          6 = Gesamtkontostand eines Kunden nach Angabe des Namens"
   "\n\n          7 = Auszugsliste aller Konten ausgeben"
   "\n\n"
   "\n\n          0 = Beenden des Programms"
   "\n\n Ihre Wahl:  ";

   CLS;
   cout << header << menuStr;

   char wahl;  
   cin.sync(); cin.clear();  // Nur neue Eingabe
   if( !cin.get(wahl))
      wahl = 'B';
   else
      wahl = toupper(wahl);
  
   cin.sync();              // Eingabepuffer löschen
   return wahl;
};
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
18.09.2002, 16:02 Uhr
fry_



Hallo

Schau' mal, ob Du was gebrauchen kannst.


C++:
#include <string>
#include <iostream>
#include <list>

enum {no_member=100};
int RESULT;

struct Element { std::string name, KtoNr;
                 int stand; };

std::list<Element> konto;

void Insert_member(Element& e) {
  konto.push_back(e);
}

int Show_member(std::string& n) {
  typedef list<Element>::const_iterator LI;
  for (LI i=konto.begin(); i!=konto.end(); ++i) {
    const Element& e=*i;
    if (e.name==n) {
      std::cout << std::endl << "Name: " << e.name.c_str() << std::endl;
      std::cout << "Kontonummer: " << e.KtoNr.c_str() << std::endl;
      std::cout << "Kontostand: " << e.stand << std::endl;
      return 0;
    }
  }
  return no_member;
}

int Money_sub(std::string& n, int s) {
  typedef list<Element>::iterator LI;
  for (LI i=konto.begin(); i!=konto.end(); ++i) {
    Element& e=*i;
    if (e.name==n) {
      e.stand-=s;
      return 0;
    }
  }
  return no_member;
}

int Money_add(std::string& n, int s) {
  typedef list<Element>::iterator LI;
  for (LI i=konto.begin(); i!=konto.end(); ++i) {
    Element& e=*i;
    if (e.name==n) {
      e.stand+=s;
      return 0;
    }
  }
  return no_member;
}

int main() {

  std::cout << "(1) Kunden anzeigen" << std::endl;
  std::cout << "(2) Kunden einfuegen" << std::endl << std::endl;

  std::cout << "(3) Kunden Geld abheben" << std::endl;
  std::cout << "(4) Kunden Geld einzahlen" << std::endl << std::endl;

  std::cout << "(0) Beenden" << std::endl;

  bool done=false;
  while (!done) {

    cout << std::endl << "> ";
    int index;
    std::cin >> index;

    if (index==1) {
      std::cout << "Name: ";
      std::string name;
      std::cin >> name;
      RESULT = Show_member(name);
      if (RESULT==no_member)
        std::cout << "Mitglied nicht gefunden" << std::endl;
    }
    else if (index==2) {
      Element e;
      std::cout << "Name: ";
      std::cin >> e.name;
      std::cout << "KtoNr: ";
      std::cin >> e.KtoNr;
      std::cout << "Stand: ";
      std::cin >> e.stand;
      Insert_member(e);
    }
    else if (index==3) {
      std::cout << "Name: ";
      std::string name;
      std::cin >> name;
      std::cout << "Menge: ";
      int summe;
      std::cin >> summe;
      RESULT = Money_sub(name, summe);
      if (RESULT==no_member)
        std::cout << "Mitglied nicht gefunden" << std::endl;
    }
    else if (index==4) {
      std::cout << "Name: ";
      std::string name;
      std::cin >> name;
      std::cout << "Menge: ";
      int summe;
      std::cin >> summe;
      RESULT = Money_sub(name, summe);
      if (RESULT==no_member)
        std::cout << "Mitglied nicht gefunden" << std::endl;
    }
    else if (index==0) done=true;
  }

    return 0;
}


Gruß fry
--
mit computern geht alles viel schneller
es dauert nur ein bisschen länger
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
18.09.2002, 17:13 Uhr
uTaNG



danke !

ich habe mich nochmal dahin gesetzt und das ganze Ding nochmal geschrieben und bin mla in eine andere richtugn gegangen ....

Ich habe aber eine Error-Meldung, wo ich nicht weiss wo ich suchen soll ...


C++:
// konto.h

#ifndef _KONTO_
#define _KONTO_

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

class Kto //Hauptklasse
{
protected:    int kontonr;
            float  Betrag;
            char name[10], vorname[20];

public:        Kto();
            void einzahlen();
            void auszahlen();
            void vor();      
            void drucken();int      rueck();char  *zurueck();
};

#endif   //  _KONTO_

// spar.h

#ifndef _SPAR_
#define _SPAR_

#include <iostream>
#include <iomanip>
#include <string>
using namespace std;

#include "Konto.h"

class spar : public Kto
{
protected:    float zisa;

public:        spar();    
            void zins();
            void vor();
            void drucken();
};
class giro : public Kto
{
protected:    int gez;

public:        giro();    
            bool geheim();
            void vor();
            
};
class cash : public Kto
{
protected:    float dislim;

public:        cash();    
            void dispo();
            void drucken();
};
    
#endif   //  _SPAR_
    
// spar.cpp


#include <iostream>
#include <string>
#include "spar.h"
using namespace std;
spar::spar():Kto()
{
    zisa=0;
}
void spar::zins()
{
    cout<<"\nJahrezinsen: "<<Betrag/100*zisa;cout<<"\n\n";
}
void spar::vor()
{
    Kto::vor();cout<<"\nzinssatz: ";cin>>zisa;
}
void spar::drucken()
{
    Kto::drucken();cout<<"\nzinssatz: "<<zisa<<endl;
}
giro::giro():Kto()
{
    gez=0;
}
bool giro::geheim()
{
    int ge;cout<<"\nGeheimzahl eingeben: ";cin>>ge;if(ge==gez)
        
    return 1;else return 0;
}
void giro::vor()
{
    Kto::vor();cout<<"\nGeheimzahl: ";cin>>gez;
}
cash::cash():Kto()
{
    dislim=0;
}
void cash::dispo()
{
    cout<<"\ndispolimit: ";cin>>dislim;
}
void cash::drucken()
{
    Kto::drucken();cout<<"\ndispolimit: "<<dislim<<endl;
}

// konto.cpp

#include <iostream>
#include <string>
#include "Konto.h"
using namespace std;
Kto::Kto()
{
    kontonr=000000;
    Betrag=0;
    strcpy(vorname,"leer");
    strcpy(name,"leer");
}
void Kto::einzahlen()
{
    cout<<"\nEinzahlung: ";
    float k;
    cin>>k;
    Betrag+=k;
}
void Kto::auszahlen()
{
    cout<<"\nAuszahlung: ";
    float k;
    cin>>k;
    Betrag-=k;
}
void Kto::vor()
{
    cout<<"\nVorname eingeben: ";
    cin>>vorname;

    cout<<"\nName eingeben: ";
    cin>>name;

    cout<<"\nKontonummer eingeben: ";
    cin>>kontonr;
}
void Kto::drucken()
{
    cout<<"\nVorname:\t\t "<<vorname;
    cout<<"\nName:\t\t\t "<<name;
    cout<<"\nKontonummer:\t\t "<<kontonr;
    cout<<"\nStand:\t\t\t "<<Betrag<<endl;
}
int Kto::rueck()
{
    return kontonr;
}
char* Kto::zurueck()
{
    char *Nar=name;
    return Nar;
}
// main.cpp

#include <iostream>
#include <string>
#include <stdlib.h>
#include "spar.h"
#include "konto.h"
using namespace std;

    int y,q=0,w=0,e=0;
    char Name[20];
void main()
{
    spar list1[100];giro list2[100];cash list3[100];
    do
    {
    system("cls");
    cout<<"\t\t\t**Kontoprogramm**"<<endl;
    cout<<"\t\t\t*****************"<<endl<<endl;
    cout<<"----------------------------"<<endl;
    cout<<"Sparkonto einrichten    (1)"<<endl<<endl;
    cout<<"Girokonto einrichten    (2)"<<endl<<endl;
    cout<<"Cashkonto einrichten    (3)"<<endl<<endl;
    cout<<"Ueberweisung taetigen   (4)"<<endl<<endl;
    cout<<"Kontoauszuge            (5)"<<endl<<endl;
    cout<<"Kontostand eines Kunden (6)"<<endl<<endl;
    cout<<"Alle Konten ausgeben    (7)"<<endl<<endl;
    cout<<"Programm beenden        (0)"<<endl<<endl;
    cout<<"Ihre Wahl               :";cin>>y;system("cls");
    
    switch(y)
    {
        case 1:
            list1[q].vor();break;
        case 2:
            list2[w].vor();break;
        case 3:
            list3[e].vor();list3[e].dispo();break;
        case 4:        
            int Ktonr,r;
            cout<<"\nBitte geben sie die Kontonummer ein: ";cin>>Ktonr;
            cout<<"\n1 Einzahlen: ";
            cout<<"\n2 Auszahlen: ";cin>>y;
            system("cls");
            for(r=0;r<=99;r++)
                {
                if(list1[r].rueck()==Ktonr)
                {    
                    switch(y)
                    {
                        case 1:
                            list1[r].einzahlen();break;
                        case 2:
                            list1[r].auszahlen();break;
                    }
                }
                if(list2[r].rueck()==Ktonr)
                {
                if(list2[r].geheim()==1)
                {
                    switch(y)
                    {
                        case 1:
                            list2[r].einzahlen();break;
                        case 2:
                            list2[r].auszahlen();break;
                    }
                }
                }
                if(list3[r].rueck()==Ktonr)
                {    
                    switch(y)
                    {
                        case 1:
                            list3[r].einzahlen();break;
                        case 2:
                            list3[r].auszahlen();break;
                    }
                }
            }
            break;
        case 5:
            cout<<endl<<"Bitte geben sie die Kontonummer ein: ";cin>>Ktonr;
                for(r=0;r<=99;r++)
                    {
                        if (list1[r].rueck()==Ktonr)
                            {
                            list1[r].drucken();
                            list1[r].zins();
                            }
                        if    (list2[r].rueck()==Ktonr)
                            {    
                            list2[r].drucken();
                            }
                        if    (list3[r].rueck()==Ktonr)
                            {    
                            list3[r].drucken();
                            }
                    }
                    break;
        case 6:        
            cout<<endl<<"Bitte geben sie ihren Namen ein: ";cin>>Name;
                for(r=0;r<=99;r++)
                    {
                        if (strcmp(list1[r].zurueck(),Name)==0)
                        {
                        list1[r].drucken();
                        }
                    
                        if (strcmp(list2[r].zurueck(),Name)==0)
                        {    
                        list2[r].drucken();
                        }
                    
                        if (strcmp(list3[r].zurueck(),Name)==0)
                        {    
                        list3[r].drucken();
                        }
                    }
                    break;
        
        case 7: for(r=0;r<=99;r++)
                    {
                        if (list1[r].rueck()!=0)
                        {
                        list1[r].drucken();
                        }
                        if    (list2[r].rueck()!=0)
                        {    
                        list2[r].drucken();
                        }
                        if    (list3[r].rueck()!=0)
                        {    
                        list3[r].drucken();
                        }
                    }
                    break;


        }
        q++;w++;e++;

    }
    while(y!=0);
};




!! FEHLERPROTOKOLL !!

[CPP] --------------------Konfiguration: main - Win32 Debug--------------------
Linker-Vorgang läuft...
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: char * __thiscall Kto::zurueck(void)" (?zurueck@Kto@@QAEPADXZ)
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall cash::drucken(void)" (?drucken@cash@@QAEXXZ)
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall Kto::drucken(void)" (?drucken@Kto@@QAEXXZ)
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall spar::zins(void)" (?zins@spar@@QAEXXZ)
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall spar::drucken(void)" (?drucken@spar@@QAEXXZ)
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: bool __thiscall giro::geheim(void)" (?geheim@giro@@QAE_NXZ)
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall Kto::auszahlen(void)" (?auszahlen@Kto@@QAEXXZ)
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall Kto::einzahlen(void)" (?einzahlen@Kto@@QAEXXZ)
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: int __thiscall Kto::rueck(void)" (?rueck@Kto@@QAEHXZ)
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall cash::dispo(void)" (?dispo@cash@@QAEXXZ)
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall Kto::vor(void)" (?vor@Kto@@QAEXXZ)
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall giro::vor(void)" (?vor@giro@@QAEXXZ)
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: void __thiscall spar::vor(void)" (?vor@spar@@QAEXXZ)
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall cash::cash(void)" (??0cash@@QAE@XZ)
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall giro::giro(void)" (??0giro@@QAE@XZ)
main.obj : error LNK2001: Nichtaufgeloestes externes Symbol "public: __thiscall spar::spar(void)" (??0spar@@QAE@XZ)
Debug/main.exe : fatal error LNK1120: 16 unaufgeloeste externe Verweise
Fehler beim Ausführen von link.exe.

main.exe - 17 Fehler, 0 Warnung(en) [/cpp]
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
18.09.2002, 17:24 Uhr
virtual
Sexiest Bit alive
(Operator)


Du musst konto.obj und main.obj zusammen linken. Mir scheint, dass Du nur main.cpp kompilierst und nicht konto.cpp. Ist konto.cpp mit in deinem Projekt drin?
--
Gruß, virtual
Quote of the Month
Ich eß' nur was ein Gesicht hat (Creme 21)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: