`
KURSY:



Ćwiczenia z C++

Program "Akwarium"

		
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
#include <string>
#include <conio.h>
#pragma hdrstop;

using namespace std;
//----------------------------------------------------------------------------------------
const int nmax=100;
struct TRybka
{ string nazwa;
int zdrowie;//ma wartoś od 0 do 100, przy czym 0 oznacza że rybka zdechła
};

struct TAkwarium
{ int ilosc; //ilośc rybek w akwarium
TRybka akwarium[nmax]; //tablica rybek
};

void ZalozAkwarium (TAkwarium &akw);//wczytuje dane o rybkach do akwarium (każda rybka mana
	// pocz¥tku zdrowie równe 100)
void PodajStanAkw (TAkwarium akw);//wy¹wietla dane o rybkach znajduj¥cych siŒ w akwarium
void Choroba (int wspChoroby, TAkwarium &akw);//zmniejsza zdrowie kadej rybki o 10, a nastŒpnie
	// dla losowo wybranej liczby rybek, losowo wybranym rybkom zmniejsza ponownie zdrowie o 10
void CiezkaChoroba (TAkwarium &akw);//zmniejsza zdrowie kadej rybki o 50, a nastŒpnie dla losowo
	// wybranej liczby rybek, losowo wybranym rybkom zmniejsza ponownie zdrowie do 0 (rybki zdychaj¥);
void PodajLek (TAkwarium &akw);//zwiŒksza zdrowie kadej rybki o 10 (naley uwzglŒdni¢ niemono¹¢
	// wyzdrowienia zdechªej rybki)
void KupRybke (TAkwarium &akw);//wczytuje dane o nowej rybce na miejsce pierwszej zdechªej rybki
	// (jeeli wszystkie rybki s¥ zdrowe, funkcja wy¹wietla odpowiedni komunikat)

void wczytaj(TAkwarium &akw);
void zapisz(TAkwarium akw);
void about();
//--------------------------MAIN----------------------------------------------------------
int main()
{
    TAkwarium testowe;
    about();
    
     enum menu {koniec, zaloz, stan, choroba, lek, kup, wczyt, zap};
     menu wybor;
     int *X;
     X=new int;
     for(;;)
     {
         cout<<"wybierz dzialanie:\n"
             <<"1 "<<right<<setw(24)<<setfill('_')<<" zaloz akwarium\n"
             <<"2 "<<right<<setw(24)<<setfill('_')<<" podaj stan akwarium\n"
             <<"3 "<<right<<setw(24)<<setfill('_')<<" choroba rybek\n"
             <<"4 "<<right<<setw(24)<<setfill('_')<<" podaj lek\n"
             <<"5 "<<right<<setw(24)<<setfill('_')<<" dokup rybke\n"
             <<"6 "<<right<<setw(24)<<setfill('_')<<" wczytaj z pliku\n"
             <<"7 "<<right<<setw(24)<<setfill('_')<<" zapisz do pliku\n"
             <<"0 "<<right<<setw(24)<<setfill('_')<<" zakoncz program\n";
         
        cout<<"Twoj wybor: ";
         cin>>*X;
         wybor=(menu)(*X);
         delete X;
         
         switch(wybor)
         {
                      case koniec: system("cls"); about(); return 0;
                      case zaloz: ZalozAkwarium(testowe); system("cls"); PodajStanAkw(testowe); break;
                      case stan: PodajStanAkw(testowe); break;
                      case choroba: cout<<"\nlekka czy ciezka? (wcisnij \"1 \"albo \"2\")"; int wsp;
                           do
                           {
                            cin>>wsp;
                            if(wsp<1||wsp>2)
                            cout<<"\nniewlasciwy wybor!";
                           }while(wsp<1||wsp>2);
                           Choroba(wsp, testowe); system("cls"); PodajStanAkw(testowe); break;
                      case lek: PodajLek(testowe); system("cls"); PodajStanAkw(testowe); break;
                      case kup: KupRybke(testowe); system("cls"); PodajStanAkw(testowe); break;
                      case wczyt: wczytaj(testowe); system("cls"); PodajStanAkw(testowe); break;
                      case zap: zapisz(testowe); system("cls"); PodajStanAkw(testowe); break;
                      default: cout<<"\nzly wybor :p\n";
         }
     }
}
//------------------------ZALOZ_AKWARIUM--------------------------------------------------
void ZalozAkwarium (TAkwarium &akw)
{
     do
     {
                   cout<<"\nPodaj, ile rybek ma byc w akwarium: ";
                   cin>>akw.ilosc;
                   if(akw.ilosc>nmax||akw.ilosc<1)
                   cout<<"\nminimum to 1 a maximum to "<<nmax<<" rybek.";
     }while(akw.ilosc>nmax||akw.ilosc<1);
     
     for(int i=0; i<akw.ilosc; i++)
     {
             cout<<"\nPodaj nazwe "<<i+1<<" rybki: ";
             cin>>akw.akwarium[i].nazwa;
             akw.akwarium[i].zdrowie=100;
     }
}
//-----------------------PODAJ_STAN_AKWARIUM----------------------------------------------
void PodajStanAkw (TAkwarium akw)
{
     int x=16;
     cout<<endl<<left<<setw(4)<<setfill(' ')<<"Nr"<<right
     <<setw(x)<<"Nazwa"<<right<<setw(13)<<"Zdrowie"<<endl;
     for(int i=0; i<akw.ilosc; i++)
     {
             if(akw.akwarium[i].zdrowie>0)
             {
              cout<<left<<setw(4)<<setfill('.')<<i+1<<right<<setw(x)
	      <<setfill('.')akw.akwarium[i].nazwa
                  <<right<<setw(12)<<akw.akwarium[i].zdrowie<<"%"<<endl;
             }
             else
             {
              cout<<left<<setw(4)<<setfill('.')<<i+1<<right<<setw(x)
	      <<setfill('.')<<akw.akwarium[i].nazwa
                  <<right<<setw(12)<<"zdechla"<<endl;
			  }
     }
}
//------------------------------CHOROBA---------------------------------------------------
void Choroba (int wspChoroby, TAkwarium &akw)
{
 	 int ilezyje=0;
 	 int Choroba1, Choroba2;
 	 
 	 if(wspChoroby==1)
 	 {
 	 Choroba1=10; Choroba2=10;
	 }
 	 
 	 if(wspChoroby==2)
	 {
	 Choroba1=50; Choroba2=100;
	 }
 	 
     for(int i=0; i<akw.ilosc; i++)
     {
             if(akw.akwarium[i].zdrowie>0)
              akw.akwarium[i].zdrowie-=Choroba1;
             if(akw.akwarium[i].zdrowie>0)
              ilezyje++;
	  }
     
     if(ilezyje>0)
     {
         srand (time(NULL));
         int lcr=rand()%ilezyje;
         int chore[nmax]={-1};       // zawiera numery rybek dotknietych choroba
         
         for(int j=lcr-1; j>=0; j--)
         {
    	  		 int ktora;     		// nr rybki, ktora zachoruje
    			 
    			 do  				//losuje zywa rybke, ktora ma zachorowac
    			 {
    				ktora=rand()%akw.ilosc; // losuje numer rybki
    	         	 }while(akw.akwarium[ktora].zdrowie<0); // dopoki nie jest to zywa rybka
    	  		 
    	  		 bool czypowt=false;                     
    	  		 
    			 do   	// sprawdza czy kolejna wylosowana ryba nie zostala wczesniej wylosowana
    	  		 {
    			  		czypowt=false; 
    			  		for(int k=lcr-1; k>=j; k--)
    	 				{
                           			while(ktora==chore[k])
    		  		       		{
                              				do
    			              			{
    			   	          			ktora=rand()%akw.ilosc;
    	                      				}while(akw.akwarium[ktora].zdrowie<0);
                        			}
    		 		    	}
          		 		
          		 		
    					for(int k=lcr-1; k>=j; k--)
    	 			    	{
    				  		 if(ktora==chore[k])
    				  		 czypowt=true;
    		 		    	}
    			 
    			 }while(czypowt==true);
    			 
			chore[j]=ktora;
         }
         
         for(int j=lcr-1; j>=0; j--)
         akw.akwarium[chore[j]].zdrowie-=Choroba2;
     }
     else
     {
     cout<<"\nWszystkie rybki zdechly!!!";
     getch();
     }    
}
//-----------------------------PODAJ_LEK--------------------------------------------------
void PodajLek (TAkwarium &akw)
{
 	 for(int i=0; i<akw.ilosc; i++)
     {
             if(akw.akwarium[i].zdrowie>0&&akw.akwarium[i].zdrowie<100)
              akw.akwarium[i].zdrowie+=10;
	  }
}
//-----------------------------KUP_RYBKE--------------------------------------------------
void KupRybke (TAkwarium &akw)
{
 	 for(int i=0; i<=akw.ilosc; i++)
     {
             if(i==akw.ilosc)
             {
             cout<<"\nZa malo miejsca w akwarium!\n";
             getch();
             break;
			 }
             
			 if(akw.akwarium[i].zdrowie<=0)
             {
	             cout<<"\nPodaj nazwe "<<i+1<<" rybki: ";
	             cin>>akw.akwarium[i].nazwa;
	             akw.akwarium[i].zdrowie=100;
	             break;
			 }
	  }
}
//--------------------------------WCZYTAJ-------------------------------------------------
void wczytaj(TAkwarium &akw)
{
     ifstream in;
     string nazwa;
     system("dir *.akw/p");
     cout<<"\nwybierz plik: ";
     cin>>nazwa;
     
     in.open(nazwa.c_str());
     if(!in)
     cout<<"\nBlad Pliku!";
     else
     for(int ile=0;in>>akw.akwarium[ile].nazwa>>akw.akwarium[ile].zdrowie;ile++)
     akw.ilosc=ile+1;
     
     in.close();
}
//-------------------------------ZAPISZ---------------------------------------------------
void zapisz(TAkwarium akw)
{
     ofstream out;
     string nazwa;
     cout<<"\npodaj nazwe pliku z rozszerzeniem .akw: ";
     cin>>nazwa;
     
     out.open(nazwa.c_str());
     if(!out)
     cout<<"\nBlad Pliku!";
     else
     for(int i=0;i<akw.ilosc;i++)
     out<<left<<setw(16)<<akw.akwarium[i].nazwa<<'\t'<<akw.akwarium[i].zdrowie<<endl;
}
//------------------------ABOUT-----------------------------------------------------------
void about()
{
    cout<<"*-----------------------------------------------*\n"
 		<<"|                AKWARIUM v0.99                 |\n"
 		<<"*-----------------------------------------------*\n"
 		<<endl<<endl<<"wcisnij dowolny klawisz aby kontynuowac..\n";
        
        getch();
}

		


Powrót do początku



© 2009 Bottombug
Darmowy hosting zapewnia PRV.pl : gimnazjum-rabka, ofazepuqak1, wrozkaamaranta, autobusymiejskie, teczowyzakatek
Dziel sie multimediami na Patrz.pl