Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <typeinfo>
- #include <cstdio>
- #include <iostream>
- #include <fstream>
- using namespace std;
- class srodek;
- class samochod {
- public:
- double cena;
- char rodzaj_silnika[20];
- public:
- friend srodek;
- static int x;
- virtual void wyswietl_atrybuty() {
- printf("\n");
- printf("Cena wynosi:%g\n",cena);
- printf("Rodzaj silnika:%s.\n",rodzaj_silnika);
- };
- samochod *nast;
- samochod::samochod(){
- char rdz[20]="brak";
- cena=0;
- strcpy(rodzaj_silnika, rdz);
- nast=NULL;
- x=++x;
- }
- samochod::samochod(double a, char b[20]){
- cena=a;
- strcpy(rodzaj_silnika, b);
- nast=NULL;
- x=++x;
- }
- virtual~samochod(){
- if(nast!=NULL){
- x=--x;
- }
- }
- };
- class ciezarowy;
- class osobowy: public samochod{
- public:
- double poj_bagaznika;
- int liczba_drzwi;
- char typ_sylwetki[20];
- public:
- friend ciezarowy;
- void ustal_atrybuty() {
- double cn;
- char rodzaj[20];
- double poj;
- int liczba;
- char typ[20];
- printf("Cena=");
- scanf("%lf",&cn);
- printf("Rodzaj silnika=");
- scanf("%s",&rodzaj);
- printf("Pojemnosc bagaznika=");
- scanf("%lf",&poj);
- printf("Liczba drzwi=");
- scanf("%d",&liczba);
- printf("Typ sylwetki=");
- scanf("%s",&typ);
- cena=cn;
- strcpy(rodzaj_silnika, rodzaj);
- poj_bagaznika=poj;
- liczba_drzwi=liczba;
- strcpy(typ_sylwetki, typ);
- };
- void wyswietl_atrybuty() {
- printf("\n");
- printf("Cena wynosi:%g\n",cena);
- printf("Rodzaj silnika:%s.\n",rodzaj_silnika);
- printf("Pojemnosc bagaznika:%g\n",poj_bagaznika);
- printf("Liczba drzwi:%d\n",liczba_drzwi);
- printf("Typ sylwetki:%s\n",typ_sylwetki);
- };
- osobowy operator+(osobowy drugi){
- osobowy suma;
- suma.cena=cena+drugi.cena;
- suma.poj_bagaznika=poj_bagaznika+drugi.poj_bagaznika;
- suma.liczba_drzwi=liczba_drzwi+drugi.liczba_drzwi;
- return suma;
- };
- osobowy& operator+=(const osobowy& rv){
- cena+=rv.cena;
- poj_bagaznika+=rv.poj_bagaznika;
- liczba_drzwi+=rv.liczba_drzwi;
- return *this;
- };
- const osobowy operator=(const osobowy& rv){
- cena=rv.cena;
- poj_bagaznika=rv.poj_bagaznika;
- liczba_drzwi=rv.liczba_drzwi;
- return *this;
- };
- osobowy::osobowy(){
- samochod::samochod();
- char tp[20]="brak";
- poj_bagaznika=0;
- liczba_drzwi=3;
- strcpy(typ_sylwetki, tp);
- nast=NULL;
- }
- osobowy(double a, char b[20], double c, int d, char e[20]):samochod(a,b){
- poj_bagaznika=c;
- liczba_drzwi=d;
- strcpy(typ_sylwetki, e);
- wyswietl_atrybuty();
- nast=NULL;
- }
- osobowy(const ciezarowy& rv);
- ~osobowy(){
- if(nast!=NULL){
- x=--x;
- printf("Typ obiektu:%s\n","osobowy");
- printf("Pole statyczne: %d\n",x);
- delete nast;
- }
- }
- };
- class ciezarowy: public samochod{
- public:
- double max_ladownosc;
- int liczba_kol;
- public:
- friend osobowy;
- void ustal_atrybuty() {
- double cn;
- char rodzaj[20];
- double ladownosc;
- int kola;
- printf("Cena=");
- scanf("%lf",&cn);
- printf("Rodzaj silnika=");
- scanf("%s",&rodzaj);
- printf("Maksymalna ladownosc=");
- scanf("%lf",&ladownosc);
- printf("Liczba kol=");
- scanf("%d",&kola);
- cena=cn;
- strcpy(rodzaj_silnika, rodzaj);
- max_ladownosc=ladownosc;
- liczba_kol=kola;
- };
- void wyswietl_atrybuty() {
- printf("\n");
- printf("Cena wynosi:%g\n",cena);
- printf("Rodzaj silnika:%s.\n",rodzaj_silnika);
- printf("Maksymalna ladownosc:%g.\n",max_ladownosc);
- printf("Liczba kol:%d.\n",liczba_kol);
- }
- ciezarowy operator+(ciezarowy drugi){
- ciezarowy suma;
- suma.cena=cena+drugi.cena;
- suma.max_ladownosc=max_ladownosc+drugi.max_ladownosc;
- suma.liczba_kol=liczba_kol+drugi.liczba_kol;
- return suma;
- };
- const ciezarowy operator=(const ciezarowy& rv){
- cena=rv.cena;
- max_ladownosc=rv.max_ladownosc;
- liczba_kol=rv.liczba_kol;
- return *this;
- };
- const ciezarowy operator+=(const ciezarowy& rv){
- cena+=rv.cena;
- max_ladownosc+=rv.max_ladownosc;
- liczba_kol+=rv.liczba_kol;
- return *this;
- };
- ciezarowy::ciezarowy(){
- samochod::samochod();
- max_ladownosc=0;
- liczba_kol=4;
- nast=NULL;
- }
- ciezarowy(double a, char b[20], double c, int d):samochod(a,b){
- max_ladownosc=c;
- liczba_kol=d;
- wyswietl_atrybuty();
- nast=NULL;
- }
- ciezarowy(const osobowy& rv){
- cena=rv.cena;
- max_ladownosc=rv.poj_bagaznika;
- liczba_kol=rv.liczba_drzwi;
- }
- ~ciezarowy(){
- if(nast!=NULL){
- x=--x;
- printf("Typ obiektu:%s\n","ciezarowy");
- printf("Pole statyczne: %d\n",x);
- delete nast;
- }
- }
- };
- int samochod::x = 9;
- samochod *glowa=NULL;
- samochod *wsk=NULL;
- void fun_rozpoznajaca(samochod **wskaznik){
- if (typeid(*wsk) == typeid(osobowy))
- printf("Kolejny element jest typu osobowy.\n");
- else if (typeid(*wsk) == typeid(ciezarowy))
- printf("Kolejny element jest typu ciezarowy.\n");
- }
- osobowy::osobowy(const ciezarowy& rv){
- cena=rv.cena;
- poj_bagaznika=rv.max_ladownosc;
- liczba_drzwi=rv.liczba_kol;
- }
- struct nag{
- public:
- char miasto[30];
- char data[30];
- char raport[30];
- };
- class naglowek{
- char miasto[30];
- char data[30];
- char raport[30];
- public:
- naglowek(struct nag &s){
- strcpy(this->miasto,s.miasto);
- strcpy(this->data,s.data);
- strcpy(this->raport,s.raport);
- }
- friend ostream& operator<<(ostream& plik, naglowek& na){
- plik << "\t";
- plik << na.miasto;
- plik << na.data;
- plik << endl;
- plik << "\t\t";
- plik << na.raport;
- return plik;
- }
- };
- ostream& tab(ostream& plik){
- plik << "Lp.";
- plik << '\t';
- plik << "cena";
- plik << '\t';
- plik << "silnik";
- plik << '\t';
- plik << "bagaznik";
- plik << '\t';
- plik << "drzwi";
- plik << '\t';
- plik << "typ";
- plik << '\t';
- plik << "ladownosc";
- plik << '\t';
- plik << "kola";
- plik << endl;
- plik << "====================================================================";
- return plik;
- }
- static int a=1;
- class srodek {
- public:
- samochod *wsk;
- srodek(samochod *wsk){
- this->wsk=wsk;
- }
- friend ostream& operator<<(ostream& plik,srodek& sr){
- while(sr.wsk!=NULL){
- if(typeid (*(sr).wsk)==typeid(osobowy)){
- osobowy *o=(osobowy*)sr.wsk;
- plik << a;
- plik << "\t";
- plik << o->cena;
- plik << "\t";
- plik << o->rodzaj_silnika;
- plik << "\t";
- plik << o->poj_bagaznika;
- plik << "\t";
- plik << o->liczba_drzwi;
- plik << "\t";
- plik << o->typ_sylwetki;
- plik << "\t";
- plik << endl;
- a++;
- }
- else if(typeid(*(sr).wsk)==typeid(ciezarowy)){
- ciezarowy *c=(ciezarowy*)sr.wsk;
- plik << a;
- plik << '\t';
- plik << c->cena;
- plik << '\t';
- plik << c->rodzaj_silnika;
- plik << '\t'<<'\t'<<'\t'<<'\t';
- plik << c->max_ladownosc;
- plik << '\t'<<'\t';
- plik << c->liczba_kol;
- plik << '\t';
- plik << endl;
- a++;
- }
- sr.wsk=(sr.wsk)->nast;
- }
- plik << endl;
- plik << "====================================================================";
- return plik;
- }
- };
- int main() {
- fstream plik;
- char nazwa[30];
- int wybor;
- int wybor1;
- printf("Czy chcesz dodac kolejny element? 1-tak, 2-nie:");
- scanf("%d",&wybor1);
- while (wybor1==1){
- printf("Jaki samochod chcesz dodac: 1-osobowy, 2-ciezarowy:");
- scanf("%d",&wybor);
- samochod *nowy;
- if(wybor==1){
- nowy=new osobowy (234.8,"benzyna",2.3,3,"combi");;
- }
- if(wybor==2){
- nowy=new ciezarowy (279.1, "ON", 60.7, 8);
- }
- if(glowa==NULL){
- glowa=wsk=nowy;
- }
- else{
- wsk->nast=nowy;
- wsk = wsk->nast;
- }
- printf("Czy chcesz dodac kolejny element? 1-tak, 2-nie:");
- scanf("%d",&wybor1);
- }
- wsk=glowa;
- while(wsk!=NULL){
- wsk->wyswietl_atrybuty();
- wsk=wsk->nast;
- }
- //podanie nazwy pliku
- //printf("Podaj nazwe pliku");
- //scanf("%s",&nazwa);
- nag s;
- strcpy(s.miasto,"Warszawa,");
- strcpy(s.data,"23.05.12 ");
- strcpy(s.raport,"Raport o stanie samochodow ");
- wsk=glowa;
- plik.open("samochody.txt",ios::out);
- if(plik.good()){
- //plik << naglowek(glowa);
- plik << "\t\t\t\t";
- plik << naglowek(s);
- plik << endl;
- plik << tab;
- plik << endl;
- plik << srodek(glowa);
- }
- delete glowa;
- getchar();
- getchar();
- return 0;
- };
Advertisement
Add Comment
Please, Sign In to add comment