Учебная практика для студентов 2 курса. Методические указания к проведению учебной практики для студентов 2 курса
.pdfint[] Y1 = new int[50]; int[] Y2 = new int[50];
Random r1 = new Random(); Random r2 = new Random(); for (int i = 0; i < 50; i++)
{
X1[i] = DateTime.Now.Date.AddDays(i);
X2[i] = DateTime.Now.Date.AddDays(i); Y1[i] = r1.Next(100);
Y2[i] = r2.Next(300);
}
//подготовка к построению графика npSurface.Clear();
npSurface.Title = "Line Graph"; npSurface.BackColor = System.Drawing.Color.White;
//задание Y оси
NPlot.Grid p = new Grid();
npSurface.Add(p, NPlot.PlotSurface2D.XAxisPosition.Bottom, NPlot.PlotSurface2D.YAxisPosition.Left);
//вес npPlot1.AbscissaData = X1; npPlot1.DataSource = Y1;
npPlot1.Label = "Weight (kg.)"; npPlot1.Color = System.Drawing.Color.Blue;
//высота npPlot2.AbscissaData = X2; npPlot2.DataSource = Y2; npPlot2.Label = "Height (cm)";
npPlot2.Color = System.Drawing.Color.Green; npSurface.Add(npPlot1, NPlot.PlotSurface2D.XAxisPosition.Bottom,
NPlot.PlotSurface2D.YAxisPosition.Left); npSurface.Add(npPlot2, NPlot.PlotSurface2D.XAxisPosition.Bottom,
NPlot.PlotSurface2D.YAxisPosition.Left);
//Ось Х
npSurface.XAxis1.Label = "Date"; npSurface.XAxis1.NumberFormat = "yyyy-MM-dd"; npSurface.XAxis1.TicksLabelAngle = 90; npSurface.XAxis1.TickTextNextToAxis = true; npSurface.XAxis1.FlipTicksLabel = true; npSurface.XAxis1.LabelOffset = 110;
21
npSurface.XAxis1.LabelOffsetAbsolute = true; npSurface.XAxis1.LabelFont = AxisFont; npSurface.XAxis1.TickTextFont = TickFont;
//Ось Y
npSurface.YAxis1.Label = "Value"; npSurface.YAxis1.NumberFormat = "{0:####0.0}"; npSurface.YAxis1.LabelFont = AxisFont; npSurface.YAxis1.TickTextFont = TickFont;
//Добавление легенды npLegend.AttachTo(NPlot.PlotSurface2D.XAxisPosition.Top,
NPlot.PlotSurface2D.YAxisPosition.Right); npLegend.VerticalEdgePlacement = NPlot.Legend.Placement.Inside; npLegend.HorizontalEdgePlacement = NPlot.Legend.Placement.Outside; npLegend.BorderStyle = NPlot.LegendBase.BorderType.Line; npSurface.Legend = npLegend;
//обновление построения графика npSurface.Refresh();
//сохранение графика в файле
Response.Buffer = true; Response.ContentType = "image/gif";
MemoryStream memStream = new MemoryStream(); npSurface.Bitmap.Save(memStream, System.Drawing.Imaging.ImageFormat.Gif); memStream.WriteTo(Response.OutputStream);
Response.End();
}
OxyPlot - «живой» кроссплатформенный open source. Доступен также в
NuGet. Есть соответствующие контролы для WPF/Silverligth, WinForms,
Metro.
Для работы с данной библиотекой ее необходимо добавить в проект и указать на нее ссылку.
Пример использования библиотеки
using OxyPlot;
using OxyPlot.Series;
public partial class Form1 : Form
{
public Form1()
{
22
InitializeComponent();
this.Icon = Icon.ExtractAssociatedIcon(Application.ExecutablePath); var pm = new PlotModel
{
Title = "Trigonometric functions", Subtitle = "Example using the FunctionSeries", PlotType = PlotType.Cartesian,
Background = OxyColors.White };
pm.Series.Add(new FunctionSeries(Math.Sin, -10, 10, 0.1, "sin(x)")); pm.Series.Add(new FunctionSeries(Math.Cos, -10, 10, 0.1, "cos(x)")); pm.Series.Add(new FunctionSeries(t => 5 * Math.Cos(t), t => 5 * Math.Sin(t), 0, 2 * Math.PI, 0.1, "cos(t),sin(t)"));
plot1.Model = pm;
}
}
ZedGraph – еще один «живой» open source, прямой конкурент для
OxyPlot. По количеству поддерживаемых платформ (только Windows) и
технологий (только WinForms и ASP .NET) уступает ему, но один из самых быстрых. Отличный выбор, если необходимо просто построить график.
Пример использования библиотеки
public partial class Form1 : Form {
public Form1 () |
{ |
InitializeComponent (); |
|
DrawGraph (); |
} |
private void DrawGraph () {
//Получим панель для рисования
GraphPane pane = zedGraph.GraphPane;
//Очистим список кривых на тот случай, если до этого сигналы уже были нарисованы
pane.CurveList.Clear ();
//Списки точек для трех графиков
PointPairList list1 = new PointPairList (); PointPairList list2 = new PointPairList (); PointPairList list3 = new PointPairList (); double xmin = -50;
double xmax = 50;
23
// Заполняем списки точек
for (double x = xmin; x <= xmax; x += 0.01)
{
list1.Add (x, f1 (x)); list2.Add (x, f2 (x)); list3.Add (x, f3 (x));
}
//Удалим существующие оси Y pane.YAxisList.Clear ();
//Создадим три новых оси Y
//Метод AddYAxis() возвращает индекс новой оси в списке осей (YAxisList) int axis1 = pane.AddYAxis ("Axis 1");
int axis2 = pane.AddYAxis ("Axis 2"); int axis3 = pane.AddYAxis ("Axis 3");
//Создадим три кривые
LineItem myCurve1 = pane.AddCurve ("Curve 1", list1, Color.Blue, SymbolType.None);
LineItem myCurve2 = pane.AddCurve ("Curve 2", list2, Color.Black, SymbolType.None);
LineItem myCurve3 = pane.AddCurve ("Curve 3", list3, Color.Red, SymbolType.None);
//Для каждой кривой установим свои оси myCurve1.YAxisIndex = axis1; myCurve2.YAxisIndex = axis2; myCurve3.YAxisIndex = axis3;
//Для наглядности раскрасим надписи на оси Y в цвета графика, который рисуется с этой осью
pane.YAxisList[axis1].Title.FontSpec.FontColor = Color.Blue; pane.YAxisList[axis2].Title.FontSpec.FontColor = Color.Black; pane.YAxisList[axis3].Title.FontSpec.FontColor = Color.Red;
//Вызываем метод AxisChange (), чтобы обновить данные об осях. В противном случае на рисунке будет показана только часть графика, которая умещается в интервалы по осям, установленные по умолчанию.
zedGraph.AxisChange ();
//Обновляем график
zedGraph.Invalidate ();
}
private double f1 (double x) { if (x == 0) return 1;
return Math.Sin (x) / x;
24
}
private double f2 (double x) { if (x == 0) return 1;
return 10 * Math.Sin (x * 0.5) / x;
}
private double f3 (double x) { if (x == 0) return 1;
return 0.1 * Math.Sin (x * 2) / x;
}
}
WebChart - Бесплатный предшественник Microsoft Chart Controls. У
него чуть более скудный функционал в сравнении с остальными решениями,
но, так как он имеет некоторые внешние отличия от остальных, может быть вполне полезен.
Пример использования библиотеки
<%@ page language="C#"%>
<%@ import namespace="System.Data"%>
<%@ register tagprefix="web" namespace="WebChart" assembly="WebChart"%> <script runat="server">
void Page_Load(object o, EventArgs e) { CreateChart();
}
void CreateChart() {
PieChart chart = new PieChart();
chart.DataSource = GetDataSet().Tables[0].DefaultView; chart.DataXValueField = "Title";
chart.DataYValueField = "Price"; chart.DataLabels.Visible = true;
chart.DataLabels.ForeColor = System.Drawing.Color.Blue; chart.Shadow.Visible = true;
chart.DataBind(); chart.Explosion = 10; ChartControl1.Charts.Add(chart); ChartControl1.RedrawChart();
}
DataSet GetDataSet() { DataSet ds = new DataSet();
DataTable table = ds.Tables.Add("My Table");
25
table.Columns.Add(new DataColumn("Title")); table.Columns.Add(new DataColumn("Price", typeof(int))); Random rnd = new Random();
for (int i = 0; i < 10; i++) {
DataRow row = table.NewRow(); row["Title"] = "Title:" + i.ToString(); row["Price"] = rnd.Next(1, 100); table.Rows.Add(row);
}
return ds;
}
</script>
<html>
<head>
<title>
Sample Pie</title> </head>
<body>
<form id="form1" runat="server">
<web:chartcontrol runat="server" id="ChartControl1"
height="400" width="350" gridlines="none" legend-position="Bottom"
/>
</form>
</body>
</html>
OpenMinded – бесплатный вариант от пользователя OpenMinded. Нет возможности рендерить результирующий рисунок иначе как на жесткий диск.
Но поскольку проект открытый, любой желающий может изменить код программы. Исходный код можно скачать по ссылке https://bitbucket.org/openminded/plot/downloads
5. Формулировка и варианты индивидуального домашнего задания
Создать структуру данных и реализовать способ их обработки в форме на
C#, обеспечить получение данных с веб-сервиса, их отображение на форме,
сохранение и загрузку в файл, поиск с помощью регулярных выражений,
построение графика и его экспорт в графическом формате. Проанализировать
26
не менее трех библиографических источников (включая ресурсы интернет),
описывающих создание структур данных; графические библиотеки; API
конкретного интернет-ресурса для выполнения индивидуального задания.
Варианты представлены в табл. 2.
Таблица 2.
Варианты индивидуального домашнего задания
№ Задание
1Facebook, Instagram, Vk: получить все фото (нескольких людей). Курс валют (https://api.privatbank.ua): получить курс доллара за промежуток времени. Погода (http://openweathermap.org/): получить прогноз на несколько дней. Произвести сериализацию JSON -> XML или XML ->
JSON (в зависимости от формата ответа) и сохранить в файл.
2Открыть файл, полученный в п. 1, десериализовать и построить график по полученным данным.
3Facebook, Vk: получить даты рождения друзей, вычислить возраст, перевести его в шестнадцатеричную систему, найти средний возраст и сохранить результат в файл. Instagram: выявит число публикаций у пользователей, на которых Вы подписаны, перевести результаты в шестнадцатеричную систему, найти среднее количество публикаций, и
сохранить результат в файл. Курс валют (https://api.privatbank.ua):
получить курс доллара за промежуток времени, перевести его в шестнадцатеричную систему, найти средний курс за этот промежуток и сохранить результат в файл. Погода (http://openweathermap.org/):
получить прогноз на несколько дней, перевести его в шестнадцатеричную систему, найти среднюю температуру и сохранить результат в файл.
4Считать файл из п.1, вывести на экран фамилии и имена пользователей (или дни для курса валют и погоды) из этого файла, сделать возможным удаление выбранного пользователя (день) из файла и перестроить график из п.2
27
Продолжение табл. 2
5 |
Facebook, Instagram, Vk: с помощью регулярных выражений вывести |
|||||
|
записи друзей на стене (или фото с описанием для инстаграмма), где |
|||||
|
содержатся |
повторяющиеся |
слова. |
Для |
погоды |
(http:// |
|
openweathermap.org/): с помощью регулярных выражений вывести |
|||||
|
названия городов, начинающиеся на заданную букву из заданного |
|||||
|
квадрата поиска (http://openweathermap.org/current Cities within a rectangle |
|||||
|
zone). |
|
|
|
|
|
|
|
|||||
6 |
Facebook, Instagram, Vk: получить список друзей и сохранить их фамилии |
|||||
|
и имена в текстовых файлах в кодировках MS DOS, Koi-8. |
|
||||
|
|
|||||
7 |
Курс валют (https://api.privatbank.ua): получить наименования всех |
|||||
|
городов, где расположены терминалы самообслуживания данного банка, |
|||||
|
отсортировать их по алфавиту и сохранить в текстовых файлах в |
|||||
|
кодировках Utf-8, Utf-16. |
|
|
|
|
|
|
|
|||||
8 |
Facebook, Instagram, Vk: получить информацию о загруженных |
|||||
|
фотографиях своих друзей и определить месяц/год, в котором было |
|||||
|
опубликовано больше фотографий. |
|
|
|
|
|
|
|
|||||
9 |
Facebook, Instagram, Vk: получить информацию о загруженных |
|||||
|
фотографиях своих друзей и определить месяц/год, в котором было |
|||||
|
опубликовано меньше фотографий. |
|
|
|
|
|
|
|
|||||
10 |
Погода (http://openweathermap.org): получить данные о погоде за 1 месяц. |
|||||
|
Построить график и определить самый холодный день. |
|
|
|||
|
|
|||||
11 |
Погода (http://openweathermap.org): получить данные о погоде за 1 месяц. |
|||||
|
Построить график и определить самый теплый день. |
|
|
|||
|
|
|||||
12 |
Facebook, Instagram, Vk: вывести фотографии указанного друга за |
|||||
|
определенный промежуток времени. |
|
|
|
|
|
|
|
|||||
13 |
Facebook, Vk: вывести друзей, у которых дни рождения в заданный |
|||||
|
промежуток времени; и их фотографии, опубликованные в день рождения |
|||||
|
по всем годам. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
28 |
|
|
|
6. Требования к оформлению отчета
Отчет оформляется в виде распечатки, согласно общим требованиям,
предъявляемым к оформлению студенческих работ (СТО-13-2011).
Отступления от указанных рекомендаций необходимо обосновать.
Отчет должен содержать:
1)титульный лист;
2)задание кафедры;
3)аннотация;
4)оглавление;
5)ход выполнения индивидуального домашнего задания;
6)заключение;
7)библиографический список.
29
|
Библиографический список |
1. |
Шилдт, Г. С# Базовый курс. /Г. Шилдт. - 3-е изд. – Москва: |
Издательский дом «Вильямс», 2015. – 624 с. |
|
2. |
Создание графического приложения (Windows Forms) в Visual Studio |
2013 - C++/CLI WinForms [Электронный ресурс]: форум программистов и сисадминов – Режим доступа: WWW.URL: http://www.cyberforum.ru/cpp-cli- winforms/thread1224010.html, свободный. – 17.05.2016.
3. Чедвик, Д. ASP.NET MVC 4. Разработка реальных веб-приложений с помощью ASP.NET MVC. /Д. Чедвик, Т. Снайдер, Х. Панда. – Москва:
Издательский дом «Вильямс», 2013. – 432 с.
4. Петин, В. А. API Яндекс, Google и других популярных веб-сервисов.
/В. А. Петин – Санкт-Петербург: БХВ-Петербург, 2012. – 480 с.
5. DisLin | Max Planck Institute for Solar System Research – Режим доступа: WWW.URL: http://www.mps.mpg.de/dislin.html, свободный. – 17.05.2016.
6. СТО – 13 – 2011. Студенческие работы. Общие требования к оформлению [Текст]. – Введ. 2011 – 10 – 01. – Липецк.: Липецкий Государственный Технический Университет, 2011 – 32 с.
30
