Automat do napojów

Automat do napojów
ML
  • Rejestracja:około 5 lat
  • Ostatnio:około 5 lat
  • Postów:18
0

Witam, jestem po jednym wykładzie z programowania C# z powodu panującej epidemii. A za tydzień muszę oddać projekt za który nie mam pojęcia jak się zabrać.
Mianowicie muszę zrobić "prosty" program konsolowy w Visual Studio C#
Jest to automat do napojów.

  • Można kupić napoje o różnej wielkości i cenie.
  • Każdy napój ma swoją cenę.
  • Za jednym razem można kupić kilka napojów.
  • Ma być możliwości wyboru sposobu płatności Karta/Gotówka
  • Wydawanie reszty

Nie proszę tutaj o zrobienie projektu za mnie, bo chciałbym się czegoś nauczyć, lecz naprowadzenia mnie w jakikolwiek sposób lub podpowiedzenia jak mogę to zrobić.

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Wrocław
0

To zależy co było na wykładzie. To ma być obiektowe, czy nie?

ML
  • Rejestracja:około 5 lat
  • Ostatnio:około 5 lat
  • Postów:18
0
somekind napisał(a):

To zależy co było na wykładzie. To ma być obiektowe, czy nie?

Wykładowca przedstawiał podstawy jak Console.Writeline();
Mieliśmy zadania w domu typu zrobić program który wylicza deltę, czy BMI. Typowe podstawy, więc ciężko to określić.

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Wrocław
0

No czyli bez obiektów, czyli po prostu masz przy użyciu Console.WriteLine i podobnych wyświetlić jakieś menu, typu:

Kopiuj
1. cola - 5zł
2. sprite - 10 zł
3. piwo - 20 zł

I spytać użytkownika o to, co wybiera. Od użytkownika z klawiatury wczytać opcje, które wybiera, zsumować koszt i wyświetlić.

ML
  • Rejestracja:około 5 lat
  • Ostatnio:około 5 lat
  • Postów:18
0
somekind napisał(a):

No czyli bez obiektów, czyli po prostu masz przy użyciu Console.WriteLine i podobnych wyświetlić jakieś menu, typu:

Kopiuj
1. cola - 5zł
2. sprite - 10 zł
3. piwo - 20 zł

I spytać użytkownika o to, co wybiera. Od użytkownika z klawiatury wczytać opcje, które wybiera, zsumować koszt i wyświetlić.

To akurat się domyślam. Wypisać możliwe opcje z automatu, typu wybierz napój z przypisaną do niego wartością, ewentualne wyjście poprzez Console.WriteLine();,
Potem poprzez (chyba) Console.ReadLine wczytać od użytkownika opcje którą się wybiera.
Ale co zrobić jeśli chce zakończyć ew. wybór, lub kontynuować dalej zakupy ?

somekind
Moderator
  • Rejestracja:około 17 lat
  • Ostatnio:około 4 godziny
  • Lokalizacja:Wrocław
0

No tu już potrzebujesz pętli, np. while bądź do-while, na której koniec będziesz pytał użytkownika, czy chce się bawić dalej.
Tylko pytanie, czy pętle były na zajęciach i już Cię obowiązują.

edytowany 1x, ostatnio: somekind
TheSpecial1
  • Rejestracja:ponad 9 lat
  • Ostatnio:około rok
  • Lokalizacja:Trójmiasto
  • Postów:2
0

Najprościej będzie chyba to zrobić w ten sposób że wyświetlisz menu (tak jak pisali koledzy wyżej) i niech użytkownik wprowadza wartości po przecinku:

Kopiuj
1, 2, 3, 5, 5...

i wtedy sobie robisz po prostu:

Kopiuj
var wybory = Console.ReadLine().Trim().Split(',');

W ten sposób uzyskasz tablicę z wyborami użytkownika, i jedyne co będzie trzeba zrobić to jakiś switch i pętelka ;)

Po przetworzeniu tych danych zwracasz ile ma zapłacić, analogicznie robisz sposób płatności i na koniec możesz się zapytać czy chce zakończyć program. Sposobów na zrobienie tego jest milion :D

edytowany 2x, ostatnio: TheSpecial1
ML
  • Rejestracja:około 5 lat
  • Ostatnio:około 5 lat
  • Postów:18
0
TheSpecial1 napisał(a):

Najprościej będzie chyba to zrobić w ten sposób że wyświetlisz menu (tak jak pisali koledzy wyżej) i niech użytkownik wprowadza wartości po przecinku:

Kopiuj
1, 2, 3, 5, 5...

i wtedy sobie robisz po prostu:

Kopiuj
var wybory = Console.ReadLine().Trim().Split(',');

W ten sposób uzyskasz tablicę z wyborami użytkownika, i jedyne co będzie trzeba zrobić to jakiś switch i pętelka ;)

Po przetworzeniu tych danych zwracasz ile ma zapłacić, analogicznie robisz sposób płatności i na koniec możesz się zapytać czy chce zakończyć program. Sposobów na zrobienie tego jest milion :D

Myślę że bardziej intuicyjnym wyjściem będzie wybranie produktu, a następnie program pyta czy wybiera coś jeszcze czy nie. To bez tworzenia listy się raczej nie obejdzie.

ZK
  • Rejestracja:prawie 7 lat
  • Ostatnio:6 miesięcy
  • Postów:273
0

Napisałeś kiedykolwiek w życiu jakiś program i czy umiesz pisać algorytmy ?

Grzegorz Świdwa
Grzegorz Świdwa
Jest po jednym wykładzie, pisał już
ML
  • Rejestracja:około 5 lat
  • Ostatnio:około 5 lat
  • Postów:18
0
Zimny Krawiec napisał(a):

Napisałeś kiedykolwiek w życiu jakiś program i czy umiesz pisać algorytmy ?

Jestem na pierwszym roku zaocznie bez wcześniejszego obycia z klepaniem kodu, myślę że taka odpowiedź wystarczy.

ZK
  • Rejestracja:prawie 7 lat
  • Ostatnio:6 miesięcy
  • Postów:273
0

Najpierw rozrysuj jak taki program ma działać a ja ci go napiszę

ML
  • Rejestracja:około 5 lat
  • Ostatnio:około 5 lat
  • Postów:18
0
Zimny Krawiec napisał(a):

Najpierw rozrysuj jak taki program ma działać a ja ci go napiszę

Póki co zrobiłem tyle co w załączniku.
Teraz kombinuje jak wszystko wrzucić w switcha, aby program zbierał informacje na temat produktów, a następnie dodał ich wartości do siebie w celu uzyskania ceny i ew. reszty.

A pisanie programu to kusząca propozycja, ale chciałbym coś z tego wyciągnąć.

ZK
  • Rejestracja:prawie 7 lat
  • Ostatnio:6 miesięcy
  • Postów:273
0

Nie zrozumieliśmy się . Ja ci nie każe pisać programu tylko napisz co ten program ma robić , tak krok po kroku i co ma zawierać

ZK
  • Rejestracja:prawie 7 lat
  • Ostatnio:6 miesięcy
  • Postów:273
1

Musisz sobie najpierw wyobrazić w głowie albo na papierze jak ten program ma wyglądać i działać . Przepisanie go na konkretny język to jest pryszcz

ML
  • Rejestracja:około 5 lat
  • Ostatnio:około 5 lat
  • Postów:18
0
Zimny Krawiec napisał(a):

Nie zrozumieliśmy się . Ja ci nie każe pisać programu tylko napisz co ten program ma robić , tak krok po kroku i co ma zawierać

  1. Wyświetlenie listy 9 napojów każdy o innej cenie.
  2. Użytkownik za jednym razem może kupić kilka napojów.
  3. Ma mieć możliwość wyboru metody płatności karta lub monetami. (10 gr, 20gr, 50 gr, 1zł, 2zł, 5zł)
  4. Ma wyświetlać resztę przy płatności gotówką.
  5. Powinien wszystkie transakcje zapisywać w pliku (jakie napoje i w jakiej ilości i za jaką kwotę)
Zobacz pozostałe 4 komentarze
ZK
Potem program liczy i pyta o formę płatności
ZK
Do opisu napojów można by wykorzystać jakąś kolekcję
ZK
Albo wpisać na sztywno wszystkie produkty do programu i użyć instrukcji switch case, która będzie wyszukiwać cenę produktu
ZK
Potem tą cene mnożysz przez liczbę i wychodzi ci kwota końcowa do zapłaty
ZK
A potem możesz każdą transakcję zapisać do pliku tekstowego
ML
  • Rejestracja:około 5 lat
  • Ostatnio:około 5 lat
  • Postów:18
0

Tak sobie Pan Profesor wymyślił na wyższą ocenę końcową z tym zapisywaniem w pliku. Dlatego napisałem Powinien, lecz nie musi.

Grzegorz Świdwa
Grzegorz Świdwa
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:385
0

i jak tam? Udało Ci się coś już napisać?

ML
  • Rejestracja:około 5 lat
  • Ostatnio:około 5 lat
  • Postów:18
0
Grzegorz Świdwa napisał(a):

i jak tam? Udało Ci się coś już napisać?

Coś mam, zatrzymałem się na pętli do-while.
Nie wiem co zrobić żeby po wybraniu jakiegoś produktu z listy, jeszcze raz się ona pojawiła. Samo wyjście z pętli ogarnąłem przez while (napoje != "0");

Tenonymous
  • Rejestracja:prawie 8 lat
  • Ostatnio:16 dni
  • Postów:425
0

Po prostu daj wyświetlanie produktów w pętli, a nie przed nią. :)

Tenonymous
Ewentualnie pierwsze wyświetlenie przed, a następne jako ostatnia rzecz wykonywana w pętli.
Grzegorz Świdwa
Grzegorz Świdwa
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:385
0
Kopiuj
int n = 0;
do
{
    Console.WriteLine(n);
    n = n+1;
}while(n < 10)

Wszystko pomiędzy znakiem "{" a znakiem "}" będzie się wykonywać w kółko dopóki po każdej skończonej sekwencji pętli sprawdzanie warunku

Kopiuj
while(n < 10)

da Ci prawdę.

ML
  • Rejestracja:około 5 lat
  • Ostatnio:około 5 lat
  • Postów:18
0
Grzegorz Świdwa napisał(a):
Kopiuj
int n = 0;
do
{
    Console.WriteLine(n);
    n = n+1;
}while(n < 10)

Wszystko pomiędzy znakiem "{" a znakiem "}" będzie się wykonywać w kółko dopóki po każdej skończonej sekwencji pętli sprawdzanie warunku

Kopiuj
while(n < 10)

da Ci prawdę.

Błedy w załączniku, nie wiem może jestem jakiś głupi :D

Grzegorz Świdwa
Grzegorz Świdwa
Wszystko masz jak na tacy.
ML
  • Rejestracja:około 5 lat
  • Ostatnio:około 5 lat
  • Postów:18
0

W załączniku jest cała pętla

Tenonymous
  • Rejestracja:prawie 8 lat
  • Ostatnio:16 dni
  • Postów:425
0

Wrzucaj kod w poście, a nie jako screen.
Przede wszystkim, zgrupuj wypisywanie pozycji poza switchem.
Console.WriteLine(cos)
Console.WriteLine(cos)
Console.WriteLine(cos)
Console.WriteLine(cos)

Niech to będzie pierwszy krok w pętli.
Następnie zapytaj użytkownika o to co wybiera, wczytaj dane i w zależności od tego co wybrał, wypisz coś na konsolę(w instrukcji switch).

ML
  • Rejestracja:około 5 lat
  • Ostatnio:około 5 lat
  • Postów:18
0
Tenonymous napisał(a):

Wrzucaj kod w poście, a nie jako screen.
Przede wszystkim, zgrupuj wypisywanie pozycji poza switchem.
Console.WriteLine(cos)
Console.WriteLine(cos)
Console.WriteLine(cos)
Console.WriteLine(cos)

Niech to będzie pierwszy krok w pętli.
Następnie zapytaj użytkownika o to co wybiera, wczytaj dane i w zależności od tego co wybrał, wypisz coś na konsolę(w instrukcji switch).

Opanowałem kłopot z pętlą.

Kopiuj
            string napoje;
            do
            {

                napoje = Console.ReadLine();
                switch (napoje)
                {
                    case "1":
                        Console.WriteLine("1. PEPSI 0,25ml / CENA : 1,90 zł");
                        break;

                    case "2":
                        Console.WriteLine("2. MIRINDA 0,25ml / CENA : 1,70zł");
                        break;

                    case "3":
                        Console.WriteLine("3. 7UP 0,25ml / CENA : 1,50 zł");
                        break;

                    case "4":
                        Console.WriteLine("4. PEPSI 0,5l / CENA : 2,90 zł");
                        break;

                    case "5":
                        Console.WriteLine("5. MIRINDA 0,5l / CENA : 2,70 zł");
                        break;

                    case "6":
                        Console.WriteLine("6. 7UP 0,5l / CENA : 2,50 zł");
                        break;

                    case "7":
                        Console.WriteLine("7. PEPSI 1l / CENA : 3,90 zł");
                        break;

                    case "8":
                        Console.WriteLine("8. MIRINDA 1l / CENA : 3,70 zł");
                        break;

                    case "9":
                        Console.WriteLine("9. 7UP 1l / CENA 3,50 zł");
                        break;

                    case "0":
                        Console.WriteLine("0. PRZECHODZĘ DO PŁATNOŚCI");
                        break;

                }

            } while (napoje != "0");
        }

I zastaniam się, w jaki sposób mogę wrzucić wybrane przez użytkownika produkty w listę. I co gorsze jak przypisać wartość np. do Console.WriteLine("7. PEPSI 1l / CENA : 3,90 zł"); żeby program wiedział że akurat to kosztuje 3,90

edytowany 1x, ostatnio: somekind
ZK
  • Rejestracja:prawie 7 lat
  • Ostatnio:6 miesięcy
  • Postów:273
0

Najpierw na ekranie wyświetl same napoje : numer - nazwa - cena
potem
Wyświetl pytanie : Co chcesz kupić . Klient podaje cyfrę
Potem drugie pytanie : Ile sztuk
Następnie instrukcja switch wyszukuje cenę
Potem po wyjściu z instrukcji switch oblicz kwotę końcową : cena x liczba sztuk
Następnie całą transakcję zapisz to pliku tekstowego - tak jak na paragonie za sklepu

edytowany 3x, ostatnio: Zimny Krawiec
ZK
  • Rejestracja:prawie 7 lat
  • Ostatnio:6 miesięcy
  • Postów:273
0

Dane pobierasz za pomocą instrukcji:

Kopiuj
int wybor;
int.TryParse(Console.ReadLine(), out wybor);

albo

Kopiuj
int wybor;
int.Parse(Console.ReadLine());

Ta druga instrukcja spowoduje wyjątek , jeśli konwersja się nie powiedzie
Metoda TryParse próbuje skonwertować tekst na liczbę typu int . Jeśli operacja się powiedzie to zwracana jest wartość true w przeciwnym razie - false
Możesz całą instrukcję wstawić np. do instrukcji if np.

Kopiuj

            int wybor;
          
            Console.WriteLine("Co chcesz kupić?");
            if(int.TryParse(Console.ReadLine(), out wybor))
            {

                // wykonaj instrukcję switch jeśli klient wprowadził liczbę
            }
            else
            {
                // błąd 
            }
edytowany 4x, ostatnio: Zimny Krawiec
ZK
Tak dla ciekawości powiem ci że wywołanie metody(funkcji) to jest wyrażenie, które funkcjonuje jak zwykła instrukcja . Stawiamy po takim wyrażeniu średnik. Jeśli takiego wyrażenia-instrukcji nie przypiszemy do jakieś zmiennej to wartość jest tracona. To samo dotyczy takich wyrażeń jak tworzenie obiektu. Możesz napisać new Object(); i do niczego takiego obiektu nie przypisać ale nie możesz napisać a + b tylko c = a +b, albo ++a lub b = ++a
Grzegorz Świdwa
Grzegorz Świdwa
  • Rejestracja:ponad 5 lat
  • Ostatnio:ponad 4 lata
  • Postów:385
0

https://pastebin.com/0xqU93Bm - Część kodu do poczytania

edytowany 1x, ostatnio: Grzegorz Świdwa

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.