Файл: История и развитие методологии объектно-ориентированного программирования. Сферы применения (Развитие методологии объектно-ориентированного программирования).pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 28.03.2023

Просмотров: 465

Скачиваний: 3

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

{

return string.Format("{0}, вам одобрен вклад с ежегодной капитализацией " +

"на {1} лет с суммой {2} рублей и процентной ставкой {3}.\n", Name, Years, Sum, Rate);

}

public override double GetOverall()

{

double r = Rate / 100;

return Math.Round(Sum * Math.Pow(1 + r, Years), 2);

}

}

}

Листинг А3. Исходный код модуля DepositMonth.cs

using System;

namespace DepositProject

{

/// <summary>

/// Класс вклада с ежемесячной капитализацией, наследник базового абстрактного класса Deposit

/// </summary>

class DepositMonth : Deposit

{

public static new readonly int MIN_SUM = 200000;

public static new readonly int MIN_YEARS = 2;

public new double Rate { get; } = 4.5;

public DepositMonth() : base() { rate = 4.5; }

public DepositMonth(string t, int d, double s) : base(t, d, s) { }

public DepositMonth(DepositMonth dep) : base(dep) { }

~DepositMonth()

{

Console.Write("{0}, вклад с ежемесячной капитализацией удален!", Name);

}

public override string ToString()

{

return string.Format("{0}, вам одобрен вклад с ежемесячной капитализацией " +

"на {1} месяцев с суммой {2} рублей и процентной ставкой {3}.\n", Name, Years * 12, Sum, Rate);

}

public override double GetOverall()

{

double r = Rate / 100;

double monthRate = r / 12;

double months = Years * 12;

return Math.Round(Sum * Math.Pow(1 + monthRate, months), 2);

}

}

}

Листинг А4. Исходный код модуля DepositDay.cs

using System;

namespace DepositProject

{

/// <summary>

/// Класс вклада с ежедневной капитализацией, наследник базового абстрактного класса Deposit

/// </summary>

class DepositDay : Deposit

{

public static new readonly int MIN_SUM = 500000;

public static new readonly int MIN_YEARS = 3;

public new double Rate { get; } = 4.2;

public DepositDay() : base() { rate = 4.2; }

public DepositDay(string t, int d, double s) : base(t, d, s) {}

public DepositDay(DepositDay dep) : base(dep) {}

~DepositDay()

{

Console.Write("{0}, вклад с ежедневной капитализацией удален!", Name);

}

public override string ToString()

{

return string.Format("{0}, вам одобрен вклад с ежедневной капитализацией " +

"на {1} дней с суммой {2} рублей и процентной ставкой {3}.\n", Name, Years * 365, Sum, Rate);

}

public override double GetOverall()

{

double r = Rate / 100;

double dayRate = r / 365;

int days = Years * 365;

return Math.Round(Sum * Math.Pow(1 + dayRate, days), 2);

}

}

}

Листинг А5. Исходный код модуля Form1.cs

using System;

using System.Collections.Generic;

using System.Windows.Forms;

namespace DepositProject

{

public partial class Form1 : Form

{

/// <summary>

/// Выбранный вклад

/// </summary>

Deposit mydep;

/// <summary>

/// Осуществляет настройку выбранного вклада по номеру в списке

/// </summary>

/// <param name="type">индекс в списке вкладов</param>

void OnSettings(int type)

{

// если выбран какой-то вклад

if (type < 3)

{

// сделать неактивной кнопку подбора вкладов, активной - кнопку выбора

findDepButton.Enabled = false;

calcButton.Enabled = true;

// установить настройки минимальной суммы и срока в зависимости от типа вклада


if (type == 0)

{

mydep = new DepositYear();

sumNUD.Minimum = DepositYear.MIN_SUM;

yearsNUD.Minimum = DepositYear.MIN_YEARS;

}

else if (type == 1)

{

mydep = new DepositMonth();

sumNUD.Minimum = DepositMonth.MIN_SUM;

yearsNUD.Minimum = DepositMonth.MIN_YEARS;

}

else

{

mydep = new DepositDay();

sumNUD.Minimum = DepositDay.MIN_SUM;

yearsNUD.Minimum = DepositDay.MIN_YEARS;

}

// установить размер ставки в зависимости от выбранного вклада

rateTB.Text = mydep.Rate.ToString();

// отобразить в регуляторах суммы и срока вклада минимальные значения

sumNUD.Value = sumNUD.Minimum;

yearsNUD.Value = yearsNUD.Minimum;

}

// иначе (необходим подбор вклада по заданным параметрам)

else

{

// сделать активной кнопку подбора вкладов, неактивной - кнопку выбора

findDepButton.Enabled = true;

calcButton.Enabled = false;

// создать три вклада со стандартными настройками

DepositYear d1 = new DepositYear();

DepositMonth d2 = new DepositMonth();

DepositDay d3 = new DepositDay();

// создать новый список из созданных вкладов

List<Deposit> ld = new List<Deposit>() { d1, d2, d3 };

// отсортировать по возрастанию выплат

ld.Sort();

// выбрать вклад с минимальной капитализацией

// отобразить в регуляторах суммы и срока соответствующие этому вкладу значения

sumNUD.Value = sumNUD.Minimum = new decimal(ld[0].Sum);

yearsNUD.Value = yearsNUD.Minimum = new decimal(ld[0].Years);

// не выводить ставку

rateTB.Text = "";

}

}

/// <summary>

/// Конструктор класса формы

/// </summary>

public Form1()

{

InitializeComponent();

depositCB.SelectedIndex = 0; // выбрать вклад с ежегодной капитализацией (первый в списке)

OnSettings(depositCB.SelectedIndex); // настроить поля формы

}

/// <summary>

/// Возникает при нажатии кнопки "Рассчитать"

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void calcButton_Click(object sender, EventArgs e)

{

// если ФИО не было введено, сообщить об ошибке и выйти

if (string.IsNullOrWhiteSpace(nameTB.Text))

{

MessageBox.Show("Введите ФИО!", "Ошибка",

MessageBoxButtons.OK, MessageBoxIcon.Error);

return;

}

// дописать пустую строку в текстовое поле с выводом информации

resultTB.Text += Environment.NewLine;

// присвоить полям класса введенные значения

mydep.Name = nameTB.Text;

mydep.Sum = (double)sumNUD.Value;

mydep.Years = (int)yearsNUD.Value;

// вывести результат - информацию о вкладе и выплате в конце срока

resultTB.Text += mydep.ToString() + Environment.NewLine +

"Выплата по вкладу в конце указанного срока составит " +

mydep.GetOverall() + " рублей." + Environment.NewLine;

// очистить текстовое поле с ФИО

nameTB.Clear();

}

/// <summary>

/// Возникает при изменении типа вклада в выпадающем списке

/// </summary>

/// <param name="sender"></param>

/// <param name="e"></param>

private void depositCB_SelectedIndexChanged(object sender, EventArgs e)

{

OnSettings(depositCB.SelectedIndex);