我需要开发一个简单的可移植C ++程序Billing_Unit。 它读取一些参数(电话号码等)并返回通话价格和其余免费通话时间。
我决定从标准输入中获取Billing_Unit的数据,并将结果输出到标准输出。
我开发了两个测试单元:Test_Unit_Source和Test_Unit_Destination。
我决定连续组织我的节目单位:
Test_Unit_Destination:读取呼叫 费用和剩余的免费分钟数,将其存储到数据库中。
Test_Unit_Source | Billing_Unit | Test_Unit_Destination
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设置输入参数,但在这种情况下我不知道如何返回结果。
答案 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
。这会将它们与输出数据分开,因此下一个命令不会将它们作为输入处理。