ein Kapitel zurück                                           ein Kapitel weiter

Wir stellen uns folgendes Szenario vor. Sie sind Fondsmanager und bekommen täglich einen gewissen Anteil Geld. Diesen Investieren sie in Fonds. Sie wollen nun für Ihre Kunden eine wöchentliche Statistik über die Rendite der Fonds erstellen. Stellen wir uns vor wir haben folgende CSV-Datei....

Mo:10000:8432
Di:10000:12234
Mi:20000:23120
Do:10000:12321
Fr:5000:4033
Sa:2000:1023
So:5000:4002

Diese nennen wir umsatz.csv Folgende Bedeutung lassen wir dabei Mo:10000:8432 zukommen. Am Montag morgens investieren sie 10000 Euro. Am Montag abend bleiben Ihnen davon nur noch 8432 Euro.

Nun gehen wir wie folgt vor. Wir lesen die einzelnen Werte Zeilenweise ein und trennen diese voneinander. Als nächstes erstellen wir ein Image. Nun berrechnen wir den den Gewinn oder Verlust und geben diesen pro Tag als Prozent an. Die einzelnen Tage geben wir als Balkendiagramm aus. Rot bedeutet dabei Verlust und Grün Gewinn. Am Schluss wollen wir noch einen blauen Strich als Durchschnitt der Woche verwenden. Und so sieht unser Code dabei aus.............

/*Download:gd13.c*/
#include <stdio.h> #include <gd.h> #include <gdfontl.h> #include <gdfontt.h> #include <gdfonts.h> #include <gdfontmb.h> #include <gdfontg.h> int main() { /*image initialisieren*/ gdImagePtr image; FILE *png, *csv; int black, white, red, green, grey, blue; char tag[4]; int ausgaben,einnahmen=5; float prozent; int var=10,durchschnitt=0,schnitt=0; char proz[3],schnitt_string[30]; /*Neues Image erstellen*/ image = gdImageCreate(160,230); if(image==NULL) { /*Fehler*/ exit(0); } white=gdImageColorAllocate(image,255,255,255); black=gdImageColorAllocate(image,0,0,0); red =gdImageColorAllocate(image,255,0,0); green=gdImageColorAllocate(image,0,255,0); grey =gdImageColorAllocate(image,127,127,127); blue =gdImageColorAllocate(image,0,0,255); image->transparent=white; proz[0]='\0'; csv=fopen("./umsatz.csv","r"); if(csv==NULL) { fprintf(stderr,"Konnte CSV-Datei nicht öffnen\n");exit(0);} while( fscanf(csv,"%[^:]:%d:%d\n",tag,&ausgaben,&einnahmen) != EOF) { /*Verlust-Gewinn Prozentual*/ prozent= (100/(float)ausgaben) * (float)einnahmen; printf("%.0f\n",prozent); sprintf(proz,"%.0f%%",prozent-100); if(prozent < 100.0){ gdImageFilledRectangle(image,var,prozent,var+20,100,red); gdImageString(image,gdFontTiny,var+2,10,proz,black); gdImageString(image,gdFontSmall,var+4,190,tag,black); } else{ gdImageFilledRectangle(image,var,100,var+20,prozent,green); gdImageString(image,gdFontTiny,var+2,10,proz,black); gdImageString(image,gdFontSmall,var+4,190,tag,black); } var+=20; durchschnitt+=prozent; proz[0]='\0'; } durchschnitt/=7; gdImageLine(image,0,durchschnitt,219,durchschnitt,blue); /*Das Gittermuster.... */ gdImageLine(image,10,100,199,100,black); for(var=10; var <160; var+=20) gdImageDashedLine(image,var,0,var,199,black); gdImageChar(image,gdFontSmall,2,95,'0',black); gdImageChar(image,gdFontSmall,2,50,'-',black); gdImageChar(image,gdFontSmall,2,150,'+',black); schnitt=durchschnitt-100; sprintf(schnitt_string,"Wochenschnitt : %d Prozent",schnitt); gdImageString(image,gdFontSmall,5,210,schnitt_string,blue); png = fopen("bild15.png","wb"); gdImagePng(image,png); fclose(png); gdImageDestroy(image); return 0; }

Und so siehts aus :

Bild Nummer 15


Zugegeben das Beispiel hat jetzt nicht viel mit der Realität zu tun. War auch nicht meine Absicht. Es geht mir ledeglich darum Ihnen zu zeigen wie einfach es ist ein Balken-Diagramm zu erstellen und ein wenig Anregung zu verschaffen. Sie sehen es muss nicht immer Excel oder anderen Tabellenkalkulationen sein um Diagramme zu erstellen.

ein Kapitel zurück          nach oben           ein Kapitel weiter


© 2001,2002 Jürgen Wolf