Ahmet_Durmic

Elektroprivreda(not finished)

Jun 16th, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.88 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>
  3. #include<fstream>
  4. #include<iomanip>
  5. #include<ctime>
  6. #include<stdlib.h>
  7. #include<chrono> //Za odredivanje tacnog trenutnog datuma
  8. #include<ctime>
  9.  
  10. using namespace std;
  11.  
  12. class Osoba{
  13. public:
  14. static int broj_unesenih_osoba;
  15. Osoba(string name_val="empty",string adress="empty"):
  16. ime_prezime{name_val},adresa{adress}{}
  17.  
  18.  
  19. Osoba(const Osoba &izvor):
  20. ime_prezime{izvor.ime_prezime},adresa{izvor.adresa}{}
  21. ~Osoba(){}
  22.  
  23.  
  24. void set_Osoba(){
  25. cout<<"Unesite ime i prezime potrosaca: ";getline(cin,ime_prezime);
  26. cout<<"Unesite mjesto prebivalista: ";getline(cin,adresa);
  27. }
  28. string get_imeprezime(){
  29. return ime_prezime;
  30. }
  31. string get_prebivaliste(){
  32. return adresa;
  33. }
  34.  
  35. private:
  36. string ime_prezime;
  37. string adresa;
  38. };
  39. int Osoba::broj_unesenih_osoba=0;
  40.  
  41. class Datum{
  42. public:
  43. void set_Datum();
  44.  
  45. //Getteri get_unesena_godina i get_uneseni_mjesec su iskljucivo postavljeni radi provjere prilikom unosa racuna koja se vrsi unutar klase Elektroprivreda, funkciji set_Data()
  46. int get_unesena_godina(){
  47. return godina;
  48. }
  49. int get_uneseni_mjesec(){
  50. return mjesec;
  51. }
  52.  
  53.  
  54. int get_date(){
  55. return date;
  56. }
  57.  
  58. private:
  59. int dan,mjesec,godina,date;
  60. };
  61.  
  62. //Provjera unesenog datuma
  63. void Datum::set_Datum(){
  64. int br_dana[]={31, 28, 31, 30, 31, 30, 31, 31, 30, 31,30 ,31 };
  65. cout<<"Unesite datum izdavanja racuna\n";
  66. cout<<"Unesite dan: ";cin>>dan;
  67. cout<<"Unesite mjesec: ";cin>>mjesec;
  68. cout<<"Unesite godinu: ";cin>>godina;
  69. date=((dan*100+mjesec))*10000+godina;
  70.  
  71. while(godina<1 || mjesec<1 || mjesec>12 || dan<1 || dan > br_dana[mjesec-1]){
  72. cout<<"Unijeli ste pogresan datum! Unesite datum ponovo\n";
  73. cout<<"Unesite dan: ";cin>>dan;
  74. cout<<"Unesite mjesec: ";cin>>mjesec;
  75. cout<<"Unesite godinu: ";cin>>godina;
  76. date=((dan*100+mjesec))*10000+godina;
  77. }
  78. }
  79. class Elektroprivreda{
  80. public:
  81. Elektroprivreda(float bill=9.99,int cm=0,int cy=2019)://Minimalna cijena struje koju treba platiti na mjesecnom nivou bez obzira na koristenje iste
  82. racun{bill},trenutni_mjesec{cm},trenutna_godina{cy}{}//cy-current year,cm-current month
  83. Elektroprivreda(const Elektroprivreda &izvor):
  84. racun{izvor.racun},trenutni_mjesec{izvor.trenutni_mjesec},trenutna_godina{izvor.trenutna_godina}{}
  85. ~Elektroprivreda(){}
  86.  
  87. Osoba O;
  88. Datum D;
  89.  
  90. //Setteri
  91. void set_id(){
  92. id=rand()%1000+100;
  93. }
  94.  
  95. //Generise se trenutni mjesec 1-12 na osnovu lokalnog vremena
  96. void set_trenutni_mjesec(){
  97. time_t t = time(NULL);
  98. tm* timePtr = localtime(&t);
  99. trenutni_mjesec=timePtr->tm_mon;
  100. trenutni_mjesec=timePtr->tm_mon+1;
  101. }
  102. void set_racun();
  103. void set_Data(){
  104. O.set_Osoba();
  105. set_trenutni_mjesec();
  106. D.set_Datum();
  107. if(D.get_uneseni_mjesec()>get_trenutni_mjesec()||D.get_unesena_godina()>get_trenutna_godina()||D.get_unesena_godina()<get_trenutna_godina()){//Ako je uneseni mjesec,godina veci od generisanog mjeseca po lokalnom vremenu, korisnik se vraca na unos
  108. while(D.get_uneseni_mjesec()>get_trenutni_mjesec()||D.get_unesena_godina()>get_trenutna_godina()||D.get_unesena_godina()<get_trenutna_godina()){
  109. cout<<"Unijeli ste pogresan datum! Unesite datum ponovo\n";
  110. D.set_Datum();
  111. }
  112. }
  113. set_racun();
  114. }
  115.  
  116. //Getteri
  117. int get_id(){
  118. return id;
  119. }
  120. float get_racun(){
  121. return racun;
  122. }
  123. int get_trenutni_mjesec(){//Vraca generisani mjesec na osnovnu lokalnog vremena
  124. return trenutni_mjesec;
  125. }
  126. int get_trenutna_godina(){
  127. return trenutna_godina;
  128. }
  129.  
  130.  
  131. private:
  132. int id;
  133. float racun;
  134. int trenutni_mjesec;
  135. int trenutna_godina;
  136. };
  137. void Elektroprivreda::set_racun(){
  138. int broj_mjeseci;//Broj mjeseci za koje korisnik treba da plati racun
  139. broj_mjeseci=get_trenutni_mjesec()-D.get_uneseni_mjesec();//Broj trenutnog mjeseca - broj unesenog mjeseca
  140. if(broj_mjeseci==0){//Ako je broj mjeseci==0, korisnik treba da plati racun samo za trenutni mjesec a ako ne uplacuje se iznos za svih n mjeseci
  141. cout<<"Unesite cijenu potrosene elektricne energije za "<<get_trenutni_mjesec()<<". mjesec: ";cin>>racun;
  142. }else{
  143. float suma=0;
  144. int mjesec_za_uplatu=D.get_uneseni_mjesec();
  145. for(int i=0;i<=broj_mjeseci;i++){
  146. cout<<"Unesite cijenu potrosene elektricne energije za "<<mjesec_za_uplatu<<" . mjesec: ";cin>>racun;
  147. suma=suma+racun;
  148. mjesec_za_uplatu++;
  149. }
  150. racun=suma;
  151. }
  152. }
  153.  
  154. //Menu i prikaz trenutnog vremena
  155. void prikazi_trenutno_vrijeme_i_datum(){
  156. auto trenutno_vrijeme=chrono::system_clock::to_time_t(chrono::system_clock::now());
  157. cout<<ctime(&trenutno_vrijeme)<<endl;
  158. }
  159. int menu(){
  160. int izbor;
  161. do{
  162. prikazi_trenutno_vrijeme_i_datum();
  163. cout.width(70);cout<<"--------------------------------------\n";
  164. cout.width(40);cout<<"\t\tMENU\n";
  165. cout.width(70);cout<<"--------------------------------------\n";
  166. cout.width(51);cout<<"1)Unesite potrosaca\n";
  167. cout.width(58);cout<<"2)Ispis unesenih potrosaca\n";
  168. cout.width(57);cout<<"3)Ispisi racun u datoteku\n";
  169. cout.width(64);cout<<"4)Ispisi broj unesenih korisnika\n";
  170. cout.width(38);cout<<"5)Kraj\n";
  171. cout<<"Unesite izbor: ";cin>>izbor;cin.clear();cin.ignore(10000,'\n');
  172. while(!cin){
  173. cout<<"Pogresan unos!\nUnesite izbor: ";
  174. cin.clear();cin.ignore(10000,'\n');
  175. cin>>izbor;
  176. }
  177. return izbor;
  178. system("pause");
  179. system("cls");
  180. }while(1);
  181. }
  182.  
  183. //Unos sadrzaja u datoteku
  184. void povjera_generisanog_ida(Elektroprivreda *E);
  185. void prva_opcija(Elektroprivreda *E){
  186. E->O.broj_unesenih_osoba++;
  187. ofstream unos("racuni.txt",ios::app);
  188. E->set_id();
  189. povjera_generisanog_ida(E);//Provjera generisanog ID-a
  190. E->set_Data();//Unos podataka
  191. //Unos podatakau datoteku racuni.txt
  192. unos<<"ID: "<<E->get_id()<<endl;
  193. unos<<"Ime: "<<E->O.get_imeprezime()<<endl;
  194. unos<<"Prebivaliste: "<<E->O.get_prebivaliste()<<endl;
  195. unos<<"Datum: "<<E->D.get_date()<<endl;
  196. unos<<"Racun: "<<E->get_racun()<<endl;
  197. unos.close();
  198. system("pause");
  199. system("cls");
  200. }
  201. void povjera_generisanog_ida(Elektroprivreda *E){
  202. ifstream provjera("racuni.txt");
  203. string rijec=" ";
  204. while(provjera>>rijec){
  205. if(rijec=="ID:"){
  206. provjera>>rijec;//Ako je rijec == ID: , prebaci na sljedecu rijec, a sljedeca rijec je generisani ID
  207. if(to_string(E->get_id())==rijec){
  208. do{ //Sve dok je generisani ID jednak nekom od prethodno generisanih ID-ova, generise se novi ID
  209. E->set_id();
  210. }while(to_string(E->get_id())==rijec);
  211. }
  212. }
  213. }
  214. }
  215.  
  216. //Ispis sadrzaja koji je unesen u datoteku
  217. void druga_opcija(){
  218. ifstream ispis("racuni.txt");
  219. string rijec=" ";
  220. string line;
  221. cout<<" ID"<<setw(20)<<"IME I PREZIME "<<setw(20)<<"PREBIVALISTE"<<setw(20)<<"DATUM"<<setw(18)<<"CIJENA"<<endl;
  222. while(ispis>>rijec){
  223. if(rijec=="ID:"){//Ako je rijec == ID: , ispisi citav red , nakon prelaska u novi red break!
  224. while(getline(ispis,line)){
  225. cout<<" "<<line<<setw(20);
  226. break;
  227. }
  228. }
  229. if(rijec=="Ime:"){//Ako je rijec == Ime: , ispisi citav red , nakon prelaska u novi red break!
  230. while(getline(ispis,line)){
  231. cout<<line<<setw(25);
  232. break;
  233. }
  234. }
  235. if(rijec=="Prebivaliste:"){
  236. while(getline(ispis,line)){
  237. cout<<line<<setw(18);
  238. break;
  239. }
  240. }
  241. if(rijec=="Datum:"){
  242. while(getline(ispis,line)){
  243. cout<<line<<setw(15);
  244. break;
  245. }
  246. }
  247. if(rijec=="Racun:"){
  248. while(getline(ispis,line)){
  249. cout<<line<<"KM"<<endl;
  250. break;
  251. }
  252. }
  253. }
  254. system("pause");
  255. system("cls");
  256. }
  257.  
  258. //Ispis racuna u datoteku
  259. void ispisi_id_i_imena_potrosaca();
  260. string provjera_unosa_ida(string uneseni_id);
  261. void izbor_tri(){
  262. ifstream sadrzaj("racuni.txt");
  263. string pretraga;
  264. ispisi_id_i_imena_potrosaca();//Ispis trenutnih osoba koje su unesene u datoteku
  265. cout<<"Unesite ID za ispis racuna u datoteku: ";getline(cin,pretraga);
  266. pretraga=provjera_unosa_ida(pretraga);//Dodijeljuje se validan id za kreiranje datoteke u kojoj ce biti podaci o racunu kojeg korisnik treba da uplati
  267. string line;
  268. string rijec=" ";
  269. string txt=".txt";
  270. while(sadrzaj>>rijec){
  271. if(rijec=="ID:"){
  272. sadrzaj>>rijec;
  273. if(rijec.compare(pretraga)==0){
  274. string kreiraj_racun=pretraga+txt;
  275. ofstream unesi(kreiraj_racun);
  276. unesi<<"---------------------------------------------------\n";
  277. unesi<<"\t\tElektroprivreda d.o.o\n";
  278. unesi<<"---------------------------------------------------\n";
  279. while(rijec!="Ime:"){
  280. sadrzaj>>rijec;
  281. }
  282. if(rijec=="Ime:"){
  283. while(getline(sadrzaj,line)){
  284. unesi<<"Ime i prezime: "<<line<<endl;
  285. break;
  286. }
  287. }
  288. while(rijec!="Prebivaliste:"){
  289. sadrzaj>>rijec;
  290. }
  291. if(rijec=="Prebivaliste:"){
  292. while(getline(sadrzaj,line)){
  293. unesi<<"Adresa: "<<line<<endl;
  294. break;
  295. }
  296. }
  297. while(rijec!="Racun:"){
  298. sadrzaj>>rijec;
  299. }
  300. if(rijec=="Racun:"){
  301. while(getline(sadrzaj,line)){
  302. unesi<<"IZNOS: "<<line<<" KM"<<endl;
  303. break;
  304. }
  305. }
  306. unesi<<"---------------------------------------------------\n";
  307. unesi<<endl;
  308. unesi<<" Pecat ovlastenog lica:________________\n";
  309. unesi<<endl;
  310. unesi<<"---------------------------------------------------\n";
  311. }
  312. }
  313. }
  314. cout<<"Racun je sacuvan u datoteci "<<pretraga+txt<<endl;
  315. system("pause");
  316. system("cls");
  317. }
  318. //Pomocna funkcija za izbor_tri
  319. void ispisi_id_i_imena_potrosaca(){
  320. ifstream ispis("racuni.txt");
  321. string line;
  322. string rijec=" ";
  323. cout<<"Imena potrosaca\n";
  324. cout<<" ID\t IME I PREZIME\n";
  325. while(ispis>>rijec){
  326. if(rijec=="ID:"){
  327. while(getline(ispis,line)){
  328. cout<<line<<setw(20);
  329. break;
  330. }
  331. }
  332. if(rijec=="Ime:"){
  333. while(getline(ispis,line)){
  334. cout<<line<<endl;
  335. break;
  336. }
  337. }
  338. }
  339. ispis.close();
  340. }
  341. //Pomocna funkcija za izbor 3, ako se unese nepostojeci id, korisnika se vraca na ponovni unos ida
  342. string provjera_unosa_ida(string uneseni_id){
  343. ifstream provjeri("racuni.txt");
  344. string rijec=" ";
  345. while(provjeri>>rijec){
  346. if(rijec=="ID:"){
  347. provjeri>>rijec;
  348. if(uneseni_id.compare(rijec)!=0){
  349. }else{
  350. return uneseni_id;
  351. break;
  352. }
  353. }
  354. }
  355. provjeri.close();
  356. }
  357.  
  358.  
  359. int main(){
  360.  
  361. int izbor;
  362. Elektroprivreda *E=new Elektroprivreda;
  363.  
  364. do{
  365. izbor=menu();
  366. if(izbor<1||izbor>4){
  367. break;
  368. }
  369. if(izbor==1){
  370. prva_opcija(E);
  371. }
  372. if(izbor==2){
  373. druga_opcija();
  374. }
  375. if(izbor==3){
  376. izbor_tri();
  377. }
  378. if(izbor==4){
  379. if(E->O.broj_unesenih_osoba==0){
  380. cout<<"Niste unijeli niti jednog potrosaca! Odaberite opciju 1 za unos\n";
  381. system("pause");
  382. system("cls");
  383. }else{
  384. cout<<"Ukupno je uneseno "<<E->O.broj_unesenih_osoba<<" potrosaca"<<endl;
  385. system("pause");
  386. system("cls");
  387. }
  388.  
  389. }
  390.  
  391. }while(1);
  392.  
  393. return 0;
  394. }
Add Comment
Please, Sign In to add comment