czwartek, 15 lutego 2018

Program Kwiaciarnia - programowanie obiektowe

Treść zadania:

Napisać program, w którym zostaną zdefiniowane trzy klasy zgodnie z poniższym opisem:

Klasy:
• "Kwiat", zawiera dane prywatne: identyfikator rośliny, nazwa, typ ( cięte pojedyncze, doniczkowe, wiązanki, do zasadzenia);
• "Kwiaciarnia", zawiera dane prywatne: identyfikator kwiaciarni, adres (np. nazwa ulicy);
• "Stan", zawiera dane prywatne: identyfikator kwiaciarni; identyfikator rośliny, liczba sztuk;

Każda klasa powinna posiadać publiczne metody umożliwiające operowanie na jej prywatnych danych, w tym publiczne konstruktory nadające wartości danym.

Program powinien.
1. Zapisywać do plików dane z obiektów powyższych klas oraz odczytywać dane z plików do obiektów odpowiednich klas;
2. Wyświetlać:
    a) listę dostępnych typów dla rośliny (kwiatu) o wskazanej nazwie;
    b) liczbę sztuk doniczkowych róż znajdujących się w kwiaciarni o danym adresie;
    c) listę kwiaciarni (adresy) posiadających w sprzedaży przynajmniej jedną wiązankę z rośliną o podanej nazwie.


Kod źródłowy w C++:
#include <iostream>
#include <fstream>
#include <stdlib.h>
#include <string.h>

using namespace std;

void menu();
void dodaj_kwiat();
void dodaj_stan();
void odczytywanie_danych();
void zadanie_2_a();
void zadanie_2_b();
void zadanie_2_c();

class kwiat
{
    private:
        string nazwa_rosliny,typ_rosliny;
        int id_rosliny;

    public:
        kwiat()
        {
            nazwa_rosliny="";
            typ_rosliny="";
            id_rosliny=(-1);
        }

        kwiat(int id_rosliny,string typ_rosliny,string nazwa_rosliny)
        {
            this->id_rosliny=id_rosliny;
            this->typ_rosliny=typ_rosliny;
            this->nazwa_rosliny=nazwa_rosliny;
        }

        int daj_id_rosliny()
        {
            return id_rosliny;
        }

        string daj_typ_rosliny()
        {
            return typ_rosliny;
        }

        string daj_nazwe_rosliny()
        {
            return nazwa_rosliny;
        }
};

class kwiaciarnia
{
    private:
        string adres_kwiaciarni;
        int id_kwiaciarni;

    public:
        kwiaciarnia()
        {
            id_kwiaciarni=1;
            adres_kwiaciarni="Warszawska 4";
        }

        kwiaciarnia(int id_kwiaciarni,string adres_kwiaciarni)
        {
            this->id_kwiaciarni=id_kwiaciarni;
            this->adres_kwiaciarni=adres_kwiaciarni;
        }

        int daj_id_kwiaciarni()
        {
            return id_kwiaciarni;
        }

        string daj_adres_kwiaciarni()
        {
            return adres_kwiaciarni;
        }
};

class stan
{
    private:
        int id_kwiaciarni;
        int id_rosliny;
        int liczba_sztuk;

    public:
        stan()
        {
            id_kwiaciarni=1;
            id_rosliny=1;
            liczba_sztuk=2;
        }

        stan(int id_kwiaciarni,int id_rosliny,int liczba_sztuk)
        {
            this->id_kwiaciarni=id_kwiaciarni;
            this->id_rosliny=id_rosliny;
            this->liczba_sztuk=liczba_sztuk;
        }

        int daj_id_rosliny()
        {
            return id_rosliny;
        }

        int daj_id_kwiaciarni()
        {
            return id_kwiaciarni;
        }

        int daj_liczbe_sztuk()
        {
            return liczba_sztuk;
        }
};

// Kwiacairnia
kwiaciarnia tk[100];
int liczba_kwiaciarnia=0;
int liczba_kwiaciarnia1=0;
string adres_k;
int id_k;
int id_kwiaciarni;
string adres_kwiaciarni;
// Kwiat
kwiat tr[100];
int liczba_kwiat=0;
int liczba_kwiat1=0;
string nazwa_r;
string typ_r;
int id_r;
// Stan
int ilosc;
stan ts[100];
int liczba_stan=0;
int liczba_stan1=0;


void dodaj_kwiaciarnie()
{
    cout<<endl<<"Podaj id kwiaciarni: ";
    cin>>id_kwiaciarni;
    cout<<endl<<"Podaj adres kwiaciarni ";
    cin>>adres_kwiaciarni;
    system("cls");
    cout<<"Dane wprowadzono poprawnie."<<endl<<"Wprowadzone dane to: "<<id_kwiaciarni<<" "<<adres_kwiaciarni<<"."<<endl;

    kwiaciarnia tmp(id_kwiaciarni,adres_kwiaciarni);
 tk[liczba_kwiaciarnia]=tmp;
 liczba_kwiaciarnia++;

 ofstream dopliku2("kwiaciarnia.txt",ios_base::app);
 for(int i=liczba_kwiaciarnia1;i<liczba_kwiaciarnia;i++)
 {
  dopliku2<<tk[i].daj_id_kwiaciarni()<<" "<<tk[i].daj_adres_kwiaciarni()<<endl;
 }
 dopliku2.close();

    system("pause");
    system("cls");
    menu();
}

void dodaj_kwiat()
{
 liczba_kwiat1=liczba_kwiat;
 cout<<endl<<"podaj id rosliny: ";
 cin>>id_r;
 cout<<endl<<"podaj typ rosliny ";
 cin>>typ_r;
 cout<<endl<<"podaj nazwe rosliny ";
 cin>>nazwa_r;
 kwiat tmp(id_r,typ_r,nazwa_r);
 tr[liczba_kwiat]=tmp;
 liczba_kwiat++;

 ofstream dopliku("kwiat.txt",ios_base::app);
 for(int i=liczba_kwiat1;i<liczba_kwiat;i++)
 {
  dopliku<<tr[i].daj_id_rosliny()<<" "<<tr[i].daj_typ_rosliny()<<" "<<tr[i].daj_nazwe_rosliny()<<endl;
 }
 dopliku.close();

    system("pause");
    system("cls");
    menu();
}

void dodaj_stan()
{
 cout<<endl<<"podaj id kwiaciarni: ";
 cin>>id_k;
 cout<<endl<<"podaj id rosliny ";
 cin>>id_r;
 cout<<endl<<"podaj ilosc ";
 cin>>ilosc;
 stan tmp(id_k,id_r,ilosc);
 ts[liczba_stan]=tmp;
 liczba_stan++;

 ofstream dopliku3("stan.txt",ios_base::app);
 for(int i=liczba_stan1;i<liczba_stan;i++)
 {
  dopliku3<<ts[i].daj_id_kwiaciarni()<<" "<<ts[i].daj_id_rosliny()<<" "<<ts[i].daj_liczbe_sztuk()<<endl;
 }
 dopliku3.close();

 system("pause");
    system("cls");
    menu();
}

wyswietl_kwiaciarnie()
{
 for(int i=0;i<liczba_kwiaciarnia;i++)
 {
        cout<<"\nid kwiaciarni: "<<tk[i].daj_id_kwiaciarni()<<" ";
        cout<<"adres kwiaciarni: "<<tk[i].daj_adres_kwiaciarni();
 }
 cout<<endl;
 system("pause");
 system("cls");
 menu();
}

wyswietl_kwiat()
{
 for(int i=0;i<liczba_kwiat;i++)
 {
        cout<<endl<<"id rosliny: "<<tr[i].daj_id_rosliny()<<" ";
        cout<<"typ: "<<tr[i].daj_typ_rosliny()<<" ";
        cout<<"nazwa: "<<tr[i].daj_nazwe_rosliny();
 }
 cout<<endl;
 system("pause");
 system("cls");
 menu();
}

wyswietl_stan()
{
 for(int i=0;i<liczba_stan;i++)
 {
  cout<<endl<<"Id kwiaciarni: "<<ts[i].daj_id_kwiaciarni()<<" ";
  cout<<"Id rosliny: "<<ts[i].daj_id_rosliny()<<" ";
  cout<<"Ilosc: "<<ts[i].daj_liczbe_sztuk();
 }
 cout<<endl;
 system("pause");
 system("cls");
 menu();
}

void zadanie_2_a()
{
 string typy[100];
 string nazwa_rosliny;

 cout<<"Tresc zadania:"<<endl;
 cout<<"Wyswietl liste dostepnych typow dla rosliny (kwiatu) o wskazanej nazwie."<<endl<<endl;
 cout<<"Podaj nazwe rosliny: "<<endl;
 cin>>nazwa_rosliny;

 for(int i=0; i<100; ++i)
 {
        if(nazwa_rosliny==tr[i].daj_nazwe_rosliny())
        {
            typy[i]=tr[i].daj_typ_rosliny();
        }
        else
        {
            typy[i]="0";
        }
 }

 cout<<"Lista typow rosliny dla "<<nazwa_rosliny<<":"<<endl;

 for (int i=0; i<100; ++i)
 {
  if(typy[i]!="0")
  {
            cout<<typy[i]<<endl;
  }
 }

 system("pause");
 system("cls");
 menu();
}

void zadanie_2_b()
{
 float wartosc=0;
 int ididr=0;
 int ididkw=0;
 string nazwa;

 cout<<"Tresc zadania:"<<endl;
 cout<<"Wyswietl liczbe sztuk doniczkowych roz znajdujacych sie w kwiaciarni o danym adresie."<<endl<<endl;
 cout<<"Podaj adres kwiaciarni aby  pokazac ilosc roz doniczkowych :";
 cin>>nazwa;

 for(int i=0;i<liczba_kwiaciarnia;i++)
 {
  if(tk[i].daj_adres_kwiaciarni()==nazwa)
  {
   ididkw=tk[i].daj_id_kwiaciarni();
  }
 }

  for(int i=0;i<liczba_kwiat;i++)
 {
     if((tr[i].daj_typ_rosliny()=="doniczkowa")&&(tr[i].daj_nazwe_rosliny()=="roza"))
  {
       ididr=tr[i].daj_id_rosliny();
      for(int j=0;j<liczba_stan;j++)
      {
       if((ts[j].daj_id_kwiaciarni()==ididkw)&&(ts[j].daj_id_rosliny()==ididr))
          {
     wartosc=wartosc+ts[j].daj_liczbe_sztuk();
    }
         }
  }
 }
 cout<<"W kwiaciarni o adresie: "<<nazwa<<" znajduje sie: "<<wartosc<<" sztuk roz doniczkowych"<<endl;
 system("pause");
 system("cls");
 menu();
}

void zadanie_2_c()
{
 cout<<"Tresc zadania:"<<endl;
 cout<<"Wyswietl liste kwiaciarni (adresy) posiadajacych w sprzedazy przynajmniej jedna wiazanke z roslin o podanej nazwie."<<endl;
 cout<<endl<<endl;
 int ididr=0;
 int ididkw=0;
 string nazwa_rosliny;
 cout<<"Podaj nazwe rosliny:"<<endl;
 cin>>nazwa_rosliny;

 for(int i=0;i<liczba_kwiat;i++)
 {
  if((tr[i].daj_typ_rosliny()=="wiazanka")&&(tr[i].daj_nazwe_rosliny()==nazwa_rosliny))
  {
   ididr=tr[i].daj_id_rosliny();
   for(int j=0;j<liczba_stan;j++)
   {
    if((ts[j].daj_id_rosliny()==ididr)&&(ts[j].daj_liczbe_sztuk()>=1))
    {
     ididkw=ts[j].daj_id_kwiaciarni();
     for(int k=0;k<liczba_kwiaciarnia;k++)
     {
      if(tk[k].daj_id_kwiaciarni()==ididkw)
      {
       cout<<tk[k].daj_adres_kwiaciarni()<<" "<<endl;
      }
     }
    }
   }
  }
 }
 cout<<endl;
 system("pause");
 system("cls");
 menu();
}

void odczytywanie_danych()
{
    int s;
    cout << "\n +----------------------------+"<< endl;
    cout << " |     Program Kwiaciarnia    |"<< endl;
    cout << " |     Odczytywanie danych    |"<< endl;
    cout << " |                            |"<< endl;
    cout << " |  1 - Wyswietl kwiacairnie  |"<< endl;
    cout << " |  2 - Wyswietl kwiaty       |"<< endl;
    cout << " |  3 - Wyswietl stan         |"<< endl;
    cout << " |  4 - Zadanie 2 a)          |"<< endl;
    cout << " |  5 - Zadanie 2 b)          |"<< endl;
    cout << " |  6 - Zadanie 2 c)          |"<< endl;
    cout << " |  7 - Cofnij                |"<< endl;
    cout << " +----------------------------+"<< endl;

    cin >> s;
    system("cls");
    switch(s)
    {
        case 1:
            wyswietl_kwiaciarnie();
            break;

        case 2:
            wyswietl_kwiat();
            break;

        case 3:
            wyswietl_stan();
            break;

        case 4:
            zadanie_2_a();
            break;

        case 5:
            zadanie_2_b();
            break;

        case 6:
            zadanie_2_c();
            break;

        case 7:
            menu();
            break;
    }
}

void wprowadzanie_danych()
{
    int s;
    cout << "\n +----------------------------+"<< endl;
    cout << " |     Program Kwiaciarnia    |"<< endl;
    cout << " |     Wprowadzanie danych    |"<< endl;
    cout << " |                            |"<< endl;
    cout << " |  1 - Dodaj kwiaciarnie     |"<< endl;
    cout << " |  2 - Dodaj kwiat           |"<< endl;
    cout << " |  3 - Dodaj stan            |"<< endl;
    cout << " |  4 - Cofnij                |"<< endl;
    cout << " +----------------------------+"<< endl;
    cin >> s;
    system("cls");
    switch(s)
    {
        case 1:
            dodaj_kwiaciarnie();
            break;

        case 2:
            dodaj_kwiat();
            break;

        case 3:
            dodaj_stan();

        case 4:
            menu();
            break;
    }
}

void menu()
{
    int s;
    cout << endl;
    cout << " +----------------------------+"<< endl;
    cout << " |     Program Kwiaciarnia    |"<< endl;
    cout << " |                            |"<< endl;
    cout << " |  1 - Wprowadzanie danych   |"<< endl;
    cout << " |  2 - Odczytywanie danych   |"<< endl;
    cout << " |  3 - Koniec                |"<< endl;
    cout << " +----------------------------+"<< endl;
    cin >> s;
    system("cls");
    switch(s)
    {
        case 1:
            wprowadzanie_danych();
            break;

        case 2:
            odczytywanie_danych();
            break;

        case 3:
            system("exit");
            break;
    }
}

int main()
{
 ifstream zpliku("kwiat.txt");

 for(;;)
 {
  if(!(zpliku>>id_r))
  break;
  zpliku>>typ_r>>nazwa_r;
  kwiat tmp(id_r,typ_r,nazwa_r);
  tr[liczba_kwiat]=tmp;
  liczba_kwiat++;
 }

 ifstream zpliku2("kwiaciarnia.txt");
 for(;;)
    {
  if(!(zpliku2>>id_k))
  break;
  zpliku2>>adres_k;
  kwiaciarnia tmp(id_k,adres_k);
  tk[liczba_kwiaciarnia]=tmp;
  liczba_kwiaciarnia++;
 }

 ifstream zpliku3("stan.txt");
 for(;;)
 {
  if(!(zpliku3>>id_k))
  break;
  zpliku3>>id_r>>ilosc;
  stan tmp(id_k,id_r,ilosc);
  ts[liczba_stan]=tmp;
  liczba_stan++;
 }

 menu();
}



Zawartość pliku kwiaciarnia.txt:
1 Warszawska_5
2 Al_Tysiaclecia_43
3 Dzialkowa_27
4 Klemensiewicza_54
5 Osiedlowa_102
6 Wrzosowa_91
7 Wolska_33
8 Lesna_1
9 Bajkowa_56
10 Hallera_8
11 Sarenki_84
12 Mar_Jozefa_Pildsuckiego_27
13 Zielona_3
14 Gorzysta_20
15 Husarska_37
16 Domaniewska_76
17 Adama_Mickiewicza_10
18 Sosnowa_40
19 Podlesna_39
20 Sportowa_83



Zawartość pliku kwiat.txt:
1 wiazanka roza
2 doniczkowa storczyk
3 bukiet tulipan
4 doniczkowa fiolki
5 doniczkowa hiacynt
6 bukiet niezapominajka
7 doniczkowa roza
8 bukiet chryzantema
9 doniczkowa kaktus
10 wiazanka chryzantema
11 bukiet mlecz
12 doniczkowa krokus
13 wiazanka lilia
14 wiazanka krokus
15 doniczkowa pelargonia
16 wiazanka tulipan
17 bukiet lilia
18 wiazanka kalia
19 doniczkowa zonkil
20 bukiet roza
21 do_zasadzenia krokus
22 ciete_pojedyncze roza
23 do_zasadzenia kaktus
24 do_zasadzenia tulipan
25 do_zasadzenia fiolki
26 do_zasadzenia storczyk
27 ciete_pojedyncze mlecz
28 do_zasadzenia chryzantema
29 do_zasadzenia roza
30 ciete_pojedyncze storczyk




Zawartość pliku stan.txt:
1 1 33
1 1 33
1 15 2
1 14 63
2 17 32
2 11 43
2 6 23
2 1 43
2 13 21
2 8 23
5 2 53
3 6 23
2 8 34
5 12 63
1 20 12
6 20 43
5 3 63
2 1 63
5 3 53
15 16 44
18 13 74
20 12 63
12 6 23
3 8 23
4 9 43
7 6 34
1 20 5
10 4 32
13 6 32
17 10 23
1 7 43
15 1 11
17 1 10
1 1 2
6 1 7

Brak komentarzy:

Prześlij komentarz