Пояснительная записка. разработка программного обеспечения на языке высокого уровня c#
![]()
|
НаследованиеЦель: изучить методы наследования классов. Теоретические сведения Наследование является одним из фундаментальных атрибутов объектно-ориентированного программирования. Оно позволяет определить дочерний класс, который использует (наследует), расширяет или изменяет возможности родительского класса. Класс, члены которого наследуются, называется базовым классом. Класс, который наследует члены базового класса, называется производным классом. C# и .NET поддерживают только одиночное наследование. Это означает, что каждый класс может наследовать члены только одного класса. Но зато поддерживается транзитивное наследование, которое позволяет определить иерархию наследования для набора типов. Другими словами, тип D может наследовать возможности типа C, который в свою очередь наследует от типа B, который наследует от базового класса A. Благодаря транзитивности наследования члены типа A будут доступны для типа D. Задание Разработать класс PayedCount, являющийся наследником класса Count, добавив следующие поля: datePayed (дата оплаты), who (кто оплатил). Решение Листинг (исходный код программы) Содержимое файла Count.cs представлено в предыдущем листинге. Листинг файла PayedCount.cs using System; namespace _7 { class PayedCount : Count { private DateTime datePayed;//(дата оплаты), private string who;//(кто оплатил). public PayedCount() : base() { datePayed = DateTime.Now; who = ""; } public PayedCount(PayedCount pc) : base(pc) { datePayed = pc.DatePayed; who = pc.Who; } public PayedCount(int countNumber, DateTime date, double value, int count, DateTime datePayed, string who) : base(countNumber, date, value, count) { this.datePayed = datePayed; this.who = who; } public DateTime DatePayed { get { return datePayed; } } public string Who { get { return who; } } public override string ToString() { return string.Format("{0} {1} {2}", base.ToString(), datePayed.ToString(), who); } } } Листинг файла Program.cs using System; namespace _7 { class Program { static void Main(string[] args) { PayedCount count1 = new PayedCount(); PayedCount count2 = new PayedCount(111, DateTime.Now.AddDays(1), 1000, 2, DateTime.Now.AddMonths(3), "Иванов И.И."); PayedCount count3 = new PayedCount(count2); Console.WriteLine(count1.ToString()); Console.WriteLine(count2.ToString()); Console.WriteLine(count3.ToString()); Console.WriteLine(); if (count1 == count2) Console.WriteLine("count1 = count2"); else Console.WriteLine("count1 != count2"); if (count2 == count3) Console.WriteLine("count2 = count3"); else Console.WriteLine("count2 != count3"); if (count2 > count3) Console.WriteLine("count2 больше чем count3"); else Console.WriteLine("count2 не больше count3"); if (count2 < count3) Console.WriteLine("count2 меньше чем count3"); else Console.WriteLine("count2 не меньше count3"); if (count1 > count3) Console.WriteLine("count1 больше чем count3"); else Console.WriteLine("count1 не больше count3"); if (count1 < count3) Console.WriteLine("count1 меньше чем count3"); else Console.WriteLine("count1 не меньше count3"); Console.WriteLine("count2.GetAverage() = {0}", count2.GetAverage()); Console.Read(); } } } Результат работы программы ![]() Рисунок 13 – Результат работы программы Элементы библиотеки 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 using System; using System.Windows.Forms; namespace _8 { 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 || textBox6.TextLength == 0) { MessageBox.Show("Не все поля заполнены!", "", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } double x, x_end, dx, a, b, 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('.', ',')); b = Convert.ToDouble(textBox5.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, b, c); f.ShowDialog(this); } catch (Exception) { MessageBox.Show("Что-то пошло не так. Возможно, Вы неправильно заполнили поля.", "", MessageBoxButtons.OK, MessageBoxIcon.Information); return; } } } } Листинг файла Form2.cs using System; using System.Windows.Forms; namespace _8 { public partial class Form2 : Form { private readonly double x_begin, x_end, dx, a, b, c; public Form2(double x_begin, double x_end, double dx, double a,double b,double c) { InitializeComponent(); this.x_begin = x_begin; this.x_end = x_end; this.dx = dx; this.a = a; this.b = b; this.c = c; } private void Form2_Load(object sender, EventArgs e) { double f; dataGridViewValues.Rows.Clear(); double x = x_begin; while ((dx > 0 && x <= x_end) || (dx < 0 && x >= x_end)) { if (x - 1 < 0 && b - c != 0) f = a * Math.Pow(x, 2) + b; else if (x - 1 > 0 && b + x == 0) f = (x - a) / 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}"; } } } Результат работы программы На рисунке 14 представлен результат работы программы. На рисунках 15-18 представлены примеры ошибок, возникающих при неверном вводе параметров. ![]() Рисунок 14 – Результат работы программы ![]() Рисунок 15 – Пример ошибки ![]() Рисунок 16 – Пример ошибки ![]() Рисунок 17 – Пример ошибки ![]() Рисунок 18 – Пример ошибки ЗаключениеВ ходе выполнения курсовой работы был получен набор работоспособных программ, удовлетворяющих начальному заданию. После выполнения задания курсовой работы можно подвести итоги. Разработка данного курсового проекта позволила мне глубже вникнуть в возможности языка С#, лучше ознакомится со структурными методами программирования, оценить необходимость составления блок-схемы перед написанием программы. Разработка программ позволила мне применить на практике и расширить полученные знания по программированию на языке С#, изучить наиболее важные и распространенные принципы ООП, а также построение приложений с использованием форм Windows, без которых невозможно представить ни одну информационную систему. Эти программы мало кому пригодятся, но немного изменив код можно получить очень полезные программы. Я считаю, что программа написана не зря, потому что данный код можно использовать для разных целей в программировании. Список использованных источниковХейлсберг А. Язык программирования C#. — СПб: Питер, 2012. Троелсен, Эндрю Язык программирования C# 5.0 и платформа .NET 4.5 / Эндрю Троелсен. - М.: Вильямс, 2015. Бишоп, Дж. C# в кратком изложении / Дж. Бишоп, Н. Хорспул. - М.: Бином. Лаборатория знаний, 2013. Вагнер, Билл С# Эффективное программирование / Билл Вагнер. - М.: ЛОРИ, 2013 |