1

C++でカレンダーアプリケーションを作成しています。

これが私のコードです:

class appointment
{
public:
    appointment(string aDate, string aTime, string aType,
    string aLocation, string aComments, bool aIsImportant,
    string aReminderDate, string aReminderTime)
    {
        appDate = aDate;
        appTime = aTime;
        appType = aType;
        appLocation = aLocation;
        appComments = aComments;
        appIsImportant = aIsImportant;
        appReminderDate = aReminderDate;
        appReminderTime = aReminderTime;
    }
    void setDate(string aDate)
    {
        appDate = aDate;
    }
    void setTime(string aTime)
    {
        appTime = aTime;
    }
    void setType(string aType)
    {
        appType = aType;
    }
    void setLocation(string aLocation)
    {
        appLocation = aLocation;
            }
    void setComments(string aComments)
    {
        appComments = aComments;
    }
    void setIsImportant(bool aIsImportant)
    {
        appIsImportant = aIsImportant;
    }
    void setReminderDate(string aReminderDate)
    {
        appReminderDate = aReminderDate;
    }
    void setReminderTime(string aReminderTime)
    {
        appReminderTime = aReminderTime;
    }
    string getDate()
    {
        return appDate;
    }
    string getTime()
    {
        return appTime;
    }
    string getType()
    {
        return appType;
    }
    string getLocation()
    {
        return appLocation;
    }
    string getComments()
    {
        return appComments;
    }
    bool getIsImportant()
    {
        return appIsImportant;
    }
    string getReminderDate()
    {
        return appReminderDate;
    }
    string getReminderTime()
    {
        return appReminderTime;
    }
private:
    appointment();
    string appDate;
    string appTime;
    string appType;
    string appLocation;
    string appComments;
    bool appIsImportant;
    string appReminderDate;
    string appReminderTime;
    //person owner;
};

class calendar
{
public:
    calendar()
    {
        loadFromFile();
    }
    ~calendar()
    {
        saveToFile();
    }
    void createAppointment(string aDate, string aTime, string aType,
    string aLocation, string aComments, bool aIsImportant,
    string aReminderDate, string aReminderTime)
    {
        appointment newAppointment(string aDate, string aTime, string aType,
        string aLocation, string aComments, bool aIsImportant,
        string aReminderDate, string aReminderTime);
        //appointments.resize(appointments.size() + 1,newAppointment);
    }
private:
    vector<appointment> appointments;
    string calCurrentDate;
    string calCurrentTime;
    void loadFromFile()
    {
        //Code to load appointments from file
    }
    void saveToFile()
    {
        //Code to save appointments to file
    }
};

次のことについて助けてもらえますか?

コンストラクターが呼び出されたら、予定オブジェクトのファイル(loadFromFile()メソッド)をロードし、このファイルの内容を持つように「appointments」変数を設定します。saveToFile()メソッドの後で、予定ベクトルの内容をファイルに保存したいと思います。

また、createAppointment()メソッドが呼び出されたときに、ベクターのサイズを1増やし、その内容をベクターに追加したいと思います。正しいコードがわかりません。

ファイルからの保存/読み込みを更新

    void loadFromFile()
    {
        ifstream iStream("file.ext", ios::binary);
        fileHeader_t fHeader;
        iStream.read((char*)&fHeader, sizeof(fileHeader_t));
        if (fHeader.magicNumber = 0xDEADBEAF)
        {
            appointments.resize(fHeader.appointmentCount); iStream.read((char*)&appointments[0], fHeader.appointmentCount * sizeof(appointment));
        }
    }
    void saveToFile()
    {
        ofstream oStream("file.ext", ios::binary);
        fileHeader_t fHeader;
        fHeader.magicNumber = 0xDEADBEAF;
        fHeader.appointmentCount = appointments.size();
        oStream.write((char*)&fHeader, sizeof(fileHeader_t));
        oStream.write((char*)&appointments[0], sizeof(appointment) * appointments.size());
    }
4

2 に答える 2

4

ベクトルはおそらく連続しているので、ifstreamを使用してベクトルをロードすることに問題はないはずです。もし私があなたなら、バイナリファイルの基本的なヘッダーを次のように作成します。

struct fileHeader_s
{
    DWORD magicNumber;
    size_t appointmentsCount;
}fileHeader_t;

次に、ループで、予定値の各項目を読み取り、appointments.push_back(item);を使用します。createAppointmentでも同じことを行う必要があります。ベクトルのサイズを変更せず、push_back(newAppointment);を実行してください。

于 2012-09-11T13:06:15.567 に答える
0

独自のファイル形式を考え出す(つまり、各レコードを1行に手動で保存する)か、Boost::serializationのようなものを使用する必要があります。

于 2012-09-11T12:56:46.503 に答える