Buch Cover Buch Cover Buch Cover Buch Cover

Web-Code: - Webcode Help

Automat (Unterprogramme)

Machen Sie einen Automat in dem Sie unter folgenden auswählen können:

„Pizza“

„8“

„Twix“

„1“

„Malteser“

„1“

„Gummibärchen“

„2“

„Popcorn“

„3“

„Cola“

„1“

„Apfel“

„1“

„Salat“

„2“

 

Links sehen Sie die Bezeichnung und rechts den Preis. Man kann in den Automat nur 1 Euro Münzen einwerfen. Jede Ware ist nur einmal im Automat enthalten und anschließend nicht mehr verfügbar. Ware wird also bestellt und der Eintrag anschließend  gelöscht (oder auf – 1 gesetzt).

2 Kommentare

Bitte melde dich an um einen Kommentar abzugeben

Kommentare (2)

Mad_Deer 30. April 2014 08:30   reply report
Meine Lösung ist ebenfalls GUI-basiert. Durch Klick auf das entsprechend gewünschte Produkt wird automatisch die Ausgabe angestoßen (vgl. mit einem Snackautomaten). Sollte der Automat leer sein, wird er wie durch ein Wunder neu aufgefüllt ;)

Viel Spaß damit
Grüße MadDeer
crouser 8. Januar 2014 08:06   reply report
Meine Lösung kommt auf knapp 200 Zeilen code, beinhaltet dafür aber eine GUI.

9 Lösung(en)

import input.StdInput;


public class Automat {
	public static void main(String[] args) {
		
		String automat[][] = {{"Pizza","8"}, {"Twix", "1"},
							{"Malteser","1"},{"Gummibärchen", "2"}, 
							{"Popcorn","3"}, {"Cola","1"}, 
							{"Apfel", "1"}, {"Salat","2"}};
		int summe = 0;
		Automat a = new Automat();
		char menueWahl = ' ';
		
		do {
			menueWahl = a.erfassenMenuewahl();
			
			switch (menueWahl) {
				case 'e': //einwerfen (Summe wird um 1 Euro erhöht)
					summe++;
					break;
				case 'v': //verfügbar mit meinem aktuellen Budget  		
					a.vorhanden (summe, automat);
					break;	
				case 'a':   		
					summe = a.auswaehlen (summe, automat);
					break;	
				default:
					System.out.println("verdruckt");
			}
		}while(menueWahl != 'x');
		
	}
	
	private int auswaehlen(int summe, String[][] automat) {
		int taste = StdInput.readInt("Bitte Taste wählen");
		if(Integer.parseInt(automat[taste][1]) <= summe && Integer.parseInt(automat[taste][1]) != -1){
			summe = summe - (Integer.parseInt(automat[taste][1]));
			automat[taste][1]= "-1";
			System.out.println("Hurra Sie bekommen ihr/e: " + automat[taste][0]);
		}
		else if (Integer.parseInt(automat[taste][1]) == -1){
			System.out.println("Produkt ausverkauft");
		}
		else{
			System.out.println("Zu wenig Geld!");
		}
		return summe;
	}

	private void vorhanden(int summe, String[][] automat) {
		for (int i = 0; i<automat.length;i++){
			if (Integer.parseInt(automat[i][1])<= summe && Integer.parseInt(automat[i][1]) != -1){
				System.out.println("Taste " + i + " für " + automat[i][0] + " drücken um " + automat[i][1] + " Euro.");
			}
		}
		
	}

	public char erfassenMenuewahl() {
		char wahl = ' ';
	wahl = StdInput.readString("(e)inwerfem, (v)orhanden, (a)uswählen, (E)xit wählen: ").charAt(0);	
	return wahl;
	}
	
}

                

Lösung von: Karin Eben (digital Business HAK )

import java.awt.Dimension;
import java.awt.Font;
import java.awt.FontMetrics;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.Insets;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.geom.Rectangle2D;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.ListSelectionModel;
import javax.swing.UIManager;
import javax.swing.table.DefaultTableModel;

public class Automat {

    // Modell für die Tabelle
    protected DefaultTableModel model;

    // Daten der Tabelle
    protected String[] header = new String[] { "Fressalie", "Geld (€)" };
    protected String[][] data = new String[][] { { "Pizza", "8" }, { "Twix", "1" }, { "Malteser", "1" },
            { "Gummibärchen", "2" }, { "Popcorn", "3" }, { "Cola", "1" }, { "Apfel", "1" }, { "Salat", "2" } };

    // Modell wird mit den Daten erstellt
    protected void setModell() {
        model = new DefaultTableModel(data, header);
    }

    // Tabelleneigenschaften und Daten werden festgelegt
    protected JTable setJTable() {

        // Modell wird der Tabelle angefügt
        JTable table = new JTable(model);

        // Passt die Spaltenbreite automatisch dem Inhalt an
        table.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);
        autoresizeColumns(table);

        // Lässt nur einzelne spalten makieren
        table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        return table;
    }

    // Passt die Spaltengrößen einer Tabelle dem Inahlt an
    protected void autoresizeColumns(JTable table) {

        // Anzahl an Spalten und Reihen
        int columnnumber = table.getColumnModel().getColumnCount();
        int rownumber = table.getRowCount();

        // Größe des Inhalts abhängig von Schrifttyp etc
        Rectangle2D size = null;

        // Schrifttyp wird ermittelt
        Font font = UIManager.getDefaults().getFont("Table.font");
        FontMetrics fontMetrics = table.getFontMetrics(font);

        // Passt jede Spalte einzeln an
        for (int i = 0; i < columnnumber; i++) {

            // Inhalt einer Zelle und dessen Zeichenlänge
            String str = "";
            int length = 0;

            // Durchsucht die Reihen der Spalte nach dem längsten Inhalt
            for (int o = 0; o < rownumber; o++) {
                length = table.getModel().getValueAt(o, i).toString().length();
                if (length > str.length()) {
                    str = table.getModel().getValueAt(o, i).toString();
                }
            }
            length = str.length();

            // Überprüft ob der Kopf der Spalte länger ist als jeder andere
            // Eintrag
            if (length < table.getColumnModel().getColumn(i).getHeaderValue().toString().length()) {
                str = table.getColumnModel().getColumn(i).getHeaderValue().toString();
            }

            // Ermittelt die graphische Größe des längsten Inhalts in der Spalte
            size = fontMetrics.getStringBounds(str, table.getGraphics());

            /*
             * Legt die Größe der Spalte entsprechend dem gefundenen größten
             * Eintrag + einen Extraabstand von 10 fest
             */
            table.getColumnModel().getColumn(i).setPreferredWidth((int) size.getWidth() + 10);
        }
    }

    // Erstellt den Panel sammt Inhalt
    private JPanel setPanel() {

        // Erstellt das Modell für die Tabelle
        setModell();

        // JTable wird erstellt
        final JTable table = setJTable();

        // Panel und GBC-Objekt werden erstellt
        JPanel panel = new JPanel(new GridBagLayout());
        GridBagConstraints grid = new GridBagConstraints();

        // Kaufenbutton wird erstellt und dessen Größe wird festgelegt
        JButton button = new JButton("Kaufen");
        button.setPreferredSize(new Dimension(120, 28));

        // Scrollpane wird erstellt und deren Größe wird festgelegt
        JScrollPane pane = new JScrollPane(table);
        pane.setPreferredSize(new Dimension(table.getPreferredSize().width + 3, table.getPreferredSize().height + 23));

        // Platzieren der Elemente auf dem Panel
        grid.gridx = 0;
        grid.gridy = 0;
        grid.insets = new Insets(3, 3, 3, 3);
        grid.anchor = GridBagConstraints.NORTH;
        panel.add(pane, grid);
        grid.gridx = 1;
        panel.add(button, grid);

        // Funktion des Buttons
        button.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent arg0) {

                // Zählt jeden Übertrag in das zweite Array mit
                int count = 0;

                // Zweites Array zum Übertragen der Tabellendaten
                String[][] array = new String[data.length - 1][2];

                // In der Tabelle ausgewählter Eintrag
                String selected = table.getModel().getValueAt(table.getSelectedRow(), 0).toString();

                /*
                 * Schreibt alle Einträge, bis auf den ausgewählten, in das
                 * zweite Array ein
                 */
                for (int i = 0; i < data.length; i++) {
                    if (!selected.equals(data[i][0])) {
                        array[count][0] = data[i][0];
                        array[count][1] = data[i][1];
                        count++;
                    }
                }

                // Tabellendaten werden angepasst und Modell damit erstellt
                data = array;
                setModell();

                // Tabelle wird aktualisiert
                table.setModel(model);
            }
        });

        return panel;
    }

    // Hauptmethode
    public static void main(String[] args) {

        // Hauptfenster wird erstellt
        JFrame frame = new JFrame("Automat");

        // Panel wird dem Hauptfenster hinzugefügt
        frame.add(new Automat().setPanel());

        // Hauptfenster beendet beim Schließen seinen Prozess
        frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

        // Hauptfenster wird auf eine Größe von 400x300 gesetzt
        frame.setSize(400, 300);

        // Hauptfenster wird sichtbar geschalten
        frame.setVisible(true);
    }

}
                

Lösung von: Sebastian Littel ()

#automat - nicht schön, aber es funzt

liste = {"pizza":8, "twix":1, "malteser":1, "gummibärchen":2, "popcorn":3, "cola":1,
         "apfel":1, "salat":2}


def kaufen():
    summe = 0
    
    for key in liste:
            print ("Im Automaten sind noch ", key, "für ",  liste[key], " Euro.")
    auswahl = input("Was möchten Sie kaufen?")
    auswahl = auswahl.lower()
    
    if auswahl in liste:
        preis = liste[auswahl]
        print("Der Artikel: ", auswahl, " kostet ", preis, " Euro.")
        print("Bitte bezahlen Sie ", preis)
        
        for geld in range(preis):
            print("Bitte werfen Sie 1 Euro ein. Drücken Sie 'Enter' für jeden Euro")
            eingeworfen = input()
            summe+=1
            
            print ("eingeworfen: ", summe)
        print("Danke, Sie haben ", summe, " Euro bezahlt")
        del liste[auswahl]
        
        kaufen()
    else:
        print("Falsche Auswahl")
        kaufen()
        
kaufen()

                

Lösung von: Py Thon ()

package programmierenuebungen;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseAdapter;
import java.awt.event.MouseEvent;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.DefaultTableModel;

/**
 * 
 * @author MadDeer
 */
public class Automat extends JFrame{

    private JPanel north;
    private JButton einwurf;
    private JTextField anzeige;
    private JTable data;
    private int currentKontostand = 0;
    
    public Automat(){
        north = new JPanel();
        einwurf = new JButton("Geld einwerfen");
        anzeige = new JTextField("Guthaben: 0");
        data = new JTable();
        init();
    }

    private void init(){ //erstellt die GUI
        this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        this.setTitle("Wunderautomat v1.0");
        //GUI basteln
        north.setLayout(new GridLayout());
        anzeige.setEditable(false);
        north.add(anzeige);
        einwurf.addActionListener(new ActionListener(){
            @Override
            public void actionPerformed(ActionEvent e) {
                anzeige.setText("Guthaben: " + ++currentKontostand);
            }
        });
        north.add(einwurf);
        setCustomModel(); //ausgelagerte Methode, wiederverwendbar!!
        data.addMouseListener(new MouseAdapter(){
            @Override
            public void mouseClicked(MouseEvent e) {
                int sel = Integer.parseInt((String) data.getValueAt(data.getSelectedRow(), 1));
                if (currentKontostand >= sel){
                    currentKontostand -= sel;
                    anzeige.setText("Guthaben: " + currentKontostand);
                    DefaultTableModel dtm = (DefaultTableModel)data.getModel();
                    dtm.removeRow(data.getSelectedRow());
                    data.setModel(dtm);
                    if(dtm.getRowCount() == 0){ //automatisch wieder auffuellen
                        setCustomModel();
                    }
                } else {
                    JOptionPane.showMessageDialog(null, "Sie haben zu wenig Geld eingeworfen!", "Armageddon", JOptionPane.ERROR_MESSAGE);
                }
            }
        }); //fertig
        //Obekte zum Frame hinzufuegen, verpacken und anzeigen
        this.add(north, BorderLayout.NORTH);
        this.add(data, BorderLayout.CENTER);
        this.pack();
        this.setVisible(true);
    }
    
    private void setCustomModel(){ //Erstellt den Dateninhalt der Tabelle
        data.setModel(new DefaultTableModel(new String[][]{{"Pizza", "8"},{"Cola","1"}
                ,{"Twix","1"},{"Malteser","1"},{"Gummibaerchen","2"},{"Popcorn","3"}
                ,{"Apfel","1"},{"Salat","2"},{"Doener","4"}},
                new String[]{"Angebot", "Kosten"}) {
            Class[] types = new Class[]{java.lang.String.class, java.lang.String.class};
            boolean[] canEdit = new boolean[]{false, false};
            @Override
            public Class getColumnClass(int columnIndex) {
                return types[columnIndex];
            }
            @Override
            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit[columnIndex];
            }
        });
    }
    
    public static void main(String[] args){
        new Automat();
    }
}
                

Lösung von: Mad Deer (FH Ulm)


/// F# - Automat
/// Ein einfaches Beispiel

(*** Ich habe es leider nicht mit dem VS Editor geschrieben sondern mit ganz normalen Notepad aber sollte funktionieren ***)

open System

exception ProductError of string

let mutable wartetGeld = true

type Produkt = {
    Name: string
    mutable Amount: int
}

let produkten = [ 
  { Name = "Pizza"; Amount = 8;  }
  { Name = "Twix"; Amount = 1; }
  { Name = "Malteser"; Amount = 1; }
  { Name = "Gummibärchen"; Amount = 2; }
  { Name = "Popcorn"; Amount = 3; }
  { Name = "Cola"; Amount = 1; }
  { Name = "Apfel"; Amount = 1; }
  { Name = "Salat"; Amount = 2; }]

let decAmount (name) : unit = 
    let index = List.findIndex (fun (p : Produkt) -> p.Name = name) produkten
    produkten.[index].Amount <- produkten.[index].Amount - 1 

let rec startAutomat wartet =   
  try
    printfn "Geld einwerfen: " 
    let einwurf = int (Console.ReadLine())
    if einwurf = 1 then
        automat
    elif einwurf > 1 then
        raise (ProductError ("Produkt ausverkauft."))
    else
        startAutomat true
        
  with | ProductError(str) -> printfn "%s" str; startAutomat true
and  automat =
  try
    Console.Write ("Auswahl: ")
    let eingabe = Console.ReadLine()
    let fprodukt : Produkt = 
        (List.filter (fun (p : Produkt) -> p.Name = eingabe) produkten).[0]
    
    if fprodukt.Amount > 0 then
        decAmount eingabe
        printfn "Danke für Ihren Einkauf!"
    else
        raise (ProductError ("Produkt ausverkauft."))
        startAutomat true
        
  with | :? ArgumentException as e -> printfn "Produkt kann nicht gefunden!"
       | ProductError(str) -> printfn "%s" str

                

Lösung von: Vural Acar ()

using System;
using System.Collections.Generic;
using System.Linq;

namespace Automat {
	class Program {
		static void Main(string[] args) {
			int[] preis = new int[] { 1, 2, 3, 8 };
			Dictionary<string, float> Produkte = new Dictionary<string, float> {
				{"Pizza", preis[3]}, {"Twix", preis[0]}, {"Malteser", preis[0]}, {"Gummibärchen", preis[2]},
				{"Popcorn", preis[2]}, {"Cola", preis[0]}, {"Apfel", preis[0]}, {"Salat", preis[1]}
			};
			sbyte befüllt = -1;

			ConsoleKey temp_key;
			do{
				Console.Clear();

				for (int i = 0, produkt = 1; 
					i < Produkte.Count;
					i++, produkt <<= 1) 
					Console.WriteLine("[{0}] {1}: {2,2:#0.00} Euro", 
						(befüllt & produkt) == produkt ? (i+1).ToString("00") : "--", 
						Produkte.ElementAt(i).Key, 
						Produkte.ElementAt(i).Value);
				
				temp_key = Console.ReadKey(true).Key;
				switch (temp_key) {
					case ConsoleKey.D1:
					case ConsoleKey.NumPad1:
						befüllt &= ~1;
						break;
					case ConsoleKey.D2:
					case ConsoleKey.NumPad2:
						befüllt &= ~2;
						break;
					case ConsoleKey.D3:
					case ConsoleKey.NumPad3:
						befüllt &= ~4;
						break;
					case ConsoleKey.D4:
					case ConsoleKey.NumPad4:
						befüllt &= ~8;
						break;
					case ConsoleKey.D5:
					case ConsoleKey.NumPad5:
						befüllt &= ~16;
						break;
					case ConsoleKey.D6:
					case ConsoleKey.NumPad6:
						befüllt &= ~32;
						break;
					case ConsoleKey.D7:
					case ConsoleKey.NumPad7:
						befüllt &= ~64;
						break;
					case ConsoleKey.D8:
					case ConsoleKey.NumPad8:
						befüllt &= ~-128;
					break;
				}
			} while (temp_key != ConsoleKey.Escape);
		}
	}
}
                

Lösung von: Marcel Kapma ()

// eingabemaske
document.write(
   '<select id="menu" style="float:left;margin-right:1em">' + 
      '<option value="8" onclick="compute()">Pizza</option>' +
      '<option value="1" onclick="compute()">Twix</option>' +
      '<option value="1" onclick="compute()">Malteser</option>' +
      '<option value="2" onclick="compute()">Gummibärchen</option>' +
      '<option value="3" onclick="compute()">Popcorn</option>' +
      '<option value="1" onclick="compute()">Cola</option>' +
      '<option value="1" onclick="compute()">Apfel</option>' +
      '<option value="2" onclick="compute()">Salat</option>' +
   '</select>' +
   '<p id="display">0</p>' + 
   '<button id="insert" disabled>Münze einwerfen</button>'
);

var menu = document.getElementById("menu"),
    display = document.getElementById("display"),
    insert = document.getElementById("insert");
    
function compute() {
   var i = menu.selectedIndex;
   insert.disabled = false;
   display.innerHTML = menu.options[i].value;
   insert.onclick = function() {
      menu.disabled = true;
      if (display.innerHTML > 1) display.innerHTML--;
      else {
         alert("Bitteschön!");
         menu.remove(i);
         if (menu.length == 0) {
            insert.disabled = true;
            display.innerHTML = "Außer Betrieb";
         } else {
         insert.disabled = true;
         menu.disabled = false;
         display.innerHTML = 0;         
         }
      }
   }
}
                

Lösung von: Lisa Salander (Heidi-Klum-Gymnasium Bottrop)

// NET 6.x | C# 10.x | VS-2022
using static System.Console;
using static System.ConsoleKey;

_ = new Automat();

class Automat {
    enum G { _1 = 1, _2, _3, _4 = 8 } // Preisgruppe
    enum I { Pizza, Twix, Malteser, Gummibaerchen, Popcorn, Cola, Apfel, Salat } // Artikel

    private readonly List<(I item, G group, bool available)> _lst = new() {
        (I.Pizza, G._4, true), (I.Twix, G._1, true), (I.Malteser, G._1, true),
        (I.Gummibaerchen, G._2, true), (I.Popcorn, G._3, true), (I.Cola, G._1, true),
        (I.Apfel, G._1, true), (I.Salat, G._2, true)
    };

    public Automat() {
        while (true) {
            Print();
            Write("Wähle einen Artikel (0 für Beenden): ");
            _ = int.TryParse(ReadLine(), out int n);
            if (n != 0) Buy(n);
            else return;
        }
    }

    private void Print() {
        var i = 1;
        foreach (var (item, group, available) in _lst) {
            if (available) WriteLine($"({i}) - {item}: {(int)group} Euro");
            i++;
        }
    }

    private static bool Pay(int amount) {
        WriteLine($"Bitte {amount} Euro zahlen (Taste 1 drücken oder 0 für Beenden)");
        while (amount > 0) {
            switch (ReadKey(true).Key) {
                case D1: case NumPad1: amount--; break;
                case D0: case NumPad0: return false;
                default: WriteLine("Falsche Taste!"); break;
            }
            WriteLine(amount > 0 ? $"noch {amount} Euro" : "bezahlt");
        }
        return true;
    }

    private void Buy(int num) {
        if (Enum.IsDefined(typeof(I), num - 1))
            for (var i = 0; i < _lst.Count; i++) {
                var (it, gr, av) = _lst[i];
                if (num - 1 == i && av) {
                    if (Pay((int)gr)) {
                        _lst[i] = new(it, gr, false);
                        WriteLine($"Ausgabe: {it}\n");
                    }
                    else WriteLine($"Der Vorgang wurde abgebrochen\n");
                    return;
                }
            }
        WriteLine("Artikel nicht (mehr) vorhanden!\n");
    }
}
                

Lösung von: Jens Kelm (@JKooP)

// C++ 20 | VS-2022

#include <iostream>
#include <vector>
#include <format>
#include <sstream>

struct Item {
    std::string name;
    size_t price;
    size_t amount;
};

std::vector<Item>items{
    {"Pizza", 8, 4}, {"Twix", 1, 20}, {"Malteser", 1, 10},
    {"Gummibaerchen", 2, 1}, {"Popcorn", 3, 4}, {"Cola", 1, 5},
    {"Apfel", 1, 10}, {"Salat", 2, 0}
};

const std::ostream& print_items(const std::ostream& os_) {
    auto i{ 1 };
    for (const auto& [name, price, amount] : items)
        std::cout << std::format("{:02} - {}: {}{} Euro\t Anzahl: {}\n", i++, name, std::string(15-name.length(), ' '), price, amount);
    std::cout << "\n";
    return os_;
}

const bool item_paid(size_t amount_) {
    std::string chr{};
    std::cout << std::format("Bitte {} Euro zahlen (Taste 1) oder 0 fuer beenden\n", amount_);
    std::cin.ignore();
    while (amount_) {
        switch (getchar()) {
            case '1': amount_--; std::cin.ignore(); break;
            case '0': return false; break;
            default: std::cout << "Falsche Taste!\n"; std::cin.ignore(); break;
        }
        if (amount_) std::cout << std::format("noch {} Euro\n", amount_);
        else std::cout << "Artikel bezahlt!\n\n";
    }
    return true;
}

const auto buy_item(const size_t& num_) {
    if (num_ > items.size()) {
        std::cout << "Artikelnummer nicht bekannt!\n\n";
        return;
    }

    auto& [name, price, amount] = items[num_ - 1];

    if (!amount) {
        std::cout << "Artikel nicht mehr vorhanden!\n\n";
        return;
    }

    if (!item_paid(price)) {
        std::cout << "Der Vorgang wurde abgebrochen!\n\n";
        return;
    }
    amount--;
    std::cout << "Ausgabe: " << name << "\n";
}

int main() {
    size_t num{};
    while (1) {
        print_items(std::cout);
        std::cout << "Waehle einen Artikel (0 fuer Beenden): ";
        std::cin >> num;
        if (num) buy_item(num);
        else break;
    }
}
                

Lösung von: Jens Kelm (@JKooP)

Aktionen

Bewertung

Durchschnittliche Bewertung:

Eigene Bewertung:
Bitte zuerst anmelden

Meta

Zeit: 1
Schwierigkeit: Leicht
Webcode: gyqp-uwic
Autor: ()

Download PDF

Download ZIP

Zu Aufgabenblatt hinzufügen