開発環境
- OS: Windows 10 Pro
- IDE(統合開発環境): Visual Studio Community 2017
Head First C# ―頭とからだで覚えるC#の基本 (Andrew Stellman (著)、Jennifer Greene (著)、佐藤 嘉一 (監修, 監修)、木下 哲也 (翻訳)、オライリージャパン)の5章(継承 - オブジェクトの系図)、エクササイズ(p. 204)を取り組んでみる。
コード
Form1.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace __DinnerParty
{
public partial class Form1 : Form
{
DinnerParty dinnerParty;
BirthdayParty birthdayParty;
public Form1()
{
InitializeComponent();
dinnerParty = new DinnerParty((int)numericUpDown1.Value, healthyBox.Checked, fancyBox.Checked);
DisplayDinnerPartyCost();
birthdayParty = new BirthdayParty((int)numberBirthday.Value, fancyBirthday.Checked);
DisplayBirthdayPartyCost();
}
private void fancyBox_CheckedChanged(object sender, EventArgs e)
{
dinnerParty.CalculateCostOfDecorations(fancyBox.Checked);
DisplayDinnerPartyCost();
}
private void healthyBox_CheckedChanged(object sender, EventArgs e)
{
dinnerParty.SetHealthyOption(healthyBox.Checked);
DisplayDinnerPartyCost();
}
private void numericUpDown1_ValueChanged(object sender, EventArgs e)
{
dinnerParty.NumberOfPeople = (int)numericUpDown1.Value;
DisplayDinnerPartyCost();
}
private void DisplayDinnerPartyCost()
{
decimal Cost = dinnerParty.CalculateCost(healthyBox.Checked);
costLabel.Text = Cost.ToString("c");
}
private void DisplayBirthdayPartyCost()
{
decimal Cost = birthdayParty.CalculateCost();
birthdayCost.Text = Cost.ToString("c");
}
private void numberBirthday_ValueChanged(object sender, EventArgs e)
{
birthdayParty.NumberOfPeople = (int)numberBirthday.Value;
DisplayBirthdayPartyCost();
}
private void fancyBirthday_CheckedChanged(object sender, EventArgs e)
{
birthdayParty.CalculateCostOfDecorations(fancyBirthday.Checked);
DisplayBirthdayPartyCost();
}
private void cakeWriting_TextChanged(object sender, EventArgs e)
{
birthdayParty.CakeWriting = cakeWriting.Text;
DisplayBirthdayPartyCost();
}
}
}
Party.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace __DinnerParty
{
public class Party
{
const int CostOfFoodPerPerson = 2500;
private bool fancyDecorations;
private int numberOfPeople;
public decimal CostOfDecorations = 0;
public Party(int numberOfPeople, bool fancyDecorations)
{
this.numberOfPeople = numberOfPeople;
this.fancyDecorations = fancyDecorations;
CalculateCostOfDecorations(fancyDecorations);
}
public int NumberOfPeople
{
get { return numberOfPeople; }
set
{
numberOfPeople = value;
CalculateCostOfDecorations(fancyDecorations);
}
}
public void CalculateCostOfDecorations(bool fancy)
{
fancyDecorations = fancy;
if (fancy)
{
CostOfDecorations = (NumberOfPeople * 1500M) + 5000M;
}
else
{
CostOfDecorations = (NumberOfPeople * 750M) + 3000M;
}
}
public virtual decimal CalculateCost()
{
decimal totalCost = CostOfDecorations + CostOfFoodPerPerson * NumberOfPeople;
if (numberOfPeople > 12)
{
totalCost += 10000M;
}
return totalCost;
}
}
}
DinnerParty.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace __DinnerParty
{
public class DinnerParty:Party
{
private decimal CostOfBeveragesPerPerson;
public DinnerParty(int numberOfPeople, bool healthyOption, bool fancyDecorations):
base(numberOfPeople, fancyDecorations)
{
SetHealthyOption(healthyOption);
CalculateCostOfDecorations(fancyDecorations);
}
public void SetHealthyOption(bool healthyOption)
{
if (healthyOption)
{
CostOfBeveragesPerPerson = 500M;
}
else
{
CostOfBeveragesPerPerson = 2000M;
}
}
public decimal CalculateCost(bool healthyOption)
{
decimal totalCost = base.CalculateCost() + CostOfBeveragesPerPerson * NumberOfPeople;
if (healthyOption)
{
totalCost *= .95M;
}
return totalCost;
}
}
}
BirthdayParty.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace __DinnerParty
{
class BirthdayParty: Party
{
private int cakeSize;
private string cakeWriting = "";
public BirthdayParty(int numberOfPeople, bool fancyDecorations):
base(numberOfPeople, fancyDecorations)
{
calculateCakeSize();
}
private void calculateCakeSize()
{
if (NumberOfPeople <= 4)
{
cakeSize = 7;
}
else
{
cakeSize = 15;
}
}
public string CakeWriting
{
get { return this.cakeWriting; }
set
{
int maxLength;
if (cakeSize == 7)
{
maxLength = 16;
}
else
{
maxLength = 40;
}
if (value.Length > maxLength)
{
MessageBox.Show(
cakeSize + "号のケーキには文字が多すぎます。");
this.cakeWriting = cakeWriting.Substring(0, maxLength);
}
else
{
this.cakeWriting = value;
}
}
}
public override decimal CalculateCost()
{
decimal cakeCost;
if (cakeSize == 7)
{
cakeCost = 4000M + cakeWriting.Length * 25M;
}
else
{
cakeCost = 7500M + cakeWriting.Length * 25M;
}
return base.CalculateCost() + cakeCost;
}
}
}
0 コメント:
コメントを投稿