📄 landlord.cpp
字号:
bool operator == (const expense& e1, const expense& e2)
{ return e1.month == e2.month && e1.day == e2.day; }
//--------------------------------------------------------------
ostream& operator << (ostream& s, const expense& exp)
{
s << exp.month << '/' << exp.day << '\t' << exp.payee << '\t' ;
s << exp.amount << '\t' << exp.category << endl;
return s;
}
//--------------------------------------------------------------
////////////////////////////////////////////////////////////////
bool compareDates::operator () (expense* ptrE1,
expense* ptrE2) const
{ return *ptrE1 < *ptrE2; }
//--------------------------------------------------------------
////////////////////////////////////////////////////////////////
bool compareCategories::operator () (expense* ptrE1,
expense* ptrE2) const
{ return ptrE1->category < ptrE2->category; }
//--------------------------------------------------------------
//////////////////methods for class expenseRecord///////////////
expenseRecord::~expenseRecord() //destructor
{
while( !vectPtrsExpenses.empty() ) //delete expense objects,
{ //remove ptrs from vector
iter = vectPtrsExpenses.begin();
delete *iter;
vectPtrsExpenses.erase(iter);
}
}
//--------------------------------------------------------------
void expenseRecord::insertExp(expense* ptrExp)
{ vectPtrsExpenses.push_back(ptrExp); }
//--------------------------------------------------------------
void expenseRecord::display()
{
cout << "\nDate\tPayee\t\tAmount\tCategory\n"
<< "----------------------------------------\n";
if( vectPtrsExpenses.size() == 0 )
cout << "***No expenses***\n";
else
{
sort( vectPtrsExpenses.begin(), // sort by date
vectPtrsExpenses.end(), compareDates() );
iter = vectPtrsExpenses.begin();
while( iter != vectPtrsExpenses.end() )
cout << **iter++;
}
}
//-----------------------------------------------------------
float expenseRecord::displaySummary() // used by annualReport
{
float totalExpenses = 0; //total, all categories
if( vectPtrsExpenses.size() == 0 )
{
cout << "\tAll categories\t0\n";
return 0;
}
// sort by category
sort( vectPtrsExpenses.begin(),
vectPtrsExpenses.end(), compareCategories() );
// for each category, sum the entries
iter = vectPtrsExpenses.begin();
string tempCat = (*iter)->category;
float sumCat = 0.0;
while( iter != vectPtrsExpenses.end() )
{
if(tempCat == (*iter)->category)
sumCat += (*iter)->amount; // same category
else
{ // different category
cout << '\t' << tempCat << '\t' << sumCat << endl;
totalExpenses += sumCat; // add previous category
tempCat = (*iter)->category;
sumCat = (*iter)->amount; // add final amount
}
iter++;
} // end while
totalExpenses += sumCat; // add final category
cout << '\t' << tempCat << '\t' << sumCat << endl;
return totalExpenses;
} // end displaySummary()
//-----------------------------------------------------------
//////////////methods for class expenseInputScreen//////////////
expenseInputScreen::expenseInputScreen(expenseRecord* per) :
ptrExpenseRecord(per)
{ /*empty*/ }
//-----------------------------------------------------------
void expenseInputScreen::getExpense()
{
int month, day;
string category, payee;
float amount;
cout << "Enter month (1-12): ";
cin >> month;
cin.ignore(80, '\n');
cout << "Enter day (1-31): ";
cin >> day;
cin.ignore(80, '\n');
cout << "Enter expense category (Repairing, Utilities): ";
getaLine(category);
cout << "Enter payee "
<< "(Bob's Hardware, Big Electric Co): ";
getaLine(payee);
cout << "Enter amount (39.95): ";
cin >> amount;
cin.ignore(80, '\n');
expense* ptrExpense = new
expense(month, day, category, payee, amount);
ptrExpenseRecord->insertExp(ptrExpense);
}
//-----------------------------------------------------------
//////////////////methods for class annualReport/////////////
annualReport::annualReport(rentRecord* pRR,
expenseRecord* pER) :
ptrRR(pRR), ptrER(pER)
{ /* empty*/ }
//-----------------------------------------------------------
void annualReport::display()
{
cout << "Annual Summary\n--------------\n";
cout << "Income\n";
cout << "\tRent\t\t";
rents = ptrRR->getSumOfRents();
cout << rents << endl;
cout << "Expenses\n";
expenses = ptrER->displaySummary();
cout << "\nBalance\t\t\t" << rents - expenses << endl;
}
//-----------------------------------------------------------
////////////////methods for class userInterface//////////////
userInterface::userInterface()
{
//these reports exist for the life of the program
ptrTenantList = new tenantList;
ptrRentRecord = new rentRecord;
ptrExpenseRecord = new expenseRecord;
}
//-----------------------------------------------------------
userInterface::~userInterface()
{
delete ptrTenantList;
delete ptrRentRecord;
delete ptrExpenseRecord;
}
//-----------------------------------------------------------
void userInterface::interact()
{
while(true)
{
cout << "Enter 'i' to input data, \n"
<< " 'd' to display a report, \n"
<< " 'q' to quit program: ";
ch = getaChar();
if(ch=='i') // enter data
{
cout << "Enter 't' to add tenant, \n"
<< " 'r' to record rent payment, \n"
<< " 'e' to record expense: ";
ch = getaChar();
switch(ch)
{
//input screens exist only while being used
case 't': ptrTenantInputScreen =
new tenantInputScreen(ptrTenantList);
ptrTenantInputScreen->getTenant();
delete ptrTenantInputScreen;
break;
case 'r': ptrRentInputScreen =
new rentInputScreen(ptrTenantList, ptrRentRecord);
ptrRentInputScreen->getRent();
delete ptrRentInputScreen;
break;
case 'e': ptrExpenseInputScreen =
new expenseInputScreen(ptrExpenseRecord);
ptrExpenseInputScreen->getExpense();
delete ptrExpenseInputScreen;
break;
default: cout << "Unknown input option\n";
break;
} // end switch
} // end if
else if(ch=='d') // display data
{
cout << "Enter 't' to display tenants, \n"
<< " 'r' to display rents\n"
<< " 'e' to display expenses, \n"
<< " 'a' to display annual report: ";
ch = getaChar();
switch(ch)
{
case 't': ptrTenantList->display();
break;
case 'r': ptrRentRecord->display();
break;
case 'e': ptrExpenseRecord->display();
break;
case 'a':
ptrAnnualReport = new annualReport(ptrRentRecord,
ptrExpenseRecord);
ptrAnnualReport->display();
delete ptrAnnualReport;
break;
default: cout << "Unknown display option\n";
break;
} // end switch
} // end elseif
else if(ch=='q')
return; // quit
else
cout << "Unknown option. Enter only 'i', 'd' or 'q'\n";
} // end while
} // end interact()
///////////////////end of file landlord.cpp/////////////////////
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -