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! |