Бланк отчета 10 Мирас. Отчет по проектной работе Тема проекта Чудеса космоса Выполнили ученик 10 "С" класса Молдамуратова Багдат Проверила учитель информатики Казиев А. К
Скачать 2.59 Mb.
|
Назарбаев Интеллектуальная Школа химико-биологического направления города Актау Отчет по проектной работе Тема проекта: Чудеса космоса Выполнили: ученик 10 “С” класса Молдамуратова Багдат Проверила: учитель информатики Казиев А.К. Актау 2022 СодержаниеОглавлениеСодержание 1 Анализ и исследование задачи 1 Модель жизненного цикла 1 Модель решения задачи в виде схемы 2 Блок схема: 2 Описание данных и методов 2 Метод сбора информации: 3 Описание входных и выходных данных 3 Логотип проекта 3 Математическая модель решения задачи 3 Таблица Дневника 4 Диаграмма Ганта 4 Интерфейс программы 4 Тестирование 4 Результаты тестирования программы 4 Оптимизация программы 6 Трассировочная таблица 6 Результаты тестирования: 6 Система хранения документов 6 Оригинальность текста: 6 Результаты проекта: 7 Руководство для пользователя: 7 Руководство по сопровождению системы: 7 Листинг программы 7 Список используемых литератур 11 Анализ и исследование задачиНазвание проекта: Чудеса космоса Гипотеза: Это тема была выбрана, потому что малое количество достоверной информации о космосе ограничивает возможности молодых любознателей космоса, проблему которой и будет решать этот проект Цель: Создать приложение, которое будет делиться информацией о различных космических явлениях и объектов. Задачи: В приложении должно быть минимум 3 формы Приложение должно быть связано с СУБД Приложение должно включать окно авторизации Программный код должен включать логическую конструкцию if() и цикл с параметрами Smart – цели
Пример формулировки цели и задачи проекта
Модель жизненного циклаРис. 1 Для реализации программы была использована поэтапная модель жизненного цикла. Я выбрала данную модель, потому что с данной моделью я могу возвращаться на предыдущие этапы, что очень удобно и продуктивно и обеспечивает меньшую трудоемкость по сравнению с остальными моделями. Модель решения задачи в виде схемы(Прототип и блок-схема + скриншоты + объяснение) Прототип: Рис.2 Рис.3 Рис.4 Прототип проекта был создан с помощью программы balsamiq, которая относится к методу Wireframe. Этот прототип показывает примерный вид приложения, в нем имеется 3 формы. Первая форма авторизация, вторая форма самой основной части приложения, а третья форма информация о проекте. Окончательный вид приложения отличается от прототип, во второй форме были изменены расположения компонентов, как и в третьей форме. Блок схема:Рис.5 Программа начинается с авторизации, в которой пользователь должен ввести пароль и логин, пароль будет равен факториалу числа 10, который указан в виде цикла с параметрами. Если пароль и логин неправильный, выведется окно с ошибкой, а если данные верны, то пользователя перенесет на вторую форму. В ней выводится информация о 4 космических объектах. Для каждой из них он будет способен находить расстояние, введя годовой параллакс с удобным ему единицей измерения. Также пользователь может перейти на форму с информацией о приложении. Описание данных и методовВ программе используется логическая конструкция if() else для авторизации пользователя в 1ой форме, а также для выбора единицы измерения во 2ой форме. Пример: if (textBox1.Text == "space_is_awesome" && textBox2.Text == Convert.ToString(password)) //Проверяем правильность логина и пароля с помощью логической конструкции if() { Form2 newForm = new Form2(); newForm.Show(); this.Hide(); //в случае правильности введённых данных откроется вторая форма, а текущяя форма скрывается } else { MessageBox.Show("Вы ввели неправильный логин или пароль.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); //если пользователь ввёл неправильные данные то выведется окно об ошибке } Метод сбора информации:Опрос Я провела опрос среди своих друзей, чтобы понять актуальность проекта среди своих сверстников. Данный опрос хорошо помог мне с реализацией проекта и его результаты приведены ниже в виде скриншотов. Рис.6 Рис.7 Рис.8 Описание входных и выходных данныхВходные данные: Логин, пароль, годовой параллакс - компонент textbox Выходные данные: Информация о космических объектах - richtextbox текст - пояснение, расстояние до космического объекта - label таблица с информацией о космических объектах - datagridview Переменные: Входные переменные: Таблица 1 Входные переменные
Выходные данные: Таблица 2 Выходные данные
Другие переменные: password – переменная целочисленного типа, используемая для вычисления факториала числа 10, а также является паролем для входа в систему. n – переменная целочисленного типа, используемая в качестве итератора в цикле for(), находящее факториал числа 10. paralax - локальная переменная вещественного типа, которая используется внутри подпрограммы distance() и переносит значение переменной paralax1 в функцию distance() Логотип проектаМатематическая модель решения задачи(+ скриншоты + объяснение) password = password * (n+1); Эта математическая вычисление находится в цикле for(), а точнее: for (int n = 1; n < 10; n++) { password = password * (n+1); } Этот цикл находит факториал числа 10, и формулой данного цикла является password = password * (n+1). Math.Sin() - математическая функция, находящее синус числа(в градусах) distance() - функция/подпрограмма, которая находит расстояние до космического объекта с помощью математического вычисления: 1/Math.Sin(paralax); distance()*SI[i] - вычисление, переводящее значение функции distance() под нужную единицу измерения. Рис.10 Рис.11 Таблица ДневникаТаблица 3 Дневник
Диаграмма ГантаТаблица 4 Диаграмма Ганта
Интерфейс программы(+ скриншоты + объяснение) Таблица 5 Интерфейс программы
ТестированиеПлан теста Тестирование программного кода по типам данных, а именно вводя экстремальные, нормальные и исключительные данные, наблюдая за выводом и записывая ее, представляя доказательства в виде скриншотов экрана По устройству системы Альфа, бета тестирование Трассировочная таблица Результаты тестирования программы(+ скриншоты + объяснение) По типам данных Black box: Таблица 6 Black Box
Нормальные данные: Рис.15 Рис.16 Ошибочные: Рис.17 Рис.18 Тестирование методом черного ящика я провела с человеком, незнакомым с программным кодом и не являющимся специалистом в программировании – а именно со своей младшей сестрой. В ходе тестирования она ввела разные данные, сперва правильные, потом ошибочные. Так как нужно было ввести логин и пароль, правильные данные являются также и экстремальными данными. Приложение вывела на экран вышеприведенные (в фото доказательствах) результаты. Тестирование прошло по плану. Тестирование методом серого ящика я провела со своим одноклассником, который разбирается в программирование но не знаком с кодом . Он вводил данные, в которых присутствуют и нормальные, и экстремальные, а также ошибочные данные. Как мы видим, программа вывела результаты для значений параллакса: 90(нормальные) и 1(экстремальные). Также программа вывела ошибку при вводе невозможного числа (0). Ожидаемые и фактические результаты совпали, тестирование прошло успешно Grey box: Таблица 7 Grey Box
Рис.19 Рис.20 Рис.21 White Box: Таблица 8 White Box
Тестирование с методом whitebox я провела с одноклассником, который знаком с программным кодом и согласился тестировать авторизацию программы. В ходе тестирования он заметил странные лаги, связанные с авторизацией и неэффективное использование кода. Он порекомендовал оптимизировать программный код, но в целом тестирование прошло успешно. По устройству системы Таблица 9 По устройству системы
Таблица 10 Альфа и Бета тестирование
Оптимизация программыДо оптимизации: Рис. 22 Рис.23 Как мы видим, до оптимизации кода в нем не было комментариев, множество раз повторялась одна и та же математическая операция по нахождению расстояния, и одни и те же действия повторяются для разных кнопок, что являлось мусорным кодом и замедляло работу программы После оптимизации: Рис.24 Рис.25 После оптимизации была добавлена подпрограмма distance(), вместо повторящихся distance = 1/Math.Sin(paralax). Также было принято решение добавить условие, чтобы проверять введенные пользователем данные на допустимость. Также были добавлены комментарии к коду, чтобы код получился читабельным и понятным. Трассировочная таблицаint password = 1; //обьявляем локальную переменную password и присваимаем ей значение 1 for (int n = 1; n < 10; n++) { password = password * (n + 1); //Цикл, определяющий факториал числа 10 } Таблица 11 Трассировочная таблица
Трассировочная таблица позволяет пошагово проверить процессы в программе на потенциальные логические ошибки. Я построил трассировочную таблицу для цикла с параметром, который находит факториал числа 10, используемый в качестве пароля для входа в приложение. Тестирование прошло успешно. Результаты тестирования:В целом можно сказать что программа успешно прошла тестирование. Но это не значит что она идеальна, это значит она работает стабильно и её при желании можно улучшать, чем мы конечно же займемся. Система хранения документовhttps://drive.google.com/drive/folders/1YpbhIGFrOFK7k89N-SZWEMYVO2cvXWu5 Рис 26 В компьютере: Путь: C:\Users\User\source\repos Рис 28 Оригинальность текста:Рис. 29 Оригинальность текста было проверено сайтом UniText24.ru, который показал 80-100%, тоесть высокую оригинальность текста. Результаты проекта:Руководство для пользователя:Инструкций по применению программы: В начале программы на экран выведется окно авторизации, введите логин и пароль и войдите в программу. Вас перенесет на другую форму, в четыремя вкладками, которых хранится информация о космических объектах. В вышеупомянутых вкладках присутствуют таблицы, фото объектов, а также в каждой вкладке имеется возможность найти расстояние до космического объекта. Для этого вам нужно ввести годовой параллакс в градусах, а также выбрать нужную вам единицу измерения. Когда вы нажмете на кнопку, программа сделает все сама. В левом верхнем углу можно нажать на кнопку “О приложении”, где указана информация о создателе проекта, а также его логотип и ссылки на полезные источники. Нажимая на кнопку “Назад”, вы вернетесь на вторую форму. Планы на будущее: Я планирую улучшить свое приложение, добавив туда новые космические объекты. Также я планирую добавить закон Хаббла и уравнения светимости в будущем. Руководство по сопровождению системы:При создании программы я использовал среду разработки Visual Studio, а именно Windows forms application на языке C#. Visual Studio Community - Полнофункциональная, расширяемая и бесплатная интегрированная среда разработки для создания современных приложений Android, iOS и Windows, а также веб-приложений и облачных служб. Требования для использование программного кода: Знание языка C#, программа Visual Studio, ОС Windows Листинг программы(Программный код) Form1: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Чудеса_космоса { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { int password = 1; //обьявляем локальную переменную password и присваимаем ей значение 1 for (int n = 1; n < 10; n++) { password = password * (n + 1); //Цикл, определяющий факториал числа 10 } if (textBox1.Text == "space_is_awesome" && textBox2.Text == Convert.ToString(password)) //Проверяем правильность логина и пароля с помощью логической конструкции if() { Form2 newForm = new Form2(); newForm.Show(); this.Hide(); //в случае правильности введённых данных откроется вторая форма, а текущяя форма скрывается } else { MessageBox.Show("Вы ввели неправильный логин или пароль.", "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Error); //если пользователь ввёл неправильные данные то выведется окно об ошибке } } Form2: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Чудеса_космоса { public partial class Form2 : Form { double[] SI = {206265, 1, 3.2616}; //объявляем глобальный вещественный массив SI, в котором хранятся константы значении единиц измерении относительно парсека double paralax1; //объявляем глобальную переменную вещественного типа paralax1 public Form2() { InitializeComponent(); } static double distance(double paralax) { return 1 / Math.Sin(paralax); /*функция(подпрограмма/процедура) distance считает расстояние до космического объекта и возращает это значение в вещественном виде*/ } private void Form2_Load(object sender, EventArgs e) { // TODO: данная строка кода позволяет загрузить данные в таблицу "космосDataSet3.Черные_дыры". При необходимости она может быть перемещена или удалена. this.черные_дырыTableAdapter.Fill(this.космосDataSet3.Черные_дыры); // TODO: данная строка кода позволяет загрузить данные в таблицу "космосDataSet2.Туманности". При необходимости она может быть перемещена или удалена. this.туманностиTableAdapter.Fill(this.космосDataSet2.Туманности); // TODO: данная строка кода позволяет загрузить данные в таблицу "космосDataSet1.Галактики". При необходимости она может быть перемещена или удалена. this.галактикиTableAdapter.Fill(this.космосDataSet1.Галактики); // TODO: данная строка кода позволяет загрузить данные в таблицу "космосDataSet.Звезды". При необходимости она может быть перемещена или удалена. this.звездыTableAdapter.Fill(this.космосDataSet.Звезды); } private void button3_Click(object sender, EventArgs e) { paralax1 = Convert.ToDouble(textBox1.Text); //присваиваем глобальной переменной paralax1 значение textbox1.Text if (paralax1 > 0 && paralax1 < 360) { if (radioButton1.Checked) { label5.Text = Convert.ToString(distance(paralax1) * SI[0]) + "а.е"; //расстояние в астрономических единицах будет отображаться на компоненте label5 } else if (radioButton2.Checked) { label5.Text = Convert.ToString(distance(paralax1) * SI[1]) + "п.к"; //расстояние в парсеках будет отображаться на компоненте label5 } else if (radioButton3.Checked) { label5.Text = Convert.ToString(distance(paralax1) * SI[2]) + "с.л"; //расстояние в световых годах будет отображаться на компоненте label5 } else { MessageBox.Show("Выберите единицу измерения", "Ошибка"); } //сообщение о том, что надо выбрать единицу измерения } else { MessageBox.Show("Вы ввели невозможное значение", "Ошибка"); //проверяем на невозможные значения } } private void button1_Click(object sender, EventArgs e) { paralax1 = Convert.ToDouble(textBox2.Text); //присваиваем глобальной переменной paralax1 значение textbox2.Text if (paralax1 > 0 && paralax1 < 360) { if (radioButton6.Checked) { label6.Text = Convert.ToString(distance(paralax1) * SI[0]) + "а.е"; //расстояние в астрономических единицах будет отображаться на компоненте label6 } else if (radioButton5.Checked) { label6.Text = Convert.ToString(distance(paralax1) * SI[1]) + "п.к"; //расстояние в парсеках будет отображаться на компоненте label6 } else if (radioButton4.Checked) { label6.Text = Convert.ToString(distance(paralax1) * SI[2]) + "с.л"; //расстояние в световых годах будет отображаться на компоненте label6 } else { MessageBox.Show("Выберите единицу измерения", "Ошибка"); } //сообщение о том, что надо выбрать единицу измерения } else { MessageBox.Show("Вы ввели невозможное значение", "Ошибка"); //проверяем на невозможные значения } } private void button2_Click(object sender, EventArgs e) { paralax1 = Convert.ToDouble(textBox3.Text); //присваиваем глобальной переменной paralax1 значение textbox3.Text if (paralax1 > 0 && paralax1 < 360) { if (radioButton9.Checked) { label11.Text = Convert.ToString(distance(paralax1) * SI[0]) + "а.е"; //расстояние в астрономических единицах будет отображаться на компоненте label11 } else if (radioButton8.Checked) { label11.Text = Convert.ToString(distance(paralax1) * SI[1]) + "п.к"; //расстояние в парсеках будет отображаться на компоненте label11 } else if (radioButton7.Checked) { label11.Text = Convert.ToString(distance(paralax1) * SI[2]) + "с.л"; //расстояние в световых годах будет отображаться на компоненте label11 } else { MessageBox.Show("Выберите единицу измерения", "Ошибка"); } //сообщение о том, что надо выбрать единицу измерения } else { MessageBox.Show("Вы ввели невозможное значение", "Ошибка"); //проверяем на невозможные значения } } private void button4_Click(object sender, EventArgs e) { paralax1 = Convert.ToDouble(textBox4.Text); //присваиваем глобальной переменной paralax1 значение textbox4.Text if (paralax1 > 0 && paralax1 < 360) { if (radioButton12.Checked) { label16.Text = Convert.ToString(distance(paralax1) * SI[0]) + "а.е"; //расстояние в астрономических единицах будет отображаться на компоненте label16 } else if (radioButton11.Checked) { label16.Text = Convert.ToString(distance(paralax1) * SI[1]) + "п.к"; //расстояние в парсеках будет отображаться на компоненте label16 } else if (radioButton10.Checked) { label16.Text = Convert.ToString(distance(paralax1) * SI[2]) + "с.л"; //расстояние в световых годах будет отображаться на компоненте label16 } else { MessageBox.Show("Выберите единицу измерения", "Ошибка"); } //сообщение о том, что надо выбрать единицу измерения } else { MessageBox.Show("Вы ввели невозможное значение", "Ошибка"); //проверяем на невозможные значения } } private void оПриложенииToolStripMenuItem_Click(object sender, EventArgs e) { Form3 newForm = new Form3(); newForm.Show(); //откроется третья форма, а текущяя форма скрывается this.Hide(); } private void выйтиToolStripMenuItem_Click(object sender, EventArgs e) { Application.Exit(); //выход из приложения } } } Form3: using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; namespace Чудеса_космоса { public partial class Form3 : Form { public Form3() { InitializeComponent(); } private void вернутьсяToolStripMenuItem_Click(object sender, EventArgs e) { Form2 newForm = new Form2(); newForm.Show(); this.Hide(); //откроется вторая форма, а текущяя форма скрывается } private void выходToolStripMenuItem_Click(object sender, EventArgs e) { Application.Exit(); } } } Список используемых литературHow do we measure distance in space? | Sky at Night (skyatnightmagazine.com) Spacegid.com - интерактивныйгидвмирекосмоса C# и .NET | Математические вычисления и класс Math (metanit.com) Информатика учебник 10 класс Физика учебник 10 класс Физика учебник 9 класс wikipedia.org NASA |