Ć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 kadej 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 kadej 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 kadej rybki o 10 (naley uwzglŒdni¢ niemono¹¢
// wyzdrowienia zdechªej rybki)
void KupRybke (TAkwarium &akw);//wczytuje dane o nowej rybce na miejsce pierwszej zdechªej rybki
// (jeeli 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();
}
|