• Nie Znaleziono Wyników

Wykład 11Zarządzanie danymi - zapis/odczyt w pliku - cd11.1. Mapa aplikacji – kolekcja formatów zapisu i odczytu z pliku, odtwarzanie obiektów wraz z powiązaniamiPlik nagłówkowy

N/A
N/A
Protected

Academic year: 2021

Share "Wykład 11Zarządzanie danymi - zapis/odczyt w pliku - cd11.1. Mapa aplikacji – kolekcja formatów zapisu i odczytu z pliku, odtwarzanie obiektów wraz z powiązaniamiPlik nagłówkowy"

Copied!
1
0
0

Pełen tekst

(1)

Wykład 11

Zarządzanie danymi - zapis/odczyt w pliku - cd 11.1. Mapa aplikacji – kolekcja formatów zapisu i odczytu z pliku,

odtwarzanie obiektów wraz z powiązaniami

 Plik nagłówkowy

#ifndef M_BIBL

#define M_BIBL

#include "Mapa_kl.h"

#include "F_Tyt4.h"

#include "F_Poz.h"

#include "F_kol.h"

#include "F_Wyp.h"

#include "F_Rez.h"

#include "F_klient.h"

#include "Tab_Ob.h"

#include "Form_Tob.h"

extern TKol3<TTytul> Zasoby;

extern TKol3<TPozycja> Pozycje;

extern TKol3<TDane_klienta> Klienci;

extern TKol3<TWypozyczenie> Wypozyczenia;

extern TKol3<TRezerwacja> Rezerwacje;

class Mapa_bibl: public Mapa_klas {public: Mapa_bibl()

{Format_tablicy_obiektow * Ftab_obiektow=

new Format_tablicy_obiektow;

formaty.Zmien(1);formaty.Wstaw(Ftab_obiektow,TABLICA_OB);

Format_kolekcji* FKol1=new Format_kolekcji;

formaty.Zmien(1);formaty.Wstaw(FKol1,KOLEKCJA);

Format_tytulu* Ftytul=new Format_tytulu;

formaty.Zmien(1);formaty.Wstaw(Ftytul,TYTUL);

Format_pozycji* Fpozycja=new Format_pozycji;

formaty.Zmien(1);formaty.Wstaw(Fpozycja,POZYCJA);

Format_klienta*Fklient=new Format_klienta;

formaty.Zmien(1); formaty.Wstaw(Fklient,KLIENT);

Format_wypozyczenia* Fwypozyczenie=new Format_wypozyczenia;

formaty.Zmien(1); formaty.Wstaw(Fwypozyczenie,WYPOZYCZENIE);

Format_rezerwacji* Frezerwacja=new Format_rezerwacji;

formaty.Zmien(1); formaty.Wstaw(Frezerwacja,REZERWACJA);

}

~Mapa_bibl() {}

int Kod_klasy_tablicy() {return TABLICA_OB;}

void Odtworz_obiekt(int ID_obiektu, int kod_klasy, Tablica_obiektow* _tablica_obiektow);

};

#endif

(2)

 Plik modułowy

#include "M_bibl1.h"

void Mapa_bibl::Odtworz_obiekt(int ID_obiektu, int kod_klasy, Tablica_obiektow* _tablica_obiektow)

{PDC_Obiekt* pdc_obiekt;

PDC_Obiekt*kol[5]={&Zasoby,&Pozycje,&Klienci, &Wypozyczenia,&Rezerwacje};

static int ile=0;

switch (kod_klasy) {case KOLEKCJA:

if (ile<5)

{kol[ile++]->Nadaj_obiekt_ID(ID_obiektu);

_tablica_obiektow->Zarejestruj_obiekt(ID_obiektu,kol[ile-1]);

} break;

case TYTUL:

pdc_obiekt=new TTytul("","","",&Pozycje,&Rezerwacje);

pdc_obiekt->Nadaj_obiekt_ID(ID_obiektu);

_tablica_obiektow->Zarejestruj_obiekt(ID_obiektu,pdc_obiekt);

static int t=0;

Zasoby.Zmien(1);Zasoby.Wstaw((TTytul*)pdc_obiekt,t++); break;

case POZYCJA:

pdc_obiekt= new TPozycja;

pdc_obiekt->Nadaj_obiekt_ID(ID_obiektu);

_tablica_obiektow->Zarejestruj_obiekt(ID_obiektu,pdc_obiekt);

static int p=0; Pozycje.Zmien(1);

Pozycje.Wstaw((TPozycja*)pdc_obiekt,p++); break;

case WYPOZYCZENIE:

pdc_obiekt= new TWypozyczenie;

pdc_obiekt->Nadaj_obiekt_ID(ID_obiektu);

_tablica_obiektow->Zarejestruj_obiekt(ID_obiektu,pdc_obiekt);

static int w=0; Wypozyczenia.Zmien(1);

Wypozyczenia.Wstaw((TWypozyczenie*)pdc_obiekt,w++); break;

case REZERWACJA:

pdc_obiekt= new TRezerwacja;

pdc_obiekt->Nadaj_obiekt_ID(ID_obiektu);

_tablica_obiektow->Zarejestruj_obiekt(ID_obiektu,pdc_obiekt);

static int r=0; Rezerwacje.Zmien(1);

Rezerwacje.Wstaw((TRezerwacja*)pdc_obiekt,r++); break;

case KLIENT:

pdc_obiekt= new TDane_klienta(0,"","","","",&Wypozyczenia, &Rezerwacje);

pdc_obiekt->Nadaj_obiekt_ID(ID_obiektu);

_tablica_obiektow->Zarejestruj_obiekt(ID_obiektu,pdc_obiekt);

static int k=0; Klienci.Zmien(1);

Klienci.Wstaw((TDane_klienta*)pdc_obiekt,k++); break;

(3)

11.2 Formaty zapisu i odczytu obiektów aplikacji

Format dla klasy TTytul

#ifndef FTYT4.H

#define FTYT4.H

#include "TTytul4.h"

#include "Form_PDC.h"

extern TKol3<TPozycja> Pozycje;

class Format_tytulu:public Format_PDC_obiektow<TTytul>

{ public:

Format_tytulu() {}

~Format_tytulu() {}

void Zachowaj_nazwe_klasy(ofstream& plik_wy)

{Zachowaj_naglowek(plik_wy,"Nazwa_klasy", "TTytul");}

void Zachowaj_atrybuty(ofstream& plik_wy) { plik_wy<<'<'<<pdc_obiekt->nazwa<<endl <<pdc_obiekt->autor<<endl

<<pdc_obiekt->ISBN<<endl;}

void Odtworz_atrybuty(ifstream& plik_we) { char znak;

plik_we.get(znak);

plik_we>>pdc_obiekt->nazwa;

plik_we>>pdc_obiekt->autor;

plik_we>>pdc_obiekt->ISBN;

plik_we.get(znak);}

};

#endif

Format dla klasy TKol1

#ifndef F_KOL

#define F_KOL

#include "Kol1_3.h"

#include "Form_PDC.h"

#include "PDC_ob.h"

class Format_kolekcji:public Format_PDC_obiektow <PDC_Obiekt>

{public:

Format_kolekcji() {}

~Format_kolekcji() {}

void Zachowaj_nazwe_klasy(ofstream& plik_wy)

{Zachowaj_naglowek(plik_wy,"Nazwa_klasy", "TKol1");}

void Zachowaj_atrybuty(ofstream& plik_wy)

{plik_wy<<'<'<<((TKol1<PDC_Obiekt>*)pdc_obiekt)->ile<<endl;}

void Odtworz_atrybuty(ifstream& plik_we) { char znak;

plik_we.get(znak);

plik_we>>((TKol1<PDC_Obiekt>*)pdc_obiekt)->ile;

plik_we.get(znak);}

};

#endif

(4)

Format dla klasy TDane_klienta

#ifndef FKLient5.H

#define FKlient5.H

#include "TKlient5.h"

#include "Form_PDC.h"

extern TKol3<TPozycja> Pozycje;

class Format_klienta:public Format_PDC_obiektow<TDane_klienta>

{ public:

Format_klienta() {}

~Format_klienta() {}

void Zachowaj_nazwe_klasy(ofstream& plik_wy)

{Zachowaj_naglowek(plik_wy,"Nazwa_klasy", "TDane_klienta");}

void Zachowaj_atrybuty(ofstream& plik_wy) {int n; char a[dl], b[dl], c[dl], d[dl];

pdc_obiekt->Podaj_dane_klienta(n,a,b,c,d);

plik_wy<<'<'<<n<<endl <<a<<endl

<<b<<endl <<c<<endl <<c<<endl;

}

void Odtworz_atrybuty(ifstream& plik_we) { char znak,a[dl],b[dl],c[dl],d[dl];int n;

plik_we.get(znak);

plik_we>>n;

plik_we>>a;

plik_we>>b;

plik_we>>c;

plik_we>>d;

plik_we.get(znak);

pdc_obiekt->Nadaj_dane_klienta(n,a,b,c,d);

} };#endif

(5)

Format dla klasy TPozycja

#ifndef F_POZ.H

#define F_POZ.H

#include "TPoz3.h"

#include "Form_PDC.h"

class Format_pozycji:public Format_PDC_obiektow<TPozycja>

{ public: Format_pozycji() {}

~Format_pozycji() {}

void Zachowaj_nazwe_klasy(ofstream& plik_wy)

{Zachowaj_naglowek(plik_wy,"Nazwa_klasy", "TPozycja");}

void Zachowaj_atrybuty(ofstream& plik_wy)

{ plik_wy<<'<'<<pdc_obiekt->Podaj_Numer()<<endl;}

void Odtworz_atrybuty(ifstream& plik_we) { char znak;int pom; plik_we.get(znak);

plik_we>>pom; pdc_obiekt->Nadaj_numer(pom);

plik_we.get(znak);}

void Zachowaj_powiazania(ofstream&);

void Odtworz_powiazania(ifstream&, Tablica_obiektow*);

};

#endif

#include "F_Poz.h"

#include "TTytul4.h"

#include "TWyp1.h"

#include "Tab_ob.h"

void Format_pozycji:: Zachowaj_powiazania(ofstream& plik_wy) { TTytul* pom1=pdc_obiekt->Podaj_tytul();

int obiekt_ID=pom1->Podaj_obiekt_ID();

Zachowaj_etykiete(plik_wy,"TTytul");

Zachowaj_ID(plik_wy,obiekt_ID);

TWypozyczenie* pom2=pdc_obiekt->Podaj_wypozyczenie();

Zachowaj_etykiete(plik_wy,"TWypozyczenie");

if (pom2!=NULL)obiekt_ID=pom2->Podaj_obiekt_ID();

else obiekt_ID=-1;

Zachowaj_ID(plik_wy,obiekt_ID);}

void Format_pozycji::Odtworz_powiazania(ifstream& plik_we, Tablica_obiektow*tablica_obiektow) {if(Odtworz_etykiete(plik_we,"TTytul")!=0)

{int obiekt_ID=Odtworz_ID(plik_we);

TTytul*pom1=(TTytul*)(tablica_obiektow->Obiekt_ID(obiekt_ID));

pdc_obiekt->Nadaj_tytul(pom1);}

if(Odtworz_etykiete(plik_we,"TWypozyczenie")!=0) {int obiekt_ID=Odtworz_ID(plik_we);

TWypozyczenie*pom2;

if (obiekt_ID!=-1)

pom2=(TWypozyczenie*)(tablica_obiektow->Obiekt_ID(obiekt_ID));

else pom2=NULL;

pdc_obiekt->Nadaj_wypozyczenie(pom2);}}

(6)

Format dla klasy TRezerwacja

#ifndef F_REZ.H

#define F_REZ.H

#include "TRez1.h"

#include "Form_PDC.h"

class Format_rezerwacji:public Format_PDC_obiektow<TRezerwacja>

{ public:

Format_rezerwacji() {}

~Format_rezerwacji() {}

void Zachowaj_nazwe_klasy(ofstream& plik_wy)

{Zachowaj_naglowek(plik_wy,"Nazwa_klasy", "TRezerwacja");}

void Zachowaj_powiazania(ofstream&);

void Odtworz_powiazania(ifstream&, Tablica_obiektow*);

};#endif

#include "F_Rez.h"

#include "TTytul4.h"

#include "TKlient5.h"

#include "Tab_ob.h"

void Format_rezerwacji:: Zachowaj_powiazania(ofstream& plik_wy) { TTytul* pom1=pdc_obiekt->Podaj_tytul();

int obiekt_ID=pom1->Podaj_obiekt_ID();

Zachowaj_etykiete(plik_wy,"TTytul");

Zachowaj_ID(plik_wy,obiekt_ID);

TDane_klienta* pom2=pdc_obiekt->Podaj_klienta();

obiekt_ID=pom2->Podaj_obiekt_ID();

Zachowaj_etykiete(plik_wy,"TDane_klienta");

Zachowaj_ID(plik_wy,obiekt_ID);

}void Format_rezerwacji::Odtworz_powiazania(ifstream& plik_we, Tablica_obiektow*tablica_obiektow)

{if(Odtworz_etykiete(plik_we,"TTytul")!=0) {int obiekt_ID=Odtworz_ID(plik_we);

TTytul*pom=(TTytul*)(tablica_obiektow->Obiekt_ID(obiekt_ID));

pdc_obiekt->Nadaj_tytul(pom); }

if(Odtworz_etykiete(plik_we,"TDane_klienta")!=0) {int obiekt_ID=Odtworz_ID(plik_we);

TDane_klienta*pom=

(TDane_klienta*)(tablica_obiektow->Obiekt_ID(obiekt_ID));

pdc_obiekt->Nadaj_klienta(pom);}}

(7)

Format dla klasy TWypozyczenie

#ifndef F_WYP.H

#define F_WYP.H

#include "TWyp1.h"

#include "Form_PDC.h"

class Format_wypozyczenia:

public Format_PDC_obiektow<TWypozyczenie>

{ public:

Format_wypozyczenia() {}

~Format_wypozyczenia() {}

void Zachowaj_nazwe_klasy(ofstream& plik_wy)

{Zachowaj_naglowek(plik_wy,"Nazwa_klasy", "TWypozyczenie");}

void Zachowaj_powiazania(ofstream&);

void Odtworz_powiazania(ifstream&, Tablica_obiektow*);

};#endif

#include "F_Wyp.h"

#include "TPoz3.h"

#include "TKlient5.h"

#include "Tab_ob.h"

void Format_wypozyczenia::Zachowaj_powiazania(ofstream& plik_wy) { TPozycja* pom1=pdc_obiekt->Podaj_pozycje();

int obiekt_ID=pom1->Podaj_obiekt_ID();

Zachowaj_etykiete(plik_wy,"TPozycja");

Zachowaj_ID(plik_wy,obiekt_ID);

TDane_klienta* pom2=pdc_obiekt->Podaj_klienta();

obiekt_ID=pom2->Podaj_obiekt_ID();

Zachowaj_etykiete(plik_wy,"TDane_klienta");

Zachowaj_ID(plik_wy,obiekt_ID);

}void Format_wypozyczenia::Odtworz_powiazania(ifstream& plik_we, Tablica_obiektow*tablica_obiektow) {if(Odtworz_etykiete(plik_we,"TPozycja")!=0)

{int obiekt_ID=Odtworz_ID(plik_we);

Pozycja*pom=(TPozycja*)(tablica_obiektow->Obiekt_ID(obiekt_ID));

pdc_obiekt->Nadaj_pozycje(pom);}

if(Odtworz_etykiete(plik_we,"TDane_klienta")!=0) {int obiekt_ID=Odtworz_ID(plik_we);

TDane_klienta*pom=

(TDane_klienta*)(tablica_obiektow->Obiekt_ID(obiekt_ID));

pdc_obiekt->Nadaj_klienta(pom);

}}

(8)

11.3. Zapis do pliku

#include "M_bibl1.h"

#include "TTytul4.h"

#include "TPoz3.h"

#include "kol2_2.h"

#include "TKlient5.h"

#include "TWyp1.h"

#include "TRez1.h"

void Wstaw_tytul(char*, char*, char*);

void Zwieksz_zasob(char*,int);

void Zmniejsz_zasob(char*,int);

void Szukaj_wyswietl_zasob(char*);

void Wypozycz_zasob(int,char*);

void Zwroc_zasob(int,int);

void Wypozycz_zasob_lub_zarezerwuj(int,char*);

void Wypozycz_zarezerwowany_zasob(int,char* );

void Wstaw_klienta(char*, char*, char*, char*,int);

void Szukaj_wyswietl(char*);

void Szukaj_wyswietl(int);

TKol3<TDane_klienta> Klienci;

TKol3<TTytul> Zasoby;

TKol3<TPozycja> Pozycje;

TKol3<TWypozyczenie> Wypozyczenia;

TKol3<TRezerwacja> Rezerwacje;

void main() { clrscr();

//wstaw kilka ksiazek o niepowtarzalnym tytule Wstaw_tytul("Tytul4","4","4");

Wstaw_tytul("Tytul1","1","1");

Wstaw_tytul("Tytul3","3","3");

Wstaw_tytul("Tytul2","2","2");

cout<<Zasoby<<endl;

//sortowanie wg tytulu -

Zasoby.Sortuj(Porownaj_wg_Tytulu);

cout<<Zasoby<<endl;

//szukanie binarne bez powtorzen wg tytulu Szukaj_wyswietl_zasob("Tytul1");

Szukaj_wyswietl_zasob("Tytul2");

Szukaj_wyswietl_zasob("Tytul5");

Zwieksz_zasob("Tytul1",1);

Zwieksz_zasob("Tytul2",1);

Zwieksz_zasob("Tytul8",2);

Zwieksz_zasob("Tytul2",2);

Zwieksz_zasob("Tytul3",3);

Zwieksz_zasob("Tytul4",4);

Zwieksz_zasob("Tytul1",5);

cout<<Pozycje<<endl;

Zmniejsz_zasob("Tytul1",1);

cout<<Pozycje<<endl;

(9)

//sortowanie wg numeru - kazda pozycja ma inny numer Pozycje.Sortuj(Porownaj_wg_Numeru);

cout<<Pozycje<<endl;

//wstaw kilku klientow o niepowtarzalnym numerze Wstaw_klienta("Kowalski","1","1","1",2);

Wstaw_klienta("Nowak","2","2","2",2);

Wstaw_klienta("Adamiak","3","3","3",1);

Wstaw_klienta("Walczak","4","4","4",3);

cout<<Klienci<<endl;

//sortowanie wg nazwiska - moze byc wiele osob o tym samym nazwisku Klienci.Sortuj(Porownaj_wg_Nazwiska);

cout<<Klienci<<endl;

//szukanie binarne z powtorzeniami wg nazwiska Szukaj_wyswietl("Kowalski");

Szukaj_wyswietl("Walczak");

Szukaj_wyswietl("Kowal");

//sortowanie wg numeru - kazda osoba ma inny numer Klienci.Sortuj(Porownaj_wg_Numeru);

cout<<Klienci<<endl;

//szukanie binarne bez powtorzen wg numeru Szukaj_wyswietl(1);

Szukaj_wyswietl(3);

Szukaj_wyswietl(4);

Wypozycz_zasob(2,"Tytul1"); //numer 5 Wypozycz_zasob(2,"Tytul2"); //numer2

cout<<"\nWypozyczenia"<<endl<<Wypozyczenia<<endl;

cout<<"\nPozycje"<<endl<<Pozycje<<endl;

Zwroc_zasob(2,5);

cout<<"\nWypozyczenia po zwrocie"<<endl<<Wypozyczenia<<endl;

cout<<"\nPozycje po zwrocie"<<endl<<Pozycje<<endl;

//rezerwacja: we: nazwisko klienta oraz tytul //wy: wypozyczenie albo rezerwacja

Wypozycz_zasob_lub_zarezerwuj(4,"Tytul2");

Wypozycz_zasob_lub_zarezerwuj(3,"Tytul2");

cout<<"\nWypozyczenia\n"<<Wypozyczenia<<endl;

cout<<"\nRezerwacje\n"<<Rezerwacje<<endl;

//Zapis obiektów

Tablica_obiektow tablica_obiektow;

Mapa_bibl* mapa_bibl= new Mapa_bibl;

tablica_obiektow.Nadaj_mape_klas(mapa_bibl);

Zasoby.Zarejestruj_w_tablicy(&tablica_obiektow);

Pozycje.Zarejestruj_w_tablicy(&tablica_obiektow);

Klienci.Zarejestruj_w_tablicy(&tablica_obiektow);

Wypozyczenia.Zarejestruj_w_tablicy(&tablica_obiektow);

Rezerwacje.Zarejestruj_w_tablicy(&tablica_obiektow);

tablica_obiektow.Zapisz("prob1.txt");

Rezerwacje.Usun_kolekcje();

Wypozyczenia.Usun_kolekcje();

Pozycje.Usun_kolekcje();

Klienci.Usun_kolekcje();

Zasoby.Usun_kolekcje();

getch();

(10)

}

11.4. Odczyt z pliku

#include "M_bibl1.h"

#include "TTytul4.h"

#include "TPoz3.h"

#include "kol2_2.h"

#include "TKlient5.h"

#include "TWyp1.h"

#include "TRez1.h"

void Wstaw_tytul(char*, char*, char*);

void Zwieksz_zasob(char*,int);

void Zmniejsz_zasob(char*,int);

void Szukaj_wyswietl_zasob(char*);

void Wypozycz_zasob(int,char*);

void Zwroc_zasob(int,int);

void Wypozycz_zasob_lub_zarezerwuj(int,char*);

void Wypozycz_zarezerwowany_zasob(int,char* );

void Wstaw_klienta(char*, char*, char*, char*,int);

void Szukaj_wyswietl(char*);

void Szukaj_wyswietl(int);

TKol3<TDane_klienta> Klienci;

TKol3<TTytul> Zasoby;

TKol3<TPozycja> Pozycje;

TKol3<TWypozyczenie> Wypozyczenia;

TKol3<TRezerwacja> Rezerwacje;

void main() { clrscr();

//Odczyt obiektów

Tablica_obiektow tablica_obiektow;

Mapa_bibl* mapa_bibl= new Mapa_bibl;

tablica_obiektow.Nadaj_mape_klas(mapa_bibl);

tablica_obiektow.Odczytaj("prob1.txt");

tablica_obiektow.Zapisz("prob2.txt");

cout<<"\nZasoby\n"<<Zasoby<<endl;

cout<<"\nPozycje\n"<<Pozycje<<endl;

cout<<"\nKlienci\n"<<Klienci<<endl;

cout<<"\nWypozyczenia\n"<<Wypozyczenia<<endl;

cout<<"\nRezerwacje\n"<<Rezerwacje<<endl;

Rezerwacje.Usun_kolekcje();

Wypozyczenia.Usun_kolekcje();

Pozycje.Usun_kolekcje();

Klienci.Usun_kolekcje();

Zasoby.Usun_kolekcje();

getch();

}

(11)

Cytaty

Powiązane dokumenty

6.Nauczyciel prosi o utworzenie pliku w jednym z podkatalogów, skopiowaniu go do katalogu będącego jeden poziom wyżej, zmianę nazwy pliku skopiowanego, usunięcie pliku

„Statystyk”. Korzystając z informacji zawartych w pliku pesel-dane.txt oraz dostępnych narzędzi informatycznych, wykonaj poniższe polecenia. Odpowiedzi do poszczególnych

Robiąc zadania na platformie proszę nie zwracać „za bardzo” uwagi na te procenty, które są na dole.. Przy zadaniach, gdzie trzeba

[r]

Widać, że w grupie CIU proporcja pozytywnych wyników SC5% jest wyższa niż w pozostałych grupach, które nie różnią się istotnie między sobą. Iloraz szans pozytywnego

Na początku metody main() zadeklaruj zmienną klasy String o nazwie nazwaPliku , która dalej posłuży do przechowywania nazwy pliku do zapisu danych.. Ponadto

Pierwszą daną w pliku jest liczba elementów tablicy... Liczba danych nie jest z

Następnie zapisz zmodyfikowane dane do pliku o nazwie złożonej ze starej nazwy i wyrażenia „_wg_ocen” – czyli dla przykładu „studenci_wg_ocen.txt”..