Студопедия КАТЕГОРИИ: АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Задание к лабораторной работеСтр 1 из 16Следующая ⇒
Методические указания И ЗАДАНИЯ к лабораторныМ работАМ по курсу «ПРОГРАММИРОВАНИЕ В СРЕДЕ СОВРЕМЕННЫХ ОПЕРАЦИОННЫХ СИСТЕМ. ЧАСТЬ 1» для студентов направления подготовки 0915 «Компьютерная инженерия»
Донецк, 2016
УДК 681.973
МЕТОДИЧЕСКИЕ УКАЗАНИЯ И ЗАДАНИЯ К ЛАБОРАТОРНЫМ РАБОТАМ ПО КУРСУ «ПРОГРАММИРОВАНИЕ В СРЕДЕ СОВРЕМЕННЫХ ОПЕРАЦИОННЫХ СИСТЕМ» (для студентов направления подготовки 6.0915 «Компьютерная инженерия»).
Составитель: Чередникова О.Ю. – Донецк: ГВУЗ «Донецкий национальный технический университет», 2016 г. – 56 с.
Целью методических указаний по курсу «Программирование в среде современных операционных систем» является приобретение студентами практических навыков программирования в среде Visual Studio на платформах Windows Form и WPF на языке программирования C#. Методические указания содержат варианты заданий, а также необходимый пояснительный материал.
Составитель: к.т.н., доцент каф. КИ Чередникова О.Ю.
Рецензенты: к.т.н., доцент каф. КИ Теплинский С.В. к.т.н., доцент каф. АСУ Хмелевой С.В.
Содержание Введение……………………………………………………………………..6 Лабораторная работа №1…………………………………………………7 Лабораторная работа №2…………………………………………………22 Лабораторная работа №3…………………………………………………26 Лабораторная работа №4…………………………………………………32 Лабораторная работа №5…………………………………………………38 работа Лабораторная №6…………………………………………………38 Лабораторная работа №7…………………………………………………38 Список рекомендуемой литературы……………………………………..59 Введение Целью лабораторных работ по курсу «Программирование графического интерфейса» является приобретение студентами практических навыков программирования в среде Visual Studio на платформах Windows Form и WPF на языке программирования C#. Данные методические указания предназначены для студентов, обучающихся по направлению подготовки «Компьютерная инженерия» специальностей «Компьютерные системы и сети» и «Системное программирование». Материал, излагаемый в методических указаниям, содержит краткие теоретические сведения по теме лабораторной работы и варианты заданий.
Лабораторная работа №1 Тема: Разработка консольного приложения на языке программирования C#. Интерфейсы, свойства, коллекции. Цель: Показать знание основных конструкций языка С#, в частности интерфейсов, свойств и коллекций, полученных в курсе ООП. Теоретические сведения Свойства Каждый класс С# может содержать в себе объявления одного или нескольких свойств. Свойства представляют собой методы специального вида, причем для каждого свойства применяются два таких метода. Один метод используется для чтения значения свойства, а другой — для записи. Для того чтобы объявить свойство, используется такая конструкция: <Модификатор> <Тип> <Имя свойства> { get { return <Возвращаемое значение>; } set { <Поле класса> = value; }} пример объявления свойства Channel в классе TelevisionSet: class TelevisionSet { private byte currentChannel; public byte Channel { set { if(value <= maxChannel && value > 0) currentChannel = value; } get { return currentChannel;} } } Блок свойства Channel содержит две процедуры доступа. Одна из этих процедур, объявленная с ключевым словом get, предназначена для получения значения свойства, а другая, объявленная с ключевым словом set, — для установки значения свойства. Ключевое слово value обозначает неявный параметр, передаваемый процедуре доступа set. Этот параметр содержит значение, которое программа пытается присвоить свойству. Рассмотрим следующий фрагмент программы: TelevisionSet tvSmall = new TelevisionSet(); TelevisionSet tvLarge = new TelevisionSet() ; tvSmall.Channel = 5; tvLarge.Channel = 52;
Применение свойств оправдано в тех случаях, когда необходимо контролировать значение какого-либо атрибута объекта. Свойство связывается только с одним значением. Методы же более универсальны. Вы можете, например, передавать методам несколько параметров по ссылке или по значению, что невозможно при использовании свойств. Интерфейсы Класс С# может наследовать свойства только одного базового класса. Таким образом, в отличие от других языков ООП (например, C++) в языке С# каждый производный класс может иметь только один базовый класс. На первый взгляд такое ограничение может показаться довольно существенным, однако во многих случаях оно успешно обходится при помощи механизма интерфейсов. В то время как классы представляют собой механизм для представления неких сущностей (таких, например, как геометрические фигуры, телевизоры и т. п.), интерфейсы применяются для описания неких действий над этими сущностями. При этом объект (класс) может реализовать набор интерфейсов, каждый из которых отвечает за выполнение над объектом каких-либо действий. Интерфейсы более всего похожи на виртуальные методы абстрактного класса, которые должны быть определены в базовом классе. Интерфейсы объявляются с помощью ключевого слова interface аналогично классам. Внутри объявления интерфейса необходимо перечислить методы, из которых образуется интерфейс. Кроме методов, внутри интерфейсов можно также объявлять свойства, индексаторы и события. Класс, реализующий интерфейс, должен содержать в себе тело методов, объявленных в рамках всех реализуемых им интерфейсов. Пусть нам нужно создать класс Point, отражающий поведение точки на плоскости. Этот объект должен хранить текущие координаты точки, делая их доступными при помощи свойств X и Y. Кроме того, класс Point должен реализовывать два интерфейса IPrint и IMail, первый из которых позволяет распечатывать точку на принтере и выполнять предварительный просмотр результатов печати, а второй — отправлять точку по электронной почте по заданному адресу. Ниже мы привели объявление интерфейсов IPrint и IMail: interface IPrint { void Print(); void PrintPreview(); } interface IMail { void SendMail(string mailAddress); } Как видите, в объявлении интерфейсов мы указываем только прототипы методов, не включая тело этих методов. Кроме того, в прототипах методов не допускается указывать модификаторы доступа, такие, как public или private. Все методы интерфейса являются общедоступными по умолчанию. В С# принято, что название интерфейса начинается с прописной буквы I. При объявлении интерфейсов мы устанавливаем соглашение (контракт), которому должны удовлетворять методы, свойства, индексаторы и события, объявленные в рамках интерфейса. Что же касается конкретной реализации интерфейса, то она возлагается на класс, реализующий интерфейс. Ниже мы привели в сокращенном виде исходный текст класса Point, реализующего интерфейсы IPrint и IMail: class Point : IPrint, IMail { protected int xPos; protected int yPos; public Point(int x, int y) { xPos = x; yPos = y; } void IPrint.Print() {Console.WriteLine("Печать точки ({0}, {1})", this.X, this.Y); } void IPrint.PrintPreview() {Console.WriteLine( "Просмотр перед печатью точки ({0}, {1})", this.X, this.Y); } void IMail.SendMail(string mailAddress) {Console.WriteLine( "Отправка точки ({0}, {1}) по адресу {2}", this.X, this.Y, mailAddress); } Тот факт, что класс реализует те или иные интерфейсы, отражается в ключевом слове class. Названия реализуемых интерфейсов перечисляются после этого слова через запятую: class Point : IPrint, IMail Если бы наш класс Point был унаследован от базового класса с именем, например, Shape и дополнительно реализовывал интерфейсы IPrint и IMail, это можно было бы записать следующим образом: class Point : Shape, IPrint, IMail Вначале нужно создать объект класса, реализующего наш интерфейс: Point pt = new Point(10, 20); Далее нам нужно создать ссылку на интерфейс. Это делается следующим образом: IPrint ptPrinter = (IPrint)pt; Здесь мы объявили переменную ptPrinter типа IPrint и записали в нее ссылку, приведя ее тип явным образом к типу IPrint. С помощью такой ссылки можно адресоваться к методам интерфейса IPrint, но нельзя получить доступ к полям и методам класса Point: ptPrinter.PrintPreview(); ptPrinter.Print(); Таким образом, обращаясь к объекту через интерфейс, программа может не иметь никакой информации относительно того, какие свойства, поля и методы определены в этом классе. Этим достигается независимость программы, работающей с объектом, от внутренних деталей реализации объекта. Если базовый класс реализует какие-либо интерфейсы, то они наследуются производными классами. При необходимости производный класс может переопределить все или некоторые методы интерфейсов базового класса. Коллекции Большинство классов коллекций находятся в пространствах имен System. Collections и System.Collections .Generic. Классы обобщенных коллекций можно найти в пространстве имен System.Collections.Generic. Классы коллекций, специализированные для хранения определенного типа, находятся в пространстве имен System.Collections . Specialized. Списки Для динамических списков в .NET Framework предусмотрен обобщенный класс List<T>. В реализации List<T> используется массив типа Т. Создавать списочные объекты можно, вызывая конструктор по умолчанию. При объявлении обобщенного класса List<T> необходимо указывать тип хранимых значений. В приведенном ниже коде показано, как объявлять списки List<T> с элементами int и Racer: var intList = new List<int>(); var racers = new List<Racer>();
Конструктор по умолчанию создает пустой список. Как только элементы начинают добавляться в список, его емкость увеличивается до 4 элементов. При добавлении пятого элемента размер списка изменяется так, чтобы уместить 8 элементов. Если же и этого недостаточно, список вновь расширяется, на этот раз до 16 элементов. При каждом расширении емкость списка удваивается. Емкость коллекции — это не то же самое, что количество элементов в коллекции. Количество элементов в коллекции может быть прочитано в свойстве Count. Разумеется, емкость всегда больше или равна количеству элементов. До тех пор, пока ни один элемент не добавлен в коллекцию, количество равно 0. Добавлять элементы в список можно методом Add(), как показано ниже. Обобщенный параметрический тип определяет тип первого параметра метода Add (). var intList = new List<int>(); intList.Add(1); intList.Add(2); var stringList = new List<string> (); stringList. Add ("one") ; stringList.Add("two"); Для вставки элементов в определенную позицию коллекции служит метод Insert (): intList.Insert (3, 3); Получив количество элементов из свойства Count, вы можете выполнить цикл for для прохода по всем элементам коллекции, применяя индексатор для обращения к ним: for (int i=0; i < racers.Count; i++) { Console.WriteLine(racers[i]); Поскольку List<T> реализует интерфейс IEnumerable, проход по элементам коллекции можно также осуществлять с помощью оператора foreach: foreach (Racer r in racers) { Console.WriteLine(r);} Элементы можно удалять по индексу либо передавая подлежащий удалению элемент. Ниже удаляется четвертый по порядку элемент: racers.RemoveAt(3); Чтобы удалить объект Racer, его можно также непосредственно передать методу Remove (). Удаление по индексу работает быстрее, поскольку в этом случае не приходится выполнять поиск удаляемого элемента по всей коллекции. Метод Remove () сначала ищет в коллекции индекс удаляемого элемента с помощью метода IndexOf (), а затем использует этот индекс для удаления элемента. Метод RemoveRange () удаляет множество элементов из коллекции. Первый параметр специфицирует индекс, начиная с которого располагаются удаляемые элементы, а второй параметр задает количество удаляемых элементов. int index = 3; int count = 5; racers.RemoveRange(index, count); Для удаления всех элементов из коллекции служит метод Clear(), определенный в интерфейсе ICollection<T>.
Очередь Очередь (queue) — это коллекция, в которой элементы обрабатываются по схеме "первый вошел, первый вышел" (first in, first out — FIFO). массива означает приоритет. Внутри каждого элемента массива будет очередь, и обработка будет выполняться по принципу FIFO. Очередь реализуется с помощью класса Queue<T> из пространства имен System.Collections.Generic. Внутри класс Queue<T> использует массив типа Т, подобно тому, как это делает класс List<T>. Обращаться к элементам очереди через индексатор нельзя. Очередь позволяет лишь добавлять элементы, при этом элемент помещается в конец очереди (методом Enqueue ()), а также получать элементы из головы очереди (методом Dequeue ()). Методы класса Queue<T> описаны в табл. 10.2. При создании очередей можно использовать конструкторы, подобные тем, что применялись с типом List<T>. Конструктор по умолчанию создает пустую очередь, но конструктор можно также использовать для указания начальной емкости. Подобно классу List<T>, емкость очереди при необходимости удваивается. Стек Стек (stack) — это еще один контейнер, очень похожий на очередь. Элемент, добавленный к стеку последним, читается первым ("последний вошел, первый вышел"(last in, first out — LIFO). Члены класса Stack<T> перечислены в табл. 10.3. Сортированный список Если нужна коллекция, отсортированная по ключу, можно воспользоваться SortedList<TKey, TValue>. Этот класс сортирует элементы на основе значения ключа. Можно использовать не только любой тип значения, но также и любой тип ключа. В приведенном ниже примере создается сортированный список, в котором как ключ, так и значение имеют тип string. Конструктор по умолчанию создает пустой список, в который с помощью метода Add () добавляются две книги. Применяя перегруженные конструкторы, можно указать емкость списка, а также передать объект, который реализует интерфейс IComparer<TKey>, используемый для сортировки элементов в списке. Первый параметр метода Add () — ключ (заголовок книги); второй параметр — значение (номер ISBN). Для добавления элементов в список вместо метода Add () можно применить индексатор. Индексатор требует ключ в качестве параметра индекса. Если такой ключ уже существует, метод Add () генерирует исключение ArgumentException. Если же то же значение ключа применяется с индексатором, то новое значение заменяет старое. SortedList<TKey, TValue> допускает только одно значение на ключ. Если нужно иметь несколько значений на ключ, следует использовать Lookup<TKey, TElement>. var books = new SortedList<string, string>(); books.Add("C# 2008 Wrox Box", "978-0-470-047205-7"); books.Add("Professional ASP.NET MVC 1.0", "978-0-470-38461-9"); books["Beginning Visual C# 2008"] = "978-0-470-19135-4"; books["Professional C# 2008"] = "978-0-470-19137-6"; С помощью оператора fоreach можно выполнить итерацию по списку. Элементы, возвращенные перечислителем, имеют тип KeyValuePair<TKey, TValue>, который содержит как ключ, так и значение. Ключ доступен через свойство Key, а значение — через свойство Value. foreach (KeyValuePair<string, string> book in books) Console.WriteLine ("{0}, {1}", book.Key, book.Value); Эта итерация отображает заголовки книг и номера ISBN, упорядоченные по ключу:
Задание к лабораторной работе Разработать программу ввода и обработки данных (в соответствии с вариантом). Ввод данных осуществляется с клавиатуры. При вводе должен быть осуществлен контроль данных на корректность (используя механизм свойств и исключений). Этапы выполнения лабораторной работы: 1. Разработать класс, инкапсулирующий работу с одно записью данных (поля записи, свойства, методы ввода и вывода полей записи) и реализующий интерфейс IComparable для возможности сортировки данных по какому-либо полю. 2. Разработать класс, содержащий коллекцию (по варианту) описанного выше класса, и обеспечивающий реализацию следующего интерфейса: interface Iwork_field { void input_data(); // ввод данных void output_data(string s); // вывод данных, s – заголовок void work(); // обработка данных void sort(); // сортировка данных } Пример выполнения задания приведен ниже. В примере вводятся фамилия и оценка по 5тибальной шкале. Затем выводится список отличников. using System; using System.Collections.Generic; using System.Linq; using System.Text;
namespace lab1 { interface Iwork_field { void input_data(); void output_data(string s); void work(); void sort(); } ////////////////////////////////////////////////////////////////////////////////////////// class info:IComparable<info> { public string name {get;set;} int ball; bool err; public int prop_ball { set { if ((value >= 0) && (value <= 5)) ball = value; else { Console.WriteLine("error. wrong diapason ball"); ball = 0; err = true; } } get { return ball; } } public info() { err = false; }
public info(string s,int b) {name=s;prop_ball=b;}
public int CompareTo(info other) // сравнение записей {// A call to this method makes a single comparison that is used for sorting. if (this.ball > other.ball) return 1; else if (this.ball < other.ball) return -1; else return 0; }
public info load_keyboard()// ввод записи с клавиатуры { do { Console.WriteLine("vvedite fio ball"); err = false; string s = Console.ReadLine(); string[] mas_s = s.Split(new Char[] { ' ' }); name = mas_s[0]; if (mas_s.Length < 2) { Console.WriteLine("error. no ball"); err = true; } else try { prop_ball = Convert.ToInt32(mas_s[1]); } catch (System.FormatException) { Console.WriteLine("error format ball"); err = true; } } while (err); return this; }
public void write_screen() // вывод записи на экран { Console.WriteLine(name + ' ' + ball); } } //////////////////////////////////////////////////////////////////////////////////// class Work:Iwork_field { List<info> spisok; public Work() { spisok = new List<info>(); } public void input_data() { Console.Write("count="); int n = Convert.ToByte(Console.ReadLine()); for (int i = 0; i < n; i++) { info z = new info(); spisok.Add(z.load_keyboard()); } } public void output_data(string s) { Console.WriteLine(s); foreach (info current in spisok) current.write_screen(); } public void work() { Console.WriteLine("список отличников"); var rez = spisok.Where(x => x.prop_ball == 5); foreach (info current in rez) Console.WriteLine(current.name+" "+ current.prop_ball); } public void sort() {spisok.Sort(); } } //////////////////////////////////////////////////////////////////////////////// class Program { static void Main(string[] args) { byte n; Work z = new Work(); Iwork_field w = (Iwork_field)z; w.input_data(); w.output_data("исходные данные"); w.sort(); w.output_data("данные после сортировки"); w.work(); Console.ReadKey(); } } } Варианты заданий 1. Оценки за сессию по предметам. Формат ввода информации: предмет (название предмета может состоять из двух слов) – оценка по 5тибальной шкале. Подсчитать средний балл за сессию. Тип коллекции – очередь. 2. Курс доллара за несколько дней. Формат ввода информации: дата – курс. Определить максимальный курс за представленный период. Тип коллекции – стек. 3. Ведомость по сессии. Формат ввода информации: фамилия – инициалы – средний балл. Определить отличников. Тип коллекции – сортированный список. 4. Движение самолетов. Формат ввода информации: номер рейса (4 цифры 2 буквы) – цена – порт назначения. Сформировать таблицу рейсов для заданного аэропорта. Тип коллекции – список. 5. Успеваемость по дисциплине. Формат ввода информации: фамилия – оценки по 3 лаб. работам. Сформировать список не сдавших хоть одну лаб. работу. Тип коллекции – очередь. 6. Учет товаров в магазине. Формат ввода информации: наименование товара – стоимость – количество. Вывести информацию о товаре, которого в магазине находится на самую большую сумму. Тип коллекции – стек. 7. Учет техники на заводе. Формат ввода информации: наименование прибора – год создания – стоимость. Вывести информацию о приборах, разработанных в заданном году. Тип коллекции – сортированный список. 8. Электронный каталог. Формат ввода информации: имя файла – объем – дата создания. Вывести все файлы больше 100Мб. Тип коллекции – сортированный список. 9. Учет в больнице. Формат ввода информации: номер мед. карты (2 буквы, 3 цифры) – номер палаты. Вывести список больных заданной палаты. Тип коллекции – список. 10. Станция тех. обслуживания. Формат ввода информации: марка машины – регистрационный номер (2 буквы, 5 цифр) – пробег. Вывести список машин с пробегом больше 10000 км. Тип коллекции – сортированный список. 11. Учет книг в библиотеке. Формат ввода информации: жанр (фантастика, детектив, история) – автор – количество. Найти автора, книг которого наибольшее количество, и вывести информацию о его книгах. Тип коллекции – очередь. 12. Районный военкомат. Формат ввода информации: фамилия – дата рождения – пригодность к службе (да/нет). Вывести сведения о всех пригодных к службе. Тип коллекции – стек. 13. Учет лекарств в аптеке. Формат ввода информации: название лекарства – стоимость – количество. Вывести список лекарств, стоимостью менее 50 руб, которых в аптеке осталось меньше 10 шт. Тип коллекции – сортированный список. 14. Учет материалов в цехе. Формат ввода информации: наименование материала – шифр (6 цифр) – количество – единица измерения (шт, кг). Вывести список материалов, которых осталось меньше 100 шт. или менее 50 кг. Тип коллекции – список. 15. Учет оборудования. Формат ввода информации: наименование предмета – инвентарный номер (3 буквы 4 цифры) – срок службы. Составить список оборудования со сроком службы более 10 лет. Тип коллекции – стек. 16. Учет разговоров на АТС за месяц. Формат ввода информации: фамилия абонента – количество звонков – сумма для оплаты. Вывести абонента, который сделал максимальное количество звонков и абонента, выполнившего звонки на максимальную сумму. Тип коллекции – очередь. 17. Учет рабочего времени. Формат ввода информации: фамилия – табельный номер (5 цифр) – количество отработанных часов в неделю. Вывести информацию о рабочих, которые отработали более 40ч. Тип коллекции – сортированный список. 18. Диспетчерская автовокзала. Формат ввода информации: номер автобуса (2 буквы, 5 цифр) – фамилия водителя – время отправления чч:мм. Составить список автобусов, отправляющихся позже 15.00. Тип коллекции – сортированный список. 19. Нагрузка преподавателей в неделю. Формат ввода информации: фамилия и инициалы преподавателя – день недели – количество часов занятий. Вывести список преподавателей, имеющих нагрузку не менее 4 часов в заданный день недели. Тип коллекции – список. 20. Учет погодных условий на метеостанции за месяц. Формат ввода информации: число – температура воздуха днем и ночью. Вывести информацию о дне с максимальной разницей дневной и ночной температур. Тип коллекции – очередь. 21. Книга заявок на ремонт. Формат ввода информации: фамилия заявителя – тип ремонта (малый, средний, крупный) – дата заявки. Вывести информацию о заявке на средний ремонт для заданной даты. Тип коллекции – стек. 22. Часовая мастерская. Формат ввода информации: фамилия заказчика – стоимость ремонта – дата заявки. Сформировать список заказов на ремонт после заданной даты. Тип коллекции – список. 23. Справочное бюро. Формат ввода информации: фамилия – инициалы – домашний телефон (6 или 7 цифр или -, если телефона нет). Сформировать список людей, не имеющих домашнего телефона. Тип коллекции – очередь. 24. Жилищное управление. Формат ввода информации: адрес (улица, дом, квартира) – количество проживающих – жилая площадь. Вывести сведения о квартирах, у хозяев которых имеется лишняя жилая площадь (норма 13 кв.м. на человека). Тип коллекции – список. 25. Рабочие предприятия. Формат ввода информации: табельный номер (5 цифр) – номер цеха – профессия. Вывести рабочих заданного цеха. Тип коллекции – сортированный список. 26. Библиотека. Формат ввода информации: инвентарный номер (7 цифр) – год издания – издательство. Вывести список книг заданного издательства. Тип коллекции – сортированный список. 27. Информация о дипломировании. Формат ввода информации: номер зачетной книжки (в виде гг/56788, где гг – год поступления) – сокращенное название факультета – оценка). Составить список защитивших на отлично и поступивших в заданном году. Тип коллекции – сортированный список. 28. Учет компьютеров на кафедре. Формат ввода информации: инвентарный номер (6 цифр) – стоимость – использование (учебная работа, НИР). Вывести сведения о компьютерах, используемых для учебной работы стоимостью более 10000руб. Тип коллекции – очередь. 29. Сведения о футбольном турнире. Формат ввода информации: название команды – количество побед, поражений, ничьих. Для каждой команды подсчитать количество набранных очков (победа 3 очка, ничья 1 очко, поражение 0). Тип коллекции – стек. 30. Учет товаров. Формат ввода информации: артикул товара (6 цифр) – название магазина – количество товара. Вывести сведения о заданном товаре. Тип коллекции – список. |
||||||||||||
Последнее изменение этой страницы: 2018-04-12; просмотров: 356. stydopedya.ru не претендует на авторское право материалов, которые вылажены, но предоставляет бесплатный доступ к ним. В случае нарушения авторского права или персональных данных напишите сюда... |