2014-01-06 125 views
-3

你好傢伙,我希望你能啓發我與我面臨的這個問題!C++數據解析查詢

初始輸出: 示例文本文件如下,格式如下(項目說明:價格:數量:日期)。

  • 稻草:10:10:11NOV1991
  • 大麥:5.10:5:19OCT1923
  • 巧克力:50:50:11NOV1991

我需要打印出的每日總結報告當天的總銷售額。根據上述樣本,結果將在1991年11月11日銷售總額(2項)將爲60,而在19OCT1923銷售總額(1項)將爲5.

預期產出:

  • 11Nov1991銷售總金額:60
  • 19Oct1923銷售總金額:5

我的問題是,如何生成的代碼只顯示一個總量獨特的日期的銷售?我創建了一個循環來檢查某年是否存在用於測試目的,但它不起作用。我希望它能夠遍歷一個文件,並檢查某年是否存在,如果它已存在,則具有相同年份的下一個向量元素將不會寫入文件,而只會添加項目價格。下面是我試圖實現的代碼。

ifstream readReport("DailyReport.txt"); 
ofstream writeDailyReport("EditedDailyReport.txt"); 


    string temp1 = ""; 


         //Read from empty report.txt    
         while(getline(readReport,temp1)) 
         { 


          for(int i=0; i < itemDescVec.size(); i++) 
           { 

           stringstream streamYearSS; 
           streamYearSS << itemDescVec[i].dateYear; 
           string stringYear = streamYearSS.str(); 


           size_t found1 = temp1.find(stringYear); 

           //If can find year 
           if (found1 != string::npos) 
           { 


            cout << "Can find" << endl; 




           } 

           //If cannot find year 
           else if (found1 == string::npos) 
           { 


            cout << "Cannot find" << endl; 
             writeDailyReport << itemDescVec[i].itemDescription << ":" << itemDescVec[i].unitPrice << ":" 
             << itemDescVec[i].quantity << ":" << itemDescVec[i].dateDay << "/" << itemDescVec[i].dateMonth << "/" << itemDescVec[i].dateYear 
             << endl; 

           } 



          } 

         } 


     readReport.close(); 
     writeDailyReport.close(); 


    remove("DailyReport.txt"); 
    rename("EditedDailyReport.txt", "DailyReport.txt"); 
+3

歡迎SO。您應該向我們展示您迄今爲止所嘗試的代碼以及您所面臨的問題。有關您編寫的代碼問題的問題必須在問題本身中描述具體問題 - 幷包含有效代碼以再現問題。請參閱SSCCE.org以獲取指導。 –

+1

如果不知道到目前爲止確切的數據結構,這很難回答。所以我不能幫助,除非你顯示你當前的代碼。 – Nabla

回答

0

這將是更好地使用自己的對象來存儲數據 - 那麼你可以寫的,例如,salesRecord.quantity(或salesRecord.getQuantity()如果你寫一個getter),而不是salesrecord.at(2)。這比可讀性更好,比記住2 =數量(等)更好。

現在,作爲你的實際問題...我會說這樣的事情:

  • 遍歷列表。對於每個項目:
    1. 檢查項目的日期是否已添加到您的新列表。
    2. 如果日期尚不存在,只需在其整體中添加該項目。
    3. 如果它確實存在,編輯現有的項目,使得previousQuantity += quantityToAdd

在排序列表

BARLEY:5.10:5:19OCT1923 
STRAW:10:10:11NOV1991 
CHOCOLATE:50:50:11NOV1991 

這會工作如下:

  1. 嘗試添加大麥數據 - 目前爲止還沒有這個日期,所以添加:

    19OCT1923 - 5 units 
    
  2. 嘗試添加草莓數據 - 沒有在該日期爲止,所以添加:

    19OCT1923 - 5 units 
    11NOV1991 - 10 units 
    
  3. 嘗試添加巧克力的數據 - 11NOV1991已經存在,所以加50到10這已經有:

    19OCT1923 - 5 units 
    11NOV1991 - 60 units 
    
+0

感謝您的提示,這真的很有幫助。如果成功的話,我會盡力回覆! – user3165815

+0

你試過了嗎?運氣好的話? – starsplusplus

+0

你好,我做了使用STL地圖使用日期作爲唯一的關​​鍵最終。儘管如此,感謝您的幫助:) – user3165815