А. Н. Тушев 09 февраля 2021 г
Скачать 380.5 Kb.
|
Министерство науки и высшего образования Российской Федерации Федеральное государственное бюджетное образовательное учреждения высшего образования «Алтайский государственный технический университет им. И.И. Ползунова» Факультет информационных технологий Кафедра информатики, вычислительной техники и информационной безопасности Направление Информационная безопасность Профиль Организация и технология защиты информации Отчёт защищён с оценкой 85 _ ____________________ А.Н. Тушев «09» февраля 2021 г. ОТЧЁТ по лабораторной работе № 2 Диалоговый режим работы с формами для создания графических пользовательских интерфейсов (GUI) для языков Java и Android Studio по дисциплине Современные технологии программирования ЛР 10.03.01.06.000 О обозначение документа Студент группы ИБ-81 И.А. Кабанов Руководитель работы к.т.н., доцент А.Н. Тушев БАРНАУЛ 2021Цель работы: Освоить работу диалогового режима работы с формами для создания графических пользовательских интерфейсов (GUI) для языков Java и Android Studio Ход работы Задание Диалоговый режим работы с формами для создания графических пользовательских интерфейсов (GUI) для языков Java и Android Studio п 1. Реализовать алгоритм вычисления величин по варианту при заданных исходных значениях. Ввод выполнить через текстовые поля (TextField,EditText), вывод в (Label,TextView). Должна быть Label с подсказкой (типа “введите длины сторон:”). Вычисления выполнять по нажатию кнопки. Вариант 6. Даны основания равнобедренной трапеции и ее боковая сторона. Найти площадь трапеции. Листинг (Java IntelIiJ IDEA) import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextField; public class Calc { double A; double B; double C; double S; JFrame form; // основная форма JLabel SideA; // поле вывода стороны А JLabel SideB; // поле вывода стороны В JLabel SideС; // поле вывода стороны С JLabel Square; // поле вывода площади JTextField sA; // поле для ввода стороны А JTextField sB; // поле для ввода стороны В JTextField sC; // поле для ввода стороны С JButton bt; // кнопка вычислить Calc() // конструктор { form = new JFrame(); form.setBounds (10,20,350,300); form.setTitle ("Площадь трапеции"); form.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); form.setLayout(null); // не использовать менеджер размещений // задание параметров Label SideA = new JLabel(); SideA.setBounds(20,10,400,40); // left,top,width,height SideA.setText("Введите малое основание"); form.add(SideA); // добавка в форму Label lb // задание параметров первого текстового поля sA = new JTextField(); sA.setBounds(210,20,100,20); sA.setText(""); form.add(sA); // добавка в форму текстового поля tf1 // задание параметров второго текстового поля SideB = new JLabel(); SideB.setBounds(20,40,400,40); // left,top,width,height SideB.setText("Введите большее основание"); form.add(SideB); // добавка в форму Label SideB // задание параметров первого текстового поля sB = new JTextField(); sB.setBounds(210,50,100,20); sB.setText(""); form.add(sB); // добавка в форму текстового поля sB SideС = new JLabel(); SideС.setBounds(20,70,400,40); // left,top,width,height SideС.setText("Введите боковую сторону"); form.add(SideС); // добавка в форму Label lb // задание параметров первого текстового поля sC = new JTextField(); sC.setBounds(210,80,100,20); sC.setText(""); form.add(sC); // добавка в форму текстового поля Square = new JLabel(); Square.setBounds(20,150,400,40); // left,top,width,height form.add(Square); // добавка в форму Label lb // задание параметров второго текстового поля // задание параметров кнопки bt=new JButton(); bt.setBounds(20,130,140,20); bt.setLabel("Вычислить"); form.add(bt); // добавка в форму кнопки // добавление отклика на событие click слушатель bt.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent e) { // при нажатии кнопки bt переход в данную точку Calculate(); } }); // задание формы видимой form.show(); } public void Calculate() { String s1; double p, X, Y; s1=sA.getText(); // введенная строка курса A = Double.parseDouble(s1); // перевод в вещественное число s1=sB.getText(); // введенная строка количества долларов B=Double.parseDouble(s1); // перевод в целое число s1=sC.getText(); // введенная строка количества долларов C=Double.parseDouble(s1); // перевод в целое число p = (A+B+2*C)/2; X = (A+B)/(Math.abs(A-B)); Y = Math.sqrt((p-A)*(p-B)*(p-A-C)*2); S = X*Y; s1=Double.toString(S); // перевод вещественного числа в строку s1="Площадь трапеции равна: "+s1; Square.setText(s1); // вывод в Label } public static void main (String args[]) { Calc f; // объект основного класса f= new Calc(); } } Тесты п 2. Модифицировать программу п.1 , заменив нажатие кнопки обработкой событий выхода из текстового поля. При некорректном вводе фокус остается в этом поле. При нажатии кнопки приложение завершается. Листинг (Java Android Studio) activity_main.xml android:layout_width="match_parent" android:layout_height="match_parent" > android:layout_height="40dp" android:layout_marginLeft="10dp" android:layout_marginTop="5dp" android:text="Площадь трапеции" /> android:layout_height="30dp" android:layout_marginLeft="10dp" android:layout_marginTop="53dp" android:text="Малое основание: " /> android:layout_height="30dp" android:layout_marginLeft="10dp" android:layout_marginTop="103dp" android:text="Большее основание: " /> android:layout_height="30dp" android:layout_marginLeft="10dp" android:layout_marginTop="153dp" android:text="Боковая сторона: " /> android:layout_width="100dp" android:layout_height="40dp" android:layout_marginLeft="150dp" android:layout_marginTop="45dp" android:text="0" /> android:layout_width="100dp" android:layout_height="40dp" android:layout_marginLeft="150dp" android:layout_marginTop="95dp" android:text="0" /> android:layout_width="100dp" android:layout_height="40dp" android:layout_marginLeft="150dp" android:layout_marginTop="145dp" android:text="0" /> android:id="@+id/bt1" android:layout_width="190dp" android:layout_height="40dp" android:layout_marginLeft="40dp" android:layout_marginTop="250dp" android:text="Выйти" /> android:layout_height="40dp" android:text="Ответ 0.00" android:layout_marginLeft="90dp" android:layout_marginTop="205dp" android:id="@+id/tv1" /> MainActivity.java package com.example.trapetion; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import java.text.BreakIterator; public class MainActivity extends AppCompatActivity { private TextView tv1; // связанные с соответствующим в Activity_main.xml private EditText et1; private EditText et2; private EditText et3; private Button bt1; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); tv1 = (TextView) findViewById(R.id.tv1); // установка связи объектов java с et1 = (EditText) findViewById(R.id.et1); // виджетами в xml et2 = (EditText) findViewById(R.id.et2); et3 = (EditText) findViewById(R.id.et3); bt1 = (Button) findViewById(R.id.bt1); bt1.setOnClickListener(new View.OnClickListener() { // отклик на событие click кнопки @Override public void onClick(View v) { // TODO Auto-generated method stub System.exit(0); } }); et1.setOnFocusChangeListener(new View.OnFocusChangeListener() { // событие получение/потеря фокуса public void onFocusChange(View v, boolean hasFocus) { if (!hasFocus) { // Если вышли из компоненты, а не попали на нее Calculate(); } } }); et2.setOnFocusChangeListener(new View.OnFocusChangeListener() { public void onFocusChange(View v, boolean hasFocus) { // аналогично для второго числа if (!hasFocus) { Calculate(); } } }); et3.setOnFocusChangeListener(new View.OnFocusChangeListener() { public void onFocusChange(View v, boolean hasFocus) { // аналогично для второго числа if (!hasFocus) { Calculate(); } } }); } private void Calculate() // вычисление суммы чисел с проверкой правильности ввода { String s1; boolean p; double Pol, X, Y, A = 0, B = 0, C = 0, S = 0; s1 = et1.getText().toString(); // символы, введенные в первом поле p = true; try { A = Double.parseDouble(s1); // попытка перевода в вещественное строку из 1 поля } catch (NumberFormatException e) // ошибка перевода { p = false; } s1 = et2.getText().toString(); try { B = Double.parseDouble(s1); } catch (NumberFormatException e) { p = false; } s1 = et3.getText().toString(); try { C = Double.parseDouble(s1); } catch (NumberFormatException e) { p = false; } if (p) // если оба перевода выполнены, то p=true. { Pol = (A+B+2*C)/2; X = (A+B)/(Math.abs(A-B)); Y = Math.sqrt((Pol-A)*(Pol-B)*(Pol-A-C)*(Pol-A-C)); S = X*Y; s1 = Double.toString(S); // перевод в строку s1 = "Площадь трапеции: " + s1; tv1.setText(s1); // вывод в TextView } else { tv1.setText("неправильно"); } } } Тесты При помощи NoxPlayer Установленное приложение на телефон п 3. Реализовать вычисление кусочно-аналитической функции по варианту задания. Использовать компоненты: текстовое поле для ввода аргумента x кнопка Button для вычисления y=f(x) метка (Label,TextView) для вывода результата 3 радиокнопки RadioButton для выбора формулы вычисления checkBox для возможности удвоения результата (при загрузке checked=false) На радиокнопках сделать надписи: формула1 , формула2, формула3, на checkBox- удвоить. Алгоритм работы: При вводе аргумента x и нажатии кнопки Button проверяется в какой из трех диапазонов попадает x, выполняются вычисления y и результат отображается в Label (TextView). При этом соответствующая радиокнопка становится отмеченной. Если далее нажать другую радиокнопку, вычисления пересчитываются для формулы, соответствующей этой кнопки, в Label выводится новый результат, диапазон, в котором находится x игнорируется. Если отметить checkBox – результат удваивается и выводится. Вариант 6) [sin(x)]2, x<=0 y= x3-1, 0<x<1 (x+1)*(sqrt(x), x>=1 Листинг (Kotlin Android Studio) activity_main.xml android:layout_width="match_parent" android:layout_height="match_parent" > android:layout_width="328dp" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="10dp" android:text="Вычисление кусочно-заданной функции" /> android:layout_width="206dp" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="40dp" android:background="#ffffff" android:orientation="vertical"> android:layout_height="wrap_content" android:layout_marginLeft="5dp" android:layout_marginTop="10dp" android:gravity="left" android:text="Введите x" /> android:layout_width="192dp" android:layout_height="wrap_content" android:layout_marginLeft="0dp" android:layout_marginTop="5dp" android:text="(sin(x))^2" /> android:layout_width="189dp" android:layout_height="wrap_content" android:text="х*х*х-1" /> android:layout_width="189dp" android:layout_height="wrap_content" android:text="(x+1)*sqrt(x)" /> android:id="@+id/bt1" android:layout_width="217dp" android:layout_height="40dp" android:layout_marginLeft="10dp" android:layout_marginTop="220dp" android:text="Вычислить" /> android:layout_width="100dp" android:layout_height="wrap_content" android:layout_marginLeft="100dp" android:layout_marginTop="35dp" android:text="0" /> android:layout_height="wrap_content" android:layout_marginLeft="215dp" android:layout_marginTop="40dp" android:id="@+id/cb1" android:checked="false" android:text="Удвоить" /> android:layout_width="231dp" android:layout_height="wrap_content" android:layout_marginLeft="10dp" android:layout_marginTop="280dp" android:text="Y = " /> MainActivity.kt package com.ivan.function import android.os.Bundle import androidx.appcompat.app.AppCompatActivity import kotlinx.android.synthetic.main.activity_main.* import kotlin.math.sin import kotlin.math.sqrt class MainActivity : AppCompatActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) rb1.setOnClickListener() { Calculate(); } rb2.setOnClickListener() { Calculate(); } rb3.setOnClickListener() { Calculate(); } cb1.setOnClickListener() { Calculate(); } bt1.setOnClickListener() // видит кнопку button с именем bt1 в xml { Funktion(); // вызов функции } } fun Funktion() { var s1: String; var x: Double; var y: Double; s1 = et1.text.toString(); // s1=et1.getText().toString(); x = s1.toDouble(); // x = Double.parseDouble(s1); y = 0.0; if (x <= 0) { rb1.setChecked(true); y = (sin(x) * sin(x)); } if (x > 0 && x < 1) { rb2.setChecked(true); y = x * x * x - 1; } if (x >= 1) { rb3.setChecked(true); y = (x + 1) * sqrt(x); } s1 = y.toString(); s1 = "Y = " + s1; tv1.text = s1 return; } fun Calculate() { var s1: String; var x: Double; var y: Double; s1 = et1.text.toString(); // s1=et1.getText().toString(); x = s1.toDouble(); // x = Double.parseDouble(s1); y = 0.0; if (rb1.isChecked) { y = (sin(x) * sin(x)); } if (rb2.isChecked) { y = x * x * x - 1; } if (rb3.isChecked) { y = (x + 1) * sqrt(x); } if (cb1.isChecked) { y = y * 2; } s1 = y.toString(); s1 = "Y = " + s1; tv1.text = s1 return; } } Тесты |