2018 ПРОГРАММНАЯ ИНЖЕНЕРИЯ (осень_2018-весна_2019) ПИб-3курс 2 семестра 1 ЛЕК=12шт Л/Р=8шт СРС=97ч ЗАЧЁТ 2 ЛЕК=12шт Л/Р=8шт СРС=97ч ЭКЗАМЕН https://goo.gl/kQbPF1 Рейтинг группы/оценки https://goo.gl/P9fkCb гугл-папка с презентациями лекций https://goo.gl/hHvGtQ гугл-папка с примерами реализаций с лекций (папка _к_лабораторкам или папка 2019_ПИб-3) Практикум по CSharp: https://pcoding.ru/pdf/CSharpJunior.pdf Учебники: ФиЛП https://pcoding.ru/pdf/jsFuncCoding.pdf _ООП https://pcoding.ru/pdf/CSharpOOP.pdf Телеграм-канал https://t.me/joinchat/AAAAAEiRgXeGoC5Qwy7wSg ------------------------------------------------------------------------------- ---------------------------------- 2 СЕМЕСТР ---------------------------------- ------------------------------------------------------------------------------- ПРОЕКТЫ: Экспертная система Анализ текста Парсер QR-code ридер БД Access БД MySQL Тема 1 - Экспертная система с мульти-деревом. нужно уметь: загрузить список файлов из папки отобразить картинку на форме и сменить её сделать мульти-оконное приложение подключить модуль с классом к приложению подключить форму к приложению согласовать все пространства имён выбрать стартовую форму запустить из одной формы другую с параметрами динамически добавлять и удалять объекты / видео - Динамические компоненты C# опознать какой радио-баттон нажат / видео - Как узнать нажатую radioButton: C# vs Delphi ------------------------------------------------------------------------------- ---------------------------------- 1 СЕМЕСТР ---------------------------------- ------------------------------------------------------------------------------- Темы лабораторных работ 1 СЕМЕСТР - содержание Раздел 1 - Функциональное программирование на Node.js 1 Обработка массивов 2 Объекты и файлы 3 Экспертная система 4 Регулярные выражения Раздел 2 - ООП на C# 5 Консольные программы в С# 6 Классы и объекты 7 Методы и свойства, конструкторы ЛЕКЦИИ Раздел 2 - ООП C# Лекция 6 - 28.11.2018 Платформа .NET и консольные приложения C# Лекция 7 - 12.12.2018 Конструктор из конструктора... Сделать класс в отдельном файле, но в этом же namespace. Структуры и классы, показать разницу в присваивании. Присваивание по ссылке. Передача параметров по ссылке. Сделаем swap. Модификаторы ref и out. Форматированный вывод. Пример подключения и использования сторонней dll. Перенести Turtle в отдельный модуль. Как узнать что там внутри? ЛАБОРАТОРКА 2 Подключаем библиотеку стороннего производителя. Делаем лабораторку #2 из Практикума: https://pcoding.ru/pdf/CSharpJunior.pdf Лекция 9 - 19.12.2018 - Наследование и полиморфизм. Наследование классов / структур - Статический класс (не может наследоваться) - Абстрактный класс (не может инстанцироваться, только через производные классы, но конструктор может быть) Полиморфизм protected virtual override конструктор из базового класса абстрактные члены класса (не содержат реализацию, только в абстрактных классах) Human Student Prepod Коллекции using System; using System.Collections.Generic; namespace ca_poli { class Program { static void Main(string[] args) { Student st = new Student("Иванов Иван Иванович"); Prepod pr = new Prepod("Беляков Андрей Юрьевич"); List list = new List(); list.Add(st); list.Add(pr); foreach (var elm in list) { Console.WriteLine(elm.getName()); } //List list = new List() { st, pr }; //// Add //for (int i=0; iline .split(' ') .reduce((a,b)=>+a + +b) ) .sort((a,b)=>b-a); console.log(arr); у меня была ошибка тут: // lines = text.split('\r\n') // .map(line=>console.log(line)); // элементы не менялись, а просто выводились * можно сделать эту программу в виде одной строки: console.log( require('fs') .readFileSync("input.txt", "utf-8") .split('\r\n') .map // для каждой линии считаем сумму чисел ( line=>line .split(' ') .reduce((a,b)=>+a + +b) ) .sort((a,b)=>b-a) ); показать ещё пару вариантов: - console.log не общий, а для каждого - вывести не в столбик, а в одну строку - join ЛАБОРАТОРНЫЕ РАБОТЫ лр1 arr = process.argv; console.log(arr .slice(2) .map(elm => +elm) .filter(elm => elm%2==0) .reduce((acc, elm) => acc+elm, 0) ); Лекция 09_01_2019 - Парсер сайтов 1) Вручную 2) Регулярка 3) С использованием библиотек ---------- 1 ----------- Вручную кнопочка для загрузки страницы сайта в textBox private void btnParsing_Click(object sender, EventArgs e) { Parsing p = new Parsing(txtUrl.Text); txtContent.Text = p.Content; } чтобы работало, нужно подключить вот такую библиотеку: using System.Net; namespace parsing_dll { public class Parsing { string url; string content; public string Content { private set { this.content = value; } get { return this.content; } } public Parsing(string _url) { this.url = _url; setContent(); } void setContent() { WebClient wc = new WebClient(); this.content = wc.DownloadString(this.url); } } } using System; using System.Collections.Generic; using System.Diagnostics; using System.IO; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace parse_lek { class Program { public static string getFromTag(string content, string findTag) { string result = ""; int posLeft = 0, posRight = 0; posLeft = content.IndexOf(findTag, posLeft) + findTag.Length; posRight = content.IndexOf(findTag, posLeft); result = content.Substring(posLeft+1, posRight-posLeft-3); return result; } public static List getRefers(string content, string txtLeft, string txtRight) { List listRefers = new List(); string result = ""; int posLeft = 0, posRight = 0; while (content.IndexOf(txtLeft, posLeft)>0) { posLeft = content.IndexOf(txtLeft, posLeft) + txtLeft.Length; posRight = content.IndexOf(txtRight, posLeft); result = content.Substring(posLeft, posRight - posLeft); listRefers.Add(result); } return listRefers; } static void Main(string[] args) { WebClient webClient = new WebClient(); webClient.Encoding = Encoding.GetEncoding("utf-8"); string url = "https://pcoding.ru/darkNet.php"; //"https://tv.yandex.ru/50/channels/742"; // 592 string content = webClient.DownloadString(url); //string nameFile = "output.html"; //File.WriteAllText(nameFile, content); //Process.Start(nameFile); string findTag = "title"; Console.WriteLine(DateTime.Now.ToString() + "\r\n" + getFromTag(content, findTag)); string pathApp = Directory.GetCurrentDirectory(); string pathSave = pathApp + "/ref/"; string txtLeft = "https://pcoding.ru/ref/"; string txtRight = " "; List listRefers = getRefers(content, txtLeft, txtRight); foreach (string refer in listRefers) { string reference = txtLeft + refer; Console.WriteLine(reference); webClient.DownloadFile(reference, pathSave + refer); } //string fileNameFromNet = "https://pcoding.ru/ref/181.txt"; //string fileNameForSave = fileNameFromNet.Split('/').Reverse().ToArray()[0]; //webClient.DownloadFile(fileNameFromNet, fileNameForSave); Console.WriteLine("Press any key..."); Console.ReadKey(); } } } ------------------------------------------------------------------------------- ---------------------------------- 2 СЕМЕСТР ---------------------------------- ------------------------------------------------------------------------------- https://goo.gl/UtYQVT ПРИМЕРЫ ПРОГРАММ С ЛЕКЦИЙ https://goo.gl/hHvGtQ гугл-папка с примерами реализаций https://goo.gl/f2RuDo файл HELPME, это подсказки во время ЛабРаб https://goo.gl/****** ИТ-Хакатон презентации лекций: https://goo.gl/4vd6Dv лекция про ИИ https://goo.gl/iHMdpL лекция про Кодирование https://goo.gl/nhYy31 лекция про Мессенджер 2 СЕМЕСТР - содержание 1 Как использовать чужую DLL 2 Как создать свою DLL + коллекции (список, стек, очередь) 3 Пишем DLL для Экспертной системы / Тестирующей программы 4 Динамические компоненты 5 Пишем DLL для Парсер сайтов + регулярные выражения 6 Пишем DLL для Граббер сайтов + Пакетная рассылка почты 7 Клиент-серверное приложение - Мессенджер (MySQL+C#) 8 Клиент-серверное приложение - Мессенджер (MySQL+C#) 9 Язык запросов к данным - https://metanit.com/sharp/tutorial/15.1.php |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| * список основных учебных видео по данной дисцилине: https://youtu.be/wQKHyaN_76g - проект_1 - Я черепаший БОГ - как подключить DLL https://youtu.be/Og3AFF9FKWk - проект_2 - Динамические библиотеки. Коллекции. https://youtu.be/1TwWfJeNjHE - проект_3 - Динамические компоненты в C# https://youtu.be/Bbens2jvZak - проект_4 - Грабим сайт Универа. Часть 1. https://youtu.be/YlBtHfZO5yw - проект_4 - Грабим сайт Универа. Часть 2. https://youtu.be/lVKKYWzr8uc - проект_4 - Школа начинающего спамера. Пакетная рассылка почты. https://youtu.be/dgq1K9baNxY - проект_5 - Тест: Прототип - DLL - MySQL. Часть 1 Прототип https://youtu.be/Xa4BSG1TpVI - проект_5 - Тест: Прототип - DLL - MySQL. Часть 2 DLL https://youtu.be/e2ccEHmSa_w - проект_5 - Тест: Прототип - DLL - MySQL. Часть 3 Создаём БД https://youtu.be/uDWFWZi9rLQ - проект_5 - Тест: Прототип - DLL - MySQL. Часть 4 Подключаем БД https://youtu.be/_1mGN7vWw7I - проект_5 - Тест: Прототип - DLL - MySQL. Часть 5 Переносим дамп БД на Хостинг https://youtu.be/OcouGiTxEe8 - проект_5 - Тест: Часть 6 MySQL+WorkBench - Делаем несколько таблиц и связываем их, нормализация, внешний ключ. https://youtu.be/*********** - проект_5 - Тест: Часть 7 C# - Делаем запросы INSERT, SELECT, UPDATE, DELETE * список вспомогательных учебных видео по данной дисцилине - это для саморазвития: https://youtu.be/vz3sj8O820E - Перечисления в C# - enum https://youtu.be/6pGj00h6OdM - Как скрафтить ИНТЕРФЕЙС в C# https://youtu.be/VDSOvAuhwlo - Освободите Вилли - оператор using в C# https://youtu.be/Lh6b6NsWFys - static в C# https://youtu.be/29q1Lz8ErMc - Два способа передать значения между формами в C# https://youtu.be/2EZ_E8sWQIo - Как узнать нажатую radioButton: C# vs Delphi https://youtu.be/z-Lp2Be24JA - Перегрузка операций в C# https://youtu.be/a4yQYJjf7Pc - Обобщённые методы в C# https://youtu.be/mF9cdmv5Q68 - Передача параметров по ссылке в C# |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| Тема ООП - самая важная, нужно знать: - класс, объект, наследование, инкапсуляция, акцессоры - поля, свойства, методы, private, protected, public - static, using, интерфейсы, делегаты, полиморфизм От оценки по этой теме зависит итоговая оценка за ЭКЗАМЕН... Всё есть в учебнике по ООП, качать отсюда (oop.pdf): https://pcoding.ru/base.php |||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||| Решения лабораторок нужно посылать сюда: https://pcoding.ru/password.php пароль 707 Посылать можно файлы с разными расширениями и объемом до 100kb. Лабораторки лучше посылать в архиве - именовать так: - пример для лабораторки номер 2 от Рогова Сидора Наумовича => js_RSN_2.zip Так как у нас сначала были лабораторки по js, то добавляем для них префикс - js. К лабораторкам по C# добавляйте префикс cs, например cs_RSN_1.rar. Нумерация не сквозная. В js своя нумерация от 1 до 4, а в C# своя от 1 до ... Во время лабораторки - ссылка на документ куда можно вставлять кусочки своего кода или скрины: https://goo.gl/qhpyTF