在庫管理


miho  2001-12-16 10:23:06  No: 367  IP: [192.*.*.*]

仮に物を買うとして、購入ボタンを押したら
1個づつ減っていくというプログラムを作りたいのですが。
物に制限をかけて0になったら買えなくなるふうするには
どうすればいいでしょうか?
できればtextファイルから読み込む感じで。

知恵をお貸しください。

編集    削除
Taku  2001-12-16 16:51:15  No: 368  IP: [192.*.*.*]

整数型の変数(仮にMonoとする)をチェックして0になったら
修了するとすれば
private
 var Mono:integer; //Cardinalにしない方が良い
///////////////
dec(Mono,1);//1個マイナス
if Mono<=0 then 
   begin
        showmessage('なくなりました');
        exit;
    end;

Textとボタンの関係がよくわかりませんが
Textに個数、ボタンが確定とすれば

procedure TForm1.Button1Click(Sender: TObject);
var  N,Chk:Shortint;
begin
     //textの内容を代入。整数でなければ11になる
     N:=strtointdef(Edit1.txt,11);
     if (N>10)or(N<1) then 
        begin
             showmessage('1〜10個、又は整数を入力してください');
             exit; //再入力のため処理中止
         end;

     if (Mono>=1)and(Mono-N<=0)then 
        begin
             showmessage('あと'+inttostr(Mono)+'個で売り切れです');
             N:=Mono;  
          end; 
      dec(Mono,N);  //正規注文。N個をマイナス

      //以下,変数Monoを使って処理する

end;      

こんな感じでは、ダメですか?

編集    削除
miho  2001-12-16 19:15:34  No: 369  IP: [192.*.*.*]

if (fileexists('〜なんたら〜.txt'))//メモ帳エディタを使って
そのtxtに10個あると認識させといて
そこからreadln(??)を使って
購入ボタンを押したら10個あるうちの1個が減るという
そして0になったら
showmessageで売り切れ表示という感じに
読み込むことはできませんか?
何度もすみません・・。

編集    削除
Taku  2001-12-16 21:35:48  No: 370  IP: [192.*.*.*]

textがファイルというのを見落としていました
procedure TForm1.Button1Click(Sender: TObject);
var f:textfile; FName:TFileName; S:String; N:integer;
begin
  FName:='〜なんたら〜.txt';
if  fileexists(FName) then
  begin
     AssignFile(F,FName);
     //読み込み
     reset(F);
     Readln(F,S);
     CloseFile(F);
     //代入減算
     N:=strtoint(s);
     dec(N,1);
     //書き込み
     Rewrite(F);
     Writeln(F,inttostr(N));
     Closefile(F);

     if N<0 then showmessage('売り切れ');
 end
else Showmessage('No File');
end;
こんな意味ですか?

何種類かある場合は、While not(eof(F)) do などでループする必要があります
又、INIファイルを使ってセクション名で管理した方が簡単かも?

編集    削除
にしの  2001-12-17 19:58:11  No: 371  IP: [192.*.*.*]

INIファイルだと楽に出来ます。
下の関数は試していないのでエラーが出るかもしれませんが、こんな感じで処理できます。
TMemIniFileを使うときは、inifilesをuses節に追加してください。

(ファイルのフォーマット)
-- 次行から
[値段]
商品名1=値段1
商品名2=値段2
商品名3=値段3
[在庫]
商品名1=在庫数1
商品名2=在庫数2
商品名3=在庫数3
-- 前行まで

function Buy(ItemName: string; var money): integer;
// 購入できたら0
// お金が足りなかったら1
// 在庫が足りなかったら2
// ファイルが開けなかった場合は3
var
  count, price: integer;
  Ini: TMemIniFile;
begin
  try
    Ini := TMemIniFile.Create('商品ファイル.ini');
    count := Ini.ReadInteger('在庫', ItemName, 0);
    price := Ini.ReadInteger('値段', ItemName, 0);
    //在庫があって値段がないことはないので0。不安ならHigh(price)
  Result := 1;
    if count < 1 then Exit; // 在庫が足りない
    Result := 2;
    if money < price then Exit; // お金が足りない
    money := money - price;
    dec(count);
    Ini.WriteInteger('在庫', ItemName, count);
    Result := 0;
    Ini.Free;
  except
    Result := 3;
  end;
end;

編集    削除