• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Mały projekt konsolowy c++

Object Storage Arubacloud
0 głosów
549 wizyt
pytanie zadane 11 września 2018 w Nasze projekty przez Arek7 Nowicjusz (120 p.)
Witam, jestem początkujący, dobrnąłem  do 9 odcinka z kursu programowania Mirosława Zelenta na Youtube i postanowiłem zrobić sobie takie podsumowanie tego czego się nauczyłem. Chciałbym by ktoś doświadczony ocenił mój kod i podpowiedział co w nim mogę zmienić,  (naprzyklad od linii 707 do 1027 nie wpadłem na pomysł  żeby to w jakiś sposób skrócić albo jakoś zrobić to za główną funkcją main tak jak naprzykład "void tworzenie_klienta" ). Wiem, że program wysypuje się po zalogowaniu się do banku gdy najpierw zagramy w totolotka a potem chcemy zmienić hasło natomiast jak zalogujemy się do banku i zmienimy hasło niema problemu dopiero po totolotku, nie mam pojęcia dlaczego tak się dzieje. Następny problem gdy w miejscu gdzie można wpisać tylko cyfry ktoś poda literę to program się zamknie nie potrafiłem wymyśleć pętli która by wróciła i pozwoiła wpisać jeszcze raz dane. Nie wiem czy to z braku mojej zdobytej wiedzy do odcinka 9 czy brak pomysłu. Co do quizu może znajdzie się na forum fan Harry'ego Potera.

Kod

https://pastebin.com/eJvH0G0Q

quiz notatnik do pobrania
http://uploadfile.pl/pokaz/1513474---3jzt.html

3 odpowiedzi

+2 głosów
odpowiedź 11 września 2018 przez Secrus Nałogowiec (32,880 p.)
1. Nie rób czegoś takiego, że ładujesz wszystkie programy do jednego. Jeden program to jedna funkcjonalność.

2. Używaj angielskich nazw w programie.

3. Dziel program na mniejsze funkcje. W idealnym kodzie (nie zawsze jest to osiągalne, ale należy dążyć do tego), jedna funkcja nie ma więcej niż 50 linii.

4. Wymyśl sobie własny projekt do stworzenia. Wymyśl sobie jak ma działać i co robić.
+2 głosów
odpowiedź 11 września 2018 przez monika90 Pasjonat (22,940 p.)
edycja 11 września 2018 przez monika90
Po pierwsze, Twój program ma błędy składniowe i nie da się go skompilować, jest tak ponieważ w definicjach funkcji los_plus_minus i wynik_potegi nie podałeś typu wartości zwracanej przez te funkcje.

W warunkach używasz operatorów | i & zamiast || i &&, czy jesteś pewien że wiesz co robisz?

W totolotku wychodzisz poza zakres tablic licz_gracza i los_totolotek.

W quizie zmienna pkt nie ma nadanej wartości początkowej.

Nagłówki. W C++ nie używa się <stdlib.h>, <stdio.h>, <time.h>, zamiast nich są: <cstdlib>, <cstdio>, <ctime>. Brakuje też #include <string>, przecież używasz stringa.

W bibliotece standardowej C++ jest funkcja std::this_thread::sleep_for, można jej użyć zamiast Sleep, wtedy nie musiałbyś inkludować windows.h i uniezależniłbyś się od systemu MS Windows.

Dla funkcji rand też jest dostępna lepsza alternatywa - patrz nagłówek <random>.

Funkcji exit się raczej w C++ nie używa, bo ona nie współdziała dobrze z RAII.
komentarz 11 września 2018 przez Secrus Nałogowiec (32,880 p.)
Gratuluje cierpliwości i wytrwałości w analizie tego kodu...
komentarz 14 września 2018 przez Arek7 Nowicjusz (120 p.)

@monika90,

Dziękuję za dogłębną analizę kodu. Czy mogłabyś wysłać mi swojego e-maila na pw albo odblokować pw bo mam kilka pytań..smiley 

komentarz 15 września 2018 przez monika90 Pasjonat (22,940 p.)
Pytania możesz zadawać na forum - od tego ono jest.
komentarz 15 września 2018 przez Arek7 Nowicjusz (120 p.)
przywrócone 15 września 2018 przez Arek7

@monika90,

1.Po pierwsze, Twój program ma błędy składniowe i nie da się go skompilować, jest tak ponieważ w definicjach funkcji los_plus_minus i wynik_potegi nie podałeś typu wartości zwracanej przez te funkcje.

czy możesz mi to wytłumaczyć oco dokładniej chodzi?

wynik_potegi(int a,int b)
    {
    int wynik = 1;
    for (int i=0; i<b; i++)
    {
        wynik *= a;
    }
    return wynik;
Zwracane jest to do zmiennej "z" typu int.


los_plus_minus()
{
    return rand()%2;

Tutaj nie jest to zwracane do żadnej zmiennej. Więc jak to powinngo wyglądać.


2.W warunkach używasz operatorów | i & zamiast || i &&, czy jesteś pewien że wiesz co robisz?
Pytanie brzmi - czemu w takim razie to działa? Jaka jest różnica


3.W totolotku wychodzisz poza zakres tablic licz_gracza i los_totolotek.
Patrzyłem ,patrzyłem w ten kod i nic nie znalazłem...

4.W quizie zmienna pkt nie ma nadanej wartości początkowej.
A czy muszę ją nadawać i czemu? Jeżeli zaczyna się liczenie od 0 i tak? Przynajmniej jak testowałem nie zdarzyło mi się żeby punkty się nie zgadzały.


5.Nagłówki. W C++ nie używa się <stdlib.h>, <stdio.h>, <time.h>, zamiast nich są: <cstdlib>, <cstdio>, <ctime>. Brakuje też #include <string>, przecież używasz stringa.
Czemu ich się nie używa? #include <string> jak dobrze pamiętam i dobrze zrozumiałem Pan M.Z w swoim kursie na yt nic nie mówił że trzeba ją dodać gdy ich używamy dopiero gdy chcmy coś z nimi robić np. dodać string do stringa albo usunąć daną litere i wstawić nową.


6.W bibliotece standardowej C++ jest funkcja std::this_thread::sleep_for, można jej użyć zamiast Sleep, wtedy nie musiałbyś inkludować windows.h i uniezależniłbyś się od systemu MS Windows.
W czym to pomaga? Dlaczego lepiej jest uniezależnić sie od MS windows.

Co do 7 i 8 poszukam już na google no chyba że też chcesz odpowiedzieć swoim zdaniem na to.

 

+1 głos
odpowiedź 11 września 2018 przez niezalogowany
void tworzenie_klienta(int a, string imie, string haslo_do_zapisu, int kwota_poczatkowa)
{
	if (a == 0)
	{
		fstream klient;

		klient.open("klient0.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 1)
	{
		fstream klient;

		klient.open("klient1.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 2)
	{
		fstream klient;

		klient.open("klient2.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 3)
	{
		fstream klient;

		klient.open("klient3.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 4)
	{
		fstream klient;

		klient.open("klient4.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 5)
	{
		fstream klient;

		klient.open("klient5.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 6)
	{
		fstream klient;

		klient.open("klient6.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 7)
	{
		fstream klient;

		klient.open("klient7.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 8)
	{
		fstream klient;

		klient.open("klient8.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 9)
	{
		fstream klient;

		klient.open("klient9.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 10)
	{
		fstream klient;

		klient.open("klient10.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 11)
	{
		fstream klient;

		klient.open("klient11.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 12)
	{
		fstream klient;

		klient.open("klient12.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 13)
	{
		fstream klient;

		klient.open("klient13.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 14)
	{
		fstream klient;

		klient.open("klient14.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 15)
	{
		fstream klient;

		klient.open("klient15.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 16)
	{
		fstream klient;

		klient.open("klient16.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 17)
	{
		fstream klient;

		klient.open("klient17.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 18)
	{
		fstream klient;

		klient.open("klient18.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 19)
	{
		fstream klient;

		klient.open("klient19.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}
	else if (a == 20)
	{
		fstream klient;

		klient.open("klient20.txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
		klient.close();
	}

}

void nadpis_danych_klienta(int nr_klienta, string imiee, string Nowe_haslo, double long stan_kontaa)
{
	fstream klient;

	if (nr_klienta == 0)
	{
		klient.open("klient0.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 1)
	{
		klient.open("klient1.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 2)
	{
		klient.open("klient2.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 3)
	{
		klient.open("klient3.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 4)
	{
		klient.open("klient4.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 5)
	{
		klient.open("klient5.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 6)
	{
		klient.open("klient6.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 7)
	{
		klient.open("klient7.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 8)
	{
		klient.open("klient8.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 9)
	{
		klient.open("klient9.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 10)
	{
		klient.open("klient10.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 11)
	{
		klient.open("klient11.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 12)
	{
		klient.open("klient12.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 13)
	{
		klient.open("klient13.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 14)
	{
		klient.open("klient14.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 15)
	{
		klient.open("klient15.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 16)
	{
		klient.open("klient16.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 17)
	{
		klient.open("klient17.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 18)
	{
		klient.open("klient18.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 19)
	{
		klient.open("klient19.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
	else if (nr_klienta == 20)
	{
		klient.open("klient20.txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
		klient.close();
	}
}

Zredukowałem 400 linii kodu do 20:

void tworzenie_klienta(int nr_klienta, string imie, string haslo_do_zapisu, int kwota_poczatkowa)
{
	if (nr_klienta > 0 && nr_klienta < 21)
	{
		fstream klient("klient" + std::to_string(nr_klienta) + ".txt", ios::out);
		klient << imie << endl;
		klient << haslo_do_zapisu << endl;
		klient << kwota_poczatkowa << endl;
	}
}

void nadpis_danych_klienta(int nr_klienta, string imiee, string Nowe_haslo, double long stan_kontaa)
{
	if (nr_klienta > 0 && nr_klienta < 21)
	{
		fstream klient("klient" + std::to_string(nr_klienta) + ".txt", ios::out);
		klient << imiee << endl;
		klient << Nowe_haslo << endl;
		klient << stan_kontaa << endl;
	}
}

Podobne pytania

0 głosów
2 odpowiedzi 318 wizyt
pytanie zadane 30 maja 2018 w Nasze projekty przez Wunsz Użytkownik (680 p.)
+5 głosów
4 odpowiedzi 560 wizyt
pytanie zadane 19 marca 2018 w Nasze projekty przez Radekol Bywalec (2,880 p.)
0 głosów
2 odpowiedzi 304 wizyt

92,539 zapytań

141,382 odpowiedzi

319,476 komentarzy

61,928 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...