Kaffee-Kalkulator – lohnt sich der Kauf eines Kaffeevollautomaten? | C#

Ich kam letztens einfach nicht umher meinen alten C# Ordner zu durchstöbern. Ich hatte mich damals wenige Wochen mit C# beschäftigt. Also beschäftigt im Sinne von: Einsteigerkurse in der S-Bahn lesen, paar Tutorials im Netz und los gehts 😀
Ein Projekt hatte ich damals tatsächlich realisieren wollen. Ein kleines Programm, mit dem ich eine kleine Investition rechtfertigen und strategisch präsentieren konnte.
Damals wollte ich mir nämlich einen Kaffeevollautomaten kaufen, der gerade im Angebot war. Solch ein Gerät ist ja nicht gerade günstig, also habe ich die Ersparnisse, die mit so einem Gerät möglich sind, versucht einfach zu verdeutlichen.

Und somit, let me proudly introduce to you:

Kaffe-Kalkulator

DIE Rechtfertigung, wenn es um den Kauf eines Kaffeevollautomaten geht!

Der Sinn dieser Software ist einfach: sie soll die Rechenarbeit bei der Frage „Lohnt sich der Kauf eines Kaffeevollautomaten?“ für euch erledigen.
Das Programm fragt nach einigen Grundangaben aus denen dann ein kurzer Infotext gebastelt wird.

Simple thing, huh?! 🙂

Wie gesagt war das ein recht kurzer Abstecher in die C# Welt, der Code ist jetzt also nicht sonderlich cool.
Ich habe mich gestern und heute kurz damit beschäftigt und den Code stark gereinigt und umgeschrieben, Funktionen geschrieben, Fehler abgefangen, Code gekürzt und sowas. Aber mittlerweile würde ich einige Schritte anders realisieren (Stichwort „.“ bei Kaffeebohnenpreis und MaskedTextBoxes) und würde auch einige andere Details ändern (z.B. variabler durchschnittlicher Verbrauch von Kaffeebohnen pro Tasse (ist ja je nach Tassengröße unterschiedlich)) aber wichtig ist das alles nicht. Dazu müsste das Programm grundlegend umgestaltet werden und so viel Langeweile habe ich ja nun auch wieder nicht. Es funktioniert grundlegend und erfüllt seine Aufgabe mit Stolz. 🙂

Code

Code anzeigenDen Code könnt ihr bequem mit den Links/Rechts Pfeiltasten horizontal bewegen.

public partial class Main : Form
    {
        // Variablen einzeln setzen, für Kommentare
        const char nl = (char)10; // Zeilenumbruch als Konstante
        double PrUn = 0; // Preisunterschied zwischen eigenem und alternativem Kaffee
        double PrKa = 0; // Preis der eigenen Tasse
        double PrAlKa = 0; // Preis des altern. Kaffees
        double MaxKaBo = 0; // maximale Anzahl der Tassen pro voller Kaffeebohnenpackung
        double DuVeKaBo = 20; // Durchschnittlicher Kaffeebohnenverbrauch pro Tasse
        double KaAuBezWo = 0; // Anzahl an Wochen die man braucht um mit dem Preisunterschied den Kaffeevollautomaten zu bezahlen
        bool empty = true; // Felder leer?
        
        public Main() {
            InitializeComponent();
        }

        void btnBerechne_Click(object sender, EventArgs e) {
            try {
                // Setze intern berechnete Variablen zurück
                initReset(false, true);
                // GET: Preis des alternativen Kaffees
                PrAlKa = checkPrAlKa();

                if (PrAlKa == 0 || checkEmpty() == true)
                    emptyErr();
                else {
                    if (checkNegative() == true) showStats("negative");
                    else showStats("positive");
                }
            }
            catch {
                unknownErr();
            }
        }

        void negativeErr() {
            lblStatistik.Text = "Die berechnete Statistik zeigt, dass du mit deinen Angaben keinen Gewinn machen würdest. Der Kaffee deines Vollautomaten ist teurer als der Kaffee, den du dir im Laden kaufst.";
            gbxStatistik.Visible = true;
        }

        void emptyErr() {
            lblStatistik.Text = "Fehler bei der Eingabe. Es wurden nicht alle Felder ausgefüllt.";
            gbxStatistik.Visible = true;
        }

        void unknownErr() {
            lblStatistik.Text = "Ein unbekannter Fehler ist aufgetreten... sorry...\nPrüfe deine Eingaben, irgendetwas stimmt hier nicht ;)";
            gbxStatistik.Visible = true;
        }

        double checkPrAlKa() {
            switch (cbxPrAlKa.Text) {
                case "": { return 0; break; }
                case "0,50€ - Berlin Ost billig": { return 50; break; }
                case "0,80€ - Berlin West billig": { return 80; break; }
                case "1,00€ - Berlin Mitte billig": { return 100; break; }
                case "1,30€ - Berlin Mitte normal": { return 130; break; }
                case "2,00€ - Berlin Mitte teuer": { return 200; break; }
                case "3,50€ - Berlin Fucking Luxus": { return 350; break; }
                case "6,00€ - Scheiße wo trinkst du Kaffee?!": { return 600; break; }
                default: { return 0; break; }
            }
        }

        bool checkEmpty() {
            // CHECK: leere Eingaben
            if (tbxAnKaWo.Text == "" || tbxMeKaBo.Text == "" || tbxPrKaAu.Text == "" || tbxPrKaBo.Text == "")
                return true;
            else
                return false;
        }

        bool checkNegative() {
            // CALC: Preis der eigenen Tasse in Cent
            PrKa = (((double.Parse(tbxPrKaBo.Text) * 100) / double.Parse(tbxMeKaBo.Text)) * DuVeKaBo);
            // CALC: Preisunterschied zwischen eigenem und alternativem Kaffee
            PrUn = PrAlKa - PrKa;
            // CALC: maximale Anzahl der Tassen pro voller Kaffeebohnenpackung beim angegebenen Durchschnittsverbrauch pro Tasse
            MaxKaBo = Math.Round((double.Parse(tbxMeKaBo.Text) / DuVeKaBo), 1);
            // CALC: Anzahl an Wochen die man braucht um mit dem Preisunterschied den Kaffeevollautomaten zu bezahlen
            KaAuBezWo = double.Parse(tbxPrKaAu.Text) / (PrUn * double.Parse(tbxAnKaWo.Text));
            // PRINT: Preis der eigenen Tasse in €
            tbxPrTaKa.Text = Math.Round((PrKa / 100), 2).ToString();
            // PRINT: Preisunterschied zwischen eigenem und alternativem Kaffee in €
            tbxPrUn.Text = Math.Round((PrUn / 100), 2).ToString();

            if (PrUn < 0) return true;
            else return false;
        }

        void showStats(string pon) {
            if (pon == "positive") {
                // PRINT: Statistiktext
                lblStatistik.Text = tbxMeKaBo.Text
                    + "g Kaffeebohnen kosten " + tbxPrKaBo.Text
                    + " €. Für eine kleine Tasse werden " + DuVeKaBo
                    + "g Kaffeebohnen verbraucht, mit den " + tbxMeKaBo.Text
                    + "g Kaffeebohnen lassen sich also bis zu " + MaxKaBo
                    + " Tassen machen." + nl
                    + "Eine Tasse Kaffee zu Hause kostet nur " + tbxPrTaKa.Text
                    + " € ! Günstig, oder?! Und dann noch lecker Kakao drin, hhmmmm lecker." + nl
                    + "Wenn ein gekaufter Kaffee in der Stadt " + Math.Round((PrAlKa / 100), 2)
                    + " € kostet, ist ein selbstgemachter Kaffee also " + Math.Round((PrUn / 100), 2)
                    + " € günstiger!" + nl
                    + "Bei " + tbxAnKaWo.Text
                    + " Tassen Kaffee pro Woche sparst du also " +
                    // CALC: Ersparnis pro Woche: Anzahl der Tassen pro Woche * Preisunterschied in € gerundet auf 2 Stellen
                    Math.Round((double.Parse(tbxAnKaWo.Text) * Math.Round((PrUn / 100), 2)), 2)
                    + " € pro Woche, " +
                    // CALC: Ersparnis pro Monat: Anz. d. Tassen pro Woche / 7 (Ersparnis pro Tag) * 30.416 (durchschnittliche Tagesanzahl pro Monat) gerundet auf 2 Stellen
                    Math.Round(((Math.Round((double.Parse(tbxAnKaWo.Text) * Math.Round((PrUn / 100), 2)), 2) / 7) * 30.416), 2)
                    // Math.Round((double.Parse(tbxAnKaWo.Text) * Math.Round((PrUn / 100), 2) * 30.416), 2)
                    + " € pro Monat und ganze " +
                    // CALC: Ersparnis pro Jahr: Anz. d. Tassen pro Woche / 7 (Ersparnis pro Tag) * 365,25 (durchschnittliche Tagesanzahl pro Jahr) gerundet auf 2 Stellen
                    Math.Round(((Math.Round((double.Parse(tbxAnKaWo.Text) * Math.Round((PrUn / 100), 2)), 2) / 7) * 365.25), 2)
                    //Math.Round((double.Parse(tbxAnKaWo.Text) * Math.Round((PrUn / 100), 2) * 365.25), 2)
                    + " € im Jahr!!" + nl
                    + "Es erklärt sich also von selbst, dass der Kaffeevollautomat bei einem Preis von satten " + tbxPrKaAu.Text
                    + ",00 € bereits nach " +
                    //CALC: Wochen die zum Abbezahlen nötig sind: (Preis der Automats / Ersparnis pro Tag) / 7
                    Math.Round(((double.Parse(tbxPrKaAu.Text) / Math.Round(((Math.Round((double.Parse(tbxAnKaWo.Text) * Math.Round((PrUn / 100), 2)), 2) / 7)), 2)) / 7), 1)
                    + " Wochen abbezahlt ist!" + nl
                    + "Danach sparst du bei jeder Tasse wirklich die " + Math.Round((PrUn / 100), 2)
                    + " €.";
                gbxStatistik.Visible = true;
            }
            else if (pon == "negative") {
                negativeErr();
            }
        }

        void resetToolStripMenuItem_Click(object sender, EventArgs e) {
            initReset(true, true);
        }

        void btnReset_Click(object sender, EventArgs e) {
            initReset(true, true);
        }

        private void aboutToolStripMenuItem_Click(object sender, EventArgs e) {
            Form2 About = new Form2();
            About.Show();
        }

        private void beendenToolStripMenuItem_Click(object sender, EventArgs e) {
            Application.Exit();
        }

        void initReset (bool elems,bool vars) {
            if (elems==true) resetElements();
            if (vars==true) resetVars();
        }

        void resetElements() {
            tbxMeKaBo.Text = tbxPrKaAu.Text = tbxPrKaAu.Text = 
            tbxPrKaBo.Text = tbxPrTaKa.Text = tbxPrUn.Text = 
            tbxAnKaWo.Text = "";
            cbxPrAlKa.ResetText();
            gbxStatistik.Visible = false;
            tbxPrKaAu.Focus();
        }

        void resetVars() {
            PrUn=PrKa=PrAlKa=MaxKaBo=KaAuBezWo=0;
            DuVeKaBo = 20;
        }
    }
Download

Kaffee-Kalkulator [.exe]

Auch interessant:  Google: Privatsphäre und Daten einsehen & kontrollieren

Ich denke nicht, dass es eine ausgebaute Version 2 des Programms geben wird aber trotzdem; Kritik, Verbesserungsvorschläge, Ausbauvorschläge, Spam und puren Stuss, einfach Kommentar schreiben.

PS: Was haltet ihr von meiner neuen „Code anzeigen“ Methode? Ich dachte mir so bleibt die Übersichtlichkeit meines Blogs unverändert und ich kann trotzdem lange Codeschnipsel präsentieren. Ob und wenn ja wie der Code dann allerdings im RSS Reader erscheint weiß ich noch nicht. Werden display:none divs im RSS beachtet? Naja mal sehen.

12 Kommentare

  1. Spannend! Vor allem, da das Programm einem IMMER dazu rät, die Kaffeemaschine zu kaufen. In meinem Fall (ca. 2 Tassen pro Woche) heißt es dann: „Es erklärt sich also von selbst, dass der Kaffeevollautomat bei einem Preis von satten 550,00€ bereits nach 238,1 Wochen abbezahlt ist!“

    Ist die Frage, ob es sich lohnt, eine Kaffeemaschine 4,5 Jahre lang abzubezahlen oder ob man dann nicht evtl. schon wieder eine neue braucht. ^_^

  2. Wie gesagt, das Tool war eine kurze Spaßentwicklung und einige Details würde ich mittlerweile anders lösen ^^
    Dass ich die Abbezahlzeit völlig unbeachtet lasse und damit theoretisch auch 5000 Wochen möglich wären… nunja ^^

    Vielleicht hau ich am Wochenende noch ein
    if anzahlwochen > 100 ergänze infotext „aber du solltest dir das gut überlegen“
    😉

  3. Ist Dir die zweite, fast zeitgleiche und einheitliche Kaffeepreiserhöhung aller Anbieter um weitere € 0,50, d. h. insgesamt um € 1,-/ 500 g in kurzer Zeit aufgefallen? Die zweite Erhöhung erfolgte, als die mäßig ausgefallene Empörung über die erste bereits verraucht war.
    Was also tun? Tee trinken und braune Zähne bekommen? Früchtetee, das Gesöff der Frauen trinken? Konsum einschränken? Oder etwa klein beigeben?

  4. Oh ja, die Einstiegs-Spaß-Programme, ich habe die leider nie bis zum Schluss durchgezogen 😀

    Im RSS Feed (über Google Reader) wird mir der komplette Quelltext angezeigt – das display:none scheint also nicht zu funktionieren. Das stört mich aber nicht weiter, da ich am PC lese und so schnell drüber scrollen kann. Es stört sicherlich nur wenn man von Smartphone aus liest…
    Ansonsten aber eine einfache Lösung, die ich auch schon mehfach angewendet habe. Hält lange Seite übersichtlich.
    MfG, Johannes

  5. @Didi: Wann soll denn das mit der Kaffeepreiserhöhung gewesen sein? Ich kauf einfach zu selten Bohnen (vielleicht 1x in 2 oder 3 Monaten), dass mir das nicht wirklich auffällt und mich auch nicht so stört.
    Mit den Kommentaren ist gerade schwierig, ja. Jeder Kommentar wird komischerweise seit wenigen Tagen in die Moderation gehauen, bestimmt irgendein Plugin Update oder so. Ich arbeite dran.

    @Johannes: Habs mir grad mal im Google Reader aufn Android Phone angesehen, da scrollt man auch in 2 Sekunden rüber. Also schlimm ist das tatsächlich nicht.
    Für die Startseite des Blogs ist es aber angenehmer würde ich schätzen, wenn der Code ausgeblendet wird.

    @FERNmann: Linux-fähig, gut. Aber ist ja auch nicht viel dran, nur bisschen internes Gerechne. 🙂

  6. Die erste Erhöhung ist erst einige Wochen her. Ging auch durch die Presse. Begründet wurde sie (wie immer) mit der allgemeinen Preissteigerung bei Rohstoffen; als ob das etwas Gottgegebenes wäre! Die zweite fiel mir gestern auf, als ich Lidls Preise mit Aldis verglich.

  7. nettes tool.
    dennoch würde ich mir wünsche den kaffeepreis selber eingeben zu können, da ich nicht in berlin wohne und so auch nicht den jetztigen kaffee preis meiner dolce gusto eingeben kann. also zum maschinenvergleich.
    wird da mal ne änderungen kommen? bitte!

  8. Hallo Tom,

    Edit: Ich sehe gerade, dass ich ja den kompletten Code im Beitrag gepostet habe. Ich lade gerade Visual Studio Express runter und werde das Tool schnell anpassen.

    Dennoch nehme ich das jetzt mal als Anlass dieses kleine Projekt im Web zu realisieren und dabei gleich ein wenig in HTML5 einzusteigen.
    Also in Kürze werde ich das Projekt als Webapplikation veröffentlichen.

    Liebe Grüße

  9. Hallo stehe gerade vor der Entscheidung wieder eine Senseo oder ein Kaffevollautomat (was man nach einem Gewitter mit Blitzschlag so alles braucht)

    Lustig ist das Programm schon wenn es ausgibt das der Automat BEREIS nach 4000 Wochen abbezahlt ist 😉

  10. Dann scheinst du im Alltag ja eher wenig Kaffee, oder günstigen Kaffee, zu trinken – ansonsten rechnet sich das Gerät ja eigentlich schneller. 3x pro Woche ein 3,50€ Kaffee sind knapp 500€ im Jahr, dafür gibt es schon erste gute Automaten. 😉

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.