Advertisement
Guest User

so komentari

a guest
Jan 21st, 2019
90
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.66 KB | None | 0 0
  1. //vkluceni biblioteki
  2. #include <iostream> // za protok na podatoci(vlez/izlez)
  3. #include <fstream> // za rabota so datoteki
  4. #include <string> // za koristeni na stringovi
  5. #include <iomanip> // za setw i setprecision
  6. #include <cstdlib> // standardnata biblioteka
  7. #define MAX 100
  8. using namespace std;
  9. // struktura za informaciite za sekoj artikal
  10. struct zapis
  11. {
  12. int sifra;
  13. string opis;
  14. float edinecnacena;
  15. int vleznakolicina;
  16. int izleznakolicina;
  17. float danocnastapka;
  18. float iznos;
  19. int datum;
  20. };
  21. // funkcija koja vrsi validacija na vneseniot datum
  22. bool proveridata(int data)
  23. {
  24. int year=data/10000;
  25. int month=(data/100)%100;
  26. int day=data%100;
  27.  
  28. if(day < 1 || day > 31)
  29. return false;
  30. else
  31. if(month < 1 || month > 12)
  32. return false;
  33.  
  34.  
  35. if ((month == 4 || month == 6 || month == 9 || month == 11) && day == 31)
  36. return false;
  37. else if ((month == 2) && (year % 4 == 0) && day > 29)
  38. return false;
  39.  
  40. else if ((month == 2) && (year % 4 != 0) && day > 28)
  41. return false;
  42. return true;
  43. }
  44. // funkcija za vnesuvanje na artikli koga stavkata e vlez
  45. void vlez(struct zapis artikal[], int i)
  46. {
  47. // vnesuvanje i validacija na sifra
  48. do
  49. {
  50. cout<<"Vnesi sifra na artikal :";
  51. cin>>artikal[i].sifra;
  52. if(artikal[i].sifra<1 || artikal[i].sifra>99999)
  53. cout<<"Vnesovte nevalidna sifra"<<endl;
  54. }while(artikal[i].sifra<1 || artikal[i].sifra>99999);
  55. // vnesuvanje i validacija na opis na artikal
  56. do
  57. {
  58. cout<<"Vnesete opis na artikal (Vnesete . za kraj) ";
  59. getline(cin,artikal[i].opis,'.');
  60. if(artikal[i].opis.size()>30)
  61. cout<<"Vnesovte opis podolg od 30 karakteri"<<endl;;
  62. }while(artikal[i].opis.size()>30);
  63. // vnesuvanje na edinecna cena
  64. cout<<"Vnesi edinecna cena ";
  65. cin>>artikal[i].edinecnacena;
  66. // vnesuvanje i validacija na kolicina
  67. do
  68. {
  69. cout<<"Vnesi vlezna kolicina na artikal :";
  70. cin>>artikal[i].vleznakolicina;
  71. if(artikal[i].vleznakolicina<0 || artikal[i].vleznakolicina>99999)
  72. cout<<"Vnesovte nevalidna kolicina"<<endl;
  73. }while(artikal[i].vleznakolicina<0 || artikal[i].vleznakolicina>99999);
  74. // koga stavkata e vlez - izlezna kolicina i danocna stapka se 0
  75. artikal[i].izleznakolicina=0;
  76. artikal[i].danocnastapka=0;
  77. // povikuvanje na funkcijata proveridata pri vnesuvanje na datum
  78. do
  79. {
  80. cout<<"Vnesi datum vo format GGMMDD :";
  81. cin>>artikal[i].datum;
  82. if(!proveridata(artikal[i].datum))
  83. cout<<"Nevaliden datum ";
  84. }while(!proveridata(artikal[i].datum));
  85.  
  86. }
  87. // funkcija za vnesuvanje na artikli koga stavkata e izlez
  88. void izlez(struct zapis artikal[], int i)
  89. {
  90. //vnesuvanje i validacija na sifra
  91. do
  92. {
  93. cout<<"Vnesi sifra na artikal :";
  94. cin>>artikal[i].sifra;
  95. if(artikal[i].sifra<1 || artikal[i].sifra>99999)
  96. cout<<"Vnesovte nevalidna sifra"<<endl;
  97. }while(artikal[i].sifra<1 || artikal[i].sifra>99999);
  98. // vnesuvanje i validacija na opis na artikal
  99. do
  100. {
  101. cout<<"Vnesete opis na artikal (Vnesete . za kraj) ";
  102. getline(cin,artikal[i].opis,'.');
  103. if(artikal[i].opis.size()>30)
  104. cout<<"Vnesovte opis podolg od 30 karakteri"<<endl;;
  105. }while(artikal[i].opis.size()>30);
  106. // vnesuvanje na edinecna cena
  107. cout<<"Vnesi edinecna cena ";
  108. cin>>artikal[i].edinecnacena;
  109. // koga stavkata e izlez - vlezna kolicina e 0
  110. artikal[i].vleznakolicina=0;
  111. // vnesuvanje i validacija na izlezna kolicina
  112. do
  113. {
  114. cout<<"Vnesi izlezna kolicina na artikal :";
  115. cin>>artikal[i].izleznakolicina;
  116. if(artikal[i].izleznakolicina<1 || artikal[i].izleznakolicina>99999)
  117. cout<<"Vnesovte nevalidna kolicina"<<endl;
  118. }while(artikal[i].izleznakolicina<1 || artikal[i].izleznakolicina>99999);
  119. // vnesuvanje na danocna stapka
  120. cout<<"Vnesi danocna stapka :";
  121. cin>>artikal[i].danocnastapka;
  122. // povikuvanje na funkcijata proveridata pri vnesuvanje na datum
  123. do
  124. {
  125. cout<<"Vnesi datum vo format GGMMDD :";
  126. cin>>artikal[i].datum;
  127. if(!proveridata(artikal[i].datum))
  128. cout<<"Nevaliden datum ";
  129. }while(!proveridata(artikal[i].datum));
  130. }
  131. // funkcija za sortiranje na vnesenite podatoci
  132. void sort(struct zapis artikal[],int n)
  133. {
  134. for(int i=0;i<n;i++)
  135. {
  136. if(artikal[i].datum<=191231)
  137. artikal[i].datum+=20000000;
  138. else
  139. artikal[i].datum+=19000000;
  140. }
  141. struct zapis pom;
  142. for(int i=0;i<n;i++)
  143. {
  144. for(int j=0;j<n-i-1;j++)
  145. if(artikal[j].datum>=artikal[j+1].datum)
  146. {
  147. pom=artikal[j];
  148. artikal[j]=artikal[j+1];
  149. artikal[j+1]=pom;
  150. }
  151. }
  152. for(int i=0;i<n;i++)
  153. {
  154. if(artikal[i].datum>20000000)
  155. artikal[i].datum-=20000000;
  156. else
  157. artikal[i].datum-=19000000;
  158. }
  159. }
  160.  
  161. int main ()
  162. {
  163. struct zapis artikal[MAX]; // deklariranje na niza od strukturi artikal
  164. int stavka,l; // deklaracija na promenlivi stavka vo koja ke se smesti izborot na korisnikot i l-brojac za vneseni artikli
  165. for (int i=0;i<100;i++)
  166. {
  167. cout<<"Vnesete 1 za vlez, 2 za izlez ili 3 za kraj :";
  168. cin>>stavka;
  169. if(stavka==1)
  170. {
  171. vlez(artikal,i);
  172. artikal[i].iznos=artikal[i].vleznakolicina*artikal[i].edinecnacena;}
  173. else
  174. if(stavka==2)
  175. {
  176. izlez(artikal,i);
  177. artikal[i].iznos=(artikal[i].edinecnacena-(artikal[i].edinecnacena*artikal[i].danocnastapka)/100)*artikal[i].izleznakolicina;}
  178. else
  179. if(stavka==3)
  180. {
  181. l=i;
  182. break;}
  183. }
  184. ofstream out;
  185. out.open("vnos.dat"); // otvaranje na datotekata vnos.dat
  186. for(int i=0;i<l;i++) // pecatenje na site vneseni artikli
  187. {
  188. out<<setw(5)<<artikal[i].sifra<<" ";
  189. out<<setw(30)<<artikal[i].opis<<" ";
  190. out<<fixed<<setw(12)<<setprecision(2)<<artikal[i].edinecnacena<<" ";
  191. out<<setw(6)<<artikal[i].vleznakolicina<<" ";
  192. out<<setw(6)<<artikal[i].izleznakolicina<<" ";
  193. out<<fixed<<setw(10)<<setprecision(2)<<artikal[i].danocnastapka<<" ";
  194. out<<fixed<<setw(15)<<setprecision(2)<<artikal[i].iznos<<" ";
  195. if(artikal[i].datum<1000)
  196. out<<setw(6)<<"000"<<artikal[i].datum<<" ";
  197. else
  198. if(artikal[i].datum<10000)
  199. out<<setw(6)<<"00"<<artikal[i].datum<<" ";
  200. else if(artikal[i].datum<100000)
  201. out<<setw(6)<<"0"<<artikal[i].datum<<" ";
  202. else out<<setw(6)<<artikal[i].datum<<" ";
  203. out<<endl;
  204. }
  205. out.close(); // zatvaranje na datotekata
  206. sort(artikal,l); // povikuvanje na funkcijata za sortiranje
  207. out.open("sort_vnos.dat"); // otvaranje na datoteka sort_vnos.dat
  208. for(int i=0;i<l;i++) // zapisuvanje na sortiranite podatoci po datum
  209. {
  210. out<<setw(5)<<artikal[i].sifra<<" ";
  211. out<<setw(30)<<artikal[i].opis<<" ";
  212. out<<fixed<<setw(12)<<setprecision(2)<<artikal[i].edinecnacena<<" ";
  213. out<<setw(6)<<artikal[i].vleznakolicina<<" ";
  214. out<<setw(6)<<artikal[i].izleznakolicina<<" ";
  215. out<<fixed<<setw(10)<<setprecision(2)<<artikal[i].danocnastapka<<" ";
  216. out<<fixed<<setw(15)<<setprecision(2)<<artikal[i].iznos<<" ";
  217. if(artikal[i].datum<1000)
  218. out<<setw(6)<<"000"<<artikal[i].datum<<" ";
  219. else
  220. if(artikal[i].datum<10000)
  221. out<<setw(6)<<"00"<<artikal[i].datum<<" ";
  222. else if(artikal[i].datum<100000)
  223. out<<setw(6)<<"0"<<artikal[i].datum<<" ";
  224. else out<<setw(6)<<artikal[i].datum<<" ";
  225. out<<endl;
  226. }
  227. out.close(); // zatvaranje na datotekata
  228. int n=l; // brojot na artikli se kopira vo druga promenliva za ponatamosna upotreba
  229. int sifri[l]; // deklariranje na niza za sifrite na artiklite
  230. for(int i=0;i<l;i++)
  231. {
  232. sifri[i]=artikal[i].sifra;}
  233. // otfrlanje na identicnite sifri od nizata
  234. for(int i=0;i<l;++i)
  235. for(int j=i+1;j<l;)
  236. {
  237. if(sifri[i]==sifri[j])
  238. {
  239. for(int k=j;k<l-1;++k)
  240. sifri[k]=sifri[k+1];
  241.  
  242. --l;
  243. }
  244. else
  245. ++j;
  246. }
  247. int vlezen[l],izlezen[l],profit[l]; // deklariranje na nizi vo koi ke se cuvaat vlezniot iznos, izlezniot iznos i profitot za sekoja sifra
  248. float vkupnoizlezen=0,vkupnoprofit=0; // deklariranje na promenlivi vo koi ke se vrsat presmetki za vkupniot prihod i profit na celiot magacin
  249. for(int i=0;i<l;i++) // suma za vlezniot iznos , izlezniot iznos i profitot
  250. {
  251. vlezen[i]=0;
  252. izlezen[i]=0;
  253. profit[i]=0;
  254. for(int j=0;j<n;j++)
  255. {
  256. if(sifri[i]==artikal[j].sifra)
  257. {
  258. if(artikal[j].izleznakolicina==0)
  259. vlezen[i]+=artikal[j].iznos;
  260. else
  261. izlezen[i]+=artikal[j].iznos;
  262. }
  263. }
  264. profit[i]=izlezen[i]-vlezen[i];
  265. }
  266. for(int i=0;i<l;i++) // presmetuvanje na vkupniot izlezen iznos i profitot na cel magacin
  267. {
  268. vkupnoizlezen+=izlezen[i];
  269. vkupnoprofit+=profit[i];
  270. }
  271.  
  272. out.open("prihodi.dat"); // otvaranje na datoteka prihodi.dat i pecatenje na izlezniot iznos i profitot za sekoj artikal kako i za celiot magacin
  273. out<<setw(20)<<"Sifra na produkt"<<setw(15)<<"Izlezen iznos"<<setw(15)<<"Profit"<<endl;
  274. for(int i=0;i<l;i++)
  275. out<<setw(20)<<sifri[i]<<setw(15)<<izlezen[i]<<setw(15)<<profit[i]<<endl;
  276. out<<setw(20)<<"Cel magacin"<<setw(15)<<vkupnoizlezen<<setw(15)<<vkupnoprofit<<endl;
  277. out.close(); // zatvaranje na datotekata
  278.  
  279. return 0;
  280. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement