Poprawność wpisanych danych przez użytkownika

0

Witam, jestem nowym użytkownikiem 4programmers i proszę o wyrozumiałość :) Piszę bazę danych, mam problem z weryfikowaniem poprawności wpisanych danych. Proszę bardzo o pomoc w poprawie kodu, nie mogę nigdzie znaleźć pomocy (wujek Google na niewiele się zdał). Wklejam kod:

case 2: //dopisanie nowego abonenta/abonentow
                {
						bool czy_jest_cyfra = false;
						int ile;
                        system("cls");
						cout<<"Dopisani abonenci zostana automatycznie dopisani do bazy\n\n";
						cout<<"Ilu abonentow chcesz dopisac do bazy ?\n";
                        cin>>ile;       
                         cout<<"Wczytywanie danych..";
						int roz = rozmiar(argv[1])+ile-1;
                        int rozm = rozmiar(argv[1])-1;
                       
						Abonent *a = new Abonent [roz];
                        zpliku(argv[1],a,rozm);
                        		
						for(int i=rozm;i<roz;++i)
                        {
								system("cls");
								a[i].numer = i+1;
								do 
								{
									cout<<"Podaj nazwisko abonenta: ";
									cin>>a[i].nazwisko;
								**w tym miejscu chciałbym aby była weryfikacja nazwiska.
				**jeśli użytkownik wpisze dane niepoprawnie pętla powinna uruchomić się ponownie
									 for (unsigned int y=0;y<a[i].nazwisko.length();y++)
					
										if (a[i].nazwisko[y] >= '0' && a[i].nazwisko[y] <='9')
												czy_jest_cyfra = true;
											   
										   
								} while (czy_jest_cyfra = false);
							   cout<<"Podaj imie :\n";
                                cin>>a[i].imie;
								cout<<"Podaj numer telefonu :\n";
                                cin>>a[i].ntel;
							}
                }

Bardzo dziękuję z góry za wskazówki!

0
do
{
        cout<<"Podaj nazwisko abonenta: ";
        cin>>a[i].nazwisko;

        for (unsigned int y=0;y<a[i].nazwisko.length() && funkcjaWeryfikujaca(a[i].nazwisko);y++)
            if (a[i].nazwisko[y] >= '0' && a[i].nazwisko[y] <='9')
                czy_jest_cyfra = true;
} while (czy_jest_cyfra = false);

funkcjaWeryfikujaca niech ci zwraca true lub false zależnie od tego czy nazwisko jest ok czy nie.
Chyba że to jakaś inna pętla ma sie uruchomić ponownie, wtedy doprecyzuj.

0
aurel napisał(a)
do
{
        cout<<"Podaj nazwisko abonenta: ";
        cin>>a[i].nazwisko;

        for (unsigned int y=0;y<a[i].nazwisko.length() && funkcjaWeryfikujaca(a[i].nazwisko);y++)
            if (a[i].nazwisko[y] >= '0' && a[i].nazwisko[y] <='9')
                czy_jest_cyfra = true;
} while (czy_jest_cyfra = false);

funkcjaWeryfikujaca niech ci zwraca true lub false zależnie od tego czy nazwisko jest ok czy nie.
Chyba że to jakaś inna pętla ma sie uruchomić ponownie, wtedy doprecyzuj.

Rozumiem o co chodzi. Tylko jak zacząć samą funkcję weryfikującą? Rozumiem że ma zwracać wartość "bool", czyli true albo false w zależności czy nazwisko ok, ale w jaki sposób zrobić uniwersalną funkcję która będzie również działała dla innych danych (adres, imię itp..) Funkcje bazujące na liczbach rozumiem, ze stringami niestety mam problem..

0

Według mnie robienie uniwersalnej funkcji jest bez sensu. Żeby działać poprawnie, musiałaby jako jeden z parametrów przyjmować co to za dane dostała tym razem i zależnie od tego w casie insze sprawdzenia robić... Generalnie fuj.
Już lepiej oddzielne funkcje.

A wiesz jakby było najlepiej? Dane trzymać w klasie zamiast strukturze. W klasie tej napisać metodę WeryfikujDane. Ta metoda znowuż wywoływałaby prywatne metody WeryfikujNazwisko, WeryfikujAdres itd.

0
aurel napisał(a)

Według mnie robienie uniwersalnej funkcji jest bez sensu. Żeby działać poprawnie, musiałaby jako jeden z parametrów przyjmować co to za dane dostała tym razem i zależnie od tego w casie insze sprawdzenia robić... Generalnie fuj.
Już lepiej oddzielne funkcje.

A wiesz jakby było najlepiej? Dane trzymać w klasie zamiast strukturze. W klasie tej napisać metodę WeryfikujDane. Ta metoda znowuż wywoływałaby prywatne metody WeryfikujNazwisko, WeryfikujAdres itd.

Hm..dzięki za poradę, niestety pracę mam oddać za parę dni i raczej nie zdążę przerobić tego na klasy. Pozostanę przy strukturze, a kwestię poprawności danych spróbuję rozwiązać przez funkcję.
Co do tej funkcji to mógłbyś mnie mniej więcej nakierować jak ją napisać? :)
Dzięki z góry.

0

No wiesz co... :/
Walidacja nazwiska to raczej nic więcej niż sprawdzenie czy pierwsza litera jest wielką, plus ewentualnie czy następny znak po myślniku jest. A no i czy składa się tylko z liter (+myślnik)...
Z resztą nie przesadzaj, sam pomyśl co można sprawdzać.

1 użytkowników online, w tym zalogowanych: 0, gości: 1