Добавил:
больше работ здесь: https://github.com/alisadex Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчёт по конвертеру валют.docx
Скачиваний:
20
Добавлен:
10.01.2023
Размер:
726.68 Кб
Скачать

2. Создание схемы алгоритмов

При нажатии на кнопку «Закрыть» происходит алгоритм закрытия программы. Алгоритм работы функции представлен на рисунке 1.

Рисунок 1 – Схема алгоритма функции btnClose_Click

При нажатии на кнопку «Конвертировать» запускается функция Format, которая форматирует числа в текстовых полях формы. Алгоритм работы функции представлен на рисунке 2.

Рисунок 2 – Схема алгоритма функции Format

При нажатии на кнопку «Конвертировать», выполняется алгоритм, обрабатывающий входные текстовые поля. Вызывается функция CalcResult, которая подсчитывает результат конвертации, исходя из значений переключателя, и выводит результат в текстовые поля. Схема алгоритма представлена на рисунке 3.

Рисунок 3 – Схема алгоритма функции CalcResult

При нажатии на кнопку «Конвертировать», выполняется алгоритм button_Convert_Click, схема алгоритма представлена на рисунке 4.

Рисунок 4 – Схема алгоритма функции Button_Convert_Click

При изменении положения переключателя «Виды конвертации» вызывается функция RadioButton_CheckedChanged, которая меняет оформление формы в зависимости от выбранного положения переключателя. Схема алгоритма представлена на рисунке 5.

Рисунок 5 – Схема алгоритма функции RadioButton_CheckedChanged

Когда текстовое поле с курсом становится неактивно, вызывается функция txtCourse_Leave, которая считывает значение текстового поля и записывает его в соответствующую переменную (рисунок 6).

Рисунок 6 – Схема алгоритма функции txtCourse_Leave

3. Текст программы

private: System::Void button_Close_Click(System::Object^ sender,

System::EventArgs^ e) {

this->Close();

}

void Form1_Load(System::Object^ sender, System::EventArgs^ e) {

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

this->lblCourseSign->Text = L"(руб / $):";

this->labelСourse->Text = L"Курс покупки";

}

private:

double rubToDollar; //глобальные переменные для курсов

double rubToEuro;

double dollarToRub;

double euroToRub;

//различные обработки при нажатии кнопок

void keyPress(System::Windows::Forms::TextBox^ txt, System::Windows::Forms::KeyPressEventArgs^ e) {

char key = e->KeyChar;

if (Char::IsDigit(e->KeyChar) || key == 8 || key == '.') {

try {

if (key == '.') {

for (int i = 0; i < txt->Text->Length; ++i) {

if (txt->Text[i] == '.') {

e->Handled = true;

}

}

int PointPos = 0;

if (txtAmount->Text != "" && txtAmount->Text[0] != '0') {

PointPos = 1;

}

if(txt->Text->IndexOf('.') == -1 && txt->Text->IndexOf('0') == -1

&& txt->SelectionStart == PointPos) {

txt->Text = txt->Text->Insert(PointPos, "0");

txt->SelectionStart = PointPos + 1;

txt->SelectionStart = txt->Text->Length;

}

}

if (txt->SelectionStart > txt->Text->IndexOf('.') + 2 && txt->Text->IndexOf('.') != -1) {

if (key != 8) {

e->Handled = true;

}

}

if (key == '0' && txt->Text->Length == 1 && txt->Text[0] == '0') {

e->Handled = true;

}

}

catch (System::FormatException^ r) {

if (txt->Text->Length == 1) {

e->Handled = true;

}

}

}

else {

e->Handled = true;

}

}

//форматирование копеек(центов) в текстбоксах

void Format(System::Windows::Forms::TextBox^ txt) {

if (txt->Text->Contains(".") &&

txt->Text->IndexOf('.') == txt->Text->Length - 2) {

txt->Text += "0";

}

else if (txt->Text->Contains(".")

&& txt->Text->IndexOf('.') == txt->Text->Length - 1) {

txt->Text += "00";

}

else if (!txt->Text->Contains(".") && txt->Text->Length == 0) {

txt->Text = "0.00";

}

else if (!txt->Text->Contains(".")) {

txt->Text += ".00";

}

}

private: System::Void txtAmount_KeyPress(System::Object^ sender,

System::Windows::Forms::KeyPressEventArgs^ e) {

keyPress(txtAmount, e);

}

private: System::Void txtCourse_KeyPress(System::Object^ sender, System::Windows::Forms::KeyPressEventArgs^ e) {

keyPress(txtCourse, e);

}

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

void CalcResult(double a, double b, String^ MoneyUnit1, String^ MoneyUnit2, int type) {

Format(txtCourse);

Format(txtAmount2);

double res;

this->lblMoneyUnit1->Text = L""+ MoneyUnit1;

this->lblMoneyUnit2->Text = L""+ MoneyUnit2;

if (type == 1) {

res = a * (1 / b);

}

else {

res = a * b;

}

this->txtResult->Text = L"" + Math::Truncate(res * 100) / 100;

Format(txtResult);

}

//нажатие кнопки "конвертировать"

private: System::Void button_Convert_Click(System::Object^ sender, System::EventArgs^ e) {

bool flag = 1;

double a, b;

try {

a = System::Double::Parse(txtAmount->Text);

b = System::Double::Parse(txtCourse->Text);

}

catch (FormatException^ e) {

flag = 0;

}

if (flag) {

if (a > 0 && b > 0) {

this->txtAmount2->Text = Convert::ToString(a);

double res;

if (rb_RubToDollar->Checked) {

CalcResult(a, b, "руб.", "$", 1);

}

if (rb_DollarToRub->Checked){

Format(txtCourse);

CalcResult(a, b, "$", "руб.", 0);

}

if (rb_RubToEuro->Checked){

Format(txtCourse);

CalcResult(a, b, "руб.", "€", 1);

}

if (rb_EuroToRub->Checked){

Format(txtCourse);

CalcResult(a, b, "€", "руб.", 0);

}

}

else {

txtAmount2->Text = L"";

txtResult->Text = L"";

}

}

}

void RadioButton_CheckedChanged(double course, String^ sign, int type) {

if (!course == 0) {

this->txtCourse->Text = L"" + course;

Format(txtCourse);

}

else {

this->txtCourse->Text = L"";

}

this->txtAmount->Text = L"";

this->txtAmount2->Text = L"";

this->txtResult->Text = L"";

this->lblMoneyUnit1->Text = L"";

this->lblMoneyUnit2->Text = L"";

this->lblCourseSign->Text = L""+sign+":";

if (type)

this->labelСourse->Text = L"Курс покупки";

else

this->labelСourse->Text = L"Курс продажи";

}

private: System::Void rb_RubToDollar_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {

RadioButton_CheckedChanged(rubToDollar, "(руб / $)", 1);

}

private: System::Void rb_DollarToRub_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {

RadioButton_CheckedChanged(dollarToRub, "(руб / $)", 0);

}

private: System::Void rb_RubToEuro_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {

RadioButton_CheckedChanged(rubToEuro, "(руб / €)", 1);

}

private: System::Void rb_EuroToRub_CheckedChanged(System::Object^ sender, System::EventArgs^ e) {

RadioButton_CheckedChanged(euroToRub, "(руб / €)", 0);

}

private: System::Void txtAmount_Leave(System::Object^ sender, System::EventArgs^ e) {

Format(txtAmount);

}

private: System::Void txtCourse_Leave(System::Object^ sender, System::EventArgs^ e) {

if (txtCourse->Text != L"") {

Format(txtCourse);

if (rb_RubToDollar->Checked) {

rubToDollar = Double::Parse(txtCourse->Text);

}

if (rb_DollarToRub->Checked) {

dollarToRub = Double::Parse(txtCourse->Text);

}

if (rb_RubToEuro->Checked) {

rubToEuro = Double::Parse(txtCourse->Text);

}

if (rb_EuroToRub->Checked) {

euroToRub = Double::Parse(txtCourse->Text);

}

}

}

};

}