⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 landlord.cpp

📁 本课程主要介绍面向对象程序设计的方法和c++语言的基本概念。以c++语言中的面向对象机制为主。学习者在学习过程中可以通过大量的程序实例和相关练习
💻 CPP
📖 第 1 页 / 共 2 页
字号:
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 + -