Problem z sortowaniem dat od najstarszej

0

Witam, robie program budzet osobisty i mam problem z posortowanien dat w obecnym miesiacu, daty maja sie wyswietlac od najstarszej. Daty w poprzednim miesiacu wyswitlaja sie prawidlowo
https://github.com/sliwomir/PersonalBudget



void Budget::userRegistration()
{
    userMaster.userRegistration();
}

void Budget::userLoging()
{
    userMaster.userLoging();
    if (userMaster.isUserLogged())
    {
        incomeMaster = new IncomeMaster(userMaster.getLoggedUserId(),FILE_NAME_WITH_INCOMES);
        expenseMaster = new ExpenseMaster(userMaster.getLoggedUserId(),FILE_NAME_WITH_EXPENSES);
    }
}


void Budget::logout()
{
    userMaster.setLoggedUserId(0);

    delete incomeMaster;
    delete expenseMaster;
    incomeMaster = NULL;
    expenseMaster = NULL;
}

void Budget::changePassword()
{
    userMaster.changePassword();
}

void Budget::addNewIncome()
{
    if(userMaster.isUserLogged())
        incomeMaster->addNewIncome(userMaster.getLoggedUserId());
    else
        cout<<"Uzytkowanik nie jest zalogowany."<<endl;
}

void Budget::addNewExpense()
{
    if(userMaster.isUserLogged())
        expenseMaster->addNewExpense(userMaster.getLoggedUserId());
    else
        cout<<"Uzytkowanik nie jest zalogowany."<<endl;
}

void Budget::showBalanceForCurretnMonth()
{
    vector <Income> tmpIncomes;
    vector <Expense> tmpExpenses;

    int monthBeginning = (AuxiliaryFunctions::getCurrentYear()*10000) + (AuxiliaryFunctions::getCurrentMonth()*100) +1;
    int i=0;
    double incomesSum = 0, expensesSum = 0;

    tmpIncomes = incomeMaster->sortIncomesFromLower(tmpIncomes);
    system("cls");
    cout << " >>> PRZYCHODY UZYTKOWNIKA <<<" << endl;
    cout << "------------------------------" << endl;
    while((unsigned)i < tmpIncomes.size() && tmpIncomes[i].getDate() >= monthBeginning)
    {
        cout << AuxiliaryFunctions::getFullDateAsStringWithDashes(tmpIncomes[i].getDate())<<"\t";
        cout << tmpIncomes[i].getItem()<<"\t";
        cout << tmpIncomes[i].getAmount() << endl;
        incomesSum +=tmpIncomes[i].getAmount();
        i++;
    }
    cout<<endl<<"Suma przychodow z biezacego miesiaca: "<<incomesSum<<endl;
    cout<<endl<<endl;

    i=0;
    tmpExpenses = expenseMaster->sortExpensesFromLower(tmpExpenses);
    cout << " >>> WYDATKI UZYTKOWNIKA <<<" << endl;
    cout << "----------------------------" << endl;
    while((unsigned) i < tmpExpenses.size() && tmpExpenses[i].getDate() >= monthBeginning)
    {
        cout << AuxiliaryFunctions::getFullDateAsStringWithDashes(tmpExpenses[i].getDate())<<"\t";
        cout << tmpExpenses[i].getItem()<<"\t";
        cout << tmpExpenses[i].getAmount() << endl;
        expensesSum += tmpExpenses[i].getAmount();
        i++;
    }
    cout<<endl<<"Suma wydatkow z biezacego miesiaca: "<<expensesSum<<endl;
    cout<<endl<<endl;

    cout<<"Roznica przychodow i wydatkow: "<<incomesSum + expensesSum<<endl;

    system("pause");
}


void Budget::showBalanceForPreviouslyMonth()
{
    vector <Income> tmpIncomes;
    vector <Expense> tmpExpenses;

    int currentMonthBeginning = (AuxiliaryFunctions::getCurrentYear()*10000) + (AuxiliaryFunctions::getCurrentMonth()*100) + 1;

    int previouslyMonthBeginning;
    if(AuxiliaryFunctions::getCurrentMonth() == 1)
    {
        int previouslyMonth = 12;

        previouslyMonthBeginning = ((AuxiliaryFunctions::getCurrentYear()-1)*10000) + (previouslyMonth *100) + 1;
    }
    else
    {
        int previouslyMonth = AuxiliaryFunctions::getCurrentMonth() - 1;
        previouslyMonthBeginning = (AuxiliaryFunctions::getCurrentYear()*10000) + (previouslyMonth *100) + 1;
    }

    int i=0;
    double incomesSum = 0, expensesSum = 0;

    tmpIncomes = incomeMaster->sortIncomesFromLower(tmpIncomes);
    system("cls");
    cout << " >>> PRZYCHODY UZYTKOWNIKA <<<" << endl;
    cout << "------------------------------" << endl;
    while((unsigned)i < tmpIncomes.size() && tmpIncomes[i].getDate() >= previouslyMonthBeginning)
    {
        if(tmpIncomes[i].getDate() < currentMonthBeginning)
        {
            cout << AuxiliaryFunctions::getFullDateAsStringWithDashes(tmpIncomes[i].getDate())<<"\t";
            cout << tmpIncomes[i].getItem()<<"\t";
            cout << tmpIncomes[i].getAmount() << endl;
            incomesSum +=tmpIncomes[i].getAmount();
        }
        i++;
    }
    cout<<endl<<"Suma przychodow z poprzedniego miesiaca: "<<incomesSum<<endl;

    cout<<endl<<endl;
    i=0;
    tmpExpenses = expenseMaster->sortExpensesFromLower(tmpExpenses);
    cout << " >>> WYDATKI UZYTKOWNIKA <<<" << endl;
    cout << "----------------------------" << endl;
    while((unsigned)i < tmpExpenses.size() && tmpExpenses[i].getDate() >= previouslyMonthBeginning)
    {
        if(tmpExpenses[i].getDate() < currentMonthBeginning)
        {
            cout << AuxiliaryFunctions::getFullDateAsStringWithDashes(tmpExpenses[i].getDate())<<"\t";
            cout << tmpExpenses[i].getItem()<<"\t";
            cout << tmpExpenses[i].getAmount() << endl;
            expensesSum += tmpExpenses[i].getAmount();
        }
        i++;
    }
    cout<<endl<<"Suma wydatkow z poprzedniego miesiaca: "<<expensesSum<<endl;
    cout<<endl<<endl;

    cout<<"Roznica przychodow i wydatkow: "<<incomesSum + expensesSum<<endl;

    system("pause");
}


void Budget::showBalanceForPeriodOfTime()
{
    vector <Income> tmpIncomes;
    vector <Expense> tmpExpenses;
    string date;
    int beginningDate, endingDate;
    char choice;
    int i=0;
    double incomesSum = 0, expensesSum = 0;

    do
    {
        cout<<"Podaj date poczatku okresu z ktorego chcesz raport w formacie rrrr-mm-dd: ";
        cin>>date;
    }
    while(! AuxiliaryFunctions::isDateCorrect(date));
    beginningDate = AuxiliaryFunctions::getFullDateFromString(date);

    cout<<"Czy chcesz ustawic koniec okresu na dzien dzisiejszy?: [t/n] ";
    cin>> choice;
    if(choice == 't')
    {
        endingDate = AuxiliaryFunctions::getCurrentDate();
    }
    else
    {
        do
        {
            cout<<"Podaj date konca okresu w formacie rrrr-mm-dd: ";
            cin>>date;
        }
        while(! AuxiliaryFunctions::isDateCorrect(date));
        endingDate = AuxiliaryFunctions::getFullDateFromString(date);
    }


    tmpIncomes = incomeMaster->sortIncomesFromLower(tmpIncomes);
    system("cls");
    cout << " >>> PRZYCHODY UZYTKOWNIKA <<<" << endl;
    cout << "------------------------------" << endl;
    while((unsigned)i < tmpIncomes.size() && tmpIncomes[i].getDate() >= beginningDate)
    {
        if(tmpIncomes[i].getDate() <= endingDate)
        {
            cout << AuxiliaryFunctions::getFullDateAsStringWithDashes(tmpIncomes[i].getDate())<<"\t";
            cout << tmpIncomes[i].getItem()<<"\t";
            cout << tmpIncomes[i].getAmount() << endl;
            incomesSum +=tmpIncomes[i].getAmount();
        }
        i++;
    }
    cout<<endl<<"Suma przychodow z wybranego zakresu czasu: "<<incomesSum<<endl;
    cout<<endl<<endl;

    i=0;
    tmpExpenses = expenseMaster->sortExpensesFromLower(tmpExpenses);
    cout << " >>> WYDATKI UZYTKOWNIKA <<<" << endl;
    cout << "----------------------------" << endl;
    while((unsigned)i < tmpExpenses.size() && tmpExpenses[i].getDate() >= beginningDate)
    {
        if(tmpExpenses[i].getDate() <= endingDate)
        {
            cout << AuxiliaryFunctions::getFullDateAsStringWithDashes(tmpExpenses[i].getDate())<<"\t";
            cout << tmpExpenses[i].getItem()<<"\t";
            cout << tmpExpenses[i].getAmount() << endl;
            expensesSum += tmpExpenses[i].getAmount();
        }
        i++;
    }
    cout<<endl<<"Suma wydatkow z wybranego zakresu czasu: "<<expensesSum<<endl;
    cout<<endl<<endl;

    cout<<"Roznica przychodow i wydatkow: "<<incomesSum + expensesSum<<endl;

    system("pause");
}

bool Budget::isUserLogged()
{
    return userMaster.isUserLogged();
}
0

Sortowanie z funkcja malejaca greater<>() dziala, rosnaca nie

3

W C++20:

std::ranges::sort(tmpIncomes, std::greater<>{}, &Event::getDate);

C++11:

std::sort(tmpIncomes.begin(), tmpIncomes.end(), 
       [](const Income& a, const Income& b) { return a.getDate() > b.getDate(); });

A ten using namespace std; it to w plikach nagłówkowych, to jakaś porażka.

1
bool Income::operator<(const Income& income)const
{
    return (date < income.date);
}

bool Income::operator>(const Income& income)const
{
    return (date > income.date);
}
0

i nadal lipa z sortowaniem biazacego miesiaca

0
void IncomesAndExpansesManager::showBalanceForCurretnMonth()
{
    vector <Income> tmpIncomes;
    vector <Expense> tmpExpenses;

    int monthBeginning = (getCurrentYear() *10000) + (getCurrentMonth() *100) + 1;
    int i=0;
    double incomesSum = 0, expensesSum = 0;

    tmpIncomes = sortIncomesFromLower(tmpIncomes);
    system("cls");
    cout << " >>> PRZYCHODY UZYTKOWNIKA <<<" << endl;
    cout << "------------------------------" << endl;
    while(i < tmpIncomes.size() && tmpIncomes[i].getDate() >= monthBeginning)
    {
        cout << AuxiliaryFunctions::getFullDateAsStringWithDashes(tmpIncomes[i].getDate())<<"\t";
        cout << tmpIncomes[i].getItem()<<"\t";
        cout << tmpIncomes[i].getAmount() << endl;
        incomesSum +=tmpIncomes[i].getAmount();
        i++;
    }
    cout<<endl<<"Suma przychodow z biezacego miesiaca: "<<incomesSum<<endl;
    cout<<endl<<endl;

    i=0;
    tmpExpenses = sortExpensesFromLower(tmpExpenses);
    cout << " >>> WYDATKI UZYTKOWNIKA <<<" << endl;
    cout << "----------------------------" << endl;
    while(i < tmpExpenses.size() && tmpExpenses[i].getDate() >= monthBeginning)
    {
        cout << AuxiliaryFunctions::getFullDateAsStringWithDashes(tmpExpenses[i].getDate())<<"\t";
        cout << tmpExpenses[i].getItem()<<"\t";
        cout << tmpExpenses[i].getAmount() << endl;
        expensesSum += tmpExpenses[i].getAmount();
        i++;
    }
    cout<<endl<<"Suma wydatkow z biezacego miesiaca: "<<expensesSum<<endl;
    cout<<endl<<endl;

    cout<<"Roznica przychodow i wydatkow: "<<incomesSum + expensesSum<<endl;

    system("pause");
}
1

A nie możesz użyc chrono z c++20?
Np. std::year_month_day

1 użytkowników online, w tym zalogowanych: 0, gości: 1