Kaffeeautomat neu proggen
-
ja so
edit: warum machst du die main funktion nicht selber, ist doch ne gute übung??[ Dieser Beitrag wurde am 25.02.2003 um 15:41 Uhr von phippse editiert. ]
-
weil ich leider...
a) absolut keine zeit dafür hab im moment!!! (beruflich bedingt)
b) mir grad die zündende idee fehlt, wie ich die main zu schreiben hab...
-
es fehlen die "körper" der funktionen...
also die konstruktoren und destruktoren müssen noch definiert werden, ... sonst gibt es einen linkerfehler
-
könntest du da mal bitte einspringen???
-
Frage: Die Klasse ist ja schön und gut, aber soll das nur eine Übung sein oder mal richtig funktionieren? Falls es um zweiteres geht, dann musst du noch irgendwie bei Abfüllen zumindest eine Kaffee-API haben?
MfG SideWinder
-
gedacht war die ganze sache anfangs "nur" als übung. aber wärst du so freundlich mir besagte api zu basteln?
-
Original erstellt von Code-Guru:
gedacht war die ganze sache anfangs "nur" als übung. aber wärst du so freundlich mir besagte api zu basteln?fang doch einfach mal an, selber was zu programmieren und bei problemen poste diese
-
lol ne kaffee api, das problem dürfte nur sein dass sie bei jeder kaffeemaschine anders aussehen muss.code guru wenn du meinst dass hier im forum leute arbeit für dich erledigen, dann bist du an der falschen Adresse.Das Forum ist eigentlich, glaub ich zumindest, für hilfe bei konkreten Problemen gedacht.
So far,
phippse
-
Tut mir leid, abgelehmt: erstens habe ich noch nie eine API programmiert und wäre dabei sicherlich schon überfordert und zweitens kenne ich mich mit dem Innenleben von Kaffeeautomaten nicht ganz so gut aus ;).
MfG SideWinder
-
eine API ist doch eigentlich schon eine Klassen Definition, wo ist das Problem und um unser Kaffemaschinen OS überall laufen zu lassen nutzen wir einfach eine entsprechend hohe Abstratkion von der Hardware.
(in dem Beispiel geh ich mal davon aus, dass es nicht für alle Systeme eine vernünfitge std lib gibt und man kein cout zur Ausgabe auf dem Display benutzen kann)
class hardware { public: enum modus_t { SLEEP /*Stromspar Modus*/, ACTIVE, /*aktiviert (Kunden eingabe)*/ COMMECIAL, /*(falls vorhanden) der Modus um die Leute anzulocken, zB. durch Spielereien mit den Lampen*/ DEACTIVATED }; enum event_t { FAILURE, KEYPRESSED, MONEY, TIMER }; hardware(); ~hardware(); enum event_t wait(void); //wait for event int failure(void) const; //failure id void failure(int id); //failure //Mode void modus(enum modus_t modus); enum modus_t modus(void) const; //I/O void changeled(int no); bool led(int no) const; void display(const char *out) const; void display(double n) const; bool inserted(double &money) const; int keypressed(void) const; //how many... int cups(void) const; int coffee_amount(int type) const; double money(void) const; //output... void cup(void); void coffee(int type); void money(double money); //timer void settimer(int seconds); }; int types=3; const double prices[]= {2,3,1.5} enum timer_t { SHOWCOMMERCIAL, OUTPUTMONEY }; void sell(hardware &machine, double &money, int &key, enum timer_t &timer) { if(!key) { machine.display("what coffee?\n"); if(money) { timer=OUTPUTMONEY; //gib das Geld aus in machine.timer(60); //60 sekunden (wenn es keien Eingabe mehr gibt) } } if(money) { if(money<price[key]) { machine.display("needs "); machine.display(price[key]-money); machine.display("€\n"); } machine.cup(); machine.coffee(key); if(!machine.cup()||!machine.coffee_amount(key)) machine.failure(0); if(money>price[key]) { machine.display("output "); machine.display(money-price[key]); machine.display("€\n"); } money=0; key=0; } else { key=0; timer=SHOWCOMMERCIAL; //schlafe in machine.timer(120); //2 Minuten, wenn keine Eingabe mehr erfolgt } } int main(void) { hardware machine; machine.modus(hardware::SLEEP); machine.timer(600); enum timer_t timer=SHOWCOMMERCIAL; double money=0; int key=0; for(;;) { switch(machine.wait()) { case hardware::MONEY: { if(machine.modus()!=hardware::ACTIVE) machine.modus(hardware::ACTIVE); machine.timer(0); money=machine.money(); machine.display("money: "); machine.display(money); machine.display("€\n); sell(machine,money,key,timer); break; } case hardware::KEYPRESSED: { if(machine.modus()!=hardware::ACTIVE) machine.modus(hardware::ACTIVE); machine.timer(0); //deaktiviere den Timer key=machine.keypressed(); machine.display("coffee: "); machine.display(key); machine.display("\n"); if(key>types) { machine.display("invalid input\n"); if(money) { timer=OUTPUTMONEY; //gebe das Geld aus nach machine.timer(60); //1 Minute } else machine.modus(hardware::SLEEP); break; } sell(machine,money,key,timer); break; } case hardware::TIMER: { switch(timer) { case SHOWCOMMERCIAL: if(machine.modus()==hardware::COMMERCIAL) { machine.modus(hardware::SLEEP); machine.timer(600); break; } else { machine.modus(hardware::COMMERCIAL); machine.timer(30); break; } case OUTPUTMONEY: machine.money(money); money=0; machine.modus(hardware::SLEEP); machine.timer(600); break; } } case hardware::FAILURE: //hihi, die Maschine verschluckt das Geld, falls zwischen Eingabe des Geldes und Ausgabe des Kaffees ein Fehler auftritt :) machine.modus(hardware::SLEEP); machine.display("out of order\n"); machine.wait(); //for help break; } } }
nun muss nur noch die hardware Klasse unseren Vorgaben nach geschrieben werden, aber ich glaube nicht, dass sich so eine Arbeitsweise bei den meisten Embedded Geräten lohnt
[ Dieser Beitrag wurde am 03.03.2003 um 16:46 Uhr von kingruedi editiert. ]