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

C++ SKLEP ONLINE

VPS Starter Arubacloud
0 głosów
310 wizyt
pytanie zadane 15 kwietnia 2020 w C i C++ przez MrChick888 Obywatel (1,020 p.)

Mam problem z funkcją LogowanieKlienta

plik klienci.txt jest budowany tak:

Imie //1linijka

Nazwisko //2linjka

ID // linijka

Imie //4lijka

itd

NP.

Piotr

Nowak

1000

Julia

Kowal

1001

 

#include <iostream>
#include <cstdlib>
#include <string>
#include <fstream>
#include <Windows.h>
#include <algorithm>
#include <conio.h>
#include <stdio.h>

using namespace std;

char MainMenu();
void PandC();
void Default();
void Exit();
void LogowanieKlienta();
void MenuKlienta();

int main()
{
	while (1)
	{
		char mainmenu = MainMenu();
		switch (mainmenu)
		{
		case '1':
			MenuKlienta(); break;
		case '2':
			//Menupersonel();
		case '0':
			Exit(); break;
		default:
			Default(); break;
		}
	}

	system("PAUSE");
	return 0;
}
char MainMenu()
{
	char o;
	cout << "Witamy w Lidl online!" << endl;
	cout << "Dostepne opcje:" << endl;
	cout << "1. Dzial dla klienta" << endl;
	cout << "2. Dzial dla pracownika" << endl;
	cout << "0. Wyjdz" << endl;
	o = _getch();
	return o;
}
void PandC()
{
	system("PAUSE");
	system("cls");
}
void Default()
{
	cout << "Nie ma takiej opcji!" << endl;
	PandC();
}
void Exit()
{
	char leave;
	do
	{
		cout << "Czy na pewno chcesz opuscic nasz sklep? (T/N)" << endl;
		leave = _getch();
		if ((leave == 'T') || (leave == 't'))
		{
			system("cls");
			cout << "Dziekuje za skorzystanie z naszych uslug." << endl;
			cout << "Zapraszamy ponownie" << endl;
			system("PAUSE");
			exit(0);
		}
		else if ((leave != 'N') && (leave != 'n'))
		{
			cout << "Nie ma takiej opcji!" << endl;
			PandC();
		}
	} while ((leave != 'N') && (leave != 'n'));
	system("cls");
}
void LogowanieKlienta()
{
	system("cls");
	char o;
	fstream klienci;
	int id;
	string linia;
	string imie[100], nazwisko[100];
	int numer[100];
	int nr_lini = 0;
	while (1)
	{
		cout << "Witamy na zakupach online" << endl;
		cout << "Dostepne opcje:" << endl;
		cout << "1. Zaloguj" << endl;
		cout << "2. Stworz konto" << endl;
		o = _getch();
		switch (o)
		{
		case '1':
			cout << "Prosze podac swoj numer klienta: ";
			cin >> id;
			klienci.open("klienci.txt", ios::in);
			while (!klienci.eof())
			{
				getline(klienci, linia);
				imie[nr_lini] = linia;
				nazwisko[nr_lini] = linia;
				numer[nr_lini] = atoi(linia.c_str());
				system("PAUSE");
				if (id == numer[nr_lini])
				{
					klienci.close();
					cout << "Witamy " << imie[nr_lini] << " " << nazwisko[nr_lini] << ". Zapraszamy na zakupy" << endl;
				}
				nr_lini ++;
			}
			cout << "Takiego numeru nie ma w systemie. Wprowadz numer klienta ponownie lub zaloz nowe konto." << endl;
			PandC();
			klienci.close();
		case '2':
			cout << "2" << endl; break;
		default:
			Default(); break;
		}
	}

}
void MenuKlienta()
{
	LogowanieKlienta();

}

 

1 odpowiedź

0 głosów
odpowiedź 15 kwietnia 2020 przez tangarr Mędrzec (155,140 p.)

1. W wewnętrznej pętli wczytujesz tylko jedną linię i przypisujesz ją do wszystkich zmiennych (imie, nazwisko, numer)

2. Nie potrzebujesz tablic. Nic nie wnoszą, tylko zamieszanie robią

Wprowadziłem kilka poprawek
 

void LogowanieKlienta()
{
    system("cls");
    while (1)
    {
        cout << "Witamy na zakupach online" << endl;
        cout << "Dostepne opcje:" << endl;
        cout << "1. Zaloguj" << endl;
        cout << "2. Stworz konto" << endl;
        char o = _getch();
        switch (o)
        {
        case '1': {
            cout << "Prosze podac swoj numer klienta: ";
            int id;
            cin >> id;
            fstream klienci;
            klienci.open("klienci.txt", ios::in);
            while (!klienci.eof())
            {
                string imie, nazwisko;
                int numer;
                
                getline(klienci, imie);
                getline(klienci, nazwisko);
                cin >> numer;
                if (cin.bad()) // sprawdzamy czy nie było błędu odczytu
                    break;
                cin.ignore(); // usuwamy koniec lini ze strumienia
                
                system("PAUSE");
                if (id == numer)
                {
                    klienci.close();
                    cout << "Witamy " << imie << " " << nazwisko << ". Zapraszamy na zakupy" << endl;
                }
            }
            cout << "Takiego numeru nie ma w systemie. Wprowadz numer klienta ponownie lub zaloz nowe konto." << endl;
            PandC();
            klienci.close();
        } break;
        case '2':
            cout << "2" << endl; 
            break;
        default:
            Default(); 
            break; // ten break jest niepotrzebny
        }
    }
}
komentarz 15 kwietnia 2020 przez j23 Mędrzec (195,220 p.)

Co Wy z tym eofem macie?

string imie, nazwisko;
int id;

while (getline(klienci >> ws, imie) && 
        getline(klienci, nazwisko) && 
        klienci >> id) {
    /* Tutaj masz pewność, że wszystkie pola zostały odczytane poprawnie */
}

 

Podobne pytania

0 głosów
1 odpowiedź 228 wizyt
0 głosów
1 odpowiedź 189 wizyt
pytanie zadane 9 marca 2021 w C i C++ przez tonn204 Mądrala (7,470 p.)
0 głosów
0 odpowiedzi 174 wizyt
pytanie zadane 25 stycznia 2021 w C i C++ przez Capablanka Początkujący (320 p.)

92,977 zapytań

141,940 odpowiedzi

321,182 komentarzy

62,303 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...