自己紹介
プログラミング初心者です。英語が好きなので、コマンドレットだけを見れば動詞ー名詞という形でわかりやすいと思い、初めての言語にPowerShellを選びました。初めての言語には難易度が高すぎましたかね?
《どうすればいいかわからないこと》
・データや数値を参照するための別スクリプト商品名.ps1, 商品価格.ps1と、それらを格納するためのレジ.ps1の変数がうまく機能していないように初心者の自分にはみえます。
・商品名.ps1, 商品価格.ps1において、F000などの商品コードを変数化したほうがいいかどうかもわかりません。
・そもそもこのスクリプトで実現できるかもわかっていないので、もし実現不可能ならば、データをCSVファイルから引っ張ってくる方式にて解決しようとも考えています。
《試したこと》
・わからないところはネットからいろいろとコピーしてきて解決しようとした。
・とにかく変数の型を指定した。
↓レジ.ps1↓
PowerShell
1[void][Reflection.Assembly]::LoadWithPartialName("System.Windows.Forms") 2#キー判定用設定 3$rawui = $Host.ui.rawui 4$KeyStates = [System.Management.Automation.Host.ControlKeyStates] 5$Modifier = $KeyStates::LeftCtrlPressed -bor $KeyStates::RightCtrlPressed 6$KeyMap = [System.Windows.Forms.Keys] 7 8#本文 9while ($true) { 10 $Count = 0 11 $TotalPrice = 0 12 $CountStop = $false 13 while (-not $CountStop) { 14 Read-Host '購入する商品の商品コードは?' ([string] $ProductCode) | Write-Host 15 16 #単価を出す 17 try { 18 . .\'PowerShell Practice'\レジ\データベース\商品名.ps1 19 Select-Object -match ([string] $ProductCode) 20 } 21 catch { 22 $ProductName 23 } 24 try { 25 . .\'PowerShell Practice'\レジ\データベース\商品価格.ps1 26 Select-Object -match ([string] $ProductCode) 27 } 28 catch { 29 $ProductPrice 30 } 31 32 #消費税を加算する 33 if ($ProductCode -match $F???) { 34 ([UInt32] $ProductPrice) *= 1.08 35 } 36 elseif ($ProductCode -match $O???) { 37 ([UInt32] $ProductPrice) *= 1.10 38 } 39 else { 40 Write-Host 'この商品は存在しません。' 41 break 42 } 43 44 #個数を乗算する 45 Read-Host '商品の数は?' ([UInt16] $Count) | Write-Host 46 ([UInt32] $TotalPrice) += ([UInt32] $ProductPrice) * ([UInt16] $Count) 47 48 Write-Output "$ProductName : $ProductPrice * $Count" 49 50 Start-Sleep -s 10 51 52 #キー判定 53 while ($rawui.KeyAvailable) { 54 $KeyInput = $rawui.Readkey("NoEcho,IncludeKeyUp,IncludeKeyDown") 55 if (($KeyInput.VirtualKeycode -eq $KeyMap::E) -and ` 56 ($KeyInput.ControlKeyState -band $Modifier)) { 57 $CountStop = $true 58 break 59 } 60 } 61 } 62 Write-Host "$TotalPrice 円のお買い上げです。" 63}
↓商品名.ps1↓
PowerShell
1function Select-Object { 2 [OutputType([string])] 3 [CmdletBinding()] 4 param( 5 [parameter(ValueFromPipeline = $true, Mandatory = $true)] 6 [string] $ProductName 7 ) 8} 9 10F000 = リンゴS 11F001 = リンゴM 12F002 = リンゴL 13F003 = リンゴS_箱詰め 14F004 = リンゴM_箱詰め 15F005 = リンゴL_箱詰め 16F006 = ミカン_5個_袋詰め 17F007 = ミカン_20個_箱詰め
↓商品価格.ps1↓
PowerShell
1function Select-Object { 2 [OutputType([UInt32])] 3 [CmdletBinding()] 4 param( 5 [parameter(ValueFromPipeline = $true, Mandatory = $true)] 6 [UInt32] $ProductPrice 7 ) 8} 9 10F000 = 150 11F001 = 200 12F002 = 400 13F003 = 1500 14F004 = 2000 15F005 = 4000 16F006 = 400 17F007 = 1500
あなたの回答
tips
プレビュー