第27章 家計簿を作ろう その1


今回から、家計簿のプログラムに挑戦です。

いろんな規則やら、文法みたいのには飽きた!

という方には、朗報ですね。少し具体的なプログラムを作って 解説していきます。普通のプログラムを書くには、今まで やってきた知識があれば十分です。 では、少しずつ作っていくことにします。 まず、例によってクラスを考えましょう。 安直に「家計簿」クラスを作ります。 データメンバは、とりあえず「残金」にしておきましょう。 また、このデータメンバのデータ型は簡単のために 初心者にとっきつやすい「int」型にしましょう。 ですから、この家計簿ではint型を越える数値は取り扱えません。 気にくわない人は、long型にして下さい。

#include <iostream.h> class Kakeibo { int zankin; public: Kakeibo(); void Input(int); void Output(int); void Disp(void); }; Kakeibo::Kakeibo(void) { zankin = 0; } void Kakeibo::Input(int mon) { zankin += mon; return; } void Kakeibo::Output(int mon) { zankin -= mon; return; } void Kakeibo::Disp(void) { cout << "残金は" << zankin << "円です" << endl; return; } int main(void) { char sw; int okane; cout << "家計簿" << endl; cout << "I:収入 O:支出 D:残金表示 E:終了" << endl; Kakeibo Mykakei; while(1) { cout << "何をしますか="; cin >> sw; switch(sw) { case 'I':cout << "収入金額="; cin >> okane; Mykakei.Input(okane); break; case 'O':cout << "支出金額="; cin >> okane; Mykakei.Output(okane); break; case 'D':Mykakei.Disp(); break; case 'E':cout << "終了します" << endl; goto End; break; default:cout << "もう一度入力して下さい" << endl; break; } } End: return 0; }


まずは、main関数からみてみましょう。 ここでは、MyKakeiオブジェクトを生成して、 処理を求めるプログラムです。 switch(ここ)の「ここ」にはint型の変数が入ることに 注意して下さい。どうして、char型のswが入っているか わからない人はC言語編第7章をみて下さい。 switch文の中では、swの値によっていろいろなメンバ関数を 呼び出しています。Inputは収入、Outputは支出に関係 あるというのは、想像できますね。変数とか、クラス名とか、 関数名は、その名前をみただけでどんなものか、想像がつく ものにしましょう。

次に、Kakeiboクラスをみてみましょう。 データメンバは、zankinのみです。 しかも、これはprivateですから、クラス外からは 参照も、書き換えもできません。 間違って、残金を書き換えられたら大変ですから、 これは当然ですね。世の中では、 「情報公開」 というのが、流行していますが、プログラムの世界では、 「データの隠蔽」 というのが大流行です。

次に、メンバ関数をみてみましょう。 コンストラクタKakeiboは、残金の初期化をします。 いきなり、zankinにアクセスが起こった場合 まずいことになるのでこれは当然でしょう。 この場合、コンストラクタが呼ばれると常に 残金が0円になってしまいます。後々問題が 起こりそうですね。でも今回は簡単のためにこのまま にしておきましょう。

Inputメンバ関数は、残金にその引数を加えます。

zankin += mon;

という書き方は、わかりますね。

zankin = zankin + mon;

と同じです。よくわからない人は、C言語編を 復習してみて下さい。

Outputメンバ関数も、残金から引数を引くだけで 説明の必要はないでしょう。

Dispメンバ関数は、残金を表示します。

特別難しいことは、していないので 今回のプログラムは、すぐに理解できたことと思います。

実行結果は、左の通りです。

xなどという入力をすると「もう一度入力して下さい」 と注意を促している点に注意して下さい。

このプログラムでは、いろいろ不満がありますね。 たとえば、残金がマイナスになっても何も 注意されません。それと、一度終了してしまうと 次回は、残金0から再出発です。 その他、いろいろ問題点があります。 少しずつ問題を解決していきましょう。


[C++Index] [総合Index] [Previous Chapter] [Next Chapter]

Update Feb/21/1997 By Y.Kumei
当ホーム・ページの一部または全部を無断で複写、複製、 転載あるいはコンピュータ等のファイルに保存することを禁じます。