Laden...

Programm zur Pizzabestellung

Erstellt von masupilamhi vor 17 Jahren Letzter Beitrag vor 17 Jahren 7.110 Views
M
masupilamhi Themenstarter:in
3 Beiträge seit 2006
vor 17 Jahren
Programm zur Pizzabestellung

Hi!

ich muss als C#-Anfänger den folgenden Beleg anfertigen:

Programm zur Pizzabestellung

mit 5Pizzen zur Auswahl und Unterscheidung zwischen Großer und kleiner Variante.

Ausserdem soll am Anfang des Programmes die Telefonnummer des Kunden eingegeben werden können und das Programm sol sich aus einer externen Datei die Adresse selbst raussuchen. Am Ende der Bestellung (nämlich wenn das Eingabefeld leer bleibt) soll der Gesamtpreis berechnet werden und eine Druckmöglichkeit der Rechnung angeboten werden...

Ich hab aus lauter Verzweiflung mal angefangen zu programmieren, aber ich komm jetzt einfach nicht weiter...

ich hoffe, ihr könnt mir da weiterhelfen!!!!!

Bitte, Bitte, Bitte

Hier mein Bisher programmierter Teil der Bestellfunktion:



using System; 
using System.Collections.Generic; 
using System.Text; 

namespace Console_probe 
{ 
class Program 
{ 
static void Main(string[] args) 
{ 

int befehl2, i, anzahl, piz, Pizza; 
double[] Preis ={ 12.9, 6.7, 11.2, 6.0, 11.0, 5.9, 10.7, 5.6, 9.1, 5.1 }; /* Preisliste*/ 
double bestellnummer; 


Console.WriteLine("Bestellmöglichkeiten: Preis: Klein Groß\n---------------------\n Pizza Kentucky (Salami), (011) 5,10 (012) 9,10\n Pizza Tonno (Thunfisch,Zwiebeln), (021) 5,60 (022) 10,70\n Pizza Hawai (Hinterschinken,Ananas), (031) 5,90 (032) 11,00\n Pizza Fungi (Hinterschinken,Pilze), (041) 6,00 (042) 11,20\n Pizza Long Beach (Meeresfrüchte), (051) 6,70 (052) 12,90"); 





Console.Write("\n\nGeben Sie die Anzahl der Pizzen ein : "); 
anzahl = Convert.ToInt32(Console.ReadLine()); 
for (i = 1; i <= anzahl; i++) 
{ 




Console.Write("\n\nGeben Sie bitte Ihre Bestellung ein : "); 
bestellnummer = Convert.ToDouble(Console.ReadLine()); 


if (bestellnummer == 011) 
piz = 10; 
else if (bestellnummer == 012) 
piz = 9; 
else if (bestellnummer == 021) 
piz = 8; 
else if (bestellnummer == 022) 
piz = 7; 
else if (bestellnummer == 031) 
piz = 6; 
else if (bestellnummer == 032) 
piz = 5; 
else if (bestellnummer == 041) 
piz = 4; 
else if (bestellnummer == 042) 
piz = 3; 
else if (bestellnummer == 051) 
piz = 2; 
else if (bestellnummer == 052) 
piz = 1; 
else Console.WriteLine("Diese Nummer existiert nicht in der Menükarte /nBitte gebn Sie ihre Bestellung erneut auf.../n"); 





Console.WriteLine("Der Gesamtpreis lautet:"); 




} 
Console.ReadLine(); 
} 

} 
} 


mein Problem ist auch, dass wenn ich ne falsche Nummer eingebe, entweder das Programm abbricht oder abstürzt oder zwar die Fehlermeldung erscheint, aber die Bestellung nicht fortgesetzt werden kann...

Wo liegt mein verdammter Fehler und welche Funktion fehlt mir...

wenn ihr irgendwelche ähnlichen Beispiele Rumliegen habt, dann schickt die mir bitte....bin für jeden Rat dankbar... Vielen Dank

Masupilamhi

822 Beiträge seit 2005
vor 17 Jahren

Gibst du eine falsche Nummer ein, wirst du aufgefordert erneut einzugeben, aber du wiederholst die Eingabe ja nicht, nachdem das prog meldet du hast falsch eingegeben, springt es zur nächsten pizza.

sbertl

PS:Bitte Code-Tags verwenden.

R
297 Beiträge seit 2005
vor 17 Jahren

Dein erstes Problem löst du mit
try und catch

Ausserdem hast du ein kleines Design Problem was machst du wenn du
200 Pizzen hast ?

Urlaubsorte suchen: http://www.tripedio.de

822 Beiträge seit 2005
vor 17 Jahren

Original von rockthecity
Dein erstes Problem löst du mit
try und catch

Nein, das lößt es nicht, denn die Bestellung wird bei Fehler dann nicht erneut aufgenommen.

sbertl

L
497 Beiträge seit 2006
vor 17 Jahren

Zunächst einmal: Verwende bitte C#-Code-Tags, wenn Du Quellcode einstellst. Der ist dann viel besser zu lesen. Du kannst das auch noch nachträglich ändern.

Habt Ihr Euch schon mit Objektorientierung beschäftigt? Ein Pizzaklasse und eine List<Pizza> würden das ganze Programm deutlich übersichtlicher und dynamischer machen. Da Du Collection.Generic eingebunden hast, würde ich vermuten, dass Du das auch verwenden willst?
Auch eine Methode calculatePrice() wäre nicht verkehrt. Dann wäre es auch einfacher, die Gesamtpreisberechnung abzubrechen falls es falsche Eingaben gab. Die Ersetzung des ekelhaften if else is else if usw. durch ein switch würde ebenfalls etwas helfen.

Statt Conver.Parse solltest Du TryParse verwenden, da der Benutzer ja durchaus böswillig oder unbeabsichtigt Buchstaben usw. eingeben könnte, wo nur Zahlen erlaubt sein sollen.

Zwischen 011 und 11 besteht bei Zahlen übrigens kein Unterschied. Wenn Du wirklich auf 011 prüfen willst, dann solltest Du Strings als Bestellnummer verwenden.

Sarkusmus ist, wenn nichts mehr hilft, außer Lachen.

N
750 Beiträge seit 2004
vor 17 Jahren

.....
bestellnummer = Convert.ToDouble(Console.ReadLine()); 


if (bestellnummer == 011) 
piz = 10; 
else if (bestellnummer == 012) 
piz = 9; 

.....

die konvertierung und der vergleich mit der 011 ?!?
funzt das ? macht der compiler die 0 weg und wird das 11 verarbeitet ?

und wofür ist die variable "piz" gut ?

?( wer suchet, der findet auch! :]

N
750 Beiträge seit 2004
vor 17 Jahren

ok Lord Hessia hat mich bezüglich der 011 schon schlauer gemacht 🙂

Da Du Collection.Generic eingebunden hast, würde ich vermuten, dass Du das auch verwenden willst?

ich glaub das macht das Studio 2005 standardmässig rein, wenn ich mich nicht täusche

?( wer suchet, der findet auch! :]

1.985 Beiträge seit 2004
vor 17 Jahren

Hallo zusammen,

Original von nils
ich glaub das macht das Studio 2005 standardmässig rein, wenn ich mich nicht täusche

jep, kann ich bestätigen. Das using ist standardmäßig enthalten.

Gruß,
Fabian

"Eine wirklich gute Idee erkennt man daran, dass ihre Verwirklichung von vornherein ausgeschlossen erscheint." (Albert Einstein)

Gefangen im magischen Viereck zwischen studieren, schreiben, lehren und Ideen umsetzen…

Blog: www.fabiandeitelhoff.de

M
masupilamhi Themenstarter:in
3 Beiträge seit 2006
vor 17 Jahren
Pizzabestellung

Hallo und erstmal vielen dank für eure Antworten. Ich grüble nun auch schon seit Montag über dem Programm und bin wie gesagt absoluter C# Neuling. Ich danke euch für eure zahlreichen Formeln und Tipps, jedoch weiss ich nicht, wie ich die in meinen Code einbinden muss. Vor allem die Methoden stellen ein größeres Problem dar....

Ich hoffe, jemand kann anhand meines bisherigen Programmes ein paar Beispiele zusammen schustern....

bin da echt überfragt...

vielen, vielen dank

masu

49.485 Beiträge seit 2005
vor 17 Jahren

Hallo masupilamhi,

klingt nach: "macht ihr mal meinen Job" bzw. "ich kann meine Aufgabe nicht lösen, also macht ihr das mal für mich".

herbivore

822 Beiträge seit 2005
vor 17 Jahren

Deine IF-Else if Anweisungen kannst du durch wie oben genannt durch eine Switch Anweisung ersetzen:

switch(bestellnummer)
{
case 011:
//Tu dies und das....
break;
case 012:
....
....
}

sbertl

L
497 Beiträge seit 2006
vor 17 Jahren

Ein guter Ansatz wäre es, in Main eigentlich nix zu tun, als allerhöchstens Eingabeaufforderungen auszugeben, die eingegebenen Daten zu lesen und dann an Methoden weiterzureichen. Als Beispiel das Laden der Kundendaten

static void Main(string[] args) {
    Console.WriteLine("Bitte geben Sie die Telefonnummer des Kunden ein: ");
    String phoneNumber = Console.ReadLine();
    String address = loadCustomerAddress(phoneNumber);
    ...
}

// Lädt Daten des über die Telefonnummer spezifizierten Kunden aus Kundendatei
private String loadCustomerData(String phoneNumber) {
  ...
}

Die Kundenadresse wird einfach als String zurückgegeben. Schöner wäre natürlich ein Adress-Objekt, aber für den Anfang reicht der String.

Das Wichtige ist ohnehin etwas anderes: Es hilft - und so macht es eigentlich jeder gescheite Programmierer - die Aufgabe in viele kleine Teile zu zerlegen, um sie einfacher lösen zu können. Ich würde Dir daher auch raten, zunächst einmal die Main komplett zu vervollständigen mit allen Ein- und Ausgaben sowie Methodenaufrufen. Dann besteht die Komplexität nur noch darin, die einzelnen Methoden mit Leben zu füllen. Da wirst Du dann wieder auf Probleme stoßen, z.B. wie man eine Datei einließt, etwas in einem Array speichert usw., aber das sind dann einzelnen kleine Probleme, die sich mit Hilfe eines Buches oder der Suche oder ggf. einer kurzen Frage erledigen lassen.

Wie gesagt, zunächst ist es wichtig, das Problem strukturiert anzugehen - und das Aufteilen in Methoden ist hier ein gangbarer Weg.

Sarkusmus ist, wenn nichts mehr hilft, außer Lachen.

T
68 Beiträge seit 2006
vor 17 Jahren

Also ich hab die ganzen Einträge nur überflogen aber ich nachdem ganzen Codestücken was ich gesehen habe, ist es designmäßig eine katastrophe was du machst. Vor allem ist diese sehr unflexibel wenn du mal änderungen etc. nachvollziehen musst. Und eine endlose switch anweisungen ist auch nicht grad das gelbe vom Ei.

Es gibt für viele Problem Design Patterns die Problem "sauber" lösen und auch nicht all die ganzen Probleme hervorrufen die du jetzt momentan hast. Weiters behälst du dir mit leichtigkeit die Übersicht. Ich weiß nicht wie sehr du mit der OO Programmierung wirklich vertaut bist aber ich würde für dein "Pizzabestellungsprogramm" das Dekorierer bzw Decorator Design Pattern empfehlen. Less dich zu diesem Design Pattern ein und du hast das Programm in null komma nix gelöst.

L
497 Beiträge seit 2006
vor 17 Jahren

Hi TiTime. Ich glaube, dass man als Programmieranfänger erst einmal in ein paar Probleme reinlaufen muss, um dann irgendwann mal Patterns einzusetzen. Das alles auf einmal gleich am Anfang zu versuchen, wird wohl keiner schaffen. Außerdem ist es halt so, dass man Schmerzen selber gespürt haben muss, um diverse Workarounds auch wirklich anzunehmen - s. Kind und Herdplatte.

Sarkusmus ist, wenn nichts mehr hilft, außer Lachen.

T
68 Beiträge seit 2006
vor 17 Jahren

@Lord Hessia
Natürlich weiß ich das, dass man erst mal reinlaufen muss und einiges schon verstehen muss bevor man sich an die Designpatterns heranwagt, aber ich hab dies auch nur vorgeschlagen, weil das Decorator pattern nicht so schwer zu verstehen ist.
Es sollte auch keine persönliche Kritik sein und schon gar nicht ein vorwurf das er es nicht so gemacht hat. Es war nur so ein kleiner tipp in die richtige richtung 😉
Also bitte nicht falsch verstehen das Ganze.

Deswegen hab ich ja gesagt ich weiß nicht wie gut es mit sienen kenntnissen der OO steht. Das sollte ein Impliziter Hinweis sein, dass er erst sich daran wagen soll wenn er die Prinzipen der OO verstanden hat. 😉
What ever.
Auf jedenfall alles gute 🙂

[
30 Beiträge seit 2005
vor 17 Jahren

Mal ne andre Frage, wieso machst du das nicht mit Forms ?

Das ist viel einfacher in meinen Augen.

Hier mal mein Ergebnis so auf die schnelle als Anhang (Visual Studio 2005)

Gruß OM

B
1.529 Beiträge seit 2006
vor 17 Jahren

Eigentlich wollte ich mich hier ja nicht äußern.
Als ich aber gelesen habe, dass du seit Montag (!) an diesem Problem sitzt, fallen mir nur diese Tips ein:
1.Geh Lebensmittel und Getränke kaufen. Keinen Alkohol 1.Geh in einen Buchladen (alternativ Bibliothek) 1.Kauf (bzw. leih) dir ein Buch. Beispielsweise
http://www.amazon.de/gp/product/3860635514/302-3707928-3392844?v=glance&n=299956
http://www.amazon.de/gp/product/382732324X/302-3707928-3392844?v=glance&n=299956
http://www.amazon.de/gp/product/3826630378/302-3707928-3392844?v=glance&n=299956 1.Geh nach Hause. 1.Ruf deine Freundin an und sage ihr, dass du die nächsten Tage leider überhaupt keine Zeit hast. 1.Schliess dich in deinem Zimmer ein. 1.Wirf den Rechner an, mach IRC, IM und Fernseher aus, höchstens leise Musik (Ambient, nicht mit Kopfhörer) 1.Starte deine Entwicklungsumgebung. 1.Lies jetzt im Buch und probiere das ganze am Rechner. 1.Wiederhole Schritt 9 für zwei bis vier Stunden. 1.Mach Pause, geh aufs Klo, schüttel die Muskeln aus, trink etwas, iss eine Kleinigkeit 1.Wenn es wieder hell wird, geh ins Bett. Ansonsten gehe zu Schritt 9 1.Wenn du noch nicht weisst, wie du dein Programm schreiben sollst => Gehe zu Schritt 9 1.schreibe jetzt dein Programm 1.Präsentiere es stolz in der Schule und bei mycsharp.de 1.Freu dich, du bist jetzt Anfänger und kein Noob mehr.

L
497 Beiträge seit 2006
vor 17 Jahren

@Borg: 😁 Wieso darf man beim Programmieren keine Musik über Kopfhörer hören?

Sarkusmus ist, wenn nichts mehr hilft, außer Lachen.

B
1.529 Beiträge seit 2006
vor 17 Jahren

Wegen der schlechten Belüftung der Hörgänge.

Dies kann zu Temeraturunterschieden (daraus resultierend Druckunterschiede) in den Ohren führen.
Diese verursachen kaum spürbare Gleichgewichtsstörungen, die langfristig zu einem Gefühl des Unwohlseins führen.
Desweiteren wird der Gehörgang feucht, so dass es in Einzelfällen sogar zu einer Entzündung kommen kann.

Die Auswirkungen elektromagnetischer Felder so nahe am Hirn sind auch noch nicht ausreichend untersucht.

Andere mögliche Gründe (vielleicht etwas abwegiger) wären:*man hört weniger von der Umgebung, *man kann die Musik nicht so gut überhören und *die Dinger nerven auf Dauer einfach.

😉

L
497 Beiträge seit 2006
vor 17 Jahren

Ok, und ich dachte es gäbe triftige Gründe... 🤔

Sarkusmus ist, wenn nichts mehr hilft, außer Lachen.

E
38 Beiträge seit 2006
vor 17 Jahren

ihr seit ja richtige scherzkeckse 😉

34 Beiträge seit 2006
vor 17 Jahren

Original von TiTime
Es gibt für viele Problem Design Patterns die Problem "sauber" lösen und auch nicht all die ganzen Probleme hervorrufen die du jetzt momentan hast. Weiters behälst du dir mit leichtigkeit die Übersicht. Ich weiß nicht wie sehr du mit der OO Programmierung wirklich vertaut bist aber ich würde für dein "Pizzabestellungsprogramm" das Dekorierer bzw Decorator Design Pattern empfehlen. Less dich zu diesem Design Pattern ein und du hast das Programm in null komma nix gelöst.

Hi,
Wenn man noch Mühe hat mit den Basics (if/else-Verhau etc.), dann wird man nach der Lektüre des nicht ganz einfachen Decorator Partterns das Programm nicht in nullkommanix richtig schreiben können.
Ich würde auch zuerst mal sagen, nimm Forms anstatt Konsole, dann ist man flexibler mit den Ein/Ausgaben und hat auch mehr Spass 😁
Wenns humpelt, dann hat man wohl ein Blob (Antipattern, alles in einem Haufen drinne). Dann kann man sich Gedanken machen ein Model (Objekt, das die Funktionalität kapselt) zu bauen. Und schon ist man im OO.
Patterns verstehen und anwenden kommt erst danach.
Die Pizzageschichte würde ich dennnoch mit dem Factory Muster machen.

Pat

M
masupilamhi Themenstarter:in
3 Beiträge seit 2006
vor 17 Jahren

@ herbivore:

das ist ganz und gar nicht meine Absicht.Fakt ist nur, dass ich verdammt wenig Zeit und weniger Ahnung habe. Ohne ein paar Hilfen, die quasi eine Art "Crash-Kurs" darstellen, seh ich ziemlich schwarz...

Vielen Dank für eure zahlreichen Beispiele und Tipps.

@Pat:

wie soll dieses FactoryMuster aussehen? kannst du das bitte erklären???

@[OM]:

die Idee mit den Forms ist gar nicht schlecht!!! Sehr übersichtlich...da ich damit allerdings nicht viel zu tun hatte, stehe ich vor dem nächsten Problem...dem weiterarbeiten...also wie ich die ganzen Werte einlese und aufliste...

@ all:

dass ihr Programmiergurus über mein (ich will mal) Design (sagen), meckert, hatte ich mir fast schon gedacht, allerdings hilft es manchmal, wenn man grad am verstehen und verinnerlichen ist, alle befehle untereinander zu schreiben, auch wenns damit verdammt unübersichtlich wird... Dann versteht man den Ablauf um längen besser....

Ich werd mich trotzdem mal auf den Vorschlag mit den Forms werfen...scheint mir recht lukrativ...

Hat jemand noch weitere Designvorschläge? Oder Ballspiele?

Vielen Dank at all!!!

190 Beiträge seit 2005
vor 17 Jahren

Original von masupilamhi

Hat jemand noch weitere Designvorschläge? Oder Ballspiele?

Ballspiel

190 Beiträge seit 2005
vor 17 Jahren
34 Beiträge seit 2006
vor 17 Jahren

Hi masupilamhi,
Schau Dir mal dieses Buch an. Da gibts ein Probekapitel,, das handelt über Decorator Pattern. Das gibt Dir sicher einen Einblick, ob Du schon bereit bist für sowas.
Das Factory Pattern wird übrigens in dem Buch als Pizzaherstellung beschrieben 😁
Mein Vorschlag:
Mach einfach weiter wie bisher. Lerne aus den Fehlern und sei selbstkritisch. Ist das gut so oder muss es da noch was geben was den Code besser und leserlicher macht.
Nach vielen Programmen wirst Du merken, dass je grösser das Programm wird, desto unüberischtlicher wirds.
Was hilft da raus? Kapselung von Teilproblemen. Und da bieten sich Objekte an. Wenn Du das dann im Griff hast, dann interessieren Dich die Beziehungen der Objekte untereinander. Du wirst abstrakte Klassen und Interfaces kennenlernen. Das sind die Zutaten für Pattern (Muster).
Und noch ein Tip für Fragestellungen hier im Forum:
Poste nicht ganze Codeseiten. Das ist mühsam zu identifizieren und regt die Kollegen nur zum stänkern an 😜 Versuche Dein aktuelles Problem genau zu schildern und poste nur ein paar Zeilen. Wenn das Problem den ganzen Code betrifft, dann musst Du das Design in Frage stellen.

Pat

T
68 Beiträge seit 2006
vor 17 Jahren

Schau Dir mal dieses Buch an

Ich hab dieses Buch in meiner Buchsammlung. 😁 😉 Und es ist meiner Meinung nach das beste der Design Pattern Bücher. Und ich hab einige gelesen Angefangen über Die GOF Bible bis diverese kleinBücher sowohl in english als auch in Deutsch.

Sehr wohl weiß ich daher dass dort Pizza bestellungen als Factory Pattern dargestellt wird. Allerdings habe ich zum Decorator geraten, weil es scho scheints mir es so wie im Kaffebeispiel abhängig ist wie sich der Preis der Pizza zusammen setzt 😉

Aber vermutlich gebe haben die anderen Recht und du solltest zuerst mal mit den Forms hantieren wenns wirklich so weit fehlt. Sorry falls ich hier ne Diskussion angezettelt habe die doch etwas abseits deines Kernproblems liegt

[
30 Beiträge seit 2005
vor 17 Jahren

Original von masupilamhi

@[OM]:

die Idee mit den Forms ist gar nicht schlecht!!! Sehr übersichtlich...da ich damit allerdings nicht viel zu tun hatte, stehe ich vor dem nächsten Problem...dem weiterarbeiten...also wie ich die ganzen Werte einlese und aufliste...

Das heißt also du hast 0-Ahnung vom Programmieren, zumindest in C# (.NET). (man kann ja genausgut VB.NET nehmen, ist genauso geeignet....)

Jetzt könnt ich natürlich andere Funktionen einfügen und es dir präsentieren, aber was bringt das für dich? Du lernst dadurch nichts.

Zu deinem weiterführenden Problem...:
Wie du die Daten aus der ListView bekommst erfährst du wenn du dir den Code mal etwas genauer anschaust, ich mach das schon um die MessageBox anzuzeigen...

Der nächste schritt ist die Zeichen für den Drucker vorzubereiten, das ist dann ein eigenes Kapitel. Wozu es auch eine Menge beispiele, tutorial usw. im Netz gibt. (Hier bestimmt auch)

242 Beiträge seit 2006
vor 17 Jahren

Hallo,

ich habe mal begonnen etwas zu programmieren, das Ergebnis ist teilweise nicht schön gelöst, da ich erst 3Wochen programmiere. Aber als kleines Beispiel kann man das Programm schon benutzen.
Was ich nicht gut gelöst habe ist z.B. der Zähler, der die Pizzas zählt, leider wollte es irgendwie ned schön klappen X(
Falls da jemand nen Verbesserungsvorschlag hat wäre ich natürlich auch dran interessiert. =)
Wenn wer Fragen zum Programm hat bin ich natürlich immer bereit zu antworten🙂
Hier noch Pics vom Programm/Klassendiagramm:

mfG Benj

T
223 Beiträge seit 2006
vor 17 Jahren

Hi,

Anscheinend hast du ja nun die Grundlagen drauf, dann solltest du dir echt überlegen, das Factory oder das Decorator Pattern anzuwenden.
Handelt es sich bei den Pizzen um fertige Pizzen, nimmst du das Factory Pattern. Wird eine Pizza aus einzelnen Zutaten zusammengesetzt, dann nimmst du das Decorator Pattern.

Gruß Thomas

L
497 Beiträge seit 2006
vor 17 Jahren

Ich glaube, bei Threadersteller und Lösungsschreiber handelt es sich um zwei verschiedene Personen.

Nichtsdestotrotz sind es natürlich die Patterns die die Welt bedeuten - oder so...

Sarkusmus ist, wenn nichts mehr hilft, außer Lachen.