xkikeg / ares Goto Github PK
View Code? Open in Web Editor NEWJRの運賃と営業キロを正確に計算するアプリケーションです。MS-DOS MARSを目標にしています。
JRの運賃と営業キロを正確に計算するアプリケーションです。MS-DOS MARSを目標にしています。
#1 が完了したらそれに合わせてaresの実装自体を変更する。
Now SQLiteStmt class provides step() which is simple wrapper of raw sqlite3_step().
This interface is quite C-like dirty one. Code shown below is better.
for(SQLiteStmt::iterator itr=stmt.begin(); itr != stmt.end(); ++itr)
{
std::cout << static_cast<int>(*itr) << std::endl;
}
-Iterator is Input Iterator.
-NULL checking is needed.
文字通り。
const char hoge[] = "AA";
は
const char * hoge = "AA";
より効率がいいらしい。
aresで用いる程度のコントロールがGTKとWindows双方でうまく動作することを確認してから用いたい。
現時点ではwxWidgetsが有力候補なので、サンプルプログラムをLinux, Windowsでビルドしてみよう。
Ubuntu 11.10 oneiricでデフォルトのサンプルは無事動作した。日本語も入力できるようだ。
未確認。VC++2010で確認すべき。
#4 の一種だが社線に対応するべき
特定の区間利用時の加算運賃や特定運賃を処理する。
三島会社と本州の乗り継ぎに対応する。
本四備讃線では加算運賃が発生するので #4 も解決する必要があるが、このIssue自体では取り扱わない。
APIで受け渡しに使う際の文字コードを何にするかは重大な問題。
char
/ std::string
で。wchar_t
/ std::wstring
で。
codecvt
などを使って適切にUTF-8をUCS-4などの文字数一定の文字列に変換する。u8""
リテラルがあるので、UTF-8は扱いやすい気がする。なぜ実際の営業キロではなく両端駅の営業キロを返すべきかというと、運賃計算キロはそれぞれ駅の営業キロに1.1倍して四捨五入して決定されているからだ。つまり区間のキロに1.1倍するのはお門違いという訳である。
これをreal, fake(営業キロと擬制キロ)を両方もたせ、CKiloでも両方持たせることにした。しかし、CKiloの内部実装でどう持とうが勝手だが、CKiloのインターフェースとしてrealとfakeを両方入力させるのは冗長である。
#4 と違って特定の経路、つまり複数の区間に亙る運賃の特例がある場合に対応する。
顕著な例では特定運賃である。
ほとんど本州の会社と一緒。
キーボードで下を連打すると重い。
駅名表示を「キーだけ入れて動的に表示」に切り替えすべき
運賃の基本は大人片道。これに小人・学割というオプションがつきうる。
さらに、往復割引や周遊きっぷアプローチ券という割引も生じうる。
ただし、これらは大人片道運賃にのみ依存するので、
class CFare {
int fare;
};
にいろんなメンバ関数を実装していく?
とりあえずルートをたどっていけば運賃が計算できる機能を付ける。
CDatabase
クラスのアーキテクチャの修正が必須かもしれない。
毎回std::vector<>
を作って返すのはパフォーマンス面で明らかに無視できない。
const std::vector<>&
を返すように修正して、内部ではデータの変更がないことは明らかなわけでキャッシュしてしまえばいいと思う(キャッシュのあるなしはifdefなりなんなりでスイッチしたほうがいいかもしれない)
地方交通線に対応する。
-幹線と乗り継ぎなら擬制キロ
-地方交通線で閉じるなら別テーブル
特定区間に収まる場合、運賃を特定のテーブルで計算する。
Windowsに限ればUTF-16で処理したほうが楽かもしれない。
あと、もしLinuxでもC++0x絡みでUTF-16が普及するなら楽だな。
CREATE VIEW station_kilo
AS SELECT * FROM (SELECT station.*,count(*) AS jointcount
FROM station NATURAL JOIN kilo GROUP BY kilo.stationid)
NATURAL JOIN kilo;
というViewを現在与えているが、さらにNATURAL JOIN line
してしまったほうが多分使い勝手はいい(それほど良くなるか?というのは置いておいて。)
しかし、自分のThinkPad X40で実行した時には付け加えた時の実行時間の遅さは半端無かった。今自分の手元のマシンで試してみると一瞬で出てきたのだが、これは再考の余地があるかもしれない(例えばたまたま重いプログラムが裏で走ってたとか)。
実際に後で実機で試して見るべき。
四国と九州は擬制キロの問題で計算手法が大きく異なる。
#1 に関連した内容だが、SQLiteStmtで構成する prepared statement と、実際の実行結果は異なるべきかもしれない。
typedef SQLiteResult * iterator; //! 嘘だけどそういう感じ。
SQLite db(":memory:");
db.execute("CREATE TABLE ...");
SQLiteStmt stmt("SELECT * FROM ...");
stmt.bind(1, ...);
for(iterator res = stmt.execute(); res; ++res)
{
std::cout << (*res)[0] << (*res)["id"] << std::endl;
}
つまりイテレータじゃないんじゃね、というわけ。
イテレータという以上は「ポインタのような何か指し示すもの」を*演算子でデリファレンスすることで値が取れないといけない。
しかし、カラムの集合[5, 8, "foo", "bar", -5]みたいなものが取れるべき値なわけで…
cppunitよりgoogletestの方がいいかもしれない。
まずcppunitはテストメソッドの自動追加とかもしてくれない。一方googletestは自動で追加してくれる。(そういうマクロなんだろうけど)
他の機能はよくわかってない。
特定都区市内制度に対応する。
だいたいの特定都区市内はある駅から中心駅までの経路は一意に特定できるけど、東京都区内ではそうは行かない。
文字通り。boostを使った代替実装を作っておかないと互換性的にまずい気がする。
もちろん自分はコマンドラインを使って、他人に公開するのはwebでもいいんだけど。
ただし、UTF-8リテラルが無いのでUTF-8を使うのが厳しい。
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.