仮に物を買うとして、購入ボタンを押したら
1個づつ減っていくというプログラムを作りたいのですが。
物に制限をかけて0になったら買えなくなるふうするには
どうすればいいでしょうか?
できればtextファイルから読み込む感じで。
知恵をお貸しください。
整数型の変数(仮に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;
こんな感じでは、ダメですか?
if (fileexists('〜なんたら〜.txt'))//メモ帳エディタを使って
そのtxtに10個あると認識させといて
そこからreadln(??)を使って
購入ボタンを押したら10個あるうちの1個が減るという
そして0になったら
showmessageで売り切れ表示という感じに
読み込むことはできませんか?
何度もすみません・・。
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ファイルを使ってセクション名で管理した方が簡単かも?
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;
ツイート | ![]() |