Pakiet programów do zdalnego nauczania Programowania Orientowanego Obiektowo
Dzisiaj jest
Poniedziałek, 16 Lipiec 2018
Zarejestrowanych użytkowników: 4
Dostępnych pytań testowych: 102
HOME
Strona tytułowa pracy dyplomowej
NAUKA
Materiały dydaktyczne związane z OOP
TESTY
Sprawdzenie poziomu zdobytej wiedzy
ZASOBY
Literatura i zasoby sieciowe o OOP
ŹRÓDŁA
Zbiór projektów dydaktycznych z OOP
KONTO
Możliwość śledzenia własnych postępów
INFO


Most

Przykład 1
#include "dziennik.h"

#include <iostream>

int main () {
	Dziennik * dziennik = new Dziennik("plik.txt", Dziennik::DZIENNIK_TEKSTOWY);
	//Dziennik * dziennik = new Dziennik("plik2.bin", Dziennik::DZIENNIK_BINARNY);
	//Dziennik * dziennik = new Dziennik("127.0.0.1", Dziennik::DZIENNIK_ZDALNY);
	
	dziennik->zapiszDane(10.5);
	dziennik->zapiszDane(11.3);
	dziennik->zapiszDane(12.8);
	dziennik->zapiszDane(11.6);
	dziennik->zapiszDane(10.1);
	dziennik->zapiszDane(9.7);

	dziennik->zamknij();
	delete dziennik;

	return 0;
}
#ifndef __DZIENNIK_H__
#define __DZIENNIK_H__
#include <string>

class ImplDziennik;

class Dziennik {
public:
	enum TypDziennika { DZIENNIK_TEKSTOWY, DZIENNIK_BINARNY, DZIENNIK_ZDALNY };
	
	Dziennik (const std::string & sciezka, TypDziennika typ);
	~Dziennik ();
	void zapiszDane (double dana);
	void zamknij ();
private:
	ImplDziennik * s_impl;
};

#endif
#include "dziennik.h"
#include "impl_dziennikbaza.h"
#include "impl_dziennikbinarny.h"
#include "impl_dzienniktekstowy.h"
#include <iostream>

Dziennik::Dziennik (const std::string & sciezka, TypDziennika typ) 
	: s_impl(0)
{
	switch (typ) {
	case Dziennik::DZIENNIK_BINARNY:
		s_impl = new ImplDziennikBinarny (sciezka);
		break;
	case Dziennik::DZIENNIK_ZDALNY:
		s_impl = new ImplDziennikBaza (sciezka);
		break;
	case Dziennik::DZIENNIK_TEKSTOWY: 
	default:
		s_impl = new ImplDziennikTekstowy (sciezka);
		break;
	}
	std::clog << "Otwarto dziennik" << std::endl;
}

Dziennik::~Dziennik () {
	zamknij();
}

void Dziennik::zapiszDane (double dana) {
	if (s_impl) {
		std::clog << "Zapisywanie danej: " << dana << std::endl;
		s_impl->zapiszDane(dana);
	}
}

	
void Dziennik::zamknij () {
	delete s_impl;

	if (s_impl)
		std::clog << "Zamknieto dziennik" << std::endl;

	s_impl = 0;
}
#ifndef __IMPL_DZIENNIK_H__
#define __IMPL_DZIENNIK_H__

class ImplDziennik {
public:
	virtual ~ImplDziennik () {}
	virtual void zapiszDane (double dana) = 0;
	virtual void zamknij () = 0;
};

#endif
#ifndef __IMPL_DZIENNIKBAZA_H__
#define __IMPL_DZIENNIKBAZA_H__
#include "impl_dziennik.h"
#include <string>

class ImplDziennikBaza : public ImplDziennik {
public:
	ImplDziennikBaza (const std::string & sciezka);
	virtual ~ImplDziennikBaza ();
	virtual void zapiszDane (double dana);
	virtual void zamknij ();
};

#endif
#include "impl_dziennikbaza.h"
#include <iostream>

ImplDziennikBaza::ImplDziennikBaza (const std::string & sciezka) {
	std::clog << "Otwarto polaczenie z baza danych" << std::endl;
}
	
ImplDziennikBaza::~ImplDziennikBaza () {
	zamknij ();
}
	
void ImplDziennikBaza::zapiszDane (double dana) {
	std::clog << "Zapisano dane do bazy danych" << std::endl;
}
	
void ImplDziennikBaza::zamknij () {
	std::clog << "Zamknieto polaczenie z baza danych" << std::endl;
}
#ifndef __IMPL_DZIENNIKBINARNY_H__
#define __IMPL_DZIENNIKBINARNY_H__
#include "impl_dziennik.h"
#include <string>
#include <fstream>

class ImplDziennikBinarny : public ImplDziennik {
public:
	ImplDziennikBinarny (const std::string & sciezka);
	virtual ~ImplDziennikBinarny ();
	virtual void zapiszDane (double dana);
	virtual void zamknij ();
private:
	std::ofstream s_plik;
};

#endif
#include "impl_dziennikbinarny.h"

ImplDziennikBinarny::ImplDziennikBinarny (const std::string & sciezka) {
	s_plik.open(sciezka, std::ios_base::binary);
}
	
ImplDziennikBinarny::~ImplDziennikBinarny () {
	zamknij();
}
	
void ImplDziennikBinarny::zapiszDane (double dana) {
	char * adresChar = reinterpret_cast<char *>(&dana);
	s_plik.write(adresChar, sizeof(double));
}
	
void ImplDziennikBinarny::zamknij () {
	if (s_plik.is_open()) 
		s_plik.close();
}
#ifndef __IMPL_DZIENNIKTEKSTOWY_H__
#define __IMPL_DZIENNIKTEKSTOWY_H__
#include "impl_dziennik.h"
#include <string>
#include <fstream>

class ImplDziennikTekstowy : public ImplDziennik {
public:
	ImplDziennikTekstowy (const std::string & sciezka);
	virtual ~ImplDziennikTekstowy ();
	virtual void zapiszDane (double dana);
	virtual void zamknij ();
private:
	std::ofstream s_plik;
};

#endif
#include "impl_dzienniktekstowy.h"
#include <ctime>

ImplDziennikTekstowy::ImplDziennikTekstowy (const std::string & sciezka) {
	s_plik.open(sciezka, std::ios_base::app);
	
	if (!s_plik.is_open())
		throw std::exception("Nie mozna otworzyc wskazanej lokalizacji");
}
	
ImplDziennikTekstowy::~ImplDziennikTekstowy () {
	zamknij ();
}
	
void ImplDziennikTekstowy::zapiszDane (double dana) {
	time_t czas = std::time(0);
	s_plik << std::ctime(&czas) << "\tZarejestrowano dana: " << dana << std::endl;
	s_plik.flush();
}
	
void ImplDziennikTekstowy::zamknij () {
	if (s_plik.is_open()) 
		s_plik.close();
}
Adamik Łukasz, Politechnika Śląska w Gliwicach (AEiI) - 2010/11