Отчет Программирование на языке высокого уровня. разработка программного обеспечения на языке высокого уровня c#
Скачать 0.76 Mb.
|
Результат работы программыРисунок 12 – Результат работы программы 7 НаследованиеЦель: Изучить методы наследования классов. Теоретические сведенияНаследование позволяет создавать новый класс на базе другого. Класс, на базе которого создается новый класс, называется базовым, а базирующийся новый класс – наследником или производным классом. В класс-наследник из базового класса переходят поля, свойства, методы и другие члены класса. Объявление нового класса, который будет наследовать другой класс, выглядит так: class [имя_класса] : [имя_базового_класса] { // тело класса } Когда конструктор определен только в наследнике, то здесь всё просто – при создании объекта сначала вызывается конструктор по умолчанию базового класса, а затем конструктор наследника. Когда конструкторы объявлены и в базовом классе, и в наследнике – нам необходимо вызывать их оба. Для вызова конструктора базового класса используется ключевое слово base. Объявление конструктора класса-наследника с вызовом базового конструктора имеет следующую структуру: [имя_конструктора_класса-наследника] ([аргументы]) : base ([аргументы]) { // тело конструктора } В базовый конструктор передаются все необходимые аргументы для создания базовой части объекта. ЗаданиеРазработать класс ZagranRoute, являющийся наследником класса Route, добавив следующие поля: skills (необходимые навыки), place (местность, по которой проходит маршрут). Листинг (исходный код программы)Листинг файла Route.cs using System; namespace ConsoleApp7 { public class Route { private int routeID; private string name; private int period; private int cost; public Route() { routeID = 0; period = 0; name = ""; cost = 0; } public Route(Route p) { routeID = p.routeID; name = p.name; period = p.period; cost = p.cost; } public Route(int routeID, string name, int period, int cost) { this.routeID = routeID; this.name = name; this.period = period; this.cost = cost; } public int GetPrice() { return period * cost; } public static bool operator >(Route l, Route r) { return l.routeID > r.routeID; } public static bool operator <(Route l, Route r) { return l.routeID < r.routeID; } public static bool operator ==(Route l, Route r) { return ((l.routeID == r.routeID) && (l.name == r.name) && (l.period == r.period) && (l.cost == r.cost)); } public static bool operator !=(Route l, Route r) { return !(l == r); } public override string ToString() { return string.Format($"{routeID} {name}, дней в пути: {period}, стоимость одного дня: {cost}"); } } } Листинг файла HardRoute.cs using System; namespace ConsoleApp7 { class HardRoute: Route { private bool skills; private string place; public HardRoute() : base() { skills = false; place = "неизвестно"; } public HardRoute(HardRoute hr) : base(hr) { skills = hr.Skills; place = hr.Place; } public HardRoute(int routeID, string name, int period, int cost, bool skills, string place) : base(routeID, name, period, cost) { this.skills = skills; this.place = place; } public bool Skills { get { return skills; } } public string Place { get { return place; } } public override string ToString() { return string.Format("{0}. Есть необходимые навыки: {1}. Местность, по которой проходит маршрут: {2}", base.ToString(), skills ? "Да" : "Нет", place); } } } Листинг файла Program.cs using System; namespace ConsoleApp7 { class Program { static void Main(string[] args) { //заполнение маршрутов HardRoute r1 = new HardRoute(111, "Первый маршрут", 5, 1500,false,"Лес"); HardRoute r2 = new HardRoute(222, "Второй маршрут", 2, 1000, true, "Горы"); Console.WriteLine(r1.ToString()); int result = r1.GetPrice(); Console.WriteLine($"Общая стоимость маршрута {result}."); Console.WriteLine(); Console.WriteLine(r2.ToString()); result = r2.GetPrice(); Console.WriteLine($"Общая стоимость маршрута {result}."); Console.WriteLine(); if (r1 > r2) Console.WriteLine("Первый маршрут больше чем второй"); else Console.WriteLine("Первый маршрут не больше второй"); if (r1 < r2) Console.WriteLine("Первый маршрут меньше чем второй"); else Console.WriteLine("Первый маршрут не меньше второй"); if (r1 == r2) Console.WriteLine("Первый маршрут равен второму"); else Console.WriteLine("Первый маршрут не равен второму"); if (r1 != r2) Console.WriteLine("Первый маршрут не равен второму"); else Console.WriteLine("Первый маршрут равен второму"); Console.ReadLine(); } } } Результат работы программыРисунок 13 – Результат работы программы 8 Элементы библиотеки Windows Forms.Цель: Изучить основные классы библиотеки Windows Forms, их свойства, методы и события. Теоретические сведенияЧтобы создать GUI приложения в Microsoft .NET нужно использовать Windows Forms. Windows Forms - новый стиль построения приложения на базе классов .NET Framework class library. Они имеют собственную модель программирования, которая более совершеннее, чем модели, основанные на Win32 API или MFC, и они выполняются в управляемой среде .NET Common Language Runtime (CLR). Приложения, основанные на Windows Forms, которые используют кнопки, списки и другие типы компонентов Windows, используют классы управления System.WinForms, значительно упрощающие программирование управления. Другая важная грань модели программирования Windows Forms - механизм, который формы используют для ответа на ввод в меню, средств управления и других элементов GUI приложения. Традиционные Windows-приложения обрабатывают сообщения WM_COMMAND и WM_NOTIFY используя события процесса Windows Forms. В C# и на других языках, которые поддерживают .NET Common Language Runtime (CLR), события - члены типа первого класса наравне с методами, полями и свойствами. Фактически все управляющие классы (control classes) Windows Forms (а также и многие неуправляющие классы) создают события. ЗаданиеВычислить и вывести на экран в виде таблицы значения функции из задания к лабораторной работе № 2 «Разветвляющиеся алгоритмы. Циклы» в интервале от xнач до xкон с шагом dx. Все исходные данные для расчёта значений функции необходимо задавать на начальной форме, а результаты вычислений выводить на другой. После вычисления функции на исходной форме необходимо вывести количество посчитанных значений. Если введённые значения xнач, xкон и dx не позволяют организовать цикл (например xкон < xнач при положительном значении dx, или dx=0 и т.д.), то необходимо вывести сообщение об ошибке и не проводить расчётов. Листинг (исходный код программы)Листинг файла Form1.cs namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void button1_Click(object sender, EventArgs e) { if (textBox1.TextLength == 0 || textBox2.TextLength == 0 || textBox3.TextLength == 0 || textBox4.TextLength == 0 || textBox5.TextLength == 0) { MessageBox.Show("Не все поля заполнены!", "", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } double x, x_end, dx, a, c; try { x = Convert.ToDouble(textBox1.Text.Replace('.', ',')); x_end = Convert.ToDouble(textBox2.Text.Replace('.', ',')); dx = Convert.ToDouble(textBox3.Text.Replace('.', ',')); a = Convert.ToDouble(textBox4.Text.Replace('.', ',')); c = Convert.ToDouble(textBox6.Text.Replace('.', ',')); if (x == x_end) { MessageBox.Show("Значение Xнач. не должно совпадать с Хкон.", "", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if ((x > x_end && dx > 0) || (x < x_end && dx < 0)) { MessageBox.Show("Некорректно заданы параметры диапазона", "", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } if (dx == 0) { MessageBox.Show("Значение dx не должно быть равно нулю", "", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } Form f = new Form2(x, x_end, dx, a, c); f.ShowDialog(this); } catch (Exception) { MessageBox.Show("Что-то пошло не так. Возможно, Вы неправильно заполнили поля.", "", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } } } Листинг файла Form2.cs using System; using System.Windows.Forms; namespace WindowsFormsApp1 { public partial class Form2 : Form { private readonly double x_begin, x_end, dx, a, c; private void Form2_Load_1(object sender, EventArgs e) { double f; double x = x_begin; while ((dx > 0 && x <= x_end) || (dx < 0 && x >= x_end)) { if (c < 0 && a != 0) { f = -a * Math.Pow(x, 2); } else if (c > 0 && a == 0) { f = (a - x) / (c * x); } else { f = x / c; } dataGridViewValues.Rows.Add(string.Format("{0}", x), string.Format("{0}", f)); x += dx; } (Owner as Form1).labelResult.Text = $"Получено значений: {dataGridViewValues.Rows.Count}"; } public Form2(double x_begin, double x_end, double dx, double a, double c) { InitializeComponent(); this.x_begin = x_begin; this.x_end = x_end; this.dx = dx; this.a = a; this.c = c; } } } Результат работы программыНа рисунках 14-15 представлен результат работы программы. Рисунок 14 – Результат работы программы Рисунок 15 – Результат работы программы ЗаключениеВ рамках выполнения курсовой работы был разработан набор приложений на различную тематику. При разработке были затронуты различные темы, связанные с аспектами программирования. Темы начинались от самых простых, азов, и заканчивались основами ООП. При разработке каждого из приложений было продемонстрировано умение овладевать новым материалом, а также самостоятельно решать поставленные задачи. Все приложения были написаны на языке программирования C#, семь приложений имеют консольный интерфейс, одно – оконный. Для разработки использовалась среда разработки Microsoft Visual Studio от Microsorf. Список использованных источниковХейлсберг А. Язык программирования C#. — СПб: Питер, 2012. Троелсен, Эндрю Язык программирования C# 5.0 и платформа .NET 4.5 / Эндрю Троелсен. - М.: Вильямс, 2015. Бишоп, Дж. C# в кратком изложении / Дж. Бишоп, Н. Хорспул. - М.: Бином. Лаборатория знаний, 2013. Вагнер, Билл С# Эффективное программирование / Билл Вагнер. - М.: ЛОРИ, 2013. Технология программирования: Учебное пособие / Кафедра системного анализа и телекоммуникаций ТРТУ. - Таганрог: ТРТУ. - 78 с. http://window.edu.ru/resource/943/28943/files/tsure169.pdf – свободный доступ. Сайт Visual Studio — Режим доступа: https://www.visualstudio.c |