開発環境
- OS: Windows 10 Pro
- IDE(統合開発環境): Visual Studio Community 2017
Head First C# ―頭とからだで覚えるC#の基本 (Andrew Stellman (著)、Jennifer Greene (著)、佐藤 嘉一 (監修, 監修)、木下 哲也 (翻訳)、オライリージャパン)の5章(継承 - オブジェクトの系図)、エクササイズ(p. 178)を取り組んでみる。
コード
BirthdayParty.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace __DinnerParty
{
class BirthdayParty
{
const int CostOfFoodPerPerson = 2500;
private int numberOfPeople;
public int NumberOfPeople
{
get { return numberOfPeople; }
set
{
numberOfPeople = value;
CalculateCostOfDecorations(fancyDecorations);
}
}
private int cakeSize;
public int CakeSize
{
get { return cakeSize; }
set
{
if (numberOfPeople <= 7)
{
cakeSize = 7;
}
else
{
cakeSize = 15;
}
}
}
private string cakeWriting = "";
public string CakeWriting
{
get { return this.cakeWriting; }
set
{
int maxLength;
if (CakeSize == 7)
{
maxLength = 16;
}
else
{
maxLength = 16;
}
if (value.Length > maxLength)
{
MessageBox.Show(
CakeSize + "号のケーキには文字が多すぎます。");
this.cakeWriting = cakeWriting.Substring(0, maxLength);
}
else
{
this.cakeWriting = value;
}
}
}
private bool fancyDecorations;
public decimal CostOfDecorations = 0;
public BirthdayParty(int numberOfPeople, bool fancyDecorations)
{
this.NumberOfPeople = numberOfPeople;
this.fancyDecorations = fancyDecorations;
CalculateCostOfDecorations(fancyDecorations);
}
public void CalculateCostOfDecorations(bool fancy)
{
fancyDecorations = fancy;
if (fancy)
{
CostOfDecorations = (NumberOfPeople * 1500M) + 5000M;
}
else
{
CostOfDecorations = (NumberOfPeople * 750M) + 3000M;
}
}
public decimal CalculateCost()
{
decimal totalCost =
CostOfDecorations + CostOfFoodPerPerson * NumberOfPeople +
CakeWriting.Length * 10M;
if (CakeSize == 15)
{
totalCost *= 2;
}
return totalCost;
}
}
}
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();
}
}
}
0 コメント:
コメントを投稿