図1は、本発明の一実施形態である電子式金銭登録機(Electronic Cash Register:以下「ECR」という)1の構成を示すブロック図である。記憶装置であるECR1は、制御部11、ランダムアクセスメモリ(Random Access Memory:略称「RAM」)12、データ格納用フラッシュメモリ(俗称「フラッシュROM(Read Only Memory)」:以下「フラッシュROM」という)13、プログラム格納ROM14、表示部15、プリンタ16、時計17、キーボード18、通信部19、SDカードインタフェース部20、バーコードスキャナ21およびドロア22を含んで構成される。
制御手段である制御部11は、たとえば中央処理装置(Central Processing Unit:略称「CPU」)によって構成され、プログラム格納ROM14に記憶されるプログラムを実行することによって、RAM12、フラッシュROM13、表示部15、プリンタ16、時計17、キーボード18、通信部19、セキュアデジタル(Secure Digital:略称「SD」)カードインタフェース部20、バーコードスキャナ21およびドロア22を制御する。
第1の記憶手段であるRAM12は、たとえばスタティックRAM(以下「SRAM」という)によって構成される。RAM12は、制御部11がプログラムを実行するために必要な情報を記憶し、制御部11によって情報の書込みおよび読出しが行われる。RAM12は、書換え頻度が予め定める基準頻度以上、たとえば1日に2回以上の書換えが発生する情報を記憶する。RAM12には、たとえば、第1商品マスタ情報121、表示/印字用データ127、レシート計算用データ128、商品マスタ情報メモリ構成テーブル125およびフラッシュROM書込みポインタテーブル126が記憶される。RAM12は、書換え回数に制限はない。
第1商品マスタ情報121は、商品マスタインデックス情報122、単価情報123および当日売上情報124を含む。商品マスタインデックス情報122は、商品に関する複数の項目の情報が記憶されているアドレスを示すインデックスを表す情報である。単価情報123は、各商品の単価を表す情報である。当日売上情報124は、日単位の商品の売上金額を表す情報である。表示/印字用データ127は、表示部15に表示させるための情報およびプリンタ16に印刷させるための情報である。レシート計算用データ128は、販売した商品に対するレシートを作成するための情報である。商品マスタ情報メモリ構成テーブル125は、商品に関する複数の項目の情報がどの記憶媒体のどこに何バイト単位で記憶されているかを示すテーブルである。フラッシュROM書込みポインタテーブル126は、フラッシュROM13に形成される各ブロックの未使用の領域、つまり未書込みの領域の先頭アドレス、つまり書込み可能な領域の先頭アドレスを表す書込みポインタを記憶するテーブルである。単価情報123および当日売上情報124は、第1の項目の情報である。インデックスは、特定情報である。
第2の記憶手段であるフラッシュROM13は、書換え回数に制限がある半導体メモリである。フラッシュROM13の価格は、RAM12の価格よりも低価格である。フラッシュROM13は、制御部11がプログラムを実行するために必要な情報を記憶し、制御部11によって情報の書込みおよび読出しが行われる。フラッシュROM13に書込まれた情報を書換えるためには、書込まれている情報を一旦消去してから、書込む必要がある。
フラッシュROM13は、書換え頻度が予め定める基準頻度未満、たとえば1日に2回未満の書換えが発生する情報を記憶する。すなわち、フラッシュROM13には、RAM12に記憶される情報よりも更新頻度が少ない情報が記憶される。フラッシュROM13には、たとえば、第2商品マスタ情報131、および売上記録136が記憶される。
第2商品マスタ情報131は、商品名情報132、各種設定情報133、週間売上情報134および月間売上情報135を含む。商品名情報132は、各商品に命名された名称を表す情報である。各種設定情報133は、商品ごとに設定された情報であり、たとえば税種別およびグループなどの情報がある。税種別は、内税/外税および課税/非課税などの別を表す。グループは、各商品が分類されているグループを表す。週間売上情報134は、週単位の商品の売上金額を表す情報である。月間売上情報135は、月単位の商品の売上金額を表す情報である。売上記録136は、個々の売上を電子的に記憶する電子ジャーナルである。商品名情報132、各種設定情報133、週間売上情報134および月間売上情報135は、第2の項目の情報である。
プログラム格納ROM14は、たとえば書換え可能なフラッシュメモリ、あるいは書換え不可のマスクROMなどによって構成される。プログラム格納ROM14は、制御部11によって実行されるプログラムおよびテーブルを記憶する。
表示部15は、たとえば液晶ディスプレイなどの表示装置によって構成される。表示部15は、制御部11から受取る情報を表示する。プリンタ16は、たとえば印刷装置によって構成される。プリンタ16は、制御部11から受取る情報を印刷する。制御部11は、プリンタ16によって、たとえばレシートを印刷する。時計17は、時刻を計時する。制御部11は、時計17を参照することによって、時刻を認識し、あるいは時間を計測する。キーボード18は、文字、数字および記号などを入力するための複数のキーを有する入力装置である。キーボード18は、操作されたキーに対応付けられた情報を制御部11に送る。ユーザは、キーボード18を操作することによって、商品コードおよび顧客番号などの情報を入力することができる。
通信部19は、たとえば通信装置によって構成される。通信部19は、通信回線に接続される他の装置、たとえばサーバ装置と情報の送受信を行う。SDカードインタフェース部20は、着脱可能な記録媒体、たとえばSDカードを装着可能であり、装着された記録媒体に情報の書込みおよび読出しを行うためのインタフェースである。SDカードインタフェース部20は、装着された記録媒体に記録された情報を読出し、読出した情報を制御部11に送り、制御部11から受け取る情報を装着された記録媒体に書込む。SDカードには、商品マスタ、顧客マスタ、および売上記録などの情報が記憶される。バーコードスキャナ21は、バーコードを読取り、読取った情報を制御部11に送る。バーコードスキャナ21は、たとえば商品のバーコード、およびカードに記憶される顧客番号のバーコードを読取る。ドロア22は、金銭を収容する収容装置である。
制御部11は、キーボード18によって入力された情報に従って、記憶している情報の更新処理、および取引処理を行う。たとえば、制御部11は、更新処理では、商品名の変更処理を行う。また、制御部11は、取引処理では、商品の販売が行われると、商品の売上処理を行い、売上記録を更新する。売上処理では、売上金額の集計を行い、第1商品マスタ情報121の当日売上情報、ならびに第2商品マスタ情報131の週間売上情報134および月間売上情報135を更新する精算処理を行う。
制御部11は、データ送受信部111および各種データ作成部112を含む。データ送受信部111および各種データ作成部112は、制御部11がプログラム格納ROM14に記憶されるプログラムを実行することによって実現される機能である。データ送受信部111は、通信部19によって、たとえば通信回線に接続されるサーバ装置と情報の送受信を行う。各種データ作成部112は、表示用データや印字用データを作成する。制御部11は、各種データ作成部112によって作成された表示用データを表示部15に表示させ、また、各種データ作成部112によって作成された印字用データをプリンタ16に印刷させる。
図2は、商品マスタ情報30の構成を示す図である。商品マスタ情報30は、商品に関する複数の項目の情報を商品コードごとに示す情報である。商品マスタ情報30は、商品コード301、商品名302、単価303、各種設定304、当日売上金額305、週間売上金額306および月間売上金額307の項目を含む。
商品コード301は、各商品を識別するための識別情報である。商品コード301は、自然数によって表される。商品名302は、各商品に命名された名称である。単価303は、各商品の1個当たりの価格である。各種設定304は、税種別およびグループなど予め設定されている情報である。当日売上金額305は、日単位の売上金額である。週間売上金額306は、週単位の売上金額である。月間売上金額307は、月単位の売上金額である。
図2に示した商品マスタ情報30には、商品名302、単価303、各種設定304、当日売上金額305、週間売上金額306および月間売上金額307が、商品コードごとに行単位で表わされている。図2に示した商品マスタ情報30は、商品コードの昇順に配列されているが、降順であってもよい。
図2には、商品コード「00001」について、商品名「ウーロン茶」、単価「150」、各種設定「内税、第1グループ」、当日売上金額「66,000円」、週間売上金額「330,000円」、および月間売上金額「1,500,000円」が示されている。商品コード「00002」については、商品名「緑茶A」、単価「150」、各種設定「内税、第1グループ」、当日売上金額「75,000円」、週間売上金額「412,500円」、および月間売上金額「2,200,000円」が示されている。商品コード「00003」については、商品名「緑茶B」、単価「150」、各種設定「内税、第1グループ」、当日売上金額「6,000円」、週間売上金額「36,000円」、および月間売上金額「150,000円」が示されている。商品コード「00011」については、商品名「アンパン」、単価「100」、各種設定「内税、第2グループ」、当日売上金額「8,000円」、週間売上金額「48,000円」、および月間売上金額「120,000円」が示されている。商品コード「00012」については、商品名「サンドイッチ」、単価「250」、各種設定「内税、第2グループ」、当日売上金額「8,750円」、週間売上金額「70,000円」、および月間売上金額「250,000円」が示されている。商品コード「00101」については、商品名「商品券A」、単価「1000」、各種設定「非課税、第3グループ」、当日売上金額「12,000円」、週間売上金額「80,000円」、および月間売上金額「385,000円」が示されている。商品コード「00102」については、商品名「商品券B」、単価「1000」、各種設定「非課税、第3グループ」、当日売上金額「5,000円」、週間売上金額「20,000円」、および月間売上金額「72,000円」が示されている。
図3は、RAM12に記憶される情報の構成を示す図である。RAM12には、表示/印字用データ127、レシート計算用データ128、商品マスタインデックス情報122、単価情報123、当日売上情報124、商品マスタ情報メモリ構成テーブル125およびフラッシュROM書込みポインタテーブル126が記憶されている。商品マスタインデックス情報122、単価情報123および当日売上情報124は、第1商品マスタ情報121を構成する。
図4は、フラッシュROM13に記憶される情報の構成を示す図である。フラッシュROM13には、14個の第2商品マスタ情報131、および2個の売上記録136が、ブロック単位に記憶される。1つのブロックに記憶される第2商品マスタ情報131は64Kバイトで構成され、1つのブロックに記憶される売上記録136は64Kバイトで構成される。
図5は、プログラム格納ROM14に記憶される情報の構成を示す図である。プログラム格納ROM14には、第1アプリケーションプログラム141、第2アプリケーションプログラム142、商品マスタ情報更新処理プログラム143、フラッシュROMブロック構成テーブル144、および第nアプリケーションプログラム145が、この順序で記憶されている。第1アプリケーションプログラム141、第2アプリケーションプログラム142および第nアプリケーションプログラム145は、アプリケーションプログラムである。
商品マスタ情報更新処理プログラム143は、商品マスタ情報30の更新を行うプログラムであり、後述する商品名変更処理および精算処理を行う。フラッシュROMブロック構成テーブル144は、フラッシュROM13に形成される16個のブロックのそれぞれの開始アドレスおよび終了アドレスを示すテーブルである。商品マスタ情報更新処理プログラム143およびフラッシュROMブロック構成テーブル144は、商品マスタ更新処理プログラムを構成する。
図6は、フラッシュROMブロック構成テーブル144の構成を示す図である。たとえば、第1ブロックの開始アドレスは、「0x00000」であり、終了アドレスは、「0x0FFFF」である。第2ブロックの開始アドレスは、「0x10000」であり、終了アドレスは、「0x1FFFF」である。第3ブロックの開始アドレスは、「0x20000」であり、終了アドレスは、「0x2FFFF」である。第4ブロックの開始アドレスは、「0x30000」であり、終了アドレスは、「0x3FFFF」である。第16ブロックの開始アドレスは、「0xF0000」であり、終了アドレスは、「0xFFFFF」である。ここに、「0x」は、C言語の記述様式であり、16進数の数値であることを示す。
図7は、商品マスタ情報メモリ構成テーブル125の構成を示す図である。商品マスタ情報30に含まれる各項目の情報がどの記憶媒体のどこに何バイト単位で記憶されているかを示すテーブルである。
メモリタイプは、各項目の情報が記憶されている記憶媒体を示す情報である。「RAM」は、記憶媒体がRAM12であることを示し、「FlashROM」は、記憶媒体がフラッシュROM13であることを示す。メモリサイズ(バイト数)は、各項目の情報の長さをバイト数で表す情報である。開始アドレス/ブロックは、メモリタイプが「RAM」の場合、各項目の情報が記憶されている先頭のアドレスを示し、メモリタイプが「FlashROM」の場合、各項目の情報が記憶されている先頭のブロック番号を示す。終了アドレス/ブロックは、メモリタイプが「RAM」の場合、各項目の情報が記憶されている最後のアドレスを示し、メモリタイプが「FlashROM」の場合、各項目の情報が記憶されている最後のブロック番号を示す。
図7には、6つの項目の情報、具体的には、単価情報123、当日売上情報124、商品名情報132、各種設定情報133、週間売上情報134および月間売上情報135が示されている。各項目の情報についての「メモリタイプ」、「メモリサイズ(バイト数)」、「開始アドレス/ブロック」および「終了アドレス/ブロックは、単価情報123については、「RAM」、「3」、「0x08000」および「0x085DB」である。当日売上情報124については、「RAM」、「8」、「0x085DC」および「0x0957B」である。商品名情報132については、「FlashROM」、「16」、「1」および「2」である。各種設定情報133については、「FlashROM」、「2」、「1」および「2」である。週間売上情報134については、「FlashROM」、「8」、「3」および「3」である。月間売上情報135については、「FlashROM」、「8」、「4」および「4」である。
図8は、フラッシュROM書込みポインタテーブル126の構成を示す図である。フラッシュROM書込みポインタテーブル126は、各ブロックの書込みポインタの値を記憶するテーブルである。書込みポインタは、ブロック内の未使用領域の先頭のアドレスを示すポインタである。図8には、第1ブロックの書込みポインタとして、「0x0080」が示され、第2ブロックの書込みポインタとして、「0x0000」が示され、第3ブロックの書込みポインタとして、「0x0038」が示され、第4ブロックの書込みポインタとして、「0x0038」が示され、第16ブロックの書込みポインタとして、「0x0000」が示されている。
図9は、商品マスタインデックス情報122の構成を示す図である。商品マスタインデックス情報122は、レコードポインタ、および第2商品マスタ情報131が記憶されるメモリアドレスを含む。レコードポインタは、RAM12に記憶されている第1商品マスタ情報のレコードのうち、各商品コードのレコードが何番目のレコードであるかを示すポインタである。
第2商品マスタ情報が記憶されるメモリアドレスは、フラッシュROM13に記憶される商品名情報132、各種設定情報133、週間売上情報134および月間売上情報135のアドレスを、商品コードごとに示す。図9に示した商品マスタインデックス情報122は、商品コードの昇順に配列されているが、降順であってもよい。
各商品コードに対応付けられているレコードポインタ、ならびに商品名情報132、各種設定情報133、週間売上情報134および月間売上情報135のアドレスは、商品コード「00001」については、「0x0001」、「0x00000」、「0x00010」、「0x20000」、および「0x30000」である。商品コード「00002」については、「0x0002」、「0x00012」、「0x00022」、「0x20008」、および「0x30008」である。商品コード「00003」については、「0x0003」、「0x00024」、「0x00034」、「0x20010」、および「0x30010」である。商品コード「00011」については、「0x0004」、「0x00036」、「0x00046」、「0x20018」、および「0x30018」である。商品コード「00012」については、「0x0005」、「0x00048」、「0x00058」、「0x20020」、および「0x30020」である。商品コード「00101」については、「0x0006」、「0x0005A」、「0x0006A」、「0x20028」、および「0x30028」である。商品コード「00102」については、「0x0007」、「0x0006C」、「0x0007C」、「0x20030」、および「0x30030」である。
図10は、レコードポインタが示すレコードに記憶される情報を示す図である。1つのレコードは、単価情報123および当日売上情報124を含む。1つの商品コードに対応付けられる当日売上情報124は、同じ商品コードに対応付けられる単価情報123と同じ順序でRAM12に記憶される。
RAM12に記憶される各レコードには、単価情報123として、単価401が記憶され、当日売上情報124として、当日売上金額402が記憶されている。図10には、各レコードポインタが示すレコードの「単価」および「当日売上金額」として、レコードポインタ「0x0001」については、「150」および「66000」が示されている。レコードポインタ「0x0002」については、「150」および「75000」が示されている。レコードポインタ「0x0003」については、「150」および「6000」が示されている。レコードポインタ「0x0004」については、「100」および「8000」が示されている。レコードポインタ「0x0005」については、「250」および「8750」が示されている。レコードポインタ「0x0006」については、「1000」および「12000」が示されている。レコードポインタ「0x0007」については、「1000」および「5000」が示されている。いずれも単位は円である。
図11は、フラッシュROM13に記憶される第2商品マスタ情報131の構成を示す図である。図11には、左端部に、フラッシュROM13のアドレス、中央部に、左端部に記憶されるアドレスに記憶される情報、そして、右端部に、その情報の説明が記載されている。
たとえば、アドレス「0x00000」には、中央部に「ウーロン茶」が示され、右端部に「商品名情報(16文字)」が示されている。これは、フラッシュROM13のアドレス「0x00000」から、「ウーロン茶」という情報が記憶されており、その情報は、商品名情報132であり、16文字からなることを示している。また、アドレス「0x00010」には、中央部に「0x00 0x01」が示され、右端部に「各種設定情報 内税、第1グループ」が示されている。これは、フラッシュROM13のアドレス「0x00010」から、「0x00 0x01」という情報が記憶されており、その情報は、税種別およびグループの各種設定情報133であることを示している。税種別「0x00」が内税であることを示し、税種別「0x02」が非課税であることを示す。グループ「0x01」が第1グループであることを示し、グループ「0x02」が第2グループであることを示し、グループ「0x03」が第3グループであることを示す。
また、たとえば、アドレス「0x20000」には、中央部に「330000」が示され、右端部に「週間売上情報」が示されている。これは、これは、フラッシュROM13のアドレス「0x20000」から、「330000」という情報が記憶されており、その情報は、週間売上金額を表す週間売上情報134であることを示している。アドレス「0x30000」には、中央部に「330000」が示され、右端部に「月間売上情報」が示されている。これは、これは、フラッシュROM13のアドレス「0x30000」から、「330000」という情報が記憶されており、その情報は、月間売上金額を表す月間売上情報135であることを示している。
未使用のアドレスには、「0xFF」が記憶される。すなわち、未使用のアドレスには、16進数の「FF」が記憶されている。図8に示したフラッシュROM書込みポインタテーブル126には、第1ブロックの書込みポインタとして「0x00080」が記載され、第1ブロックの未使用領域がアドレス「0x00080」であることがわかる。第3ブロックの書込みポインタとして「0x20038」が記載され、第3ブロックの未使用領域がアドレス「0x20038」であることがわかる。また、第4ブロックの書込みポインタとして「0x30038」が記載され、第4ブロックの未使用領域がアドレス「0x30038」であることがわかる。
図12は、商品名変更に伴う商品マスタインデックス情報122の変更前後のデータを示す図である。図12〜図14では、商品コード「00003」の商品名「緑茶B」を、「緑茶B_500ml」に変更する場合を例にして説明する。図12(a)は、変更前の商品マスタインデックス情報122であり、図12(b)は、変更後の商品マスタインデックス情報122aである。
図12(a)に示した商品マスタインデックス情報122では、商品コード「00003」の商品名情報のアドレスは、「0x00024」であり、図12(b)に示した商品マスタインデックス情報122aでは、商品コード「00003」の商品名情報のアドレスは、「0x00080」である。すなわち、変更後の新たな商品名「緑茶B_500ml」を表す商品名情報132は、第1ブロックの未使用領域であるアドレス「0x00080」からの領域に記憶されたことを示している。変更前の商品名「緑茶B」を表す商品名情報132は、消去されずに、第1ブロックのアドレス「0x00024」からの領域に記憶されているが、図12(b)に示した商品マスタインデックス情報122aでは、商品コード「00003」の商品名情報132のアドレスが変更されているので、変更前の商品名情報132を用いることはなく、変更後の商品名情報132を用いることができる。
図13は、商品名変更に伴うフラッシュROM書込みポインタテーブル126の変更前後のデータを示す図である。図13(a)は、変更前のフラッシュROM書込みポインタテーブル126であり、図13(b)は、変更後のフラッシュROM書込みポインタテーブル126aである。
商品名情報132は、図7に示した商品マスタ情報メモリ構成テーブル125を参照すると、「16」バイトであることがわかる。商品コード「00003」の商品名「緑茶B」を、「緑茶B_500ml」に変更し、商品コード「00003」の商品名情報132が、第1ブロックの未使用領域であるアドレス「0x00080」からの領域に記憶されたことに伴い、第1ブロックの書込みポインタが、「0x0080」に16バイトを加算した「0x0090」に変更される。図13(a)に示した変更前のフラッシュROM書込みポインタテーブル126では、第1ブロックの書込みポインタが「0x0080」であるが、図13(b)に示した変更後のフラッシュROM書込みポインタテーブル126aでは、第1ブロックの書込みポインタが「0x0090」に変更されている。
図14は、商品名変更に伴う第2商品マスタ情報131の一部の変更前後のデータを示す図である。図14の左側に、変更前の第2商品マスタ情報131の一部を示し、右側に、変更後の第2商品マスタ情報131aの一部を示す。変更前の第2商品マスタ情報131では、フラッシュROM13の第1ブロックのアドレス「0x00080」以降が未使用であるが、変更後の第2商品マスタ情報131aでは、フラッシュROM13の第1ブロックのアドレス「0x00080」から、商品名「緑茶B_500ml」を表す16バイトの商品名情報132が記憶されている。第1ブロックの書込みポインタは、「0x00080」から「0x00090」に更新される。アドレス「0x00024」には、変更前の商品名「緑茶B」を表す商品名情報132が消去されずに記憶されている。
図15は、精算処理に伴う商品マスタインデックス情報122の変更前後のデータを示す図である。精算処理は、たとえば1日の終わりに実行される。具体的には、1日の終わりに、売上週計レポートを発行し、「当日売上金額」を「週間売上金額」および「月間売上金額」にそれぞれ加算し、翌日に備えて「当日売上金額」を初期化する。図15(a)は、変更前の商品マスタインデックス情報122であり、図15(b)は、変更後の商品マスタインデックス情報122bである。
図15(a)に示した変更前の商品マスタインデックス情報122は、精算処理が実行される前の週間売上情報のアドレスおよび月間売上情報のアドレスを示している。図15(a)に示した週間売上情報のアドレスおよび月間売上情報のアドレスは、図11に示した第2商品マスタ情報131の週間売上情報134および月間売上情報135が記憶されているフラッシュROM13のアドレスである。
図15(b)に示した週間売上情報のアドレスおよび月間売上情報のアドレスは、精算処理後の週間売上情報134および月間売上情報135が記憶されているフラッシュROM13のアドレスである。精算処理後の週間売上情報134は、フラッシュROM13の第2ブロックの未使用領域に記憶され、精算処理後の月間売上情報135は、フラッシュROM13の第3ブロックの未使用領域に記憶されている。
具体的には、精算処理前の週間売上情報134および月間売上情報135は、それぞれ、商品コード「00001」については、アドレス「0x20000」および「0x30000」に記憶されている。商品コード「00002」については、アドレス「0x20008」および「0x30008」に記憶されている。商品コード「00003」については、アドレス「0x20010」および「0x30010」に記憶されている。商品コード「00011」については、アドレス「0x20018」および「0x30018」に記憶されている。商品コード「00012」については、アドレス「0x20020」および「0x30020」に記憶されている。商品コード「00101」については、アドレス「0x20028」および「0x30028」に記憶されている。商品コード「00102」については、アドレス「0x20030」および「0x30030」に記憶されている。
そして、精算処理後の週間売上情報134および月間売上情報135は、それぞれ、商品コード「00001」については、アドレス「0x20038」および「0x30038」に記憶されている。商品コード「00002」については、アドレス「0x20040」および「0x30040」に記憶されている。商品コード「00003」については、アドレス「0x20048」および「0x30048」に記憶されている。商品コード「00011」については、アドレス「0x20050」および「0x30050」に記憶されている。商品コード「00012」については、アドレス「0x20058」および「0x30058」に記憶されている。商品コード「00101」については、アドレス「0x20060」および「0x30060」に記憶されている。商品コード「00102」については、アドレス「0x20068」および「0x30068」に記憶されている。
図16は、精算処理に伴う当日売上金額402の変更前後のデータを示す図である。図16(a)は、変更前の当日売上金額402であり、図16(b)は、変更後の当日売上金額402aである。すなわち、図16(a)に示した変更前の当日売上金額402は、精算処理を行う前の当日売上金額であり、各レコードポインタが示すレコードに記憶されている。図16(b)に示した変更後の当日売上金額402aは、精算処理を行なった後の当日売上金額であり、各レコードポインタが示すレコードに記憶されている。
図16(a)には、各レコードポインタが示すレコードに記憶される当日売上金額402が示されている。レコードポインタ「0x0001」については「66000」である。レコードポインタ「0x0002」については「75000」である。レコードポインタ「0x0003」については「6000」である。レコードポインタ「0x0004」については「8000」である。レコードポインタ「0x0005」については「8750」である。レコードポインタ「0x0006」については「12000」である。レコードポインタ「0x0007」については「5000」である。
図16(b)には、各レコードポインタが示すレコードに記憶される当日売上金額402aが示されている。レコードポインタ「0x0001」〜「0x0007」のいずれにも「0」が記憶されている。すなわち、1日の精算処理が終了したので、翌日以降の処理に備えて、すべての当日売上金額402aは、「0」に初期化されている。
図17は、精算処理に伴うフラッシュROM書込みポインタテーブル126の変更前後のデータを示す図である。図17(a)は、変更前のフラッシュROM書込みポインタテーブル126であり、図17(b)は、変更後のフラッシュROM書込みポインタテーブル126bである。
週間売上情報134および月間売上情報135は、図7に示した商品マスタ情報メモリ構成テーブル125を参照すると、いずれも「8」バイトであることがわかる。精算処理後の週間売上情報134は、第3ブロックの未使用領域の先頭アドレス、つまり図17(a)に示したフラッシュROM書込みポインタテーブル126の第3ブロックの書込みポインタが示すアドレスから記憶される。精算処理後の月間売上情報135は、第4ブロックの未使用領域の先頭アドレス、つまり図17(a)に示したフラッシュROM書込みポインタテーブル126の第4ブロックの書込みポインタが示すアドレスから記憶される。
7つの商品コードについて精算処理を行ったので、精算処理後の第3ブロックの書込みポインタは、図17(a)に示したフラッシュROM書込みポインタテーブル126の第3ブロックの書込みポインタ「0x0038」に、56バイトを加算して、図17(b)に示したフラッシュROM書込みポインタテーブル126の第3ブロックの書込みポインタ「0x0070」となる。同様に、精算処理後の第4ブロックの書込みポインタは、図17(a)に示したフラッシュROM書込みポインタテーブル126の第4ブロックの書込みポインタ「0x0038」に、56バイトを加算して、図17(b)に示したフラッシュROM書込みポインタテーブル126の第4ブロックの書込みポインタ「0x0070」となる。
図18は、精算処理に伴う第2商品マスタ情報131の他の一部の変更前後のデータを示す図である。図18の左側に、変更前の第2商品マスタ情報131の他の一部を示し、右側に、変更後の第2商品マスタ情報131bの他の一部を示す。
変更前の第2商品マスタ情報131では、フラッシュROM13の第3ブロックのアドレス「0x20038」以降が未使用であるが、変更後の第2商品マスタ情報131bでは、フラッシュROM13の第3ブロックのアドレス「0x20038」から、7つの商品コード「00001」〜「00007」についての週間売上情報134が記憶されている。第3ブロックの書込みポインタは、「0x20038」から「0x20070」に更新される。
アドレス「0x20038」には、商品コード「00001」の週間売上金額「396000」が週間売上情報134として記憶されている。アドレス「0x20040」には、商品コード「00002」の週間売上金額「487500」が週間売上情報134として記憶されている。アドレス「0x20048」には、商品コード「00003」の週間売上金額「52000」が週間売上情報134として記憶されている。アドレス「0x20050」には、商品コード「00011」の週間売上金額「56000」が週間売上情報134として記憶されている。アドレス「0x20058」には、商品コード「00012」の週間売上金額「78750」が週間売上情報134として記憶されている。アドレス「0x20060」には、商品コード「00101」の週間売上金額「92000」が週間売上情報134として記憶されている。アドレス「0x20068」には、商品コード「00102」の週間売上金額「25000」が週間売上情報134として記憶されている。
同様に、変更前の第2商品マスタ情報131では、フラッシュROM13の第4ブロックのアドレス「0x30038」以降が未使用であるが、変更後の第2商品マスタ情報131bでは、フラッシュROM13の第4ブロックのアドレス「0x30038」から、7つの商品コード「00001」〜「00007」についての月間売上情報135が記憶されている。第4ブロックの書込みポインタは、「0x30038」から「0x30070」に更新される。
アドレス「0x30038」には、商品コード「00001」の月間売上金額「1566000」が月間売上情報135として記憶されている。アドレス「0x30040」には、商品コード「00002」の月間売上金額「2275000」が月間売上情報135として記憶されている。アドレス「0x30048」には、商品コード「00003」の月間売上金額「156000」が月間売上情報135として記憶されている。アドレス「0x30050」には、商品コード「00011」の月間売上金額「128000」が月間売上情報135として記憶されている。アドレス「0x30058」には、商品コード「00012」の月間売上金額「258750」が月間売上情報135として記憶されている。アドレス「0x30060」には、商品コード「00101」の月間売上金額「397000」が月間売上情報135として記憶されている。アドレス「0x30068」には、商品コード「00102」の月間売上金額「77000」が月間売上情報135として記憶されている。
図19は、商品名変更処理の処理手順を示すフローチャートである。商品名変更処理は、すでに命名されている商品名を変更するための処理であり、たとえば利用者が、キーボード18によって、メインメニューから商品名変更の機能を選択すると、ステップA1に進む。
ステップA1では、利用者が商品コードと商品名とをキーボード18によって入力すると、キーボード18は、操作されたキーが示す情報を制御部11に送る。制御部11は、キーボード18から、入力された情報、つまり商品コードと商品名とを表す情報を受け取る。
ステップA2では、制御部11は、書込む対象の項目を表す対象項目変数(図では「[項目]」という)に「商品名」を代入し、書込む内容を表す書込み内容変数(図では「[書込み内容]」という)に、ステップA1で入力された商品名を代入する。ステップA3では、制御部11は、入力された商品コードに対する商品マスタ情報(以下「商品マスタデータ」という)の書込み処理を行って、商品名変更処理を終了する。商品マスタデータは、第1商品マスタ情報121および第2商品マスタ情報131のことである。商品マスタデータの書込み処理については、図22,23で後述する。
図20は、精算処理の処理手順を示すフローチャートである。精算処理は、販売した商品の清算を行うための処理であり、たとえば利用者が、キーボード18によって、メインメニューから精算処理の機能を選択すると、ステップB1に進む。
ステップB1では、制御部11は、インデックス変数「indexNo.」に「1」を代入する。インデックス変数「indexNo.」は、商品マスタインデックス情報122の商品コードのうち、どの商品コードであるかを示す変数である。具体的には、インデックス変数「indexNo.」は、図9に示した商品マスタインデックス情報122の商品コードのうち上から何番目であるかを示す。
ステップB2では、制御部11は、商品マスタインデックス情報122(以下、「商品マスタインデックス」という)から、インデックス変数「indexNo.」に対するインデックスデータを取得する。インデックスデータは、図9に示した商品マスタインデックス情報122の情報である。制御部11は、インデックス変数「indexNo.」が示す商品コードの1行の情報を、1つのレコードとして取得する。インデックス変数「indexNo.」が示す位置に商品コードがないときは、商品コードを「0」とする。
ステップB3では、制御部11は、取得したレコードに記憶されている商品コードを、商品コード変数(図では、「(商品コード)」という)に代入する。ステップB4では、制御部11は、商品コードが無いか否かを判定する。すなわち、レコードが終了したか否かを判定する。制御部11は、商品コード変数が「0」であるとき、商品コードが無いと判定し、精算処理を終了する。商品コード変数が「0」でないとき、商品コードがあると判定し、ステップB5に進む。
ステップB5では、制御部11は、読出す対象項目変数に「当日売上情報」を代入する。ステップB6では、制御部11は、商品コード変数が示す商品コードに対する商品マスタデータの読出し処理を実行する。商品マスタデータの読出し処理については、図21で後述する。ステップB6では、制御部11は、読出したデータを当日売上金額変数(図では、「(当日売上金額)」という)」に代入する。
ステップB8では、制御部11は、読出す対象項目変数に「週間売上情報」を代入する。ステップB9では、制御部11は、商品コード変数が示す商品コードに対する商品マスタデータの読出し処理を実行する。ステップB10では、制御部11は、読出したデータを週間売上金額変数(図では、「(週間売上金額)」という)」に代入する。ステップB11では、制御部11は、週間売上金額変数が示す週間売上金額に、当日売上金額変数が示す当日売上金額を加算した値を、週間売上金額変数に代入して、新たな週間売上金額変数とする。
ステップB12では、制御部11は、読出す対象項目変数に「月間売上情報」を代入する。ステップB13では、制御部11は、商品コード変数が示す商品コードに対する商品マスタデータの読出し処理を実行する。ステップB14では、制御部11は、読出したデータを月間売上金額変数(図では、「(月間売上金額)」という)」に代入する。ステップB15では、制御部11は、月間売上金額変数が示す月間売上金額に、当日売上金額変数が示す当日売上金額を加算した値を、月間売上金額変数に代入して、新たな月間売上金額変数とする。
ステップB16では、制御部11は、書込む対象項目変数に「週間売上情報」を代入し、書込み内容変数に、週間売上金額変数の値を代入する。ステップB17では、制御部11は、商品コード変数が示す商品コードに対する商品マスタデータの書込み処理を実行する。ステップB18では、制御部11は、書込む対象項目変数に「月間売上情報」を代入し、書込み内容変数に、月間売上金額変数の値を代入する。ステップB19では、制御部11は、商品コード変数が示す商品コードに対する商品マスタデータの書込み処理を実行する。ステップB20では、制御部11は、書込む対象項目変数に「当日売上情報」を代入し、書込み内容変数に、「0」の値を代入する。ステップB21では、制御部11は、商品コード変数が示す商品コードに対する商品マスタデータの書込み処理を実行する。ステップB22では、制御部11は、インデックス変数「indexNo.」に「1」を加算して、新たなインデックス変数「indexNo.」として、ステップB2に戻る。
図21は、商品マスタデータ読出処理の処理手順を示すフローチャートである。商品マスタデータ読出処理は、対象項目変数が示す項目について、商品コード変数が示す商品コードに対する商品マスタデータを読出す処理である。図20に示したステップB6,B9,B13が実行されたとき、ステップC1に移る。
ステップC1では、制御部11は、商品マスタインデックスから商品コード変数が示す商品コードに対するインデックスデータを取得する。ステップC2では、制御部11は、商品マスタ情報メモリ構成テーブル125から、指定された対象項目変数が示す項目のメモリサイズを取得する。ステップC3では、制御部11は、商品マスタ情報メモリ構成テーブル125から、指定された対象項目変数が示す項目のメモリタイプを取得する。
ステップC4では、制御部11は、メモリタイプがFlashROMであるか否かを判定する。制御部11は、メモリタイプがFlashROMであるとき、ステップC5に進み、メモリタイプがFlashROMでないとき、つまりメモリタイプがRAMのとき、ステップC7に進む。ステップC5では、制御部11は、インデックスデータから、指定された対象項目変数が示す項目のメモリアドレスを取得する。ステップC6では、制御部11は、取得したメモリアドレスから、メモリサイズ分のデータを取得し、取得したデータを上位アプリケーション(図では「上位アプリ」という)、つまり図20に示した精算処理に渡し、商品マスタデータ読出処理を終了する。
ステップC7では、制御部11は、商品マスタ情報メモリ構成テーブル125から、指定された対象項目変数が示す項目の開始アドレスを取得する。ステップC8では、制御部11は、インデックスデータからレコードポインタを取得する。ステップC9では、制御部11は、ステップC7で取得した開始アドレス、ステップC8で取得したレコードポインタ、およびステップC2で取得したメモリサイズから、対象データを記憶しているメモリアドレスを算出する。対象データは、対象項目変数が示す項目の情報である。ステップC10では、制御部11は、算出したメモリアドレスからメモリサイズ分のデータを取得し、取得したデータを上位アプリケーション、つまり図20に示した精算処理に渡し、商品マスタデータ読出処理を終了する。
図22,23は、商品マスタデータ書込処理の処理手順を示すフローチャートである。商品マスタデータ書込処理は、対象項目変数が示す項目について、書込み内容変数が示す書込む内容を、商品コード変数が示す商品コードに対する商品マスタデータに書込む処理である。図19に示したステップB3、または図20に示したステップB17,B19,B21が実行されたとき、ステップD1に移る。
ステップD1〜D7での処理は、図21に示したステップC1〜C4,C7〜C9と同じ処理であり、重複を避けるために説明は省略する。ステップD8では、制御部11は、算出したメモリアドレスからメモリサイズ分の領域に、指定された書込み内容変数が示す書込む内容を書き込んで記録し、商品マスタデータ書込処理を終了する。
ステップD11では、制御部11は、商品マスタ情報メモリ構成テーブル125から、指定された対象項目変数が示す項目の開始ブロックの番号および終了ブロックの番号を取得する。ステップD12では、制御部11は、ブロックの番号を表すブロック番号変数(図では「(ブロック番号)」という)に、ステップD11で取得した開始ブロックの番号を代入する。
ステップD13では、制御部11は、フラッシュROM書込みポインタテーブル126から、ブロック番号変数が示すブロック番号に対応する書込みポインタを取得する。ステップD14では、制御部11は、書込みポインタの値が「0xFFFF」であるか否かを判定する。制御部11は、書込みポインタの値が「0xFFFF」であるとき、ステップD21に進み、書込みポインタの値が「0xFFFF」でないとき、ステップD15に進む。
ステップD15では、制御部11は、フラッシュROMブロック構成テーブル144からブロック番号変数が示すブロック番号に対応する開始アドレスを取得する。ステップD16では、制御部11は、ステップD15で取得した開始アドレスに、ステップD13で取得した書込みポインタの値を加算したアドレスを、書込みアドレスを表す書込みアドレス変数(図では「(書込みアドレス)」という)に代入する。ステップD17では、制御部11は、算出した書込みアドレス、つまり書込みアドレス変数が示す書込みアドレスから、ステップD2で取得したメモリサイズ分の領域に、指定された書込み内容変数が示す書込む内容を書き込んで記録する。
ステップD18では、制御部11は、商品マスタインデックスの商品コード変数が示す商品コードに対する項目のうち、対象項目変数が示す項目のメモリアドレスに、書込みアドレス変数が示す書込みアドレスを書込んで記録する。ステップD19では、制御部11は、ステップD13で取得した書込みポインタが示す値に、ステップD2で取得したメモリサイズを加算した値を、書込みポインタ変数に代入する。ステップD20では、制御部11は、フラッシュROM書込みポインタテーブル126のブロック番号のうちブロック番号変数が示すブロック番号の書込みポインタに、書込みポインタ変数が示す書込みポインタを書込んで記録し、商品マスタデータ書込処理を終了する。
ステップD21では、制御部11は、ブロック番号変数が示すブロック番号に「1」を加算して、「1」加算したブロック番号を新たなブロック番号としてブロック番号変数に代入する。ステップD22では、制御部11は、ブロック番号変数が示すブロック番号が終了ブロックであるか否かを判定する。制御部11は、ブロック番号変数が示すブロック番号が終了ブロックであるとき、ステップD23に進み、ブロック番号変数が示すブロック番号が終了ブロックでないとき、ステップD13に戻る。終了ブロックは、たとえば第16ブロックである。
ステップD23では、制御部11は、ガーベージ処理を行って、ステップD11に戻る。ガーベージ処理は、フラッシュROMに記憶されるブロックを整理する処理である。具体的には、ガーベージ処理は、情報を更新した際に消去されずに記憶されている未使用の情報を消去する処理であり、従来技術を用いて行われる。
図24は、従来技術による商品名変更での商品マスタ情報の書換えを説明するための図である。従来技術では、図2に示した商品マスタ情報30をフラッシュROM13に記憶している。図24(a)は、商品コードごとのレコードポインタを示す商品マスタインデックス情報91を示す。図24(b)は、商品コード「00003」の商品名「緑茶B」を、商品名「緑茶B_500ml」に更新したフラッシュROM13に記憶されている商品マスタ情報92を示す。
従来技術では、商品コード「00003」の商品名のアドレスに記憶される商品名「緑茶B」が消去された後、同じアドレスに商品名「緑茶B_500ml」が書込まれる。すなわち、商品名の更新が行われる度に消去が発生する。これに対して、本発明では、図14に示すように、変更後の商品名「緑茶B_500ml」は未使用の領域に書き込まれるので、変更前の商品名「緑茶B」は消去されることはなく記憶されたままである。
図25は、従来技術による精算処理での変更前後の商品マスタ情報を示す図である。従来技術では、図2に示した商品マスタ情報30をフラッシュROM13に記憶している。図25(a)は、変更前にフラッシュROM13に記憶されている商品マスタ情報93を示す。図25(b)は、変更後にフラッシュROM13に記憶されている商品マスタ情報94を示す。
従来技術では、精算処理が行われると、フラッシュROMに記憶されるすべての商品コードについての当日売上金額が「0」とされ、フラッシュROMに記憶されるすべての商品コードについての週間売上金額および月間売上金額に、当日売上金額が加算されて更新される。この場合、フラッシュROMに記憶される変更前のすべての商品コードについての当日売上金額、週間売上金額および月間売上金額は一旦消去された後、更新される。すなわち、精算処理が行われる度に消去が発生する。これに対して、本発明では、図16に示すようにRAM12に記憶される当日売上金額を更新し、また、図18に示すように、精算処理後の週間売上金額および月間売上金額をフラッシュROM13の未使用の領域に記憶する。したがって、変更前の週間売上金額および月間売上金額を消去することなく記憶したままとすることができる。
このように、本発明では、フラッシュROM13に記憶される変更前の情報を消去することなく記憶したままとし、消去することなく記憶したままとした情報は、すべてのブロックに書込みが行われた後に行われるガーベージ処理で消去されるので、フラッシュROM13の消去頻度を低減することができ、フラッシュROM13の寿命を延ばすことができる。
このように、RAM12は、書換え回数に制限がない。フラッシュROM13は、書換え回数に制限がある。そして、制御部11は、商品に関する複数の項目についての情報のうち、書換え頻度が予め定める基準頻度以上である第1の項目の情報、たとえば単価情報123および当日売上情報124をRAM12に記憶させ、書換え頻度が予め定める基準頻度未満である第2の項目の情報、たとえば商品名情報132、各種設定情報133、週間売上情報134および月間売上情報135をフラッシュROM13に記憶させる。したがって、RAM12、たとえば高価なSRAMの使用量を減らすことができ、コスト削減を図ることができる。また、書換え頻度の低い情報を書換え回数に制限のあるフラッシュROM13に記憶するので、フラッシュROM13の使用可能期間を延ばすことができる。
さらに、RAM12には、各商品を識別するための商品コード301が記憶されている。そして、制御部11は、第1の項目の情報を、商品コード301に対応付けてRAM12に記憶させ、第2の項目の情報を、商品コード301に対応付けてフラッシュROM13に記憶させる。したがって、複数の項目の情報を商品コード301ごとに管理することができる。
さらに、制御部11は、第2の項目の情報が記憶されるフラッシュROM13のアドレスを特定するインデックスを、商品コード301と対応付けてRAM12に記憶させる。したがって、RAM12に記憶されるインデックスによって、フラッシュROM13に記憶される第2の項目の情報を特定することができる。
さらに、制御部11は、フラッシュROM13に記憶される第2の項目の情報を更新するとき、変更前の第2の項目の情報を消去することなく、変更後の第2の項目の情報をフラッシュROM13の領域のうち未書込みの領域に書込み、RAM12に記憶されるインデックスを、変更後の第2の項目の情報を書込んだアドレスを特定するインデックスに書換える。したがって、第2の項目の情報を更新しても、フラッシュROM13の消去を行う必要がなく、フラッシュROM13の使用可能期間をより延ばすことができる。
さらに、商品コード301は、自然数によって表される。そして、制御部11は、第1の項目の情報を商品コード301に対応付けて商品コード301の昇順または降順にRAM12に記憶させ、第2の項目の情報を商品コード301に対応付けて商品コード301の昇順または降順にフラッシュROM13に記憶させる。したがって、商品コード301による検索を容易に行うことができる。