2012-10-15 54 views
0

我正在編寫這個程序設計任務,該程序任務是根據用戶輸入的月份和年份,創建一個處理雜誌訂閱續訂和取消通知的程序。該程序的一部分着重於重用舊代碼(這是擴展交換機所來自的)。我使用重複使用的代碼而不是顯示實際月份的功能將月份與數字(1-12,與每個月相關)等同起來。我的問題是,我試圖做一個單獨的函數,將該數字轉換爲月份的實際名稱。這是我到目前爲止有:雜誌訂閱程序的用戶自定義功能

#include <iostream> 
#include <string> 
#include <iomanip> 
#include <cstdlib> 

using namespace std; 

void getMonth(char first, char second, char third, int& monthNumber); 
void getYear(int& yearNumber); 
void convertMonthNumber(int monthNumber, string& month); 

int main() 
{ 
    char first, second, third; 
    int monthNumber = 0; 
    int yearNumber = 0; 
    string month;  

    cout << "Subscription Evaluation Program"; 
    cout << endl << endl; 
    getMonth(first, second, third, monthNumber); 
    getYear(yearNumber); 
    convertMonthNumber(monthNumber, month); 

    cout << "The current date is " << month << " " << yearNumber; //Test to see if convertMonthNumber works 

    system("PAUSE"); 
} 

void getMonth(char first, char second, char third, int& monthNumber) 
{ 
    cout << "Enter first letter of the current month: "; 
    cin >> first; 

switch(first) 
{ 
    case 'F': 
    case 'f': 
     { 
      int montNumber = 2; 
     } 
     break; 
    case 'S': 
    case 's': 
     { 
      int monthNumber = 9; 
     } 
     break; 
    case 'O': 
    case 'o': 
     { 
      int monthNumber = 10; 
     } 
     break; 
    case 'N': 
    case 'n': 
     { 
      int monthNumber = 11; 
     }  
     break; 
    case 'D': 
    case 'd': 
     { 
      int monthNumber = 12; 
     } 
     break; 
    case 'A': 
    case 'a': 
    { 
     cout << "Enter second character of month: "; 
     cin >> second; 

     switch(second) 
     { 
      case 'P': 
      case 'p': 
       { 
        int monthNumber = 4; 
       } 
       break; 
      case 'U': 
      case 'u': 
       { 
        int monthNumber = 8; 
       } 
       break; 
      default: 
       cout << "Unknown Month"; 
       cout << endl; 
      } 
    } 
break; 
case 'J': 
case 'j': 
{ 
    cout << "Enter second character of month : "; 
    cin >> second; 
    switch(second) 
    { 
     case 'A': 
     case 'a': 
      { 
       int monthNumber = 1; 
      } 
      break; 
     case 'U': 
     case 'u': 
      cout<<"\nEnter third character: "; 
      cin >> third; 
      switch(third) 
      { 
       case 'L': 
       case 'l': 
        { 
         int monthNumber = 7; 
        }  
        break; 
       case 'N': 
       case 'n': 
        { 
         int monthNumber = 6; 
        } 
        break; 
       default: 
        cout << "\nUnknown Month"; 
      } 
      break; 
     default: 
      cout << "\nUnknown Month"; 
      cout << endl; 
    } 
    break; 
    case 'M': 
    case 'm': 
     cout << "Enter second and third characters: "; 
     cin >> second; 
     cin >> third; 
     switch(second) 
     { 
      case 'A': 
      case 'a': 
       { 
        switch(third) 
        { 
         case 'R': 
         case 'r': 
          { 
           int monthNumber = 3; 
          }  
          break; 
         case 'Y': 
         case 'y': 
          { 
           int monthNumber = 5; 
          }  
          break; 
         default: 
          cout << endl << "Unknown Month"; 
          cout << endl; 
        } 
       } 
       break; 
      default: 
       cout << endl << "Unknown Month"; 
       cout << endl; 
     } 
    break; 
    default: 
     cout << endl << "Unknown Month"; 
     cout << endl; 
     return; 
    } 
} 

}

void getYear(int& yearNumber) 
{ 
    const int LOW_YEAR_LIMIT = 2012; 
    const int HIGH_YEAR_LIMIT = 2017; 

    do{ 
    cout << "Enter current year (4 digits): "; 
    cin >> yearNumber; 
    if (yearNumber < LOW_YEAR_LIMIT || yearNumber >= HIGH_YEAR_LIMIT){ 
     cout << endl; 
     cout << "Invalid year. Please enter again."; 
     cout << endl << endl; 
     } 
    }while (yearNumber < LOW_YEAR_LIMIT || yearNumber >= HIGH_YEAR_LIMIT); 
    return; 
} 

void convertMonthNumber(int monthNumber, string& month) 
{  
    if (monthNumber = 1) 
     string month = January; 
    else if (monthNumber = 2) 
     string month = February; 
    else if (monthNumber = 3) 
     string month = March; 
    else if (monthNumber = 4) 
     string month = April; 
    else if (monthNumber = 5) 
     string month = May; 
    else if (monthNumber = 6) 
     string month = June; 
    else if (monthNumber = 7) 
     string month = July; 
    else if (monthNumber = 8) 
     string month = August; 
    else if (monthNumber = 9) 
     string month = September; 
    else if (monthNumber = 10) 
     string month = October; 
    else if (monthNumber = 11) 
     string month = November; 
    else if (monthNumber = 12) 
     string month = December; 
    return; 
} 

所以我把你的一些建議和這樣做;它不會返回這個月。

void convertMonthNumber(int monthNumber, string& month) 
{ 
    const string JANUARY = "January"; 
    const string FEBRUARY = "February"; 
    const string MARCH = "March"; 
    const string APRIL = "April"; 
    const string MAY = "May"; 
    const string JUNE = "June"; 
    const string JULY = "July"; 
    const string AUGUST = "August"; 
    const string SEPTEMBER = "September"; 
    const string OCTOBER = "October"; 
    const string NOVEMBER = "November"; 
    const string DECEMBER = "December"; 

    if (monthNumber == 1) 
     month = JANUARY; 
    else if (monthNumber == 2) 
     month = FEBRUARY; 
    else if (monthNumber == 3) 
     month = MARCH; 
    else if (monthNumber == 4) 
     month = APRIL; 
    else if (monthNumber == 5) 
     month = MAY; 
    else if (monthNumber == 6) 
     month = JUNE; 
    else if (monthNumber == 7) 
     month = JULY; 
    else if (monthNumber == 8) 
     month = AUGUST; 
    else if (monthNumber == 9) 
     month = SEPTEMBER; 
    else if (monthNumber == 10) 
     month = OCTOBER; 
    else if (monthNumber == 11) 
     month = NOVEMBER; 
    else if (monthNumber == 12) 
     string month = DECEMBER; 
    return; 
} 

回答

0

我在代碼中看到兩個問題。首先是您正在使用=而不是==中的convertMonthNumber if語句。第二個是,你似乎試圖重新聲明month變量。由於它是通過引用傳遞的,因此應該簡單地重新分配它(使用month = January而不是string month = January)。

2

讓你的函數返回一個字符串。在函數中傳遞一個參數(month_num),並在函數內部聲明一個本地字符串(month_name)變量並計算,賦值並返回month_name。我已經給了某些月份的代碼,放心,你可以在主填滿它

string convertMonthNUmber(int month_num) 
{ 
    string month_name; 
    if(month_num==1) 
     month_name="January"; 
    else if(month_num==2) 
     month_name="February"; 
    : 
    : 
    : 
    else 
     month_name="December"; 

    return month_name; 
} 

,使用此功能

month=convertMonthNUmber(month_num); 

現在每月都會有相應的月份名稱爲給定的月份號碼