Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //vkluceni biblioteki
- #include <iostream> // za protok na podatoci(vlez/izlez)
- #include <fstream> // za rabota so datoteki
- #include <string> // za koristeni na stringovi
- #include <iomanip> // za setw i setprecision
- #include <cstdlib> // standardnata biblioteka
- #define MAX 100
- using namespace std;
- // struktura za informaciite za sekoj artikal
- struct zapis
- {
- int sifra;
- string opis;
- float edinecnacena;
- int vleznakolicina;
- int izleznakolicina;
- float danocnastapka;
- float iznos;
- int datum;
- };
- // funkcija koja vrsi validacija na vneseniot datum
- bool proveridata(int data)
- {
- int year=data/10000;
- int month=(data/100)%100;
- int day=data%100;
- if(day < 1 || day > 31)
- return false;
- else
- if(month < 1 || month > 12)
- return false;
- if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31)
- return false;
- else if ((month == 2) && (year % 4 == 0) && day > 29)
- return false;
- else if ((month == 2) && (year % 4 != 0) && day > 28)
- return false;
- return true;
- }
- // funkcija za vnesuvanje na artikli koga stavkata e vlez
- void vlez(struct zapis artikal[], int i)
- {
- // vnesuvanje i validacija na sifra
- do
- {
- cout<<"Vnesi sifra na artikal :";
- cin>>artikal[i].sifra;
- if(artikal[i].sifra<1 || artikal[i].sifra>99999)
- cout<<"Vnesovte nevalidna sifra"<<endl;
- }while(artikal[i].sifra<1 || artikal[i].sifra>99999);
- // vnesuvanje i validacija na opis na artikal
- do
- {
- cout<<"Vnesete opis na artikal (Vnesete . za kraj) ";
- getline(cin,artikal[i].opis,'.');
- if(artikal[i].opis.size()>30)
- cout<<"Vnesovte opis podolg od 30 karakteri"<<endl;;
- }while(artikal[i].opis.size()>30);
- // vnesuvanje na edinecna cena
- cout<<"Vnesi edinecna cena ";
- cin>>artikal[i].edinecnacena;
- // vnesuvanje i validacija na kolicina
- do
- {
- cout<<"Vnesi vlezna kolicina na artikal :";
- cin>>artikal[i].vleznakolicina;
- if(artikal[i].vleznakolicina<0 || artikal[i].vleznakolicina>99999)
- cout<<"Vnesovte nevalidna kolicina"<<endl;
- }while(artikal[i].vleznakolicina<0 || artikal[i].vleznakolicina>99999);
- // koga stavkata e vlez - izlezna kolicina i danocna stapka se 0
- artikal[i].izleznakolicina=0;
- artikal[i].danocnastapka=0;
- // povikuvanje na funkcijata proveridata pri vnesuvanje na datum
- do
- {
- cout<<"Vnesi datum vo format GGMMDD :";
- cin>>artikal[i].datum;
- if(!proveridata(artikal[i].datum))
- cout<<"Nevaliden datum ";
- }while(!proveridata(artikal[i].datum));
- }
- // funkcija za vnesuvanje na artikli koga stavkata e izlez
- void izlez(struct zapis artikal[], int i)
- {
- //vnesuvanje i validacija na sifra
- do
- {
- cout<<"Vnesi sifra na artikal :";
- cin>>artikal[i].sifra;
- if(artikal[i].sifra<1 || artikal[i].sifra>99999)
- cout<<"Vnesovte nevalidna sifra"<<endl;
- }while(artikal[i].sifra<1 || artikal[i].sifra>99999);
- // vnesuvanje i validacija na opis na artikal
- do
- {
- cout<<"Vnesete opis na artikal (Vnesete . za kraj) ";
- getline(cin,artikal[i].opis,'.');
- if(artikal[i].opis.size()>30)
- cout<<"Vnesovte opis podolg od 30 karakteri"<<endl;;
- }while(artikal[i].opis.size()>30);
- // vnesuvanje na edinecna cena
- cout<<"Vnesi edinecna cena ";
- cin>>artikal[i].edinecnacena;
- // koga stavkata e izlez - vlezna kolicina e 0
- artikal[i].vleznakolicina=0;
- // vnesuvanje i validacija na izlezna kolicina
- do
- {
- cout<<"Vnesi izlezna kolicina na artikal :";
- cin>>artikal[i].izleznakolicina;
- if(artikal[i].izleznakolicina<1 || artikal[i].izleznakolicina>99999)
- cout<<"Vnesovte nevalidna kolicina"<<endl;
- }while(artikal[i].izleznakolicina<1 || artikal[i].izleznakolicina>99999);
- // vnesuvanje na danocna stapka
- cout<<"Vnesi danocna stapka :";
- cin>>artikal[i].danocnastapka;
- // povikuvanje na funkcijata proveridata pri vnesuvanje na datum
- do
- {
- cout<<"Vnesi datum vo format GGMMDD :";
- cin>>artikal[i].datum;
- if(!proveridata(artikal[i].datum))
- cout<<"Nevaliden datum ";
- }while(!proveridata(artikal[i].datum));
- }
- // funkcija za sortiranje na vnesenite podatoci
- void sort(struct zapis artikal[],int n)
- {
- for(int i=0;i<n;i++)
- {
- if(artikal[i].datum<=191231)
- artikal[i].datum+=20000000;
- else
- artikal[i].datum+=19000000;
- }
- struct zapis pom;
- for(int i=0;i<n;i++)
- {
- for(int j=0;j<n-i-1;j++)
- if(artikal[j].datum>=artikal[j+1].datum)
- {
- pom=artikal[j];
- artikal[j]=artikal[j+1];
- artikal[j+1]=pom;
- }
- }
- for(int i=0;i<n;i++)
- {
- if(artikal[i].datum>20000000)
- artikal[i].datum-=20000000;
- else
- artikal[i].datum-=19000000;
- }
- }
- int main ()
- {
- struct zapis artikal[MAX]; // deklariranje na niza od strukturi artikal
- int stavka,l; // deklaracija na promenlivi stavka vo koja ke se smesti izborot na korisnikot i l-brojac za vneseni artikli
- for (int i=0;i<100;i++)
- {
- cout<<"Vnesete 1 za vlez, 2 za izlez ili 3 za kraj :";
- cin>>stavka;
- if(stavka==1)
- {
- vlez(artikal,i);
- artikal[i].iznos=artikal[i].vleznakolicina*artikal[i].edinecnacena;}
- else
- if(stavka==2)
- {
- izlez(artikal,i);
- artikal[i].iznos=(artikal[i].edinecnacena-(artikal[i].edinecnacena*artikal[i].danocnastapka)/100)*artikal[i].izleznakolicina;}
- else
- if(stavka==3)
- {
- l=i;
- break;}
- }
- ofstream out;
- out.open("vnos.dat"); // otvaranje na datotekata vnos.dat
- for(int i=0;i<l;i++) // pecatenje na site vneseni artikli
- {
- out<<setw(5)<<artikal[i].sifra<<" ";
- out<<setw(30)<<artikal[i].opis<<" ";
- out<<fixed<<setw(12)<<setprecision(2)<<artikal[i].edinecnacena<<" ";
- out<<setw(6)<<artikal[i].vleznakolicina<<" ";
- out<<setw(6)<<artikal[i].izleznakolicina<<" ";
- out<<fixed<<setw(10)<<setprecision(2)<<artikal[i].danocnastapka<<" ";
- out<<fixed<<setw(15)<<setprecision(2)<<artikal[i].iznos<<" ";
- if(artikal[i].datum<1000)
- out<<setw(6)<<"000"<<artikal[i].datum<<" ";
- else
- if(artikal[i].datum<10000)
- out<<setw(6)<<"00"<<artikal[i].datum<<" ";
- else if(artikal[i].datum<100000)
- out<<setw(6)<<"0"<<artikal[i].datum<<" ";
- else out<<setw(6)<<artikal[i].datum<<" ";
- out<<endl;
- }
- out.close(); // zatvaranje na datotekata
- sort(artikal,l); // povikuvanje na funkcijata za sortiranje
- out.open("sort_vnos.dat"); // otvaranje na datoteka sort_vnos.dat
- for(int i=0;i<l;i++) // zapisuvanje na sortiranite podatoci po datum
- {
- out<<setw(5)<<artikal[i].sifra<<" ";
- out<<setw(30)<<artikal[i].opis<<" ";
- out<<fixed<<setw(12)<<setprecision(2)<<artikal[i].edinecnacena<<" ";
- out<<setw(6)<<artikal[i].vleznakolicina<<" ";
- out<<setw(6)<<artikal[i].izleznakolicina<<" ";
- out<<fixed<<setw(10)<<setprecision(2)<<artikal[i].danocnastapka<<" ";
- out<<fixed<<setw(15)<<setprecision(2)<<artikal[i].iznos<<" ";
- if(artikal[i].datum<1000)
- out<<setw(6)<<"000"<<artikal[i].datum<<" ";
- else
- if(artikal[i].datum<10000)
- out<<setw(6)<<"00"<<artikal[i].datum<<" ";
- else if(artikal[i].datum<100000)
- out<<setw(6)<<"0"<<artikal[i].datum<<" ";
- else out<<setw(6)<<artikal[i].datum<<" ";
- out<<endl;
- }
- out.close(); // zatvaranje na datotekata
- int n=l; // brojot na artikli se kopira vo druga promenliva za ponatamosna upotreba
- int sifri[l]; // deklariranje na niza za sifrite na artiklite
- for(int i=0;i<l;i++)
- {
- sifri[i]=artikal[i].sifra;}
- // otfrlanje na identicnite sifri od nizata
- for(int i=0;i<l;++i)
- for(int j=i+1;j<l;)
- {
- if(sifri[i]==sifri[j])
- {
- for(int k=j;k<l-1;++k)
- sifri[k]=sifri[k+1];
- --l;
- }
- else
- ++j;
- }
- int vlezen[l],izlezen[l],profit[l]; // deklariranje na nizi vo koi ke se cuvaat vlezniot iznos, izlezniot iznos i profitot za sekoja sifra
- float vkupnoizlezen=0,vkupnoprofit=0; // deklariranje na promenlivi vo koi ke se vrsat presmetki za vkupniot prihod i profit na celiot magacin
- for(int i=0;i<l;i++) // suma za vlezniot iznos , izlezniot iznos i profitot
- {
- vlezen[i]=0;
- izlezen[i]=0;
- profit[i]=0;
- for(int j=0;j<n;j++)
- {
- if(sifri[i]==artikal[j].sifra)
- {
- if(artikal[j].izleznakolicina==0)
- vlezen[i]+=artikal[j].iznos;
- else
- izlezen[i]+=artikal[j].iznos;
- }
- }
- profit[i]=izlezen[i]-vlezen[i];
- }
- for(int i=0;i<l;i++) // presmetuvanje na vkupniot izlezen iznos i profitot na cel magacin
- {
- vkupnoizlezen+=izlezen[i];
- vkupnoprofit+=profit[i];
- }
- out.open("prihodi.dat"); // otvaranje na datoteka prihodi.dat i pecatenje na izlezniot iznos i profitot za sekoj artikal kako i za celiot magacin
- out<<setw(20)<<"Sifra na produkt"<<setw(15)<<"Izlezen iznos"<<setw(15)<<"Profit"<<endl;
- for(int i=0;i<l;i++)
- out<<setw(20)<<sifri[i]<<setw(15)<<izlezen[i]<<setw(15)<<profit[i]<<endl;
- out<<setw(20)<<"Cel magacin"<<setw(15)<<vkupnoizlezen<<setw(15)<<vkupnoprofit<<endl;
- out.close(); // zatvaranje na datotekata
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement