Бишкекский политехнический колледж
КУРСОВАЯ РАБОТА
по дисциплине:
«Объектнро орентированому программированию»
Тема: «Разработка программы «Инженерный калькулятор»
Выполнил: студент группы 215 Руденко Александр
Руководитель: Джалилова Т.Я.
Оценка:________
Дата:________
Бишкек 2014
ЗАДАНИЕ
на курсовую работу
по дисциплине:
«Программирование на языке высокого уровня»
по дисциплине «Программирование»
Студент: Руденко А., группа 215
Руководитель: Джалилова Т.Я.
Тема работы:
«Разработка программы «Инженерный калькулятор»
Содержание работы:
Разработать программу «Инженерный калькулятор», позволяющую производить основные математические вычисления: арифметические операции, логарифмы, возведение в степень.
Исходные данные к курсовой работе:
Язык программирования – С #
Средаразработки: MicrosoftVisualStudio 2012
Требования к результатам работы программы:
Проверка корректности вводимых данных
Правильность математических вычислений
Обработка ошибок и вывод сообщений
Дата выдачи задания: 3 марта 2013 г.
Руководитель: ( )
Студент: ( )
ВВЕДЕНИЕ
В данной пояснительной записке рассматривается описание программы «Калькулятор».
Данная программа предназначена для выполнения функций калькулятора. Со стороны пользователя программа очень проста в использовании и имеет простой и интуитивно-понятный интерфейс.
В качестве основного инструмента разработки применяется MicrosoftVisualStudio 2012. Язык программирования C#.
Структурная схема программного комплекса (рис.1) включает 9 подчиненных программных модулей, расположенных на втором и третьем уровнях. Программные модули выполняют следующие функции (в скобках указаны имена процедур):
Меню (Menu) – служит для выбора пользователем требуемого арифметического действия;
Ввод (Input) – обеспечивает ввод двух чисел;
Операция (Operation) – обеспечивает ввод арифметического действия, выбранного в меню;
Вычисления (Calculation) – производит выбранные вычисления с помощью вызываемых программных модулей «сложение», «вычитание», «умножение» и «деление».
1 ВНЕШНЕЕ ОПИСАНИЕ
1.1 Определение требований к программному средству
Программа должна позволять выполнять простейшие математические функции.
Проектирование графического интерфейса
Главная форма содержит основные элементы интерфейса и даёт доступ ко всем функциям.
- поле для просмотра введенных и вычисленных значений;
-цифровые, арифметические и клавиши управления: для ввода цифр, арифметических операций и функций очистки и вычисления данных;
- также находится меню, градусы и радианы что позволяет переключать между диапозонами,
-так же можно сожранять и возвращать последние значения
Описание алгоритма на естественном языке
Работу программы можно разбить на несколько независимых алгоритмов. Каждый алгоритм запускается соответствующим событием.
Алгоритм арифметической операции. В данном алгоритме происходит проверка переменно znakобозначающей введенную операцию, если операция была введена, то происходит расчет, иначе происходит ввод другого числа, и переменной znakприсваивается значение типа операции.
Алгоритм расчета. Данный алгоритм представляет собой вычисление двух введенных чисел по типу операции присвоенной переменной znak.
1.2 Спецификация качества программного обеспечения
Функциональность: программа должна являться полностью завершенным программным продуктом, не требующим каких-либо дополнительных специальных компонентов.
Надёжность: программа должна быть автономной.
Эффективность: программа должна функционировать без наличия привода CD/DVD-дисков, должна предъявлять минимальные требования к аппаратному обеспечению, требования к аппаратным ресурсам должны быть намного ниже, чем для самой ОС.Программа должна иметь интуитивно понятный пользовательский графический интерфейс.
Внешние функции:
программа должна выполнять все функции за конечное количество времени;
Критические случаи:
завершение работы Windows. В этом случае программа должна завершать свою работу.
2 ПРОЕКТИРОВАНИЕ
2.1 Проектирование архитектуры приложения
Данное программное средство можно разбить на подсистемы, взаимодействующие друг с другом.
Рисунок 1 - Структура программы
Подсистема расчета производит вычислительные функции программы.
Подсистема интерфейса реализует пользовательский интерфейс программы.
2.2 Проектирование графического интерфейса
Главная форма содержит основные элементы интерфейса и даёт доступ ко всем функциям.
Форма Form2 содержит следующие элементы управления:
поле для просмотра введенных и вычисленных значений;
цифровые, арифметические и клавиши управления: для ввода цифр, арифметических операций и функций очистки и вычисления данных;
3 ПРОГРАММИРОВАНИЕ
Подсистема интерфейса - объединяет все остальные подсистемы. Здесь реализован весь пользовательский интерфейс.
Основные методы:
вводцифровыхзначений;
вводзнакачисла
ввод разделителя целой и дробной части
вводарифметическойоперации
подсчетвведенныхданных
сбросзначений и операций
очисткавведенногочисла
удалениепоследнегосимволавовведенномчисле
4 АТТЕСТАЦИЯ
4.1 Тестирование
Для тестирования программы производились различные манипуляции с данными, искусственно создавались всевозможные критические ситуации.
Тест 1. Ввод цифровых данных.
При вводе цифровых данных ошибок не возникает.
Тест 2. Ввод арифметических операций.
При вводе арифметических операций может возникнуть ошибка. Деления на 0 или ввод не ддопустимо большого значения числа, при этом будет выдано предупреждение
4.2 Руководство Программиста.
Программа поставляется в виде исполнимого файла «Calc.exe» размером 254КБ не требует установки и дополнительной настройки.
Программа не разделяет полномочия на пользовательские и программиста, вследствие чего руководство программисту будет идентично руководству пользователя.
4.3 Руководство пользователя.
Программа предназначена для произведения элементарных арифметических операций.
Для ввода числовых, знаковых и арифметических значений используются соответствующие клавиши на форме.
Схема функциональности Программы
1)Закрыть 18)Степень
2)Развернуть 19)Тригонометрическая функция Sin
3)Свернуть 20)sinh Гиперболический
4)Поле для ввода чисел 21) Факториал числа n!
5)Очистить поле 22) cosh гиперболический
6)Корень 23) тригонометрическая функция Cos
7)Деление 24)Процент Числа
8)Умножение 25)Tanh гиперболический
10)Минус 26) Тригонометрическая функция tan
11)Плюс 27)Степень
12)Циферблат от1 до 9 28)Градусы
13)Равно 29)Радианы
14)Запятая 30)Справка о калькуляторе и обратной связью
15)ноль 31)Правка для сожранения Результат последнего расчета и вставка
16)Логарифм 32)Выход
17) Экспонента 33)Закрытие
ЗАКЛЮЧЕНИЕ
В рамках курсовой работы была разработана программа инженерный калькулятор производящая не сложные арифметические действия.
При разработке данного программного средства применялся язык программирования С#, как один из наиболее современных и перспективных языков программирования.
СПИСОК ИСПОЛЬЗУЕМЫХ ИСТОЧНИКОВ
1. MicrosoftCorporation, MSDNLibrary – 2008
Приложения
using System;
usingSystem.Collections.Generic;
usingSystem.ComponentModel;
usingSystem.Data;
usingSystem.Drawing;
usingSystem.Linq;
usingSystem.Text;
usingSystem.Threading.Tasks;
usingSystem.Windows.Forms;
usingSystem.Windows.Input;
usingSystem.Windows;
namespace калькулятор11
{
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
double a;
double b;
doublerezultat;
stringznak;
private void btn_Plus_Click(object sender, EventArgs e)
{
try
{
znak = "+";
if (a == 0)
{
a = Convert.ToDouble(txbx_pole1.Text);
}
else
{
b = Convert.ToDouble(txbx_pole1.Text);
}
this.txbx_pole1.Text = "";
}
catch
{
MessageBox.Show("Не верные данные");
}
}
private void btn_Minus_Click(object sender, EventArgs e)
{
try
{
znak = "-";
if (a == 0)
{
a = Convert.ToDouble(txbx_pole1.Text);
}
else
{
b = Convert.ToDouble(txbx_pole1.Text);
}
this.txbx_pole1.Text = "";
}
catch
{
MessageBox.Show("Не верные данные");
}
}
private void btn_umnoj_Click(object sender, EventArgs e)
{
try
{
znak = "*";
if (a == 0)
{
a = Convert.ToDouble(txbx_pole1.Text);
}
else
{
b = Convert.ToDouble(txbx_pole1.Text);
}
this.txbx_pole1.Text = "";
}
catch
{
MessageBox.Show("Не верные данные");
}
}
private void btn_Delit_Click(object sender, EventArgs e)
{
try
{
znak = "/";
if (a == 0)
{
a = Convert.ToDouble(txbx_pole1.Text);
}
else
{
b = Convert.ToDouble(txbx_pole1.Text);
}
this.txbx_pole1.Text = "";
}
catch
{
MessageBox.Show("Не верные данные");
}
}
private void btn_sin_Click(object sender, EventArgs e)
{
if (rbtn_Gradus.Checked == true)
{
if (txbx_pole1.Text != "")
txbx_pole1.Text = (Math.Sin(Convert.ToDouble(txbx_pole1.Text) / 180 * Math.PI)).ToString();
else if (txbx_pole1.Text != "")
txbx_pole1.Text = (Math.Sin(Convert.ToDouble(txbx_pole1.Text))).ToString();
else
MessageBox.Show("Поле не может быть пустым");
}
else
{
if (txbx_pole1.Text != "")
txbx_pole1.Text = (Math.Sin(Convert.ToDouble(txbx_pole1.Text))).ToString();
else
MessageBox.Show("Поле не может быть пустым");
}
}
private void btn_cos_Click(object sender, EventArgs e)
{
if (rbtn_Gradus.Checked == true)
{
if (txbx_pole1.Text != "")
txbx_pole1.Text = (Math.Cos(Convert.ToDouble(txbx_pole1.Text) / 180 * Math.PI)).ToString();
else if (txbx_pole1.Text != "")
txbx_pole1.Text = (Math.Cos(Convert.ToDouble(txbx_pole1.Text))).ToString();
else
MessageBox.Show("Поле не может быть пустым");
}
else
{
if (txbx_pole1.Text != "")
txbx_pole1.Text = (Math.Cos(Convert.ToDouble(txbx_pole1.Text))).ToString();
else
MessageBox.Show("Поле не может быть пустым");
}
}
private void btn_tan_Click(object sender, EventArgs e)
{
if (rbtn_Gradus.Checked == true)
{
if (txbx_pole1.Text != "")
txbx_pole1.Text = (Math.Tan(Convert.ToDouble(txbx_pole1.Text) / 180 * Math.PI)).ToString();
else if (txbx_pole1.Text != "")
txbx_pole1.Text = (Math.Tan(Convert.ToDouble(txbx_pole1.Text))).ToString();
else
MessageBox.Show("Поле не может быть пустым");
}
else
{
if (txbx_pole1.Text != "")
txbx_pole1.Text = (Math.Tan(Convert.ToDouble(txbx_pole1.Text))).ToString();
else
MessageBox.Show("Поле не может быть пустым");
}
}
private void btn_stepen_Click(object sender, EventArgs e)
{
try
{
txbx_pole1.Text = (Math.Pow(Convert.ToDouble(txbx_pole1.Text), Convert.ToDouble(txbx_pole1.Text))).ToString();
}
catch
{
MessageBox.Show("Не верные данные");
}
}
doubleConvertToGradus(ref double znach)
{
returnznach / 180 * Math.PI;
}
private void btn_drob_Click(object sender, EventArgs e)
{
try
{
txbx_pole1.Text = Convert.ToString(1 / Convert.ToDouble(txbx_pole1.Text));
}
catch
{
MessageBox.Show("Не верные данные");
}
}
private void btn_factor_Click(object sender, EventArgs e)
{
try
{
intfac = 1;
for (inti = Convert.ToInt32(txbx_pole1.Text); i> 0; i--)
{
fac = fac * i;
}
txbx_pole1.Text = fac.ToString();
}
catch
{
MessageBox.Show("Поле не может быть пустым");
}
}
private void btn_exp_Click(object sender, EventArgs e)
{
try
{
txbx_pole1.Text = (Math.Pow(2.7, Convert.ToDouble(txbx_pole1.Text))).ToString();
}
catch
{
MessageBox.Show("Не верные данные");
}
}
private void btn_sgrt_Click(object sender, EventArgs e)
{
try
{
txbx_pole1.Text = (Math.Sqrt(Convert.ToDouble(txbx_pole1.Text))).ToString();
}
catch
{
MessageBox.Show("Не верные данные");
}
}
private void btn_procent_Click(object sender, EventArgs e)
{
try
{
txbx_pole1.Text = (Convert.ToDouble(txbx_pole1.Text) / 100 * Convert.ToDouble(txbx_pole1.Text)).ToString();
}
catch
{
MessageBox.Show("Не верные данные");
}
}
private void btn_log_Click(object sender, EventArgs e)
{
try
{
txbx_pole1.Text = (Math.Log10(Convert.ToDouble(txbx_pole1.Text))).ToString();
}
catch
{
MessageBox.Show("Не верные данные");
}
}
private void btn_tanh_Click(object sender, EventArgs e)
{
if (rbtn_Gradus.Checked == true)
{
if (txbx_pole1.Text != "")
txbx_pole1.Text = (Math.Tanh(Convert.ToDouble(txbx_pole1.Text) / 180 * Math.PI)).ToString();
else
MessageBox.Show("Поле не может быть пустым");
}
else
{
if (txbx_pole1.Text != "")
txbx_pole1.Text = (Math.Tanh(Convert.ToDouble(txbx_pole1.Text))).ToString();
else
MessageBox.Show("Поле не может быть пустым");
}
}
private void выходToolStripMenuItem_Click(object sender, EventArgs e)
{
Application.Exit();
}
private void копироватьToolStripMenuItem_Click(object sender, EventArgs e)
{
System.IO.File.WriteAllText(@"ответ с txbx3.txt", txbx_pole1.Text);
}
private void вставитьToolStripMenuItem_Click(object sender, EventArgs e)
{
try
{
System.IO.StreamReader file = new System.IO.StreamReader(@"ответ с txbx3.txt");
txbx_pole1.Text = file.ReadLine();
}
catch
{
MessageBox.Show("Не верные данные");
}
}
private void btn_cosh_Click(object sender, EventArgs e)
{
if (rbtn_Gradus.Checked == true)
{
if (txbx_pole1.Text != "")
txbx_pole1.Text = (Math.Cosh(Convert.ToDouble(txbx_pole1.Text) / 180 * Math.PI)).ToString();
else
MessageBox.Show("Поле не может быть пустым");
}
else
{
if (txbx_pole1.Text != "")
txbx_pole1.Text = (Math.Cosh(Convert.ToDouble(txbx_pole1.Text))).ToString();
else
MessageBox.Show("Поле не может быть пустым");
}
}
private void btn_delet_Click(object sender, EventArgs e)
{
txbx_pole1.Text = null;
a = 0;
b = 0;
}
private void btn_0_Click(object sender, EventArgs e)
{
txbx_pole1.Text = txbx_pole1.Text + "0";
}
private void btn_1_Click(object sender, EventArgs e)
{
txbx_pole1.Text = txbx_pole1.Text + "1";
}
private void btn_2_Click(object sender, EventArgs e)
{
txbx_pole1.Text = txbx_pole1.Text + "2";
}
private void btn_3_Click(object sender, EventArgs e)
{
txbx_pole1.Text = txbx_pole1.Text + "3";
}
private void btn_4_Click(object sender, EventArgs e)
{
txbx_pole1.Text = txbx_pole1.Text + "4";
}
private void btn_5_Click(object sender, EventArgs e)
{
txbx_pole1.Text = txbx_pole1.Text + "5";
}
private void btn_6_Click(object sender, EventArgs e)
{
txbx_pole1.Text = txbx_pole1.Text + "6";
}
private void btn_7_Click(object sender, EventArgs e)
{
txbx_pole1.Text = txbx_pole1.Text + "7";
}
private void btn_8_Click(object sender, EventArgs e)
{
txbx_pole1.Text = txbx_pole1.Text + "8";
}
private void btn_9_Click(object sender, EventArgs e)
{
this.txbx_pole1.Text = txbx_pole1.Text + "9";
}
private void посмотретьСпоавкуToolStripMenuItem_Click(object sender, EventArgs e)
{
MessageBox.Show("Инженерный калькулятор , который иногда обозначается синонимом научный, поможет вам в проведении инженерных и научных расчетов. Калькулятор представлен в виде обычного аналогового калькулятора и обладает понятным интерфейсом, поэтому пользоваться им просто и удобно. Если вы когда-нибудь работали с традиционными аналогами, то производить расчеты на нашем калькуляторе для вас не составит совершенно никакого труда.",
"Описание", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
private void btn_rezylt_Click(object sender, EventArgs e)
{
try
{
b = Convert.ToDouble(this.txbx_pole1.Text);
if (znak == "+")
{
rezultat = a + b;
}
if (znak == "-")
{
rezultat = a - b;
}
if (znak == "*")
{
rezultat = a * b;
}
if (znak == "/")
{
rezultat = a / b;
}
txbx_pole1.Text = rezultat.ToString();
a = rezultat;
znak = "";
}
catch
{
MessageBox.Show("Неверныеданные");
}
}
private void обратнаяСвязьToolStripMenuItem_Click(object sender, EventArgs e)
{
Form3 form3 = new Form3();
form3.Owner = this;
form3.Show();
}
private void btn_zapyata_KeyPress(object sender, KeyPressEventArgs e)
{
this.txbx_pole1.Text = txbx_pole1.Text + ",";
}
private void btn_sinh_Click(object sender, EventArgs e)
{
if (rbtn_Gradus.Checked == true)
{
if (txbx_pole1.Text != "")
txbx_pole1.Text = Convert.ToString((Math.Sinh(Convert.ToDouble(txbx_pole1.Text) / Math.PI* 180)));
else
MessageBox.Show("Поле не может быть пустым");
}
else
{
if (txbx_pole1.Text != "")
txbx_pole1.Text = (Math.Sinh(Convert.ToDouble(txbx_pole1.Text))).ToString();
else
MessageBox.Show("Поле не может быть пустым");
}
}
private void txbx_pole1_TextChanged(object sender, EventArgs e) /* Обработчикклавиш с клавиатуры и buttonов*/
{
stringtmp = txbx_pole1.Text.Trim();
stringoutS = string.Empty;
boolzapyataya = true;
if (tmp.Length> 1 &&tmp[0] == 0 &&tmp[1] != ,)
tmp = tmp.Substring(1);
foreach (char ch in tmp)
if (Char.IsDigit(ch) || (ch == , &&zapyataya))
{
outS += ch;
if (ch == ,)
zapyataya = false;
}
txbx_pole1.Text = outS;
txbx_pole1.SelectionStart = outS.Length;
}
}
}
Разработка программы «Инженерный калькулятор»
Курсовая работа по предмету «Программирование»