Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » komm nicht weiter - forschleife oder wie?? (anfänger)

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 < [ 2 ] [ 3 ]
000
06.10.2004, 16:53 Uhr
enter-break



Hi an alle,

zunächst vorab, bevor ihr in den code reinguckt - ich bin anfänger und
deshalb mag es ein bischen wüst aussehen.... sorry hierfür schonmal.
auch für etwaige definierte variablen, die dann doch nicht gebraucht werden oder
funktionen, die für euch profis nicht wirklich ansprechend sind.....guckt einfach mal
drüber weg und ein großes sorry von mir schon vorab.

mein problem:
einlesen einer txt-datei, auslesen bestimmter daten, zusammenfassen bestimmter
daten und ausgabe mit jeweiligen kunden-summen darin.

soweit funktioniert alles (ich geh auch nach dem motto - funktionieren musses, egal wie)

nur bekomm ich das jetzt nicht ganz hin, jeweilige kunden-summen zu erstellen und diese jeweils nur auf der ersten zeile eines kunden-datensatzes auszugeben - alles andre funzt schon.

also mal als beispiel:
artikel 1 | kunde 1 | einzelpreis | gesamtstück | gesamtbetrag
artikel 2 | kunde 1 | einzelpreis
artikel 4 | kunde 2 | einzelpreis | gesamtstück | gesamtbetrag
artikel 1 | kunde 2 | einzelpreis


hier mal mein code:

C++:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
#include <iostream.h>
#include <set>
#include "str_ss.cpp"

char *Readln(FILE *f, char *s, int BufSize);

static int AktAnzahl;
int Gmenge=0;


struct Verwaltung
{
  Verwaltung() { iReset(); }
  void iReset() {Gmenge=0;rpreis=0;summeprokunde=0;*PLZ=0;*Artikel=0;*Artikelnummer=0;Preis=0;*kundennummer=0;*Email=0;*Name=0;*Vorname=0;*Strasse=0;*Ort=0;*Form1=0;menge=0;gPreis=0;*plz=0;*Ort2=0;}

  void Reset() {iReset();}
  int menge;
  double Preis;
  double gPreis;
  double summeprokunde;
  double rpreis;
  
  
  char Artikel[100],
       Artikelnummer[100],
       kundennummer[100],
       Email[100],
       Name[100],
       Vorname[100],
       Strasse[100],
       einzelstueck[20],
       PLZ[50],
       Form1[100],
       //anzahl[100],
       plz[5],
       Ort2[100],
       Ort[100];
    
  bool operator < (const Verwaltung &v) const;
  void ausgeben(FILE *f)

  {
      int anzahl;

  gPreis =Preis*menge;

char txt[5000];
      double Mwst=0;      AktAnzahl++;      double gabwicklung=0;
      double porto=0;      double portaus=0;      double portin=0;
      double einsschr=0;      double dollar=0;      double epreisaus=gPreis+porto;


       if (Name==0) // hier soll eigentlich dann stehen: if (anzahlzeilenprokunde<=1)
                    // damit die ausgabe so aussieht, dass wenn ein kunde mehrere positionen
                    // hatte, diese nur in der ersten zeile des kunden rechts am Ende eine
                    // Gesamtsumme und Gesamtstück aufgeführt ist.
  {

    fprintf(f,"%-90s|%-30s|%6.2f|%-30s|%-s %-s|%-30s|%-5s %s|%-30s|%-5d|%6.2f|%f|\n",
        Artikel,Artikelnummer,Preis,kundennummer,Name,Vorname,Strasse,PLZ, Ort,Email,menge,gPreis,rpreis);

  }
       else
  fprintf(f,"%-90s|%-30s|%6.2f|%-30s|%-20s %-20s|%-30s|%-5s %20s|%-30s|%-5d|%6.2f|%-5d|%6.2f|%6.2f\n",
        Artikel,Artikelnummer,Preis,kundennummer,Name,Vorname,Strasse,PLZ, Ort,Email,menge,gPreis,Gmenge,gPreis,epreisaus,rpreis);

  }
};

bool Verwaltung::operator < (const Verwaltung& v) const
{
  return strcmp(kundennummer,v.kundennummer)<0 ;

//    return strcmp(kundennummer,v.kundennummer)<0 ||
//        strcmp(kundennummer,v.kundennummer)==0 && strcmp(Name,v.Name)<0;


}

int main(void)
{
  FILE *in, *out;
  char buf[400];
  if ((in = fopen("c:\\mail\\shopeingabe.txt", "rt")) != NULL)
  {
    std::multiset<Verwaltung> AdrLst;
    if ((out = fopen("c:\\mail\\shopausgabe.txt", "wt")) != NULL)
    {
      Verwaltung adr;
      while(fgets(buf,sizeof(buf),in)!=NULL)

      {
        CutCRLF(buf);CutFirstBlanks(buf);
          if (strncmp(buf,"#------ Order",13)==0)
        {
           strcpy(adr.kundennummer,buf+13);
           CutFirstBlanks(adr.kundennummer);
           CutLastBlanks(adr.kundennummer);
          }
        if (strncmp(buf,"Bezeichnung=",11)==0)
        {
          strcpy(adr.Artikel,buf+15);
          CutFirstBlanks(adr.Artikel);CutLastBlanks(adr.Artikel);
        }
        if (strncmp(buf,"EMail=",5)==0)

        {
           strcpy(adr.Email,buf+8);
           CutFirstBlanks(adr.Email);CutLastBlanks(adr.Email);
        }
        if (strncmp(buf,"Name=",5)==0)
        {
      
           strcpy(adr.Name,buf+6);
           CutFirstBlanks(adr.Name);
           CutLastBlanks(adr.Name);
           StrUpCase(adr.Name);
        }
            if (strncmp(buf,"Vorname=",8)==0)
        {
          
           strcpy(adr.Vorname,buf+9);
           CutFirstBlanks(adr.Vorname);
           CutLastBlanks(adr.Vorname);
           StrUpCase(adr.Vorname);
          
        }
        if (strncmp(buf,"Strasse=",7)==0)
        {
          
           strcpy(adr.Strasse,buf+8);
           CutFirstBlanks(adr.Strasse);
           CutLastBlanks(adr.Strasse);
           StrUpCase(adr.Strasse);
        }
         if (strncmp(buf,"PLZ=",4)==0)
        {
          
           strcpy(adr.PLZ,buf+6);
           CutFirstBlanks(adr.PLZ);
           CutLastBlanks(adr.PLZ);
           StrUpCase(adr.PLZ);
        }
        if (strncmp(buf,"Ort=",3)==0)

        {  
        
           strcpy(adr.Ort,buf+4);
        
           CutFirstBlanks(adr.Ort);CutLastBlanks(adr.Ort);
           StrUpCase(adr.Ort);
        }
        if (strncmp(buf,"Anzahl=",6)==0)
        {
          adr.menge=atof(buf+8);
          
    
        }
          if (strncmp(buf,"Artikel=",8)==0)
        {
           strcpy(adr.Artikelnummer,buf+10);
           CutFirstBlanks(adr.Artikelnummer);CutLastBlanks(adr.Artikelnummer);
          }

if (strncmp(buf,"Preis/Stk.=",10)==0)
        {
           adr.Preis = atof (buf+14);


          AdrLst.insert(adr);
}
      }
      std::multiset<Verwaltung>::iterator AdrIT;
      for (AdrIT=AdrLst.begin();AdrIT!=AdrLst.end();++AdrIT)
        AdrIT->ausgeben(out);


      /*
      PROBLEM  - denke, hier muss irgendwie eine schleife laufen,
      die die stückzahlen pro kunde (kundennummer) zusammenzählt (also immer
      gesamtstueckprokunde=gesamtstueckprokunde+adr.menge) und in
      einer Variable an die Ausgabe übergibt
      genauso wie Gesamtpreis (also immer
            
            gesamtpreisprokunde=gesamtpreisprokunde+gPreis
      gPreis siehe weiter oben...)
      */

      }
    fclose(out);
  }
  fclose(in);
  return(0);
};

char *Readln(FILE *f, char *s, int BufSize)
{
  char l[5002], *p;
  memset(l,0,sizeof(l)); /* vorher mit 0 gefllt !!! */
  if (BufSize>5000) BufSize=5000;    /* eigentlich nicht n”tig        */
  if (fgets(l,5000,f)==NULL) return (NULL);
  p=l+strlen(l);
  while(p>l) { p--; if (*p==10 || *p==13 || *p==' ') *p=0; else break; }
  l[BufSize-1]=0;
  return(strcpy(s,l));
}




bitte helft mir
danke schonmal an euch profis!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
001
06.10.2004, 18:03 Uhr
(un)wissender
Niveauwart


Was sind kunden-summen?
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
002
06.10.2004, 19:50 Uhr
enter-break



hi,
mit summen mein ich:
alle summen (stück-summe und betrags-summe) eines einzelnen kunden

also die variablen menge und gPreis
jeweils zusammenaddiert was zu einem kunden gehört (zusammengehörender kunde ist erkennbar über die variable kundennummer)



pls hlp :-)
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
003
06.10.2004, 20:06 Uhr
(un)wissender
Niveauwart


Ich glaube, wir fangen mal ganz sauber von vorne an.
Also, erstmal haben wird da einen Kunden, dann haben wir Artikel, dann haben wir die Verwaltung.


C++:
class Kunde
{
public:
//...
private:
std::string name, strasse_, usw.;
};

class Artikel
{
private:
std::string beschreibung_;
double preis_;
//...
};

class ArtikelPosten
{
private:
Artikel artikel_:
int anzahl_;
};

class KundenEinkauf
{
private:
Kunde kunde_;
std::vector<ArtikelPosten> verkauftArtikel_;
};

class Verwaltung
{
public:
//...
private:
std::vector<Kunde> kundenSpeicher_;
std::vector<Artikel> artikelSpeicher_;
std::vector<KundenEinkauf> verkaufteWaren_;
//...
};



So in der Art solltest du erstmal anfangen, und die Klassen bauen.
Beginne mit der Klasse Kunde, welches Attribute braucht die und welche Funktionen?
Mal so ganz nebenbei, das hier wird sich hinziehen, vermutlich mehrere Tage, kommt auf dich an.
--
Wer früher stirbt ist länger tot.

Dieser Post wurde am 06.10.2004 um 20:09 Uhr von (un)wissender editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
004
06.10.2004, 20:08 Uhr
enter-break



und dann?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
005
06.10.2004, 20:09 Uhr
enter-break



mit so richtiger "class" hatt ich noch nix bisher - sorry.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
006
06.10.2004, 20:13 Uhr
(un)wissender
Niveauwart


Du hast doch schon struct geschrieben, class ist das gleiche nur mit den Membern default private, aber das ist ja wohl ziemlich nebensächlich erstmal.
Klar könnten wir das jetzt hinhacken, aber mal unter uns, der Code ist extrem grauenhaft, fehleranfällig, deprecated, nicht skalierbar, nicht wartbar, ...
Du hast hier die Chance zu lernen, wie man es richtig oder zumindest deutlich besser macht.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
007
06.10.2004, 20:19 Uhr
enter-break



.... :-) danke - die kritik hatte ich erwartet

hatte mich dafür ja auch schon in aller im vornherein entschuldigt (is halt das, was man vor 1 jahr mal auf der vhs gelernt hatte und den rest sich irgendwie zusammenmurkst)

ausserdem: hatte ja funktioniert, auch wenns grausam aussieht (ist ja auch nur für mich gedacht)

was mach ich denn nun? darf (oder soll) ich in meinem bisherigen code nicht mehr weiterwurschteln :-) ?
oder fehlt da wirklich noch so viel?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
008
06.10.2004, 20:21 Uhr
(un)wissender
Niveauwart


Jeder fängt so an.
Nun, wenn es nur um funktionieren geht, und nicht ums lernen...
Es ist mir auch noch nicht ganz klar, was genau du willst und wo das Problem liegt.
--
Wer früher stirbt ist länger tot.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
009
06.10.2004, 20:27 Uhr
enter-break



@(un)wissender:
hab dir ne mail geschickt, wie die ausgabe aussehen soll - es sind
also nur 2 kleine einträge die ich in der ausgabe jeweils in der ersten
kunden-zeile haben will (sobald ein neuer kunde kommt, sollen die wieder auf 0 gesetzt werden) - gesamtstückzahl und gesamtbetrag ,
die sich aus allen stückzahlen und beträgen addiert ergeben, damit ich die
in die fprintf- als variable übernehmen kann.

und denke, es muss nur irgendwie in die zeilen mit verpackt werden:
for (AdrIT=AdrLst.begin();AdrIT!=AdrLst.end();++AdrIT)
AdrIT->ausgeben(out);


gruß
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: > 1 < [ 2 ] [ 3 ]     [ 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: