Главная » Просмотр файлов » Методические указания по выполнению лабораторных работ по курсу РИП

Методические указания по выполнению лабораторных работ по курсу РИП (1071214), страница 2

Файл №1071214 Методические указания по выполнению лабораторных работ по курсу РИП (Методические указания по выполнению лабораторных работ по курсу РИП) 2 страницаМетодические указания по выполнению лабораторных работ по курсу РИП (1071214) страница 22017-12-28СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 2)

Программа должна быть разработана в виде консольного приложения наязыке C#.2. Создайте класс «Сотрудник», содержащий поля: ID записи о сотруднике; Фамилия сотрудника; ID записи об отделе.3. Создайте класс «Отдел», содержащий поля: ID записи об отделе; Наименование отдела.4. Предполагая, что «Отдел» и «Сотрудник» связаны соотношением один-комногим, разработайте следующие запросы: Выведите список всех сотрудников и отделов, отсортированный поотделам. Выведите список всех сотрудников, у которых фамилия начинается сбуквы «А».8 Выведите список всех отделов и количество сотрудников в каждомотделе. Выведите список отделов, в которых у всех сотрудников фамилияначинается с буквы «А». Выведите список отделов, в которых хотя бы у одного сотрудникафамилия начинается с буквы «А».5. Создайте класс «Сотрудники отдела», содержащий поля: ID записи о сотруднике; ID записи об отделе.6.

Предполагая, что «Отдел» и «Сотрудник» связаны соотношением много-комногим с использованием класса «Сотрудники отдела» разработайтезапросы, указанные в пункте 4.6.4 Лабораторная работа 4Разработать программу, реализующую обработку данных с использованиембиблиотеки LINQ to Entities.1. Программа должна быть разработана в виде консольного приложения наязыке C#.2. Используя условия лабораторной работы №3, создайте модель EntityFramework (на основе SQL Server) и разработайте запросы, указанные влабораторной работе №3.3. Рекомендуется разработать две различные модели для случаев один-комногим и много-ко-многим.6.5 Лабораторная работа 5Создание проекта ASP.NET MVC с использованием механизма «scaffolding».1.

Создайте модель Entity Framework, содержащую две сущности, связанныесоотношением один-ко-многим.92. Заполните модель тестовыми данными с использованием программы наязыке C# (возможно использованием отдельного проекта C# иликонтроллера ASP.NET MVC).3. С использованием стандартного механизма «scaffolding» сгенерируйте помодели макет приложения ASP.NET MVC, позволяющий добавлять,редактировать и удалять данные.4.

Создайте контроллер и вид, формирующий выборку данных из моделиданных Entity Framework в виде HTML-таблицы с использованиемтехнологии LINQ to Entities.6.6 Лабораторная работа 6Обработка динамических данных с использованием технологии ASP.NETWeb API.1. С использованием контроллера ASP.NET Web API реализуйте работающийиндикатор процесса Twitter Bootstrap, который отрабатывает за заданноечисло секунд (может быть задано в виде константы или вводитьсяпользователем).2. Создайте контроллер ASP.NET Web API, генерирующий случайные числа(данные графика). С использованием JavaScript реализуйте динамическоеобновление данных графика в окне браузера. Для реализации AJAX-запросов к серверу может быть использованабиблиотека jQuery. Для отображения графика может быть использована произвольнаябиблиотека на JavaScript, например http://dygraphs.com/107 Вспомогательныематериалыдлявыполнениялабораторных работ7.1 Лабораторная работа 1При разработке макета сайта можно использовать любые справочныематериалы по языку разметки HTML.

В качестве справочника может бытьиспользован сайт http://htmlbook.ru/7.2 Лабораторная работа 2Библиотека Twitter Bootstrap является библиотекой с открытым исходнымкодом. Официальный сайт Twitter Bootstrap http://getbootstrap.com/Следует учитывать, что библиотека довольно быстро изменяется. Многиепримеры, которыеприведенына русскоязычныхсайтах, втомчислеhttp://mybootstrap.ru/ к сожалению, не работают в последних версиях библиотеки.Все примеры рекомендуется брать именно с официального сайта.Также может представлять интерес сайт с расширениями (дополнительнымистилями, компонентами и т.д.) для Twitter Bootstrap http://bootsnipp.com/resources7.3 Лабораторная работа 37.3.1 Фрагментпрограммы,реализующейобработкуданныхсиспользованием библиотеки LINQ to ObjectsusingusingusingusingSystem;System.Collections.Generic;System.Linq;System.Text;namespace SimpleLINQ{class Program{/// <summary>/// Класс данных/// </summary>public class Data{/// <summary>/// Ключ/// </summary>11public int id;/// <summary>/// Для группировки/// </summary>public string grp;/// <summary>/// Значение/// </summary>public string value;/// <summary>/// Конструктор/// </summary>public Data(int i, string g, string v){this.id = i;this.grp = g;this.value = v;}/// <summary>/// Приведение к строке/// </summary>public override string ToString(){return "(id=" + this.id.ToString() + "; grp=" + this.grp + "; value=" +this.value + ")";}}/// <summary>/// Класс для сравнения данных/// </summary>public class DataEqualityComparer : IEqualityComparer<Data>{public bool Equals(Data x, Data y){bool Result = false;if (x.id == y.id && x.grp == y.grp && x.value == y.value) Result = true;return Result;}public int GetHashCode(Data obj){return obj.id;}}/// <summary>/// Связь между списками/// </summary>public class DataLink{public int d1;public int d2;public DataLink(int i1, int i2){this.d1 = i1;this.d2 = i2;}}12//Пример данныхstatic List<Data> d1 = new List<Data>(){new Data(1, "group1", "11"),new Data(2, "group1", "12"),new Data(3, "group2", "13"),new Data(5, "group2", "15")};static List<Data> d2 = new List<Data>(){new Data(1, "group2", "21"),new Data(2, "group3", "221"),new Data(2, "group3", "222"),new Data(4, "group3", "24")};static List<Data> d1_for_distinct = new List<Data>(){new Data(1, "group1", "11"),new Data(1, "group1", "11"),new Data(1, "group1", "11"),new Data(2, "group1", "12"),new Data(2, "group1", "12")};static List<DataLink> lnk = new List<DataLink>(){new DataLink(1,1),new DataLink(1,2),new DataLink(1,4),new DataLink(2,1),new DataLink(2,2),new DataLink(2,4),new DataLink(5,1),new DataLink(5,2)};static void Main(string[] args){Console.WriteLine("Простая выборка элементов");var q1 = from x in d1 select x;foreach (var x in q1) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Выборка отдельного поля (проекция)");var q2 = from x in d1 select x.value;foreach (var x in q2) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Создание нового объекта анонимного типа");var q3 = from x in d1select new { IDENTIFIER = x.id, VALUE = x.value };foreach (var x in q3) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Условия");13var q4 = from x in d1where x.id > 1 && (x.grp=="group1" || x.grp=="group2")select x;foreach (var x in q4) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Выборка по значению типа");object[] array = new object[] {123, "строка 1", true, "строка 2"};var qo = from x in array.OfType<string>()select x;foreach (var x in qo) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Сортировка");var q5 = from x in d1where x.id > 1 && (x.grp == "group1" || x.grp == "group2")orderby x.grp descending, x.id descendingselect x;foreach (var x in q5) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Сортировка (с использованием методов)");var q51 = d1.Where((x) =>{ return x.id > 1 && (x.grp == "group1" || x.grp == "group2"); }).OrderByDescending(x => x.grp).ThenByDescending(x => x.id);foreach (var x in q51) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Partitioning Operators");Console.WriteLine("Постраничная выдача данных");var qp = GetPage(d1, 2, 2);foreach (var x in qp) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Использование SkipWhile и TakeWhile");int[] intArray = new int[] { 1,2,3,4,5,6,7,8 };var qw = intArray.SkipWhile(x => (x < 4)).TakeWhile(x=>x<=7);foreach (var x in qw) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Декартово произведение");var q6 = from x in d1from y in d2select new { v1 = x.value, v2 = y.value };foreach (var x in q6) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++14Console.WriteLine("Inner Join с использованием Where");var q7 = from x in d1from y in d2where x.id == y.idselect new { v1 = x.value, v2 = y.value };foreach (var x in q7) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Cross Join (Inner Join) с использованием Join");var q8 = from x in d1join y in d2 on x.id equals y.idselect new { v1 = x.value, v2 = y.value };foreach (var x in q8) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Cross Join (сохранение объекта)");var q9 = from x in d1join y in d2 on x.id equals y.idselect new { v1 = x.value, d2Group = y };foreach (var x in q9) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++//Выбираются все элементы из d1 и если есть связанные из d2 (outer join)//В temp помещается вся группа, ее элементы можно перебирать отдельноConsole.WriteLine("Group Join");var q10 = from x in d1join y in d2 on x.id equals y.id into tempselect new { v1 = x.value, d2Group = temp };foreach (var x in q10){Console.WriteLine(x.v1);foreach(var y in x.d2Group)Console.WriteLine("" + y);}//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Cross Join и Group Join");var q11 = from x in d1join y in d2 on x.id equals y.id into tempfrom t in tempselect new { v1 = x.value, v2 = t.value, cnt = temp.Count() };foreach (var x in q11) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Outer Join");var q12 = from x in d1join y in d2 on x.id equals y.id into tempfrom t in temp.DefaultIfEmpty()select new { v1 = x.value, v2 = ( (t==null) ? "null" : t.value ) };foreach (var x in q12) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Использование Join для составных ключей");var q12_1 = from x in d1join y in d1_for_distinct on new { x.id, x.grp } equals new { y.id, y.grp} into detailsfrom d in details select d;15foreach (var x in q12_1) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++//Действия над множествамиConsole.WriteLine("Distinct - неповторяющиеся значения");var q13 = (from x in d1 select x.grp).Distinct();foreach (var x in q13) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Distinct - повторяющиеся значения для объектов");var q14 = (from x in d1_for_distinct select x).Distinct();foreach (var x in q14) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Distinct - неповторяющиеся значения для объектов");var q15 = (from x in d1_for_distinct select x).Distinct(newDataEqualityComparer());foreach (var x in q15) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Union - объединение с исключением дубликатов");int[] i1 = new int[] { 1, 2, 3, 4 };int[] i1_1 = new int[] { 2, 3, 4, 1 };int[] i2 = new int[] { 2, 3, 4, 5 };foreach (var x in i1.Union(i2)) Console.WriteLine(x);Console.WriteLine("Union - объединение для объектов");foreach (var x in d1.Union(d1_for_distinct)) Console.WriteLine(x);Console.WriteLine("Union - объединение для объектов с исключением дубликатов 1");foreach (var x in d1.Union(d1_for_distinct, new DataEqualityComparer()))Console.WriteLine(x);Console.WriteLine("Union - объединение для объектов с исключением дубликатов 2");foreach (var x in d1.Union(d1_for_distinct).Union(d2).Distinct(newDataEqualityComparer())) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Concat - объединение без исключения дубликатов");foreach (var x in i1.Concat(i2)) Console.WriteLine(x);Console.WriteLine("SequenceEqual - проверка совпадения элементов и порядка ихследования");Console.WriteLine(i1.SequenceEqual(i1));Console.WriteLine(i1.SequenceEqual(i2));//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Intersect - пересечение множеств");foreach (var x in i1.Intersect(i2)) Console.WriteLine(x);Console.WriteLine("Intersect - пересечение множеств для объектов");foreach (var x in d1.Intersect(d1_for_distinct, new DataEqualityComparer()))Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++16Console.WriteLine("Except - вычитание множеств");foreach (var x in i1.Except(i2)) Console.WriteLine(x);Console.WriteLine("Except - вычитание множеств для объектов");foreach (var x in d1.Except(d1_for_distinct, new DataEqualityComparer()))Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Функции агрегирования");Console.WriteLine("Count - количество элементов");Console.WriteLine(d1.Count());Console.WriteLine("Count с условием");Console.WriteLine(d1.Count(x => x.id > 1));//Могут использоваться также следующие агрегирующие функции//Sum - сумма элементов//Min - минимальный элемент//Max - максимальный элемент//Average - среднее значение//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Aggregate - агрегирование значений");var qa1 = d1.Aggregate(new Data(0,"",""),(total, next) =>{if (next.id > 1) total.id += next.id;return total;});Console.WriteLine(qa1);//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Группировка");var q16 = from x in d1.Union(d2)group x by x.grp into gselect new { Key = g.Key, Values = g };foreach (var x in q16){Console.WriteLine(x.Key);foreach (var y in x.Values)Console.WriteLine("" + y);}//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Группировка с функциями агрегирования");var q17 = from x in d1.Union(d2)group x by x.grp into gselect new { Key = g.Key, Values = g, cnt = g.Count(), cnt1 =g.Count(x=>x.id>1), sum = g.Sum(x=>x.id), min = g.Min(x=>x.id) };foreach (var x in q17){Console.WriteLine(x);17foreach (var y in x.Values)Console.WriteLine("" + y);}//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Группировка - Any");var q18 = from x in d1.Union(d2)group x by x.grp into gwhere g.Any(x=> x.id > 3)select new { Key = g.Key, Values = g };foreach (var x in q18){Console.WriteLine(x.Key);foreach (var y in x.Values)Console.WriteLine("" + y);}Console.WriteLine("Группировка - All");var q19 = from x in d1.Union(d2)group x by x.grp into gwhere g.All(x => x.id > 1)select new { Key = g.Key, Values = g };foreach (var x in q19){Console.WriteLine(x.Key);foreach (var y in x.Values)Console.WriteLine("" + y);}//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Имитация связи много-ко-многим");var lnk1 = from x in d1join l in lnk on x.id equals l.d1 into tempfrom t1 in tempjoin y in d2 on t1.d2 equals y.id into temp2from t2 in temp2select new { id1 = x.id, id2 = t2.id };foreach (var x in lnk1) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Имитация связи много-ко-многим, проверка условия");var lnk2 = from x in d1join l in lnk on x.id equals l.d1 into tempfrom t1 in tempjoin y in d2 on t1.d2 equals y.id into temp2where temp2.Any(t=>t.value == "24")select x;foreach (var x in lnk2) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Имитация связи много-ко-многим, использование let, проверкаусловия");var lnk3 = from x in d1let temp1 = from l in lnk where l.d1 == x.id select lfrom t1 in temp1let temp2 = from y in d2 where y.id == t1.d2 && y.value == "24"18select ywhere temp2.Count() > 0//let temp2 = from y in d2 where y.id == t1.d2//select y//where temp2.Any(t=>t.value == "24")select x;foreach (var x in lnk3) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Deferred Execution - отложенное выполнение запроса");var e1 = from x in d1 select x;Console.WriteLine(e1.GetType().Name);foreach (var x in e1) Console.WriteLine(x);Console.WriteLine("При изменении источника данных запрос выдает новыерезультаты");d1.Add(new Data(333, "",""));foreach (var x in e1) Console.WriteLine(x);//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Immediate Execution - немедленное выполнение запроса, результатпреобразуется в список ");var e2 = (from x in d1 select x).ToList();Console.WriteLine(e2.GetType().Name);foreach (var x in e2) Console.WriteLine(x);Console.WriteLine("Результат преобразуется в массив");var e3 = (from x in d1 select x).ToArray();Console.WriteLine(e3.GetType().Name);foreach (var x in e3) Console.WriteLine(x);Console.WriteLine("Результат преобразуется в Dictionary");var e4 = (from x in d1 select x).ToDictionary(x=>x.id);Console.WriteLine(e4.GetType().Name);foreach (var x in e4) Console.WriteLine(x);Console.WriteLine("Результат преобразуется в Lookup");var e5 = (from x in d1_for_distinct select x).ToLookup(x=>x.id);Console.WriteLine(e5.GetType().Name);foreach (var x in e5){Console.WriteLine(x.Key);foreach (var y in x)Console.WriteLine("" + y);}//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Получение первого элемента из выборки");var f1 = (from x in d2 select x).First(x=>x.id==2);Console.WriteLine(f1);Console.WriteLine("Получение первого элемента или значения по умолчанию");var f2 = (from x in d2 select x).FirstOrDefault(x => x.id == 22);Console.WriteLine(f2==null ? "null" : f2.ToString());19Console.WriteLine("Получение элемента в заданной позиции");var f3 = (from x in d2 select x).ElementAt(2);Console.WriteLine(f3);//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++//++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Генерация последовательностей");Console.WriteLine("Range");foreach (var x in Enumerable.Range(1, 5)) Console.WriteLine(x);Console.WriteLine("Repeat");foreach (var x in Enumerable.Repeat<int>(10,3)) Console.WriteLine(x);Console.ReadLine();}/// <summary>/// Получение нужной страницы данных/// </summary>static List<Data> GetPage(List<Data> data, int pageNum, int pageSize){//Количество пропускаемых элементовint skipSize = (pageNum-1)*pageSize;var q = data.OrderBy(x => x.id).Skip(skipSize).Take(pageSize);return q.ToList();}}}7.4 Лабораторная работа 47.4.1 Диаграмма классов примера модели LINQ to Entities207.4.2 Фрагментпрограммы,реализующейобработкуданныхсиспользованием библиотеки LINQ to EntitiesusingusingusingusingusingSystem;System.Collections.Generic;System.Linq;System.Text;System.Data.Objects;namespace EntityLINQ{class Program{/// <summary>/// Очистка данных/// </summary>static void ClearData(){LearningModelContainer db = new LearningModelContainer();//Удаление данных для связи много-ко-многим//для каждой записи StudentGroup удаляются все связи с Subjectforeach (var gr in db.StudentGroupSet.ToList()){foreach (var gr_subj in gr.Subject.ToList()){gr.Subject.Remove(gr_subj);}}db.SaveChanges();db.StudentGroupSet.ToList().ForEach(db.StudentGroupSet.DeleteObject);db.SaveChanges();db.SubjectSet.ToList().ForEach(db.SubjectSet.DeleteObject);db.SaveChanges();db.SubjectTypeSet.ToList().ForEach(db.SubjectTypeSet.DeleteObject);db.SaveChanges();}/// <summary>/// Заполнение данных/// </summary>static void InitData(){LearningModelContainer db = new LearningModelContainer();//Добавление типов предметовSubjectType st_tech = new SubjectType{TypeName = "технический цикл",ParentSubjectType = null};db.SubjectTypeSet.AddObject(st_tech);SubjectType st_hum = new SubjectType{TypeName = "гуманитарный цикл",ParentSubjectType = null};21SubjectType st1 = new SubjectType{TypeName = "базовые",ParentSubjectType = st_tech};SubjectType st2 = new SubjectType{TypeName = "специальные",ParentSubjectType = st_tech};SubjectType st3 = new SubjectType{TypeName = "исторические",ParentSubjectType = st_hum};SubjectType st3_1 = new SubjectType{TypeName = "новая история",ParentSubjectType = st3};SubjectType st3_2 = new SubjectType{TypeName = "новейшая история",ParentSubjectType = st3};db.SubjectTypeSet.AddObject(st_tech);db.SubjectTypeSet.AddObject(st_hum);db.SubjectTypeSet.AddObject(st1);db.SubjectTypeSet.AddObject(st2);db.SubjectTypeSet.AddObject(st3);db.SubjectTypeSet.AddObject(st3_1);db.SubjectTypeSet.AddObject(st3_2);//Добавление предметовSubject sb1 = new Subject{SubjectName = "математика",Value = 100, //часовSubjectType = st1};Subject sb2 = new Subject{SubjectName = "физика",Value = 80, //часовSubjectType = st1};Subject sb3 = new Subject{SubjectName = "информатика",Value = 120, //часовSubjectType = st2};Subject sb4 = new Subject{SubjectName = "базы данных",Value = 150, //часов22SubjectType = st2};Subject sb5 = new Subject{SubjectName = "сетевые технологии",Value = 170, //часовSubjectType = st2};db.SubjectSet.AddObject(sb1);db.SubjectSet.AddObject(sb2);db.SubjectSet.AddObject(sb3);db.SubjectSet.AddObject(sb4);db.SubjectSet.AddObject(sb5);//Добавление группStudentGroup g1 = new StudentGroup{GroupName = "ИУ5-11"};StudentGroup g2 = new StudentGroup{GroupName = "ИУ5-51"};StudentGroupSpecial g3 = new StudentGroupSpecial{GroupName = "ИУ5c-11",Flag = true};db.StudentGroupSet.AddObject(g1);db.StudentGroupSet.AddObject(g2);db.StudentGroupSet.AddObject(g3);//Установка связи много-ко многимg1.Subject.Add(sb1);g1.Subject.Add(sb2);g2.Subject.Add(sb3);g2.Subject.Add(sb4);g2.Subject.Add(sb5);g3.Subject.Add(sb1);g3.Subject.Add(sb2);g3.Subject.Add(sb4);//Сохранение данных в БДdb.SaveChanges();}/// <summary>/// Примеры запросов/// </summary>static void Queries(){//Выдача иерархии типов пердметовWriteSubjectTypeTree(-1, 0);Console.WriteLine();23LearningModelContainer db = new LearningModelContainer();//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("Получение всех курсов и групп, которым они читаются");var q1 = from s in db.SubjectSet select s;foreach (var s in q1){Console.WriteLine(s.SubjectName + " (" + s.SubjectType.TypeName + ")");foreach (var g in s.StudentGroup){Console.WriteLine("" + g.GroupName);}}//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("\nКоличество часов по всем предметам для каждой группы");var q2 = from g in db.StudentGroupSetselect new { GroupName = g.GroupName, ValueSum = g.Subject.Sum(x =>x.Value), Subject = g.Subject };foreach (var g in q2){Console.WriteLine(g.GroupName + " (" + g.ValueSum.ToString() + " часов)");foreach (var s in g.Subject){Console.WriteLine("" + s.SubjectName + " (" + s.Value.ToString() + "часов)");}}//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("\nПредметы, читаемые группам");var q3 = from g in db.StudentGroupSetfrom s in g.Subjectselect new { SubjectName = s.SubjectName, Value = s.Value, GroupName =g.GroupName };var q31 = from t in q3orderby t.SubjectName, t.GroupNameselect t;foreach (var g in q31){Console.WriteLine(g);}//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("\nКоличество часов по предмету для всех групп");var q32 = from t in q3group t by t.SubjectName into tempselect new { GroupName = temp.Key, SumValue = temp.Sum(x=>x.Value) };foreach (var g in q32){Console.WriteLine(g);}//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++24Console.WriteLine("\nГруппы для которых читаются специальные курсы (сиспользованием contains)");string[] arr = new string[] { "специальные", "другой" };var qc = from g in db.StudentGroupSetfrom s in g.Subjectwhere arr.Contains(s.SubjectType.TypeName)select new { GroupName = g.GroupName, SubjectTypeName =s.SubjectType.TypeName };foreach (var g in qc){Console.WriteLine(g);}//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("\nТипы курсов, читаемых для группы (с повторяющимисязаписями)");var q4 = from g in db.StudentGroupSetfrom s in g.Subjectselect new { GroupName = g.GroupName, SubjectTypeName =s.SubjectType.TypeName };foreach (var g in q4){Console.WriteLine(g);}//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("\nТипы курсов, читаемых для группы");var q41 = from t in q4.Distinct()select t;foreach (var g in q41){Console.WriteLine(g);}//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("\nГруппы, которым читаются базовые курсы");var q42 = from t in q4.Distinct()where t.SubjectTypeName == "базовые"select t;foreach (var g in q42){Console.WriteLine(g);}//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("\nГруппы, которым читаются базовые курсы (использование any)");var q43 = from t in q4.Distinct()group t by t.GroupName into tempwhere temp.Any((data) => data.SubjectTypeName == "базовые")select temp.Key;foreach (var g in q43)25{Console.WriteLine(g);}//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++Console.WriteLine("\nГруппы, которым читаются только базовые курсы (использованиеall)");var q44 = from t in q4.Distinct()group t by t.GroupName into tempwhere temp.All((data) => data.SubjectTypeName == "базовые")select temp.Key;foreach (var g in q44){Console.WriteLine(g);}Console.WriteLine("\nПолучение сгенерированного SQL");var trace = ((ObjectQuery)q44).ToTraceString();Console.WriteLine(trace);}/// <summary>/// Кэширование данных с использованием Include/// </summary>public static void IncludeExample(){LearningModelContainer db = new LearningModelContainer();//Отключение загрузки связанных данныхdb.ContextOptions.LazyLoadingEnabled = false;Console.WriteLine("\nБез использования Include");var q51 = (from x in db.SubjectSetselect x).ToList();WriteSubjectList(q51);Console.WriteLine("\nС использованием Include");var q52 = (from x in db.SubjectSet.Include("SubjectType").Include("StudentGroup")select x).ToList();WriteSubjectList(q52);}/// <summary>/// Вывод списка/// </summary>/// <param name="list"></param>public static void WriteSubjectList(List<Subject> list){foreach (var x in list){string TypeName = "";if (x.SubjectType != null) TypeName = x.SubjectType.TypeName;else TypeName = "null";Console.WriteLine(x.SubjectName + " (" + TypeName + ")");26if (x.StudentGroup != null){foreach (var y in x.StudentGroup){Console.WriteLine("" + y.GroupName);}}}}public static void WriteSubjectTypeTree(int ParentSubjectTypeParam, int LevelParam){LearningModelContainer db = new LearningModelContainer();var q = from x in db.SubjectTypeSet select x;if (ParentSubjectTypeParam == -1){//Поиск корневых элементов (ParentSubjectType == null)q = q.Where(x => x.SubjectTypeId.HasValue == false);}else{//Поиск элементов с заданным элементом верхнего уровняq = q.Where(x => x.SubjectTypeId.Value == ParentSubjectTypeParam);}//Если существуют элементы на данном уровне иерархииif (q.Count() > 0){//Сортировкаq = q.OrderBy(x => x.TypeName);//Перебор всех значений на заданном уровне иерархииforeach (var x in q){//Вывод отступаif (LevelParam > 0){for (int i = 0; i < LevelParam; i++) Console.Write("}//Вывод значенияConsole.WriteLine(x.TypeName);");//Рекурсивный вызов функции для всех элементов, вложенных в текущийWriteSubjectTypeTree(x.Id, LevelParam + 1);}}}static void Main(string[] args){/*//Заполнение данных в случае пустой БДLearningModelContainer db = new LearningModelContainer();if (db.SubjectTypeSet.Count() == 0){//Инициализация данных для запросовInitData();}*/ClearData();InitData();27Queries();IncludeExample();Console.ReadLine();}}}7.5 Лабораторная работа 57.5.1 Примерконтроллера,сгенерированногосиспользованиемстандартного механизма «scaffolding»usingusingusingusingusingusingusingusingSystem;System.Collections.Generic;System.Data;System.Data.Entity;System.Linq;System.Web;System.Web.Mvc;ReportExample.Models;namespace ReportExample.Controllers{public class ProcessorController : Controller{private Model1Container db = new Model1Container();//// GET: /Processor/public ActionResult Index(){return View(db.Processors.ToList());}//// GET: /Processor/Details/5public ActionResult Details(int id = 0){Processor processor = db.Processors.Single(p => p.Id == id);if (processor == null){return HttpNotFound();}return View(processor);}//// GET: /Processor/Createpublic ActionResult Create(){return View();}//// POST: /Processor/Create[HttpPost]public ActionResult Create(Processor processor)28{if (ModelState.IsValid){db.Processors.AddObject(processor);db.SaveChanges();return RedirectToAction("Index");}return View(processor);}//// GET: /Processor/Edit/5public ActionResult Edit(int id = 0){Processor processor = db.Processors.Single(p => p.Id == id);if (processor == null){return HttpNotFound();}return View(processor);}//// POST: /Processor/Edit/5[HttpPost]public ActionResult Edit(Processor processor){if (ModelState.IsValid){db.Processors.Attach(processor);db.ObjectStateManager.ChangeObjectState(processor, EntityState.Modified);db.SaveChanges();return RedirectToAction("Index");}return View(processor);}//// GET: /Processor/Delete/5public ActionResult Delete(int id = 0){Processor processor = db.Processors.Single(p => p.Id == id);if (processor == null){return HttpNotFound();}return View(processor);}//// POST: /Processor/Delete/5[HttpPost, ActionName("Delete")]public ActionResult DeleteConfirmed(int id){Processor processor = db.Processors.Single(p => p.Id == id);db.Processors.DeleteObject(processor);db.SaveChanges();return RedirectToAction("Index");}29protected override void Dispose(bool disposing){db.Dispose();base.Dispose(disposing);}}}7.5.2 Пример контроллера, используемого для формирования отчетаusingusingusingusingusingSystem;System.Collections.Generic;System.Linq;System.Web;System.Web.Mvc;namespace ReportExample.Controllers{public class SimpleReportController : Controller{//// GET: /SimpleReport/public ActionResult Report(){return View();}}}7.5.3 Пример вида (файл «Report.cshtml»), формирующего выборку данныхиз модели данных Entity Framework в виде HTML-таблицы@using ReportExample.Models@{ViewBag.Title = "Report";Model1Container db = new Model1Container();var q1 = (from x in db.Computersorderby x.HDDselect x).ToList();int sumHDD = q1.Sum(x => x.HDD);}<h2>Жесткие диски компьютеров</h2><table><tr><th>Компьютер</th><th>Емкость жесткого диска</th></tr>@foreach (var x in q1){<tr><td>@x.ComputerName</td><td align="right">@x.HDD</td>30</tr>}<tr><td>ИТОГО</td><td align="right">@sumHDD</td></tr></table>7.6 Лабораторная работа 67.6.1 Пример контроллера ASP.NET Web APIusingusingusingusingusingusingusingusingSystem;System.Collections.Generic;System.Linq;System.Net;System.Net.Http;System.Web.Http;MvcAjax.Helpers;MvcAjax.Models;namespace MvcAjax.Controllers{/// <summary>/// Формат результата/// </summary>public class serverrandomdata{public string x { get; set; }public string y { get; set; }public numbersumdata sumdata { get; set; }}public class ServerRandomController : ApiController{public static List<serverrandomdata> data = new List<serverrandomdata>();static Random random = new Random();// GET api/serverrandompublic List<serverrandomdata> Get(){int i = random.Next(100);//Генерация нового значенияserverrandomdata current = new serverrandomdata(){x = DateTime.Now.ToString(ConstHelper.DateTimeFormat),y = i.ToString(),sumdata = NumberSum.AddNumber(i)};//Добавление в списокdata.Add(current);if (data.Count > 10){data.RemoveRange(0, data.Count - 10);}return data;}31}}7.6.2 Пример вида, реализующего обращение к контроллеру ASP.NET WebAPI@{ViewBag.Title = "Графики";//интервал обновления - 3 сек.int refreshInterval = 3000;string refreshIntervalStr = refreshInterval.ToString();//uri для вызова Web API контроллераstring uri = @"/api/serverrandom";}<h2>Графики</h2><div class="panel panel-primary"><div class="panel-heading">График по 10 последним точкам</div><div class="panel-body"><div id="div_graph_current" style="width:100%; height:333px;"></div></div></div><div class="panel panel-primary"><div class="panel-heading">График по всем точкам</div><div class="panel-body"><div id="div_graph_total" style="width:100%; height:333px;"></div></div></div><div class="panel panel-primary"><div class="panel-heading">График по всем точкам с прокруткой</div><div class="panel-body"><div id="div_graph_total_roll" style="width:100%; height:333px;"></div></div></div>@section Scripts {@Scripts.Render("~/bundles/dygraph")<script type="text/javascript">//-----------------------------------------// Преобразование даты-времени в тип Date из строки//-----------------------------------------function ParseDateTime(dt){var year = dt.substring(0, 4);var month = dt.substring(5, 7);var day = dt.substring(8, 10);var hour = dt.substring(11, 13);var mnt = dt.substring(14, 16);var sec = dt.substring(17, 19);var Result = new Date(year, month-1, day, hour, mnt, sec, 0);return Result;}//Признак первичного заполнения массива с накоплением32var firstTotalFlag = false;//Данные с накоплениемvar dataTotal = [];//Текущие данныеvar dataCurrent = [];//Графикиvar g_current = new Dygraph(document.getElementById("div_graph_current"), dataCurrent,{drawPoints: true,valueRange: [0, 102],labels: ['Время', 'Значение'],'Значение': { fillGraph: true }});var g_total = new Dygraph(document.getElementById("div_graph_total"), dataTotal,{drawPoints: true,valueRange: [0, 102],labels: ['Время', 'Значение'],'Значение': { fillGraph: true }});var g_total_roll = new Dygraph(document.getElementById("div_graph_total_roll"), dataTotal,{drawPoints: true,valueRange: [0, 102],labels: ['Время', 'Значение'],'Значение': { fillGraph: true },colors: ['#3333FF'],showRangeSelector: true});//Uri для доступа к Web API контроллеруvar FullUri = "http://" + window.location.host + '@uri';//Функция setIntervalGraph вызывается после загрузки страницы$(document).bind("ready", setIntervalGraph);function setIntervalGraph(){//Функция RefreshProgress вызывается через заданный интервал времениRefreshGraph();setTimeout(setIntervalGraph, @refreshIntervalStr );}function RefreshGraph(){//Отправка Ajax-запроса о состоянии индикатора прогресса$.ajax({url: FullUri,//функция вызывается после получения ответа на запросsuccess: function (data) {//data - массив данных, полученный с сервера//Очистка массива текущих данныхdataCurrent.length = 0;//Заполнение массива текущих данныхfor (var i = 0; i < data.length; i++){33var element = data[i];var x = ParseDateTime(element.x);var y = element.y;dataCurrent.push([x, y]);}if(!firstTotalFlag){//При первом получении данных в массив с накоплением добавляются вседанныеdataTotal.length = 0;for (var i = 0; i < data.length; i++){var element = data[i];var x = ParseDateTime(element.x);var y = element.y;dataTotal.push([x, y]);}firstTotalFlag = true;}else{//Добавление последнего элемента в массив с накоплениемvar lastElement = data[data.length - 1];var x = ParseDateTime(lastElement.x);var y = lastElement.y;dataTotal.push([x, y]);}//Изменение графиков при изменении массивов данныхg_current.updateOptions({ 'file': dataCurrent });g_total.updateOptions({ 'file': dataTotal });g_total_roll.updateOptions({ 'file': dataTotal });}});}</script>}8 Контрольные вопросы8.1 Лабораторная работа 11.

Характеристики

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6367
Авторов
на СтудИзбе
309
Средний доход
с одного платного файла
Обучение Подробнее