Zabezpieczenie programu przed wpisywaniem liter zamiast liczb

0

Witam Serdecznie! Otóż mam pewien problem ze swoim programem. Przy tworzeniu bazy danych lub dopisywaniu nowego samochodu i wpisywaniu ceny, nie wiem jak zrobić zabezpieczenie, aby nie można było wpisać tam zamiast liczby, tekstu .... Czy mógłbym prosić o pomoc. Zależało by mi na poprawie kodu, ponieważ moje wszystkie próby kończyły się błędami.

#include <iostream>
#include <string>
#include <fstream>
#include <conio.h>
using namespace std;

struct Samochod
{
   int numer;         ///   numer w bazie
   string marka;     ///   marka
   string model;        ///   model
   int rok;                   ///   rok produkcji
   double cena;         ///   cena
};

/// dodawanie auta do bazy danych wszelkie informacje znajduja sie w pliku *.txt

void dodaj_do_bazy(char *in,Samochod *s,int n)  
{
   ofstream plik;
   plik.open(in);

   for(int i=0;i<n;++i)
   {
      s[i].numer = i+1;
      plik<<s[i].numer<<endl;
      cout<<"Podaj marke samochodu (tekst):\n";
      cin>>s[i].marka;
      plik<<s[i].marka<<endl;
      cout<<"Podaj model samochodu (tekst):\n";
      cin>>s[i].model;
      plik<<s[i].model<<endl;
      cout<<"Podaj rok produkcji (liczba):\n";
      cin>>s[i].rok;
      plik<<s[i].rok<<endl;
      cout<<"Podaj cene samochodu (liczba):\n";
      cin>>s[i].cena;
      plik<<s[i].cena<<endl;

      plik<<"\n\n";
   }
   plik.close();
}

///funkcja liczaca rozmiar tablicy struktur (wyciaga z pliku juz zapisane tam samochody) 
///do ktorej wpisujemy dane o samochodach

int rozmiar(char *in)
{
   string model , marka;
   int rok , numer;
   double cena;

   ifstream plik;
   plik.open(in);
   int rozm = 0;

   while(!plik.eof())
   {
      plik>>numer;
      plik>>marka;
      plik>>model;
      plik>>rok;
      plik>>cena;

      rozm += 1;
   }

   plik.close();
   return rozm;
}

///funkcja wyciagajaca z pliku samochody do tablicy struktur
void zpliku(char *in,Samochod *s,int n)
{
   ifstream plik;
   plik.open(in);

   for(int i=0;i<n;++i)
   {
      plik>>s[i].numer;
      plik>>s[i].marka;
      plik>>s[i].model;
      plik>>s[i].rok;
      plik>>s[i].cena;
   }
}

/// funkja wypisujaca wszystkie auta na ekran

void wypisz(Samochod *s,int n)
{
   for(int i=0;i<n;++i)
   {
      cout<<"Nr."<<s[i].numer<<endl;
      cout<<"Marka samochodu:         "<<s[i].marka<<endl;
      cout<<"Model samochodu:         "<<s[i].model<<endl;
      cout<<"Rok produkcji samochodu: "<<s[i].rok<<endl;
      cout<<"Cena samochodu:          "<<s[i].cena<<endl;
      cout<<"-  -  -  -  -  -  -  -  -  -  -  -  -\n\n";
   }
}

///funkcja wyszukuje po cenie samochody jesli jest taki samochod wipisuje jeden ktory znalazl lub od jakiej do jakiej ceny

void szukaj_po_cenie(Samochod *s,int n,double szukana_cena)
{
   int licznik = 0;

   for(int i=0;i<n;++i)
   {
      if(s[i].cena == szukana_cena)
      {
         cout<<"Nr."<<s[i].numer<<endl;
         cout<<"Marka samochodu:         "<<s[i].marka<<endl;
         cout<<"Model samochodu:         "<<s[i].model<<endl;
         cout<<"Rok produkcji samochodu: "<<s[i].rok<<endl;
         cout<<"Cena samochodu:          "<<s[i].cena<<endl;
         cout<<"-  -  -  -  -  -  -  -  -  -  -  -  -\n\n";

         licznik = licznik + 1;  //zmienna licznik sprawdza czy w bazie byl samochod
      }
   }
   if(licznik == 0)
   {
      double cena1,cena2;
      cout<<"W bazie nie znaleziono samochodu o podanej cenie \n\n";
      cout<<"Podaj przedzial cenowy jaki Cie interesuje \n";
      cout<<" Od:  ";
      cin>>cena1;
      cout<<" Do:  ";
      cin>>cena2;

      Samochod tmp,tmp2;
      for(int i=0;i<n;++i)
      {
         if(cena1<=s[i].cena && s[i].cena<=cena2) 
         {   
            cout<<"Nr."<<s[i].numer<<endl;
            cout<<"Marka samochodu:         "<<s[i].marka<<endl;
            cout<<"Model samochodu:         "<<s[i].model<<endl;
            cout<<"Rok produkcji samochodu: "<<s[i].rok<<endl;
            cout<<"Cena samochodu:          "<<s[i].cena<<endl;
            cout<<"-  -  -  -  -  -  -  -  -  -  -  -  -\n\n";
         }
      }
   }
}

/// funkcja tworzaca kopie bazy danych (pliku)
void kopia(Samochod *s,int n,char *out)
{
   ofstream plik;
   plik.open(out);

   for(int i =0;i<n;++i)
   {
      plik<<s[i].numer<<endl;
      plik<<s[i].marka<<endl;
      plik<<s[i].model<<endl;
      plik<<s[i].rok<<endl;
      plik<<s[i].cena<<endl;
      plik<<".  .  .  .  .  .  \n";
   }

   plik.close();
}

/**------------------------- funkcja main --------------------------**/

int main(int argc,char **argv)
{
   cout<<"         ***************************************************************\n";       
   cout<<"         *******************SAMOCHODOWA BAZA DANYCH*********************\n";      
   cout<<"         ***************************************************************\n";
   cout<<"         **************************INTER-CARS***************************\n";
   cout<<"         ***************************************************************\n\n";

   int znak;   

   ///przykladowa nazwa bazy danych

   argv[1] = "Inter-Cars.txt";

   do
   {
   cout<<"          Utworz baze danych (plik) - nr. 1\n";   
   cout<<"          Dopisanie nowego somochodu - nr. 2\n";
   cout<<"          Wypisanie wszystkich samochodow - nr. 3\n";   
   cout<<"          Wyszukanie samochodu po cenie - nr. 4\n";
   cout<<"          Tworzenie kopi bazy danych - nr. 5\n";
   cout<<"          Wyjscie z programu - nr. 0\n\n";

   cout<<"      Wybierz odpowiednia opcje, wpisujac liczbe przypasowana do polecenia\n";

   cin>>znak;
   system("cls");

   switch(znak)
   {
      case 1:
      {
         int n;
         cout<<"Opcja 1: Ile samochodow chcesz dodac do bazy Inter-Cars? \n";
         cin>>n;         
         Samochod *s = new Samochod [n];
         dodaj_do_bazy(argv[1],s,n);
         delete [] s;
         break;
      }
      case 2:
      {
         int ile;
         cout<<"Opcja 2: Ile samochodow chcesz dopisac do istniejacej bazy Inter-Cars? \n";
         cin>>ile;   

         int roz = rozmiar(argv[1])+ile-1;
         int rozm = rozmiar(argv[1])-1;

         Samochod *s = new Samochod [roz];
         zpliku(argv[1],s,rozm);

         for(int i=rozm;i<roz;++i)
         {
            s[i].numer = i+1;
            cout<<"Podaj marke samochodu (tekst):\n";
            cin>>s[i].marka;
            cout<<"Podaj model samochodu (tekst):\n";
            cin>>s[i].model;
            cout<<"Podaj rok produkcji samochodu (liczba):\n";
            cin>>s[i].rok;
            cout<<"Podaj cene samochodu (liczba):\n";
            cin>>s[i].cena;
         }

         ofstream plik;
         plik.open(argv[1]);
         for(int i=0;i<roz;++i)
         {
            plik<<s[i].numer<<endl;
            plik<<s[i].marka<<endl;
            plik<<s[i].model<<endl;
            plik<<s[i].rok<<endl;
            plik<<s[i].cena<<endl;
            plik<<"\n\n";
         }
         plik.close();
         delete [] s;
         break;
      }
      case 3:
      {
         cout<<"Opcja 3: Samochody dostepne w bazie Inter-Cars: \n\n";

         int n = rozmiar(argv[1])-1;
         Samochod *s = new Samochod [n];
         zpliku(argv[1],s,n);
         wypisz(s,n);

         delete [] s;
         break; 
      }
      case 4:
      {
         double szukana_cena;
         cout<<"Opcja 4: Podaj cene wg. ktorej bedziemy wyszukiwac samochody:\n";
         cin>>szukana_cena;

         int n = rozmiar(argv[1])-1;
         Samochod *s = new Samochod [n];
         zpliku(argv[1],s,n);

         szukaj_po_cenie(s,n,szukana_cena);

         delete [] s;
         break;
      }
      case 5:
      {
         char nazwa[20];
         cout<<"Opcja 5: Podaj nazwe kopii istniejacej bazy danych: \n";
         cin>>nazwa;
         int n = rozmiar(argv[1])-1;
         Samochod *s = new Samochod [n];
         zpliku(argv[1],s,n);

         ofstream plik;
         plik.open(nazwa);
         for(int i=0;i<n;++i)
         {
            plik<<s[i].numer<<endl;
            plik<<s[i].marka<<endl;
            plik<<s[i].model<<endl;
            plik<<s[i].rok<<endl;
            plik<<s[i].cena<<endl;
            plik<<"\n\n";
         }
         plik.close();
         delete [] s;
         break;
      }   
      case 0:
      {
         cout<<"Dziekuje za skorzystanie z bazy samochodowe Inter-Cars. Zapraszam ponownie. \n";
          getch();
      }
   }
   }while(znak != 0);

   return 0;
}
0

Oczywiście szukałeś i nie znalazłeś...
Zabezpieczenie przed wpisywaniem liter

0

Szukałem i znalazłem :) Niestety mi to nie działało ... być może coś źle robię. Dlatego zwróciłem się z prośbą o pomoc.

0

Pokaż jak próbowałeś tego użyć i może uda się to poprawić.

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