//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