Статистика фигурного катания
Введение
Данное приложение было разработано для подсчета статистики фигурного катания. В качестве примера были выбраны статистики олимпийских игр 2006 в Турине и 2010 в Ванкувере.
Постановка задачи
Необходимо разработать приложение для Windows, реализующее расчет и визуализацию статистики фигурного катания, с использованием интегрированной среды разработки Microsoft Visual Studio C#.
Подход к решению
В этом проекте использовались реальные расчетные данные статистики олимпиад и вычислялись они следующим образом: общий результат является сумой баллов короткой и произвольной программ. В свою очередь, короткая и произвольная программы получаются в результате суммирования технических результатов и оценок компонентов.
Технический результат - это результат, полученный судьями за техничное исполнение (точность, синхронность, качество движений и т.д.) всех элементов программы и получается в результате суммирования всех средних оценок судей за каждый элемент.
Оценка компонентов - это оценка, полученная судьями за каждый элемент программы с точки зрения артистичности, ритмики, музыкальности исполнения и т.д. Она вычисляется путем суммирования всех средних оценок судей за каждый элемент.
Теоретическая часть
В графическом представлении расчеты выглядят следующим образом:
Рис. 1
Для реализации интерфейса пользователя предлагается следующее решение:
Проект включает в себя три графические формы. Первая форма представляет собой главное меню программы, в котором осуществляется отображение результатов расчетов. Вторая форма выводит помимо рассчитанных данных еще и исходные. Третья форма осуществляет графическую визуализацию данных в виде гистограмм.
Форма «Form1»
Рис. 2
В главном меню приложения расположены:
Выплывающий список выбора олимпийских игр (1)
Выплывающий список выбора разновидности катания (2)
Ссылка открытия окна графической визуализации (3)
Таблица статистики (4)
Форма «Form2»
Рис. 3
На данной форме расположены:
Таблица исходных данных(1).
Форма «Form3» (2D)
Рис. 4
На данной форме расположены:
Кнопка перевода графики в 3-х мерное измерение
Элемент графической визуализации
Форма «Form3» (3D)
Рис. 5
На данной форме расположены: см. «Форма «Form3» (3D)»
Диаграмма классов
Рис. 6
Экспериментальная часть
Тестирование
Таблица 1 - «Запуск приложения»
Процедура проверкиОжидаемый результатЗапустить исполняемый файл проекта Курсовая работа (Фигурное катание).exeПриложение запускается, открывается окно главного меню (Рисунок №1)
Таблица 2 - «Просмотр общих сведений статистики»
Процедура проверкиОжидаемый результатВыбрать олимпийские игры и тип катания из выплывающих списковТаблица заполняется данными статистики, ссылка «Графическое представление данных» разблокируется (П1.1)Таблица 3 - «Просмотр подробных сведений статистики»
Процедура проверкиОжидаемый результатВыполнить действия таблицы №2Таблица заполняется данными статистики, ссылка «Графическое представление данных» разблокируется (П1.1)Дважды кликнуть на любого фигуриста из таблицыОткрывается окно с подробной информацией о каждом выступлении фигуриста (П1.2)
Таблица 4 - «Просмотр графического представления статистики в 2D»
Процедура проверкиОжидаемый результатВыполнить действия таблицы №2Таблица заполняется данными статистики, ссылка «Графическое представление данных» разблокируется (П1.1)Кликнуть на ссылку «Графическое представление данных»Открывается окно с построенной гистограммой (П1.3)
Таблица 5 - «Просмотр графического представления статистики в 3D»
Процедура проверкиОжидаемый результатВыполнить действия таблицы №3Открывается окно с построенной гистограммой (П1.3)Установить галочку на кнопке «3D»Гистограмма представит данные в 3-х мерной плоскости (П1.4)
Протокол тестирования
Процедура проверкиОжидаемый результатЗапуск приложенияВыполнено. Замечаний нетПросмотр общих сведений статистикиВыполнено. Замечаний нетПросмотр подробных сведений статистикиВыполнено. Замечаний нетПросмотр графического представления статистики в 2DВыполнено. Замечаний нетПросмотр графического представления статистики в 3DВыполнено. Замечаний нет
Руководство пользователя
Запуск приложения
Запустите файл «Курсовая работа (Фигурное катание).exe» в директории приложения.
Просмотр общих сведений статистики
Выберите олимпийские игры и вид катания из выплывающих списков
Просмотр подробных сведений статистики
Выведите общие сведения статистики
Дважды кликните на какого либо фигуриста в таблице
Просмотр графического представления статистики в 2D
Выведите общие сведения статистики
Нажмите ссылку «Графическое представление данных»
Просмотр графического представления статистики в 3D
Выведите данные в графическом представлении
Установите галочку на кнопке «3D»
Выход из приложения
Нажмите кнопку «X» в верхнем правом углу главного меню
Примеры работы программы приведены в приложении №1.
Заключение
В результате выполнения данного курсового проекта были реализованы следующие пункты:
Разработано программное обеспечение, реализующее расчет и визуализацию фигурного катания
Разработана программная документация
Проведена отладка и тестирование приложения
По результатам испытаний было выявлено:
Ограничение на работу приложения в системах с отсутствием установленной программной платформы Microsoft .NET Framework 4
Неудобная работа на мониторах с низким разрешением.
Таким образом, разработанная программа полностью соответствует требованиям, изложенным в задании на курсовую работу.
Приложение
программа листинг приложение статистика
using System;System.Collections.Generic;System.ComponentModel;System.Data;System.Drawing;System.IO;System.Linq;System.Text;System.Windows.Forms;Курсовая_работа__Фигурное_катание_
{
public partial class Form1 : Form
{Form1()
{();
}Lenght = 90;void comboBox1_SelectedIndexChanged (object sender, EventArgs e)
{(comboBox2.Text != "")
{.Enabled = true;.Rows.Clear();cl = new Calculation();<List<string>> Data;(comboBox1.Text == "Олимпийские игры 2006 (Турин)")
{= cl.ReadData("2006", comboBox2.Text);
}
{= cl.ReadData("2010", comboBox2.Text);
}[] a = new string[8];(int i = 0; i < Data[1].Count; i++)
{[0] = Data[0][i];[1] = Data[1][i];[2] = Data[2][i];[3] = Data[3][i];[4] = Data[4][i];[5] = Data[5][i];[6] = Data[6][i];[7] = Data[7][i];.Rows.Add(a);
}
}
}void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{(comboBox1.Text != "")
{.Enabled = true;.Rows.Clear();cl = new Calculation();<List<string>> Data;(comboBox1.Text == "Олимпийские игры 2006 (Турин)")
{= cl.ReadData("2006", comboBox2.Text);
}
{= cl.ReadData("2010", comboBox2.Text);
}[] a = new string[8]; (int i = 0; i < Data[1].Count; i++)
{[0] = Data[0][i];[1] = Data[1][i];[2] = Data[2][i];[3] = Data[3][i];[4] = Data[4][i];[5] = Data[5][i];[6] = Data[6][i];[7] = Data[7][i];.Rows.Add(a);
}.Sort(dataGridView1.Columns[0], ListSortDirection.Ascending);
}
}void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{f = new Form2();Year;
if (comboBox1.Text == "Олимпийские игры 2006 (Турин)")
{= "2006";
}
{= "2010";
}sr = File.OpenText("Олимпиада " + Year + ".txt");s = "";(s != this.dataGridView1.CurrentRow.Cells[2].Value.ToString())
{= sr.ReadLine();
}[] row = { "Имя", s };.dataGridView1.Rows.Add(row);[0] = "Тип катания";[1] = comboBox2.Text;.dataGridView1.Rows.Add(row);[0] = "Страна";[1] = this.dataGridView1.CurrentRow.Cells[1].Value.ToString();.dataGridView1.Rows.Add(row);[0] = "Занятое место";[1] = this.dataGridView1.CurrentRow.Cells[0].Value.ToString();.dataGridView1.Rows.Add(row);
row[0] = "Занятое место в короткой программе";
row[1] = this.dataGridView1.CurrentRow.Cells[3].Value.ToString();.dataGridView1.Rows.Add(row);
row[0] = "Занятое место в произвольной программе";
row[1] = this.dataGridView1.CurrentRow.Cells[5].Value.ToString();.dataGridView1.Rows.Add(row);[0] = "Общие баллы";[1] = this.dataGridView1.CurrentRow.Cells[7].Value.ToString();.dataGridView1.Rows.Add(row);[0] = "Баллы короткой программы";[1] = this.dataGridView1.CurrentRow.Cells[4].Value.ToString();.dataGridView1.Rows.Add(row);[0] = "Баллы произвольной программы";[1] = this.dataGridView1.CurrentRow.Cells[6].Value.ToString();.dataGridView1.Rows.Add(row);.ReadLine();.ReadLine();.ReadLine();
s = sr.ReadLine();[0] = "Короткая программа, технический результат";
row[1] = "";.dataGridView1.Rows.Add(row);
int i = 1;(s != "Оценка компонентов")
{[0] = "Средний балл элемента №"+i+"";
row[1] = s;.dataGridView1.Rows.Add(row);
s = sr.ReadLine();++;
}[0] = "Короткая программа, оценки компонентов";
row[1] = "";.dataGridView1.Rows.Add(row);= sr.ReadLine();= 1;(s != "Произвольная программа")
{[0] = "Средний балл элемента №" + i + "";
row[1] = s;.dataGridView1.Rows.Add(row);= sr.ReadLine();++;
}= sr.ReadLine();
s = sr.ReadLine();[0] = "Произвольная программа, технический результат";
row[1] = "";.dataGridView1.Rows.Add(row);
i = 1;(s != "Оценка компонентов")
{[0] = "Средний балл элемента №" + i + "";
row[1] = s;.dataGridView1.Rows.Add(row);
s = sr.ReadLine();++;
}[0] = "Произвольная программа, оценки компонентов";
row[1] = "";.dataGridView1.Rows.Add(row);= sr.ReadLine();= 1;((s.IndexOf("***") == -1) && (s.IndexOf("///") == -1) &&
(s.IndexOf("|||") == -1) && (s.IndexOf("\) == -1) && (s != "11"))
{[0] = "Средний балл элемента №" + i + "";
row[1] = s;.dataGridView1.Rows.Add(row);++;= sr.ReadLine();(s == null)
{= "11";
}
}.ShowDialog();
}void timer1_Tick(object sender, EventArgs e)
{
}void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{f = new Form3();(int i = 0; i < 8; i++)
{
f.chart1.Series["Общий результат"]. Points.AddXY(this.dataGridView1.Rows[i].Cells[2].Value.ToString(), .ToDouble(this.dataGridView1.Rows[i].Cells[7].Value.ToString()));
f.chart1.Series["Короткая программа"]. Points.AddXY(this.dataGridView1.Rows[i].Cells[2].Value.ToString(),.ToDouble(this.dataGridView1.Rows[i].Cells[4].Value.ToString()));.chart1.Series["Произвольная программа"]. Points.AddXY(this.dataGridView1.Rows[i].Cells[2].Value.ToString(),.ToDouble(this.dataGridView1.Rows[i].Cells[6].Value.ToString()));
}.ShowDialog();
}
}Calculation
{List<List<string>> ReadData(string YearOlympic, string Type)
{sr = File.OpenText("Олимпиада " + YearOlympic + ".txt");s1 = "";<List<string>> Data = new List<List<string>>();.Add(new List<string>());.Add(new List<string>());.Add(new List<string>());.Add(new List<string>());.Add(new List<string>());.Add(new List<string>());.Add(new List<string>());.Add(new List<string>());(s1 != null)
{= sr.ReadLine();(s1 != null)
{(s1 == Type)
{= sr.ReadLine();[2].Add(s1);= sr.ReadLine();[1].Add(s1);
s1 = sr.ReadLine();
s1 = sr.ReadLine();= sr.ReadLine();EstimatesComponents = 0, TechnicalResult = 0, ShortProgram, FreeSkating;(s1 != "Оценка компонентов")
{= CalculationData(TechnicalResult, Convert.ToDouble(s1));= sr.ReadLine();
}= Math.Round(TechnicalResult, 2);= sr.ReadLine();(s1 != "Произвольная программа")
{= CalculationData(EstimatesComponents, Convert.ToDouble(s1));= sr.ReadLine();
}= Math.Round(EstimatesComponents, 2);= TechnicalResult + EstimatesComponents;= Math.Round(ShortProgram, 2);= 0; EstimatesComponents = 0;= sr.ReadLine();= sr.ReadLine();(s1 != "Оценка компонентов")
{= CalculationData (TechnicalResult, Convert.ToDouble (s1));= sr.ReadLine();
}= Math.Round(TechnicalResult, 2);= sr.ReadLine();
while ((s1.IndexOf("***") == -1) && (s1.IndexOf("///") == -1) &&
(s1.IndexOf("|||") == -1) && (s1.IndexOf("\) == -1) && (s1 != "11"))
{= CalculationData(EstimatesComponents, Convert.ToDouble(s1));= sr.ReadLine();(s1 == null)
{= "11";
}
}= Math.Round(EstimatesComponents, 2);= TechnicalResult + EstimatesComponents;= Math.Round(FreeSkating, 2);[4].Add(ShortProgram.ToString());[6].Add(FreeSkating.ToString());Total = ShortProgram + FreeSkating;[7].Add(Total.ToString());
}
{((s1.IndexOf("***") == -1) && (s1.IndexOf("///") == -1) &&
(s1.IndexOf("|||") == -1) && (s1.IndexOf("\) == -1) && (s1 != "11"))
{= sr.ReadLine();(s1 == null)
{= "11";
}
}
}
}
}.Close();<List<double>> point = Points(Data);= Ranks(point, Data);Data;
}double CalculationData(double Summ, double Assessment)
{Summ + Assessment;
}List<List<double>> Points(List<List<string>> Data)
{<List<double>> point = new List<List<double>>();.Add(new List<double>());.Add(new List<double>());.Add(new List<double>());(int i = 0; i < Data[1].Count; i++)
{[0].Add(Convert.ToDouble(Data[4][i]));[1].Add(Convert.ToDouble(Data[6][i]));
point[2].Add(Convert.ToDouble(Data[7][i]));
}point;
}List<List<string>> Ranks(List<List<double>> point, List<List<string>> Data)
{<List<double>> rank = new List<List<double>>();.Add(new List<double>());.Add(new List<double>());.Add(new List<double>());.Add(new List<double>());[2].Sort();[2].Reverse();(int i = 0; i < Data[1].Count; i++)
{[0].Add((Search(point[2], Convert.ToDouble(Data[7][i])) + 1).ToString());
}[0].Sort();[0].Reverse();(int i = 0; i < Data[1].Count; i++)
{[3].Add((Search(point[0], Convert.ToDouble(Data[4][i])) + 1).ToString());
}[1].Sort();[1].Reverse();(int i = 0; i < Data[1].Count; i++)
{[5].Add((Search(point[1], Convert.ToDouble(Data[6][i])) + 1). ToString());
}Data;
}int Search(List<double> mass, double element)
{(int i = 0; i < mass.Count; i++)
{(mass[i] == element)
{i;
}
}0;
}
}
Больше работ по теме:
Предмет: Информационное обеспечение, программирование
Тип работы: Курсовая работа (т)
Новости образования
КОНТАКТНЫЙ EMAIL: [email protected]
Скачать реферат © 2017 | Пользовательское соглашение
ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ