Basically I dont even know if I named the thread properly but lets get on the story.
I've got a list of wares (in text file) with its name, date it was brought to store, date it was sold, amount and price.

Pigema
//name                         date it was brought    sold         amount     price
Juodos vilnojinės kojinės            2011-10-28	    2011-11-21	      5      6.79
Smulkus cukrus                       2011-11-19     2011-11-25       15      3.66
Pigus Batonas                        2011-11-23     2011-11-24       10      0.85
Raudonieji ankštiniai pipirai        2011-11-01     2011-11-15        8      7.00
Neriebus pienas                      2011-11-22     2011-11-27        5      1.69
Sausi pusryčiai                      2011-11-16     2011-11-19        5      5.00
Balta duona                          2011-11-21     2011-11-22       12      3.11
Šokoladiniai saldainiai "Pergalė"    2011-10-28     2011-10-29        4     12.99

Now I have to form a list of wares that took more than 5 days to sell, align that list by the date it was sold and wares name, calculate amount of money for the sold wares from that list.

class for the ware

#include <string>
using namespace std;
// Aprašoma klasė Prekė
class Preke
{
private:
	string pavadinimas;			// prekės pavadinimas
	string atvezimoData;		// atvežimo į parduotuvę data
	string pardavimoData;		// pardavimo data
	int prekiuKiekis;			// prekių kiekis
	double kaina;				// prekės kaina
public:
	Preke(void);
	Preke(string pav, string atvData, string parData, int pKiekis, double kain);
	~Preke(void);

	string ImtiPavadinima()			{return pavadinimas;}
	string ImtiAtvezimoData()		{return atvezimoData;}
	string ImtiPardavimoData()		{return pardavimoData;}
	int ImtiPrekiuKieki()			{return prekiuKiekis;}
	double ImtiKaina()				{return kaina;}

	bool operator > (const Preke & desine);
};

class for the shop

#include "Preke.h"	// Čia aprašyta klasė Prekė
// Aprašoma klasė Parduotuvė
class Parduotuve
{
public:
	static const int CMax = 100; // Maksimalus prekių skaičius
private:
	string parduotuvesPavadinimas;
	Preke preke[CMax];
	int prekiuSkaicius;
public:
	Parduotuve(void);
	~Parduotuve(void);
	void DetiPreke (Preke k, int ind)	 { preke[ind] = k;			     }
    Preke ImtiPreke(int ind)			 { return preke[ind];            }
    void DetiNaujaPreke(Preke k)		 { preke[prekiuSkaicius] = k;
                                           prekiuSkaicius++;             }
    int  ImtiPrekiuSkaiciu()             { return prekiuSkaicius;        }
	void DetiPavadinima(string pp)		 { parduotuvesPavadinimas = pp;  }
	string ImtiPavadinima()				 { return parduotuvesPavadinimas;}
    void Rikiuoti();
};

.cpp of the ware

#include "Preke.h"

// Konstruktorius be parametrų
Preke::Preke(void): pavadinimas(""), atvezimoData(""), pardavimoData(""),
                        prekiuKiekis(0), kaina(0.0)
{
}
// Konstruktorius su parametrais
Preke::Preke(string pav, string atvData, string parData, int pKiekis, double kain):
                 pavadinimas(pav), atvezimoData(atvData), pardavimoData(parData),
	      prekiuKiekis(pKiekis), kaina(kain)
{
}
// Destruktorius
Preke::~Preke(void)
{
}
// Užklotas operatorius >
bool Preke::operator >(const Preke & desinė)
{
  return kaina > desinė.kaina;
}
//----------------------------------------------------------

.cpp of the shop

#include "Parduotuve.h"
// Konstruktorius be parametrų
Parduotuve::Parduotuve(void): prekiuSkaicius(0), parduotuvesPavadinimas("")
{
}
// Destruktorius
Parduotuve::~Parduotuve(void)
{
}
//----------------------------------------------------------
// Rikiuoja objektų masyvą preke(prekiuSkaicius) išrinkimo būdu
// pagal pavadinima (mažėjimo tvarka)

/*
void Parduotuve::Rikiuoti()
{
  for (int i = 0; i < prekiuSkaicius-1; i++) {
    int mind = i;
    for (int j = i+1; j < prekiuSkaicius; j++)
      if (Preke[j] > Preke[mind])
        mind = j;
    Preke k     = Preke[mind];
    Preke[mind] = Preke[i];
    Preke[i]    = k;
  }
}
*/

MAIN.cpp

#include <iostream>
#include <fstream>
#include <iomanip>
#include "Parduotuve.h"     
using namespace std;
//----------------------------------------------------------
const char CDuomenys[]   = "Duomenys.txt";
const char CRezultatai[] = "Rezultatai.txt";
//----------------------------------------------------------
void SkaitytiDuomenis(const char failoVardas[], Parduotuve & prekes);
void Spausdinti(const char failoVardas[], Parduotuve & prekes, string komentarai);
void Atrinkti(Parduotuve & prekes, Parduotuve & senosPrekes);
//----------------------------------------------------------
int main()
{
	ofstream fr(CRezultatai); fr.close();
	Parduotuve parduotuvesPrekes,
			   senosPrekes;

	SkaitytiDuomenis(CDuomenys, parduotuvesPrekes);
	string parduotuvesPavadinimas = parduotuvesPrekes.ImtiPavadinima();
    Spausdinti(CRezultatai, parduotuvesPrekes, parduotuvesPavadinimas + 
		" - didžiausias pigių prekių pasirinkimas Lietuvoje");
	Atrinkti (parduotuvesPrekes, senosPrekes);
	Spausdinti (CRezultatai, senosPrekes, "Prekes parduotos per ilgesni laiko tarpa, negu 5 dienos");

	return 0;
}
//----------------------------------------------------------
void SkaitytiDuomenis(const char failoVardas[], Parduotuve & prekes)
{
 // ifstream fd(failoVardas);
 // string parduotuvesPav;
//  fd.ignore(100, '\n');              // praleidžiama komentarų eilutė
//  fd.ignore(100, '\n');              // praleidžiama komentarų eilutė
  string parduotuvesPav;
  char pavadinimas[36]; 
  string atvezimoData;
  string pardavimoData; 
  int prekiuKiekis; 
  double kaina;
  ifstream fd(failoVardas);
  if (!fd.eof()) {
	  getline(fd, parduotuvesPav);
	  prekes.DetiPavadinima(parduotuvesPav);
  }
  while (!fd.eof() && prekes.ImtiPrekiuSkaiciu() < prekes.CMax) {
	  fd.get(pavadinimas, sizeof pavadinimas);
    fd >> atvezimoData >> pardavimoData >> prekiuKiekis >> kaina;
    fd.ignore();
    Preke preke(pavadinimas, atvezimoData, pardavimoData, prekiuKiekis, kaina);
    prekes.DetiNaujaPreke(preke);
  }
  fd.close();
}
//----------------------------------------------------------
void Spausdinti(const char failoVardas[], Parduotuve & prekes, string komentarai)
{
  ofstream fr(failoVardas, ios::app);
  fr << komentarai << endl;
  fr << "-----------------------------------------------------------------------------------" << endl;
  fr << "Prekės pavadinimas	                 Atvežimo data  Pardavimo data    Kiekis   Kaina" << endl;
  fr << "-----------------------------------------------------------------------------------" << endl;
  for (int i = 0; i < prekes.ImtiPrekiuSkaiciu(); i++) {
    Preke preke = prekes.ImtiPreke(i);
	fr << left << setw(39) << preke.ImtiPavadinima() << "  "
		<< right << setw(12) << preke.ImtiAtvezimoData()   << "   "
		<< preke.ImtiPardavimoData() << "  "
       << setw(4) << preke.ImtiPrekiuKieki() << "  "
	   << setw(7) << setprecision(2) << fixed << preke.ImtiKaina() << endl;
  }
  fr << "-----------------------------------------------------------------------------------" << endl << endl;
  fr.close(); 
}
//----------------------------------------------------------
void Atrinkti(Parduotuve & prekes, Parduotuve & senosPrekes)
{
	for (int i = 0; i < prekes.ImtiPrekiuSkaiciu(); i++) {
		Preke preke = prekes.ImtiPreke(i);
		if ((preke.ImtiPardavimoData() > preke.ImtiAtvezimoData()))
			senosPrekes.DetiNaujaPreke(preke);
	}
}

Now my problem so far is that I don't really know if and HOW I can make a list of wares that took more than 5 days to sell when dates are in string format, or should I use another version of program i made so far where I described dates as integers (each arrive year month day and sell year month day as ints)?

Recommended Answers

All 2 Replies

Now my problem so far is that I don't really know if and HOW I can make a list of wares that took more than 5 days to sell when dates are in string format, or should I use another version of program i made so far where I described dates as integers (each arrive year month day and sell year month day as ints)?

Possibly convert the stings to a time format as follows:

#include <iostream>
using	namespace	std;
int	main(int argc,char* argv)
{
	char*	str = "2011-11-21";
	tm tm1 = {0};

	sscanf(str,"%4d-%2d-%2d",&tm1.tm_year,&tm1.tm_mon,&tm1.tm_mday);
	cout << tm1.tm_year << endl << tm1.tm_mon << endl << tm1.tm_mday << endl;
}

You can convert the string to time_t format so that later a comparison will be trivial comparison of two integers. First populate a struct tm, then call mktime() which will return time_t, something like this

// See previous post
char*	str = "2011-11-21";
tm tm1 = {0};

sscanf(str,"%4d-%2d-%2d",&tm1.tm_year,&tm1.tm_mon,&tm1.tm_mday);
tm1.tm_hour = 1; // for mktime()
time_t t = mktime(&tm1);
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.