nyac55 Posted November 8, 2013 Report Share Posted November 8, 2013 Witam. Obecnie mam zrobić program: coś jak konto bankowe -> 3 funkcje wpłać ,wypłać ,zmień PIN oraz konto ów powinno umożliwić nam posiadanie wielu kart. Mam pytanie ,jak powinienem umożliwić użytkownikowi utworzenie tych wielu kart (bo to będą obiekty klasy konto bankowe)? Link to comment Share on other sites More sharing options...
wies.niak Posted November 8, 2013 Report Share Posted November 8, 2013 Jedno konto może mieć wiele kart, więc wewnątrz klasy KontoBankowe musisz mieć jakąś listę obiektów klasy Karta. Link to comment Share on other sites More sharing options...
nyac55 Posted November 8, 2013 Author Report Share Posted November 8, 2013 Podasz jakiś przykład? Link to comment Share on other sites More sharing options...
wies.niak Posted November 9, 2013 Report Share Posted November 9, 2013 Nie. Najpierw Ty coś stwórz. Co to klasa powinieneś wiedzieć, listę kart możesz zrobić za pomocą klasy List<>. Link to comment Share on other sites More sharing options...
nyac55 Posted November 9, 2013 Author Report Share Posted November 9, 2013 Na razie mam taki fragment nie zawierający jeszcze obiektowości. Zawiera błędy itd.:using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication15{ class Program { public static string imie, nazwisko; public static int x,kwota=5,pin=4444; public static double saldo=0; static double wplac(double saldo,int kwota) { saldo = saldo + kwota; return saldo; } static double wyplac(double saldo ,int kwota) { saldo = saldo - kwota; return saldo; } static void dane() { Console.WriteLine("Podaj imię i nazwisko\n"); imie=Console.ReadLine(); nazwisko=Console.ReadLine(); Console.WriteLine("Imie: "+imie+"\nNazwisko: "+nazwisko); } static void zm_pin() { Console.WriteLine("Teraz możesz zmienić PIN"); pin=Convert.ToInt32(Console.ReadLine()); } static void Main(string[] args) { double saldo=70; int kwota=5; dane(); Console.WriteLine("Wybierz akcję: 1. Wpłać ,2. Wypłać ,3. Zmień PIN "); x = Convert.ToInt32(Console.ReadKey()); // tutaj pojawia się błąd ,ale dopiero po uruchomieniu //programu switch (x) { case 1: Console.WriteLine("Wpłać"); wplac(saldo, kwota); break; case 2: Console.WriteLine("Wypłać"); wyplac(saldo, kwota); break; case 3: Console.WriteLine("Zmień PIN"); zm_pin(); break; default: Console.WriteLine("Nie wybrano żadnej akcji lub błąd systemu! "); break; } Console.ReadKey(); } }}Wersja nieco poprawiona. Nie zawiera jeszcze obiektów. Pojawia się jakiś błąd przy x po uruchomieniu? Link to comment Share on other sites More sharing options...
wies.niak Posted November 10, 2013 Report Share Posted November 10, 2013 jakiś błądMasz jakiś problem, który jakoś można rozwiązać.Proponuję zapoznać się z opisem i przykładem użycia metody ReadKey: link.Poprawiłem złamany link. - HakkenDzięki, jakoś nie rzuciło mi się w oczy. Link to comment Share on other sites More sharing options...
nyac55 Posted November 10, 2013 Author Report Share Posted November 10, 2013 Przeczytałem to co podałeś. Lecz dalej nie wiem o co chodzi. Klasa ConsoleKeyInfo odczytuje stan klawisza ,więc stowrzyłem zmienną z i do niej wpisałem znak wprowadzany z klawiatury ,następnie wartość z rzutowaną wrzuciłem pod x ,lecz dalej mam ten sam błąd.ConsoleKeyInfo z; dane(); Console.WriteLine("Wybierz akcję: 1. Wpłać ,2. Wypłać ,3. Zmień PIN "); z=Console.ReadKey(); x = Convert.ToChar(z); Link to comment Share on other sites More sharing options...
wies.niak Posted November 10, 2013 Report Share Posted November 10, 2013 Postaw sobie breakpoint w linii x=Convert.ToChar(z). Następnie najedź gryzoniem na zmienną "z" i zobacz, co w niej siedzi. To jest kluczowe w pytaniu "skąd wziąć klikniętą literę". I przeanalizuj jeszcze raz przykład z linkowanej strony. Link to comment Share on other sites More sharing options...
nyac55 Posted November 10, 2013 Author Report Share Posted November 10, 2013 Breakpoint? <-> (to jest to samo ,tylko uruchomiło się autoamtycznie)?(1) Jak uruchomiłem program to linia: x=Convert.ToChar(z) podświetliła się na żółto ,gdy najechałem na z {System.ConosleKeyInfo}.Czy chodzi o to ,że próbuję obiekt nie konwertowalny przenieść na konwertowalny?(2) Link to comment Share on other sites More sharing options...
wies.niak Posted November 10, 2013 Report Share Posted November 10, 2013 Breakpoint = punkt zatrzymania programu. Polecam obejrzeć np Gdy najedziesz na "z" możesz rozwijać podgląd i zobaczyć, co jest w środku.Convert nie wie w jaki sposób zamienić ConsoleKeyInfo na tekst. Aby konwersja mogła zajść, środowisko musi wiedzieć, jak zmienić typ obiektu. Link to comment Share on other sites More sharing options...
nyac55 Posted November 10, 2013 Author Report Share Posted November 10, 2013 U mnie jest key: D1 ,D2 lub D3 w zależności czy nacisnę 1 ,2 czy 3. Niżej numer z tablicy kodów ASCII oraz znak jaki to jest. Niżej modyfikator(klawisz modyfikujący) - jak się nie pojawi jest 0 ,a jak się pojawi to pisze np. Shift._________Widzę to po ustawieniu breakpointu i uruchomieniu programu -> nigdy przed uruchomieniem. Czy tak powinno być z tym breakpointem? Link to comment Share on other sites More sharing options...
wies.niak Posted November 10, 2013 Report Share Posted November 10, 2013 Tak, dzięki breakpointom możesz oglądać stan programu w momencie zatrzymania. I w ten sposób możesz odkryć, że we właściwości KeyChar znajduje się tekstowa forma wciśniętego klawisza, więc zamiast konwertować wystarczy napsać x = z.KeyChar. Link to comment Share on other sites More sharing options...
nyac55 Posted November 10, 2013 Author Report Share Posted November 10, 2013 Ok ,dzięki -> nie wiedziałem jak to wydobyć. ____________Teraz muszę popracować nad obiektami i listą obiektów.using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication15{ class Program { public static string imie, nazwisko; public static int x,kwota=5,pin=4444; public static double saldo=0; static double wplac(double saldo,int kwota) { saldo = saldo + kwota; return saldo; } static double wyplac(double saldo ,int kwota) { saldo = saldo - kwota; return saldo; } static void dane() { Console.WriteLine("Podaj imię i nazwisko\n"); imie=Console.ReadLine(); nazwisko=Console.ReadLine(); Console.WriteLine("Imie: "+imie+"\nNazwisko: "+nazwisko); } static void zm_pin() { Console.WriteLine("Teraz możesz zmienić PIN"); pin=Convert.ToInt32(Console.ReadLine()); } static void dod_karte() { for(int i=1;i<new;i++) { Program karta = new Program(); } } static void Main(string[] args) { double saldo=70; int kwota=5; char x; List<Program> karta = new List<Program>(); ConsoleKeyInfo z; dane(); Console.WriteLine("Wybierz akcję: 1. Wpłać ,2. Wypłać ,3. Zmień PIN "); z=Console.ReadKey(); x = z.KeyChar; switch (x) { case ('1'): Console.WriteLine("Wpłać"); wplac(saldo, kwota); break; case ('2'): Console.WriteLine("Wypłać"); wyplac(saldo, kwota); break; case ('3'): Console.WriteLine("Zmień PIN"); zm_pin(); break; default: Console.WriteLine("Nie wybrano żadnej akcji lub błąd systemu! "); break; } Console.ReadKey(); } }}Dodałem co nie co do kodu ,ale teraz nie wiem jak dodać do listy obiekty ,ile ich będzie itd. Czy mogę np. spytać użytkownika ile ma być tych kart ,a następnie w klasie program w metodzie dod_karty() tworzyć obiekty ,a następnie je zwracać??Proszę o porady. Link to comment Share on other sites More sharing options...
wies.niak Posted November 10, 2013 Report Share Posted November 10, 2013 Program karta = new Program();To jest bez sensu. Chcesz mieć listę kart, więc stwórz klasę Karta.Nazwy metod wielką literą, bez podkreślników - pascal case. Zobacz na tabelkę: http://msdn.microsoft.com/en-us/library/x2dbyw72(v=vs.71).aspxWszystko poza Main powinno wylecieć do osobnej klasy np KontoBankowe. Link to comment Share on other sites More sharing options...
nyac55 Posted November 10, 2013 Author Report Share Posted November 10, 2013 using System;using System.Collections.Generic;using System.Linq;using System.Text;namespace ConsoleApplication15{ class karta // KLASA KARTA { public static string imie, nazwisko; public static int x, kwota, pin, ile = 2; public static double saldo; static double Wplac(double saldo, int kwota) { saldo = saldo + kwota; return saldo; } static double Wyplac(double saldo, int kwota) { saldo = saldo - kwota; return saldo; } static void Dane() { Console.WriteLine("Podaj imię i nazwisko\n"); imie = Console.ReadLine(); nazwisko = Console.ReadLine(); Console.WriteLine("Imie: " + imie + "\nNazwisko: " + nazwisko); } static void Zm_pin() { Console.WriteLine("Teraz możesz zmienić PIN"); pin = Convert.ToInt32(Console.ReadLine()); } static void Dod_karte() { for (int i = 1; i < ile; i++) { Program karta = new Program(); } } class Program // KLASA GŁÓWNA PROGRAMu GŁÓWNEGO { static void Main(string[] args) { double saldo = 70; int kwota = 5, ile = 2; char x; Console.WriteLine("Ile masz kart?"); ile = Convert.ToInt32(Console.ReadLine()); Dod_karte(); List<karta> karta = new List<karta>(); { ConsoleKeyInfo z; Dane(); Console.WriteLine("Wybierz akcję: 1. Wpłać ,2. Wypłać ,3. Zmień PIN "); z = Console.ReadKey(); x = z.KeyChar; switch (x) { case ('1'): Console.WriteLine("Wpłać"); Wplac(saldo, kwota); break; case ('2'): Console.WriteLine("Wypłać"); Wyplac(saldo, kwota); break; case ('3'): Console.WriteLine("Zmień PIN"); Zm_pin(); break; default: Console.WriteLine("Nie wybrano żadnej akcji lub błąd systemu! "); break; } Console.ReadKey(); } } } }}Co powinienem teraz zrobić ,bo trochę się gubię?? Link to comment Share on other sites More sharing options...
wies.niak Posted November 10, 2013 Report Share Posted November 10, 2013 Nadużywasz "static". Poza Main żadna metoda czy zmienna nie powinna być statyczna (nie jest Ci to potrzebne). Nie chce mi się już naprowadzać Cię na rozwiązanie w formie, jaka by mi się podobała. Zobacz załącznik.KontoBankowe.zip Link to comment Share on other sites More sharing options...
nyac55 Posted November 10, 2013 Author Report Share Posted November 10, 2013 LOL. Wielki dzięki za program. Ten program to wysoka klasa. Sam bym tak dobrego nie zrobił. Dzięki. Wszystko musiałeś zrobić sam.___________________Naprawdę bardzo dobry program. Link to comment Share on other sites More sharing options...
wies.niak Posted November 10, 2013 Report Share Posted November 10, 2013 Spróbuj ten kod zrozumieć. Jeśli z czymś będziesz miał problem (np wyrażenie lambda) to spytaj.Spróbuj też przerobić ten program tak, by obsługiwał dowolnie wiele kont bankowych (podobnie jak to jest zrealizowane z kartami). Link to comment Share on other sites More sharing options...
nyac55 Posted November 11, 2013 Author Report Share Posted November 11, 2013 OK. spróbuję ,ale dopiero jutro ,bo dziś jestem już zmęczony i idę spać. Link to comment Share on other sites More sharing options...