Getränkeautomat, Kafee oder Tee -->Wer kann mir helfen.
-
Ich habe folgendes zu programmieren mit c++, wer kann mir die Lösung anbieten? Wäre sehr dankbar.
Ein Getränkeautomat gibt Kafee oder Tee ib Bechern aus. DIe Auswahl der Getränke und die zugehörigen Preise werden dem Kunden angezeigt. Ein Becher Kaffee kostet 50 cent, ein Becher Tee 30 cent.
Wenn ein Kunde ein Getränk aus dem Automat erhalten möchte, muss er zunächst das gewünschte Getränk auswählen und dann den gefordeten Geldbetrag einwerfen. Der Automat akzeptiert nur 10, 20 und 50 cent monzen. solange nicht ausreichend Geld aungeworfen wurde, zeigt der Automat den fehlenden Restbetrag an. Wenn der Kunde den Vorgang abbricht, erhält er sein eingeworfenes Geld zurück. Ist der gefordete Betrag mehr eingeworfen worden, gibt der Automat das gewünschte Getränk und gegebenfalls Wechselgeld aus. Ist kein Wechselgeld vorhanden, wird das eingeworfene Geld zurückgegeben.
Wenn keine Becher und7oder kein Getränk vorhanden sind, geht der Automat in den Zustand "außer Betrieb". Um den Automat wieder betriebsbereit zu machen, muss er von einem Servicemitarbeitermit neuen und Getränken befüllt werden. Der Servicemitarbeiter kann ausserdem die Geldeinnahmen des Automaten leeren und7oder Wechselgeld nachfüllen.Hier gie grafische Benutzerfläche
#include "wx/wx.h"
#include "automat.h"
#include "main.h"Automat::Automat(MyFrame *mf)
:
meinMyFrame(mf) // member - konstruktion
{
}// alles in automat neu initialisieren
void Automat::init()
{
meinMyFrame->SetStatusText( "betriebsbereit", 0);
//wxLogMessage( "Automat betriebsbereit");}
// wird vom frame objekt als reaktion
// auf eine taste aufgerufen (s.o.)
void Automat::OnKey( int key_code)
{
wxString message;switch( key_code)
{
case ID_FKT1:
wxLogMessage( "Kaffee");
break;
case ID_FKT2:
wxLogMessage( "Tee");
break;
case ID_FKT3:
wxLogMessage( "Status");
break;
case ID_FKT4:
wxLogMessage( "Abbruch");
break;
case ID_FKT5:
wxLogMessage( "key '10'");
break;
case ID_FKT6:
wxLogMessage( "key '20'");
break;
case ID_FKT7:
wxLogMessage( "key '50'");
break;
case ID_FKT8:
wxLogMessage( "key '100'");
break;
default:
//unsigned ziffer=key_code-ID_OFFSET-'0';
//wxLogMessage( message.Format( "key:%d", ziffer));
wxLogMessage( "Taste '%d' ohne Funktion", key_code-ID_OFFSET-'0');
break;
}}
****************************************************************************
class MyFrame;
/**
* empfängt tasten-ereignisse von MyFrame.
* Ausgabe erfolgt auch über MyFrame.
*/
class Automat {
public:explicit Automat( MyFrame *m);
void OnKey(int );void init();
private:
MyFrame * meinMyFrame;
};****************************************************************
#include "wx/wx.h"
#include "automat.h"
#include "main.h"/**
* Das Windows Executable.
*/
class MyApp: public wxApp
{
public:
virtual bool OnInit();
};IMPLEMENT_APP(MyApp)
// layout der "tastatur"
const MyFrame::knopfdef MyFrame::knopftab [MyFrame::ZEILEN][MyFrame::SPALTEN]=
{
{ { "Kaffee", ID_FKT1}, { "10", ID_FKT5}, { "1", ID_1}, { "2", ID_2}, { "3", ID_3}},
{ { "Tee", ID_FKT2}, { "20", ID_FKT6}, { "4", ID_4}, { "5", ID_5}, { "6", ID_6}},
{ { "Status", ID_FKT3}, { "50", ID_FKT7}, { "7", ID_7}, { "8", ID_8}, { "9", ID_9}},
{ { "Abbruch", ID_FKT4}, { "100", ID_FKT8}, { "*", ID_STAR}, { "0", ID_0}, { "#", ID_HASH}}
};IMPLEMENT_DYNAMIC_CLASS( MyFrame, wxFrame )
BEGIN_EVENT_TABLE(MyFrame,wxFrame)
EVT_MENU (ID_QUIT, MyFrame::OnQuit)
EVT_TEXT (ID_QUIT, MyFrame::OnQuit)
EVT_TIMER (ID_QUIT, MyFrame::OnQuit)
EVT_BUTTON (ID_0, MyFrame::OnButton)
EVT_BUTTON (ID_1, MyFrame::OnButton)
EVT_BUTTON (ID_2, MyFrame::OnButton)
EVT_BUTTON (ID_3, MyFrame::OnButton)
EVT_BUTTON (ID_4, MyFrame::OnButton)
EVT_BUTTON (ID_5, MyFrame::OnButton)
EVT_BUTTON (ID_6, MyFrame::OnButton)
EVT_BUTTON (ID_7, MyFrame::OnButton)
EVT_BUTTON (ID_8, MyFrame::OnButton)
EVT_BUTTON (ID_9, MyFrame::OnButton)
EVT_BUTTON (ID_STAR, MyFrame::OnButton)
EVT_BUTTON (ID_HASH, MyFrame::OnButton)
EVT_BUTTON (ID_FKT1, MyFrame::OnButton)
EVT_BUTTON (ID_FKT2, MyFrame::OnButton)
EVT_BUTTON (ID_FKT3, MyFrame::OnButton)
EVT_BUTTON (ID_FKT4, MyFrame::OnButton)
EVT_BUTTON (ID_FKT5, MyFrame::OnButton)
EVT_BUTTON (ID_FKT6, MyFrame::OnButton)
EVT_BUTTON (ID_FKT7, MyFrame::OnButton)
EVT_BUTTON (ID_FKT8, MyFrame::OnButton)
END_EVENT_TABLE()MyFrame::MyFrame()
: wxFrame( (wxFrame )NULL, -1, "Automat",
wxPoint(20,20), wxSize( SPALTEN(BSIZE+(BSIZE/2))+(BSIZE/2),500) ),
derAutomat( this)
{
wxBoxSizer *topsizer = new wxBoxSizer( wxVERTICAL );
wxMenu *file_menu = new wxMenu();
file_menu->Append( ID_QUIT, "E&xit\tAlt-X");wxMenuBar *menu_bar = new wxMenuBar();
menu_bar->Append(file_menu, "&Action");SetMenuBar( menu_bar );
CreateStatusBar(3);
SetStatusWidths( 3, (int []){ -1, 100, 100} );for( int zeile=0; zeile<ZEILEN; ++zeile)
{
for( int spalte=0; spalte<SPALTEN; ++spalte)
(void)new wxButton( this ,
knopftab[zeile][spalte].id,
knopftab[zeile][spalte].label,
wxPoint(BSIZE/2+(BSIZE+BSIZE/2)*spalte, 120+(BSIZE+BSIZE/2)*zeile),
wxSize(BSIZE,BSIZE) );
}
m_log = new wxTextCtrl( this, -1, "Log window:\n", wxPoint(0,0), wxSize(100,100), wxTE_MULTILINE );
wxLog *old_log = wxLog::SetActiveTarget( new wxLogTextCtrl( m_log ) );
delete old_log;
topsizer->Add( m_log, 0, wxEXPAND );SetAutoLayout( TRUE );
SetSizer( topsizer );derAutomat.init();
}// wird beim start der applikation ein mal aufgerufen
bool MyApp::OnInit()
{
wxFrame *frame = new MyFrame();
frame->Show( TRUE );
return TRUE;
}// wird beim verlassen des programms aufgerufen
void MyFrame::OnQuit( wxCommandEvent &WXUNUSED(event) )
{
Close( TRUE );
}// wird beim drücken einer taste
// von wxWindows aus aufgerufen
void MyFrame::OnButton( wxCommandEvent &event)
{
int id=event.GetId();
derAutomat.OnKey(id);
}
********************************************************************
class MyApp;enum{ // message - identifier der tasten
ID_QUIT = 110,
ID_OFFSET = 200,
ID_0=200+'0', ID_1, ID_2, ID_3, ID_4, ID_5, ID_6, ID_7, ID_8, ID_9,
ID_FKT1, ID_FKT2, ID_FKT3, ID_FKT4,
ID_FKT5, ID_FKT6, ID_FKT7, ID_FKT8,
ID_STAR, ID_HASH
};/**
* Zuständig für das Fenster auf dem Bildschirm.
* Kommunikation zu den Tasten und dem Statusfeld.
*/
class MyFrame: public wxFrame
{
public:
MyFrame();
// WriteLogWindow( wxString);private:
void OnQuit( wxCommandEvent &event );
void OnButton( wxCommandEvent &event);
Automat derAutomat;DECLARE_DYNAMIC_CLASS(MyFrame)
DECLARE_EVENT_TABLE()static const int BSIZE=50;
static const int ZEILEN=4;
static const int SPALTEN=5;struct knopfdef
{
const char * label;
const wxWindowID id;
};
static const knopfdef knopftab [ZEILEN][SPALTEN];
wxTextCtrl *m_log;
};*************************************************************
// THIS FILE WILL BE OVERWRITTEN BY DEV-C++!
// DO NOT EDIT!#ifndef DUMMY_PRIVATE_H
#define DUMMY_PRIVATE_H// VERSION DEFINITIONS
#define VER_STRING "0.1.1.1"
#define VER_MAJOR 0
#define VER_MINOR 1
#define VER_RELEASE 1
#define VER_BUILD 1
#define COMPANY_NAME ""
#define FILE_VERSION ""
#define FILE_DESCRIPTION "Developed using the Dev-C++ IDE"
#define INTERNAL_NAME ""
#define LEGAL_COPYRIGHT ""
#define LEGAL_TRADEMARKS ""
#define ORIGINAL_FILENAME ""
#define PRODUCT_NAME ""
#define PRODUCT_VERSION ""#endif //DUMMY_PRIVATE_H
**********************************************************************++
// THIS FILE WILL BE OVERWRITTEN BY DEV-C++!
// DO NOT EDIT!A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "dummy.ico"
-
Einmal reicht!