2008-04-30-02-【Scrooge】データ構造 - 9
>> Site top >> weblog >> 月別アーカイブ >> 2008年04月のlog >> 2008-04-30-02-【Scrooge】データ構造 - 9
最終更新日付:2008/04/30 02:00:00
【Scrooge】データ構造 - 9
2008 年 04 月 30 日
今日はあまり時間がないので、小さなトピックについて。PriceDB の「詳細情報」についてだ。一昨日の図をもう一度見てみよう。
詳細情報とは、割引きイベントがある場合に使用されるものだ。問題は、これが可変長のデータになってしまうということだ。4月に入ったばかりの頃の画面イメージをもう一度。
「なし」か「週単位」か「月単位」のいずれかとなる(そう、年単位はやめようと思っている)。この3択の列挙子は詳細情報の先頭にあるべきだ。しかし、そこから先は状況によりけり、ということになる。
とりあえず、この3択を表現する列挙子を作ってみよう。そして割引きの種類(円または%か)もついでに。
enum DiscountSchedule { DISCOUNT_NONE = 0, DISCOUNT_WEEKLY = 1, DISCOUNT_MONTHLY = 2 }; enum DiscountType { DISCOUNT_YEN = 0, DISCOUNT_PERCENT = 1 };
で、いささか乱暴だが週指定の割引きを以下のようにしておく。
struct WeeklyDiscountInfo { UInt16 interval; bool dayofweek[7]; UInt16 discount; DiscountType type; };
月指定は以下のようになる。
struct MonthlyDiscountInfo { UInt16 discount; DiscountType type; char dateList[1]; };
構造体の最後に長さ1の char 配列を置くのはよく使われるテクニックで、必要な文字列分を余計にアロケートすることで、構造体の後ろに文字列バッファを置くことができるというものだ。これは Palm OS データベースの場合だって使える。
...時間切れ。続きは明日以降。
コメント
このページのタグ
Page tag : Palm
Copyright(C) 2005-2021 project-enigma.
Generated by CL-PREFAB.