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;
}