C++で日付のプログラミング
前回も同じ質問をして、自分なりに直してみたのですが、どうもうまく動作しません。
長くなりますが、教えてください。
日付のエラー処理を完全にするというもので、
次のような仕様を満たすようにMyDateクラスを修正せよ。というものです。
1.月、日共に初期値は1とする。
2.月、日の状態を出力するメンバ関数print()を追加する。
3.changeDay関数において、monthに入っている値に対応して適切なエラー処理を行う。
4月の時は日は30まで、5月の時は31まで、みたいな感じです。
4.changeMonth関数において、変更しようとする月に対しdayに入っている値が大きすぎる場合、dayを変更後の最後の日に修正するようにする。例えば、5月31日に設定されている時に、changeMonth(2)が呼ばれた時、monthに2を、dayに28を代入する。
5.うるう年は考慮しなくていい。
#include <stdio.h>
class MyDate{
private:
int month, day;
public:
void Date(int, int);
void changeMonth(int); //「月」変更用関数
void changeDay(int); //「日」変更用関数
void print();
};
void MyDate::Date(int argMonth,int argDay)
{
argMonth = 1;
argDay = 1;
}
void MyDate::changeMonth(int argMonth)//メンバ関数(changeMonth)の定義
{
if(argMonth >= 1 && argMonth <= 12){
//1~12のときだけ値を更新
month = argMonth;
}
}
void MyDate::changeDay(int argDay)//メンバ関数(changeDay)の定義
{
//1~31が入力された場合のみ値を更新
if(argDay >= 1 && argDay <= 31){
day = argDay;
}
if(month == 1,day > 31){
printf("DATE = %d/%d\n",1,31);
}else if(month == 2,day > 28){
printf("DATE = %d/%d\n",2,28);
}else if(month == 3,day > 31){
printf("DATE = %d/%d\n",3,31);
}else if(month == 4,day > 30){
printf("DATE = %d/%d\n",4,30);
}else if(month == 5,day > 31){
printf("DATE = %d/%d\n",5,31);
}else if(month == 6,day > 30){
printf("DATE = %d/%d\n",6,30);
}else if(month == 7,day > 31){
printf("DATE = %d/%d\n",7,31);
}else if(month == 8,day > 31){
printf("DATE = %d/%d\n",8,31);
}else if(month == 9,day > 30){
printf("DATE = %d/%d\n",9,30);
}else if(month == 10,day > 31){
printf("DATE = %d/%d\n",10,31);
}else if(month == 11,day > 30){
printf("DATE = %d/%d\n",11,30);
}else if(month == 12,day > 31){
printf("DATE = %d/%d\n",12,31);
}else{
printf("DATE = %d/%d\n",month,day);
}
}
int main(int, char **){
MyDate today;
today.changeMonth(12);
today.changeDay(35);
return 0;
}
それで、
初期化するコンストラクタなんですが、
void MyDate::Date~
のような感じでいいのでしょうか?
argMonthとかargDayとかいらないですか?ただMonthとDayだけでいいでしょうか?
print()のメンバ関数なんですが、条件式の中に組込むとメンバ関数がいらないんじゃないか、と思ってしまうのですが、条件式の最後のelse{~}の中身を入れればいいでしょうか?
あと、today.changeMonth(12);
today.changeDay(35);
と入れると、12/-858993460とでてしまうのですが、
条件式が間違ってるんでしょうか?
質問が多くてすみません。
よろしければ、回答よろしくお願いします。
お礼
tom04さん、早速の回答ありがとうございます!! 上手く出来ました(*^_^*) 差し支えなければ教えて頂きたいのですが、ROW(A1)・・・分からないのですが、A1を日付部分に指定するところはどうしてなのでしょうか?ROWは行を意味すると思うんですが、、、ますますこんがらがってしまいました(汗) 出来れば、で結構です。 お手数おかけいたしますが、よろしくお願いいたします。