//////////////////////////////////////////////////////////// /// <summary> /// 商品を購入する /// </summary> //////////////////////////////////////////////////////////// private void PurchaceProduct() { string input = string.Empty; int productNo = 0; Console.WriteLine("商品名に該当する番号を指定してください。"); SalesInfoBase productInfo = null; for (int index = 0; index < m_salesParameter.ProductInfo.m_salesInfoList.Count; index++) { productInfo = m_salesParameter.ProductInfo.m_salesInfoList[index]; if (productInfo.Stock == 0) { continue; } Console.WriteLine($"商品名: {productInfo.Name.PadRight(10)} 金額: {productInfo.Price} 番号: {index}"); } input = Console.ReadLine(); productNo = Convert.ToInt32(input); // 購入商品を設定する productInfo = m_salesParameter.ProductInfo.m_salesInfoList[productNo]; // 投入金額を更新する if (PurchaseProductEvent != null) { // 通知する this.PurchaseProductEvent(this, productInfo); } return; }
//////////////////////////////////////////////////////////// /// <summary> /// 商品購入イベント /// </summary> /// <param name="sender"></param> /// <param name="moneyInfoList"></param> //////////////////////////////////////////////////////////// private void PurchaseProductEvent(object sender, SalesInfoBase info) { bool enablePurchase = false; try { // 商品情報を購入可否を確認する enablePurchase = m_salesManager.GetEnablePurchase(info); if (!enablePurchase) { // 購入失敗 m_mainForm.NotPurchase(); } else { // 商品を購入する m_salesManager.Purchase(info); // 購入 m_mainForm.Purchase(); } m_mainForm.AcceptPurchace(); } catch (Exception) { return; } return; }
//////////////////////////////////////////////////////////// /// <summary> /// 購入可否を取得する /// </summary> /// <returns></returns> //////////////////////////////////////////////////////////// internal override bool GetEnablePurchase(SalesInfoBase purchaseInfo) { bool enablePurchase = false; foreach (var info in m_stockInfo.m_salesInfoList) { if (info.Name != purchaseInfo.Name) { continue; } if (info.Stock == 0) { return(false); } enablePurchase = true; break; } if (!enablePurchase) { return(false); } return(true); }
//////////////////////////////////////////////////////////// /// <summary> /// 商品を購入する /// </summary> /// <param name="info">購入情報</param> /// <returns>購入結果</returns> //////////////////////////////////////////////////////////// internal bool Purchase(SalesInfoBase info) { m_moneyManger.Purchase(info); m_productManager.Purchase(info); return(true); }
//////////////////////////////////////////////////////////// /// <summary> /// 購入可否を取得する /// </summary> /// <returns></returns> //////////////////////////////////////////////////////////// internal override bool GetEnablePurchase(SalesInfoBase purchaseInfo) { //uint inputSumPrice = 0; uint returnMoney = 0; //inputSumPrice = m_inputInfo.GetSumPrice(); if (m_inputPrice < purchaseInfo.Price) { // 投入金額 < 購入金額の場合 return(false); } // returnMoney = m_inputPrice - purchaseInfo.Price; //returnMoney = inputSumPrice - purchaseInfo.Price; // 情報から最小数の釣り銭を計算する for (int index = 0; index < m_stockInfo.m_salesInfoList.Count; index++) { SalesInfoBase stockInfo = null; uint tmpChargeCount = 0; uint chargeCount = 0; stockInfo = m_stockInfo.m_salesInfoList[index]; if (returnMoney < stockInfo.Price) { // 返金額 < 対象の紙幣の価値 continue; } // tmpChargeCount = returnMoney / stockInfo.Price; if (tmpChargeCount > stockInfo.Stock) { chargeCount = stockInfo.Stock; } else { chargeCount = tmpChargeCount; } returnMoney -= stockInfo.Price * chargeCount; } if (returnMoney != 0) { return(false); } return(true); }
//////////////////////////////////////////////////////////// /// <summary> /// 購入する /// </summary> /// <returns></returns> //////////////////////////////////////////////////////////// internal override bool Purchase(SalesInfoBase purchaseInfo) { foreach (var info in m_stockInfo.m_salesInfoList) { if (info.Name != purchaseInfo.Name) { continue; } info.Stock--; } return(true); }
//////////////////////////////////////////////////////////// /// <summary> /// 釣り銭を設定する /// </summary> /// <param name="moneyInfo"></param> /// <param name="sumDiff"></param> //////////////////////////////////////////////////////////// private void ClacChange(ref MoneyInfoList moneyInfo) { // 情報から最小数の釣り銭を計算する for (int index = 0; index < m_stockInfo.m_salesInfoList.Count; index++) { SalesInfoBase changeData = new SalesInfoBase(); uint chargeCount = 0; uint tmpChargeCount = 0; SalesInfoBase stockData = null; stockData = m_stockInfo.m_salesInfoList[index]; string name = stockData.Name; uint stock = stockData.Stock; uint price = stockData.Price; // 紙幣枚数 = 合計金額 / 紙幣価値 tmpChargeCount = m_inputPrice / stockData.Price; if (tmpChargeCount > stockData.Stock) { chargeCount = stockData.Stock; } else { chargeCount = tmpChargeCount; } // 在庫の紙幣枚数を減らす m_stockInfo.m_salesInfoList[index].Stock -= chargeCount; // (合計金額 - 返金額) m_inputPrice -= chargeCount * price; // 釣り銭情報を設定する changeData.Name = name; changeData.Price = price; changeData.Stock = chargeCount; // 情報を追加する moneyInfo.m_salesInfoList.Add(changeData); } return; }
//////////////////////////////////////////////////////////// /// <summary> /// 購入可否を取得する /// </summary> //////////////////////////////////////////////////////////// internal bool GetEnablePurchase(SalesInfoBase info) { bool enablePurchase = false; enablePurchase = m_moneyManger.GetEnablePurchase(info); if (!enablePurchase) { return(false); } enablePurchase = m_productManager.GetEnablePurchase(info); if (!enablePurchase) { return(false); } return(true); }
//////////////////////////////////////////////////////////// /// <summary> /// 購入する /// </summary> /// <returns></returns> //////////////////////////////////////////////////////////// internal override bool Purchase(SalesInfoBase purchaseInfo) { m_inputPrice -= purchaseInfo.Price; return(true); }