//Dana jest klasa Kontener (identyczny jak na poprzednich zajęciach): class Kontener{
public:
unsigned int
m_liczba;
std::string
m_TekstBezSpacji;
double
m_wartoscA_double;
double
m_wartoscB_double;
};
//Dane jest 5 plików wejściowych: 1) Plik1.txt - plik poprawny – identyczny jak na poprzednich zajęciach, 2) Plik2.txt - plik niepoprawny – zbyt mała ilość wierszy do wczytania (44), 3) Plik3.txt - plik niepoprawny – brak informacji o Kontenerach, 4) Plik4.txt - plik niepoprawny – brak pliku lub błąd odczytu pliku, 5) Plik5.txt - plik niepoprawny – brak identyfikatora END na końcu pliku – plik „uszkodzony” .
Nazwa pliku
Zawartość pliku:
Plik1.txt
5
9
Zmienna1
1.23
-3.14
3
Zmienna2
5.1
1.23
1
Zmienna3
1
0.329
2
Zmienna4
665.566
0.0323
0
Zmienna5
665.566
0.0323
END
Plik2.txt
44
9
Zmienna1
1.23
-3.14
3
Zmienna2
5.1
1.23
END
Plik3.txt
3
END
Plik4.txt
Brak pliku o tej nazwie
Plik5.txt
2
0
Zmienna1
1.23
-3.14
1
Zmienna2
5.1
1.23
//Dany jest następujący schemat dziedziczenia klas błędu (rys.1):
//======================================================================
#include <iostream>
#include <string>
#include <stdio.h>
#include <stdlib.h>
//======================================================================
using namespace std;
//======================================================================
class BladProg{
protected:
string
m_strTekstBladu;
protected:
BladProg():m_strTekstBladu("Blad nieokreslony!"){}
public:
BladProg( string aTekstBledu ):m_strTekstBladu(aTekstBledu){}; BladProg( const BladProg& aBladProg ):m_strTekstBladu(aBladProg.m_strTekstBladu){}
virtual
~ BladProg(){};
virtual const char*
what(){ return m_strTekstBladu. c_str(); }
// funkcja zwraca tekst bledu BladProg&
operator=( const BladProg& aBladProg );
};
//=========================================================================
BladProg&
BladProg:: operator=( const BladProg& aBladProg){
m_strTekstBladu = aBladProg.m_strTekstBladu; return *this;
}
//=========================================================================
int main(void){
try{
// TUTAJ UMISC CA£Y SWOJ PROGRAM Z POPRZEDNICH ZAJEC
// tak się rzuca wyjątek
//throw BladProg("To jest przyklad jak rzucic okreslony wyjatek w programie!");
//throw BladProg_BrakPliku("Plik istnieje, lecz nie mozn go otworzyc!");
//throw BladProg_BrakEnd("Plik uszkodzony -> brak znacznika konca pliku");
//throw BladProg_BrakKont("Plik uszkodzony -> brak informacji o kontenerach");
//throw BladProg_BladWiersz("Plik uszkodzony -> zbyt mala ilosc wierszy kontenera");
}
catch( BladProg& ex ){
cout << "-----------------------------------------------" << endl; cout << "Wystapil wyjatek. Program zostal zakonczony z bledem!!" << endl; cout << "Tekst Bledu : " << ex.what()
<< endl;
cout << "Plik : " << __FILE__ << endl; cout << "Ta Linia nr : " << __LINE__ << endl;
}
catch( exception& ex) {
cout << "Blad std -> " << ex.what() << endl;
}
catch(...){
cout << "Blad nieokreslony !! " << endl;
}
return 0;
}
TREŚĆ ZADANIA:
1) Program z poprzednich zajęć uzupełnij o klasę błędów BladProg oraz klasy potomne według schematu dziedziczenia jak na rysunku nr 1 (poprzednia strona), 2) dodaj do programu możliwość wykrywania błędów w pliku wejściowym - analizowanie struktury pliku wejściowego (patrz plik1.txt, plik2.txt, plik3.txt, plik4.txt oraz plik5.txt) oraz rzuć odpowiedni wyjątek (zaznaczono kolorem niebieskim) w przypadku jego wykrycia tj: a) zbyt mała ilość wierszy do wczytania (44)
BladProg_BladWiersz
b) brak informacji o Kontenerach,
BladProg_BrakKont
c) brak pliku lub błąd odczytu pliku,
BladProg_BrakPliku
d) brak identyfikatora END na końcu pliku – plik „uszkodzony”. BladProg_BrakEnd
!!! UWAGA !!!
Konwersja std::string → float patrz strona internetowa przedmiotu - > 9. Materiały dydaktyczne dla studentów