Elektronika i Telekomunikacja POLSL
Forum Elektroników Wydziału AEI Politechniki Śląskiej
FAQ  ::  Szukaj  ::  Użytkownicy  ::  Grupy  ::  Galerie  ::  Rejestracja  ::  Profil  ::  Zaloguj się, by sprawdzić wiadomości  ::  Zaloguj


Magazyn w/g Kłosowskiego

 
Napisz nowy temat   Odpowiedz do tematu    Forum Elektronika i Telekomunikacja POLSL Strona Główna » Semestr II / PPK
Zobacz poprzedni temat :: Zobacz następny temat  
Autor Wiadomość
rob
Chuda Jedynka



Dołączył: 15 Cze 2007
Posty: 145
Przeczytał: 0 tematów


PostWysłany: Pią 20:13, 30 Lis 2007    Temat postu: Magazyn w/g Kłosowskiego

Temat był mniej więcej: Napisać dwie klasy, jedna do przechowywania informacji o produkcie (nazwa, oznaczenie kodowe, cena i termin ważności).
Druga klasa - magazyn, zawierająca metody do: dodawania, usuwania, inwentaryzacji, obliczania wartości wszystkich produktów, wyświetlania przeterminowanych produktów.
Moje rozwiązanie (rzecz jasna tylko do celów edukacyjnych Very Happy ):
Kod:
#include<iostream>
#include<string>

/****************************************************************************/
/* Prezentacja klas CProdukt i CMagazyn, metod do dodawania, usuwania itP.  */
/*                                                                          */
/* Copyright Robert Krolak 2007                                             */
/****************************************************************************/


using namespace std;

class CProdukt
{
public:
   int iWaznosc;
   float fCena;
   string sNazwa, sOznaczenie;
};

class CMagazyn
{
public:
   CProdukt * *CPZawartosc;
   CMagazyn(int);      // Tworzymy magazyn o okreslonym rozmiarze
   ~CMagazyn();
   bool Dodaj(CProdukt *produkt);
   bool Usun(CProdukt *produkt);
   void Inwentaryzuj(void);   // wyjscie od razu na interface
   float Wartosc(void);
   CProdukt * Przeterminowane(void);    // Wyjscie od razu na interface
private:
   int iRozmiar, iZajetych;
};

int main(int argc, char* argv[])
{
   CMagazyn CMSklad(10);
   CProdukt * CPnowy;
   CProdukt * CPdousuwania;

   CPnowy=new CProdukt;
   CPnowy->iWaznosc=15;
   CPnowy->fCena=5.5;
   CPnowy->sNazwa="Zeszyt A4";
   CPnowy->sOznaczenie="ZA4-1";
   CMSklad.Dodaj(CPnowy);

   CPnowy=new CProdukt;
   CPnowy->iWaznosc=20;
   CPnowy->fCena=10;
   CPnowy->sNazwa="Organizer";
   CPnowy->sOznaczenie="OrD-2008";
   CMSklad.Dodaj(CPnowy);
   CPdousuwania=CPnowy;

   CPnowy=new CProdukt;
   CPnowy->iWaznosc=15;
   CPnowy->fCena=5.5;
   CPnowy->sNazwa="Zeszyt A4";
   CPnowy->sOznaczenie="ZA4-1";
   CMSklad.Dodaj(CPnowy);

   CPnowy=new CProdukt;
   CPnowy->iWaznosc=15;
   CPnowy->fCena=5.5;
   CPnowy->sNazwa="Zeszyt A4";
   CPnowy->sOznaczenie="ZA4-1";
   CMSklad.Dodaj(CPnowy);

   CPnowy=new CProdukt;
   CPnowy->iWaznosc=20;
   CPnowy->fCena=10;
   CPnowy->sNazwa="Organizer";
   CPnowy->sOznaczenie="OrD-2008";
   CMSklad.Dodaj(CPnowy);

   CPnowy=new CProdukt;
   CPnowy->iWaznosc=-100;
   CPnowy->fCena=10;
   CPnowy->sNazwa="Jajo kurze";
   CPnowy->sOznaczenie="JKM-1";
   CMSklad.Dodaj(CPnowy);

    CMSklad.Inwentaryzuj();
    CMSklad.Usun(CPdousuwania);
    CMSklad.Inwentaryzuj();
   
    if(CPdousuwania=CMSklad.Przeterminowane())
        CMSklad.Usun(CPdousuwania);
    CMSklad.Inwentaryzuj();

   system("PAUSE");
   return 0;
}

CMagazyn::CMagazyn(int rozmiar):iRozmiar(rozmiar)
{
   CPZawartosc=new CProdukt*[rozmiar];    // Nowy sklad
   iZajetych=0;
}

CMagazyn::~CMagazyn()
{
    delete[] CPZawartosc;
}

bool CMagazyn::Dodaj(CProdukt *produkt)
{
   if(iZajetych<iRozmiar) // Jesli jest miejsce
   {
      CPZawartosc[iZajetych++]=produkt; // Dopisz produkt do listy
      return true;
   }
   else
      return false; // Nie dalo sie dopisac - braklo miejsca w magazynie
}

bool CMagazyn::Usun(CProdukt *produkt)
{
   for(int index=0;index<iZajetych;index++)
   {
      if(CPZawartosc[index]==produkt)
      {
            delete CPZawartosc[index];
            for(;index<iZajetych;index++)   // Przesuwanie pozostalych elementow, by zalatac dziure po usunietym
                CPZawartosc[index]=CPZawartosc[index+1];
            iZajetych--;
            return true;    // Poprawnie usunieto produkt.
      }
   }
   return false;          // Nie mozna usunac - produkt nie istnieje.
}

void CMagazyn::Inwentaryzuj(void)
{
    if(iZajetych)
    {
        cout<<"inwentaryzuje, czekaj...\n";
       string * Nazwy=new string[iZajetych];  // Podreczn alista produktow i ich ilosci
        int * Ilosc=new int[iZajetych];
        int iIloscTypow=0;
        float fWartosc=0;
       for(int tmp=0;tmp<iZajetych;tmp++) // Dla kazdego produktu w magazynie
       {
            CProdukt * CPprodukt=CPZawartosc[tmp];  // aktualnie sprawdzany produkt
            bool koniec=false;
            for(int index=0;(index<iIloscTypow)&&(!koniec);index++) // sprawdzam czy juz taki sie pojawil
            {
                if(Nazwy[index]==CPprodukt->sNazwa)         // jesli tak to tylko zwiekszam ilosc sztuk
                {
                    Ilosc[index]++;
                    koniec=true;
                }
            }
            if(!koniec)
            {
                Ilosc[iIloscTypow]=1;           // jesli tego produktu jeszcze nie bylo to umiescic go na podrecznej liscie
                Nazwy[iIloscTypow]=CPprodukt->sNazwa;
                iIloscTypow++;
            }
            fWartosc+=CPprodukt->fCena; // Przy okazji zsumuje wartosc wszystkich produktow
       }
       cout<<"W magazynie jest "<<iZajetych<<" produkt[-y/-ow], na laczna wartosc: "<<fWartosc<<" W tym:\n[nazwa]\t\t[ilosc]\n";
       for(int index=0;index<iIloscTypow;index++)
            cout<<Nazwy[index]<<"\t"<<Ilosc[index]<<endl;   // Wyswietlam zgromadzone dane
        cout<<"\nKoniec inwentaryzacji.\n";
       delete[] Nazwy;
       delete[] Ilosc;
    }
    else
        cout<<"Magazyn jest pusty.\n";
}

float CMagazyn::Wartosc(void)
{
    float fWartosc=0;
    for(int index=0;index<iZajetych;index++)
        fWartosc+=CPZawartosc[index]->fCena;
    return fWartosc;
}

CProdukt * CMagazyn::Przeterminowane(void)
{
    CProdukt * Pprzeterminowany=NULL;
    cout<<"Szukam przeterminowanych produktow...\n";
    for(int index=0;index<iZajetych;index++)
    {
        if(CPZawartosc[index]->iWaznosc<0)
        {
            cout<<CPZawartosc[index]->sNazwa<<endl;
            if(!Pprzeterminowany)
                Pprzeterminowany=CPZawartosc[index];
        }
    }
    cout<<"koniec.\n";
    // To dolozylem od siebie:
    return Pprzeterminowany;    // zwracam wskaznik do pierwszego znalezionego przeterminowanego produktu
}
Powrót do góry
Zobacz profil autora
staniol
ELEKTRONIK - on już ciągnie druty



Dołączył: 12 Paź 2006
Posty: 387
Przeczytał: 0 tematów

Skąd: Piekary Śl.

PostWysłany: Sob 4:19, 01 Gru 2007    Temat postu:

tak sobie na to popatrzylem i dochodze do wniosku ze albo ci sie bardzo nudzi w domu albo poprostu kochasz programowanie :] pozdro Wink
Powrót do góry
Zobacz profil autora
rob
Chuda Jedynka



Dołączył: 15 Cze 2007
Posty: 145
Przeczytał: 0 tematów


PostWysłany: Sob 10:50, 01 Gru 2007    Temat postu:

Na imprezę nie idę bo chory jestem - przeziębiłem się Sad Jak mam leżeć w łóżku to mnie k0rw1c4 strzela. Poza tym kumpel mnie prosił.
No i w sumie lubię C++ Very Happy
Powrót do góry
Zobacz profil autora
Gość







PostWysłany: Sob 12:17, 01 Gru 2007    Temat postu:

R3$P3cT Cool
Powrót do góry
Ice
ELEKTRONIK - on już ciągnie druty



Dołączył: 03 Lis 2006
Posty: 301
Przeczytał: 0 tematów

Skąd: Świętochłowice

PostWysłany: Sob 12:36, 01 Gru 2007    Temat postu:

to je koniec ;]
Powrót do góry
Zobacz profil autora
Wyświetl posty z ostatnich:   
Napisz nowy temat   Odpowiedz do tematu    Forum Elektronika i Telekomunikacja POLSL Strona Główna » Semestr II / PPK Wszystkie czasy w strefie CET (Europa)
Strona 1 z 1

 
Skocz do:  
Nie możesz pisać nowych tematów
Nie możesz odpowiadać w tematach
Nie możesz zmieniać swoich postów
Nie możesz usuwać swoich postów
Nie możesz głosować w ankietach
  ::  
fora.pl - załóż własne forum dyskusyjne za darmo
Powered by phpBB © 2001, 2005 phpBB Group   ::   template subEarth by Kisioł. Programosy   ::  
Regulamin