2012-01-28 26 views
1

私は簡単な移植可能なC++プログラムBilling_Unitを開発する必要があります。 いくつかのパラメータ(電信電話番号など)を読み込み、通話料金と残りの分を返します。プロジェクトの組織の最良の方法は何ですか?

私はstandart入力からBilling_Unitのデータを取得し、結果をstandart出力に出力することにしました。

私はTest_Unit_SourceとTest_Unit_Destinationという2つのテストユニットを開発しました。

は、私は私のプログラム単位の連続したパフォーマンスを整理することにしました:

  1. Test_Unit_Sourceを:データベースからデータを読み込み、 スタンダール出力にそれを置きます。
  2. Billing_Unit:前のユニット からスタンドアット出力を読み込み、残りのコールのコストを計算して、残りの分を 分計算し、結果を出力します。
  3. Test_Unit_Destination: コストと残りの空き分を読み取り、データベースに保存します。

    Test_Unit_Source | Billing_Unit | Test_Unit_Destination

簡体Test_Unit_Source:

#include <stdio.h> 
#include <iostream> 
#include <fstream> 
#include <string> 

#define SUCCESS_RESULT 0 
#define ERROR_RESULT 1 

using namespace std; 

int main() { 
    signed char buf; 

    string Name_File; 
    ifstream inp_file; 

    inp_file.open("temp.txt",std::ios::binary); 

    if (!inp_file) return ERROR_RESULT; 

    do { 
     buf=inp_file.get(); 
     cout<<buf; 
    } while (!inp_file.eof()); 

    return SUCCESS_RESULT; 
} 

簡体Billing_Unit - それはポータブルにする必要があります

#include <iostream> 

#define SUCCESS_RESULT 0 
#define ERROR_RESULT 1 

int main() { 
    signed char var; 
    unsigned long res;//cents 
    signed char next_call; 

    while (!EOF_USERS) { 
     std::cin >> input_data; 
      ... 
     //calculations 
      ... 
     std::cout << result; 
    } 

    std::cout << EOF_USERS; 

    return SUCCESS_RESULT; 
} 

簡体Test_Unit_Destination:

#include <stdio.h> 
#include <iostream> 
#include <fstream> 
#include <string> 

#define SUCCESS_RESULT 0 
#define ERROR_RESULT 1 

using namespace std; 

int main() { 
    signed char buf; 

    ofstream out_file; 

    out_file.open("out.txt",std::ios::binary); 

    if (!out_file) return ERROR_RESULT; 

    while (!EOF_USERS) { 
     cin >> buf; 
     out_file << buf;   
    } 



    return SUCCESS_RESULT; 
} 

実際には、Test_Unit_SourceとTest_Unit_Destinationを1つのプログラム単位にまとめることができます。それは私の決定にかかっています。

私のプロジェクトの良い組織ですか? このプロジェクトの最高の組織は何ですか?コマンドラインからBilling_Unitの入力パラメータを設定する方が良いかもしれませんが、この場合は結果を返す方法がわかりません。

+0

コマンドライン引数については、 'int main(int argc、char * argv [])'を試してください。入力を求める前に、存在しないかどうかを確認することができます。 – chris

+0

機能テスト(ユニットテストではない)のように見えます –

+0

chris、はい、あなたはかなり正しいです。コマンドラインから入力データを取得する方法はわかっていますが、結果を返す方法はわかりません。コンパイラはint型だけを返すように求めています。 –

答えて

2

あなたの設計は、あなたのプログラムをstdinと表示し、stdoutに書き込むフィルタとしてプログラムを書くことで、データを容易に前処理または後処理することができます。あなたがそれを書いたとして

たとえば、あなたは単に

Billing_Unit <input_file> output_file 

を実行します。しかし、入力データが誤った形式であると仮定することができます。そして、あなたは

reformat_data < input_file | Billing_Unit > output_file 

を実行することができますし、

Billing_Unit < input_file | sort_by_customer > output file 

これらと出力形式を変更することができ、簡単な例ですが、私は、彼らはそれがあなたのようなプログラムで作業することがいかに簡単であるかをお見せしたいと考えています。

このようにシェルからプログラムを直接実行する場合は、stdoutではなく、エラーメッセージがstderrに書き込まれていることを確認してください。これは出力データからそれらを分離するので、次のコマンドで入力として処理されません。

+0

このようなデザインはUnix OSとWindowsに適しています。このような設計は他の運用システムに適していますか?私の仕事は移植可能なプログラムを開発することです。 –

+0

一般に、移植性は、OS固有の依存関係を避けるためのものです。あなたのプログラムは「純粋なデータ」カテゴリに分類されますので、心配する必要はありません。 'stdin'と' stdout'だけを使用するのが不快なら、ユーザがコマンドラインでオプションのファイル名を指定できるようにすることができます。名前が指定されている場合は、ファイルを使用します。もしそうでなければ 'stdin'と' stdout'を使います。あなたは両方の可能性をカバーしました。 –

+0

OK、ありがとうございました。とても便利でした。 –

関連する問題