[ ivanzj @ 11.05.2009. 00:10 ] @
Ovaj program moze mozda nekome i da pomogne, imam jedino problem kod pop funkcije. Kada u inventaru inventaru imam 10 jedinica jedne vrste robe i 20 jedinica te iste robe a hocu da prodam 25 jedinica, program bi trebao da proda onih 20 jedinica(novijih) i 5, koje su tu od ranije. To ne znam da namestim. Inace program radi savrseno(bar jedo sada radio), tako da moze nekome da bude od pomoci Code: //#define front_h #include <iostream> #include <fstream> class front { public: front(); bool isPNode(); //done void push(char tp, char trs, int cnt, int prc); //done void pop(); void inventar(); //done void write(); void stats(); //done int pocetU; ~front(); struct popis { char typ; char transakcia; int pocet; float cena; popis * next; } * p_inv; private: float suma; }; ///////*************/////////////// //#include "front.h" using namespace std; front::front() { pocetU=0, p_inv=0,suma=0; } bool front::isPNode() { popis * priv1; for(priv1=p_inv;priv1!=NULL;priv1=priv1->next) { if(priv1->transakcia=='P') { return true; } else { return false; } } } void front::push(char tp, char pct, int trs, int cna) { popis * priv1, * priv2; if(p_inv == 0) { p_inv=new popis; p_inv->typ=tp; p_inv->pocet=pct; p_inv->transakcia=trs; p_inv->cena=cna; p_inv->next=0; } else { priv1=p_inv; while(priv1->next != 0) { priv1=priv1->next; } priv2=new popis; priv2->typ=tp; priv2->pocet=pct; priv2->transakcia=trs; priv2->cena=cna; priv2->next=0; priv1->next=priv2; } pocetU++; } void front::inventar() { popis * priv1; for(priv1=p_inv;priv1!=NULL;priv1=priv1->next) { cout << "tip robe:\t\t\t" << priv1->typ << endl; cout << "broj jedinica:\t" << priv1->pocet << endl; cout << "transakcia:\t\t\t" << priv1->transakcia << endl; cout << "cena jedne jedinice:\t" << priv1->cena << endl; } } void front::write() { ofstream fw; fw.open("inventory.txt", ios::app); popis * priv1; for(priv1=p_inv;priv1!=NULL;priv1=priv1->next) { fw << priv1->typ; fw << priv1->transakcia<<" "; fw << priv1->pocet<<" "; fw << priv1->cena<<endl; } fw.close(); } void front::stats() { int cislo; suma=0; popis * priv1; for(priv1=p_inv;priv1!=NULL;priv1=priv1->next) { cout << "tip robe:\t\t\t" << priv1->typ << endl; cout << "broj jedinica:\t\t" << priv1->pocet << endl; cout << "transakcia:\t\t\t" << priv1->transakcia << endl; cout << "cena jedne jedinice:\t" << priv1->cena << endl; cislo=priv1->pocet * priv1->cena; suma += cislo; //cislo+cislo cout << "zajedno:\t\t\t"<<suma<<"evra"<<endl; cout << "***********kras ispisa iz statistike*******"<<endl; } } void front::pop() { int cyklus= 0; // premenna i urcuje kolkaty cyklus sa spracuvava float pocet, result; cout << " koliko jedinica prodajes : "; cin >> pocet; system("cls"); popis * priv1 = p_inv; popis * priv2; priv2 = p_inv; if(priv1 == NULL) cout << "nista"; else { while(priv1->next != NULL) priv1 = priv1->next; result = priv1->pocet - pocet; if(result < 0) { system("cls"); cout << "\n broj jedinica, koje prodajes je veci od broja jedinica u magacinu.\n"; } else if(result == 0) { priv1 =p_inv; priv1 = priv2->next; while(priv1->next != NULL) { priv2 = priv1; priv1 = priv1->next; } priv2->next = NULL; delete priv1; } else { priv1 = p_inv; while(priv1->next != NULL) priv1 = priv1->next; priv1->pocet = result; } } } //#include "front.h" //using namespace std; char menu() { char volba; cout << "\n"; cout << " izaberi operaciju.\n"; cout << "\n"; cout << " <i>nventar\t.........ispis \n"; cout << " <k>upi\t\t.........\n"; //urobene cout << " <p>rodaj\t......... \n"; cout << " <r>ead\t\t......... nacitaj iz fajla\n"; cout << " <s>tatistics\t......... statistika\n"; cout << " <w>rite\t......... zapisi u fajl\n"; cout << " <c>lear screen\t......... "<<endl; cout << " <e>xit\t\t......... \n";//urobene cout << "\n vas izbor: "; cin >> volba; return volba; } int main() { char volba, cena[20], a[20], komad[20]; char akt,i_polozka; int p_fajl, n; ifstream fr; ofstream fw; front * polozka1 = new front(); front * polozka2 = new front(); front * polozka3 = new front(); front * polozkap = new front(); do{ volba = menu(); switch (volba) { case'i': { if((polozka1->pocetU + polozka2->pocetU + polozka3->pocetU)==0) { cout <<"everything is empty"; } else { cout <<"nastavljamo..."<<endl; cout <<"robu, pod kojim rednim brojem, hoces na ispis?<1,2,3>"; cin >>i_polozka; switch(i_polozka) { case '1':polozka1->inventar();break; case '2':polozka2->inventar();break; case '3':polozka3->inventar();break; default:cout <<"greska"; } } } break; case'k': { cout <<"koju robu kupujes?<1,2,3>"<<endl; cout <<"polozka: "; cin >> a[0]; a[1] = 'K'; cout <<"cena:"; cin >> cena; cout <<"komada: "; cin >> komad; akt = a[0]; switch(akt) { case '1': polozka1->push(a[0],atoi(komad), a[1], atof(cena));break; case '2': polozka2->push(a[0],atoi(komad), a[1], atof(cena));break; case '3': polozka3->push(a[0],atoi(komad), a[1], atof(cena));break; default: cout <<"greska"; break; } break; } break; case'p': { if((polozka1->pocetU + polozka2->pocetU + polozka3->pocetU)==0) { cout <<"everything is empty"; } cout <<"koju robu prodajes?<1,2,3>"; cin >> akt; switch(akt) { case'1': { if(polozka1->isPNode()==false) { polozka1->pop(); } } break; case'2': { if(polozka2->isPNode()==false) { polozka2->pop(); } } break; case'3': { if(polozka3->isPNode()==false) { polozka3->pop(); } } break; default: cout <<"out of range"<<endl; break; } } break; case'r': { /*if((polozka1->pocetU + polozka2->pocetU + polozka3->pocetU)==0) { cout <<"everything is empty"; break; }*/ fr.open("inventory.txt"); if (!fr) { cout << "nisam otvorio fajl"; fr.close(); break; } fr >> p_fajl; for (n=0; n<p_fajl;n++) { fr >>a; fr >>komad; fr >>cena; akt=a[0]; switch(akt) { case '1': polozka1->push(a[0],atoi(komad), a[1], atof(cena));break; case '2': polozka2->push(a[0],atoi(komad), a[1], atof(cena));break; case '3': polozka3->push(a[0],atoi(komad), a[1], atof(cena));break; default: cout <<"greska"; break; } cout<<uspesno ucitani podatci"<<endl; } break; }break; break; case's': { if((polozka1->pocetU + polozka2->pocetU + polozka3->pocetU)==0) { cout <<"everything is empty"; break; } polozka1->stats(); polozka2->stats(); polozka3->stats(); } break; case'w': { fw.open("inventory.txt"); if (!fw) { cout << "greska prilikom otvaranja fajla"; fw.close(); break; } if((polozka1->pocetU + polozka2->pocetU + polozka3->pocetU)==0) { cout << "fajl je prazan"; } fw <<polozka1->pocetU + polozka2->pocetU + polozka3->pocetU<<endl; polozka1->write(); polozka2->write(); polozka3->write(); cout<<"zapisano u fajl inventory.txt"; fw.close(); } break; case'c': system("cls"); default:cout<<"greska"<<endl; break; } } while(volba!='e'); return 0; } |