2017-05-16 146 views
-1

該程序的功能是。當用戶運行這個時,他們被要求3個輸入。日期(DDMMYY)身體部位受過訓練(例如胸部)和時間(例如100)取決於條件的用戶輸入。用戶可以存儲新的數據。或查看存儲的數據。讀取和寫入CSV文件

當用戶存儲數據時,數據轉到文件的罰款。當他們查看這些數據時,會顯示它們。這是正確的預期功能。

當他們重新啓動程序並輸入另一組信息時,會出現該問題。這組信息覆蓋最後一組信息。因此只顯示最新的數據條目。

1.我該如何做到這一點,當程序重新啓動和新的數據輸入數據附加到該文件,而不是覆蓋它? 2.我的另一個問題是如何在程序的同一運行中重複該功能? 一旦我按ctrl Z到結束文件只是停止 並說按任意鍵繼續輸入...

workoutlogger.cpp 

#include "workoutlogger.h" 
#include <iostream> 
#include <fstream> 
#include <string> 
#include "mainclient.h" 

using namespace std; 


workoutlogger::workoutlogger() 
{ 
    int choices; 
    cout << " (1) Do you want to log a new workout\n (2) Track previous workouts?\n Enter the number of your choice\n"; 
    cin >> choices; 

    switch (choices) { 
    case 1: 
     log(); 
     break; 

    case 2: 
     viewinfo(); 
     break; 
    default: 
     cout << "invalid option.."; 
     workoutlogger(); 
    } 


} 


workoutlogger::~workoutlogger() 
{ 
} 

int workoutlogger::log() 
{ 
    ofstream theFile("workinfo.txt"); 

    cout << "enter date (DDMMYY), bodypart trained (eg. Chest), time trained (mins)" << endl; 
    cout << "press ctrl + z to quit\n"; 

    int date; 
    string bodypart; 
    int minutes; 

    while (cin >> date >> bodypart >> minutes) 
    { 

     theFile << date << ' ' << bodypart << ' ' << minutes << endl; 
    } 

     system("pause"); 
     return 0; 
} 

int workoutlogger::viewinfo() { 

     ifstream theFile("workinfo.txt"); 

     int date; 
     string bodypart; 
     int minutes; 

     while (theFile >> date >> bodypart >> minutes) { //stores infomation in these variables 
                 //file pointer starts at first piece of info, then onto next info to store in variables 
      cout << date << ", " << bodypart << ", " << minutes << endl; 

     } 
     system("pause"); 
     return 0; 
} 

workoutlogger.h

#pragma once 
class workoutlogger 
{ 
public: 
    workoutlogger(); 
    ~workoutlogger(); 
    int viewinfo(); 
    int log(); 
}; 
+1

你的文件是由空格,沒有逗號分隔的,你應該檢查文檔的fstream瞭解如何追加到一個文件。如果沒有看到你的'main'函數,或者你調用其他函數,那麼除了猜測你的第二個問題之外,很難做任何事情。簡短的回答,再次調用函數。 –

+0

意識形態觀點:這個類沒有狀態(沒有數據成員)。問問自己,「爲什麼是一堂課?」 – user4581301

回答

0

打開文件進行追加是相當簡單的,就像之前打開它,把這樣的追加標誌通過

std::ofstream ofs; 
ofs.open ("test.txt", std::ofstream::out | std::ofstream::app); 

要退出,爲什麼你不只是尋找一個輸入的「退出」,並假定這是退出條件而不是有效的輸入。

喜歡的東西:

while (cin >> date >> bodypart >> minutes) 
{ 
    if(date == "exit") { 
     return 0; 
    } 
    theFile << date << ' ' << bodypart << ' ' << minutes << endl; 
}