项目组织的最佳方式是什么?

时间:2012-01-28 21:07:11

标签: c++ c pipe project-organization

我需要开发一个简单的可移植C ++程序Billing_Unit。 它读取一些参数(电话号码等)并返回通话价格和其余免费通话时间。

我决定从标准输入中获取Billing_Unit的数据,并将结果输出到标准输出。

我开发了两个测试单元:Test_Unit_Source和Test_Unit_Destination。

我决定连续组织我的节目单位:

  1. Test_Unit_Source:从数据库中读取数据并将其放入     标准输出;
  2. Billing_Unit:从中读取标准输出     上一个单位,计算通话费用和其余免费费用     分钟,输出结果。
  3. Test_Unit_Destination:读取呼叫     费用和剩余的免费分钟数,将其存储到数据库中。

    Test_Unit_Source | Billing_Unit | Test_Unit_Destination

  4. Simplified 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;
    }
    

    Simplified 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可以合并为一个程序单元。这取决于我的决定。

    这是我项目的好组织吗? 这个项目的最佳组织是什么?可能最好通过命令行为Billing_Unit设置输入参数,但在这种情况下我不知道如何返回结果。

1 个答案:

答案 0 :(得分:2)

您的设计非常适合类似unix的语言模型:将您的程序编写为读取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

这些都是简单的例子,但我希望它们能告诉你使用像你这样的程序是多么容易。

如果您计划直接从shell运行程序,请确保将所有错误消息写入stderr而不是stdout。这会将它们与输出数据分开,因此下一个命令不会将它们作为输入处理。