Статистика фигурного катания
Форма "Form1", "Form2", "Form3" (2D) и "Form3" (3D), диаграмма классов. Тестирование, его протокол, руководство пользователя. Просмотр общих и подробных сведений статистики, графического представления в 2D и 3D, выход из приложения, листинг программы.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 26.08.2012 |
Размер файла | 1,4 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Размещено на http://www.allbest.ru/
Введение
Данное приложение было разработано для подсчета статистики фигурного катания. В качестве примера были выбраны статистики олимпийских игр 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;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.IO;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace Курсовая_работа__Фигурное_катание_
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
double Lenght = 90;
private void comboBox1_SelectedIndexChanged (object sender, EventArgs e)
{
if (comboBox2.Text != "")
{
linkLabel1.Enabled = true;
dataGridView1.Rows.Clear();
Calculation cl = new Calculation();
List<List<string>> Data;
if (comboBox1.Text == "Олимпийские игры 2006 (Турин)")
{
Data = cl.ReadData("2006", comboBox2.Text);
}
else
{
Data = cl.ReadData("2010", comboBox2.Text);
}
string[] a = new string[8];
for (int i = 0; i < Data[1].Count; i++)
{
a[0] = Data[0][i];
a[1] = Data[1][i];
a[2] = Data[2][i];
a[3] = Data[3][i];
a[4] = Data[4][i];
a[5] = Data[5][i];
a[6] = Data[6][i];
a[7] = Data[7][i];
dataGridView1.Rows.Add(a);
}
}
}
private void comboBox2_SelectedIndexChanged(object sender, EventArgs e)
{
if (comboBox1.Text != "")
{
linkLabel1.Enabled = true;
dataGridView1.Rows.Clear();
Calculation cl = new Calculation();
List<List<string>> Data;
if (comboBox1.Text == "Олимпийские игры 2006 (Турин)")
{
Data = cl.ReadData("2006", comboBox2.Text);
}
else
{
Data = cl.ReadData("2010", comboBox2.Text);
}
string[] a = new string[8];
for (int i = 0; i < Data[1].Count; i++)
{
a[0] = Data[0][i];
a[1] = Data[1][i];
a[2] = Data[2][i];
a[3] = Data[3][i];
a[4] = Data[4][i];
a[5] = Data[5][i];
a[6] = Data[6][i];
a[7] = Data[7][i];
dataGridView1.Rows.Add(a);
}
dataGridView1.Sort(dataGridView1.Columns[0], ListSortDirection.Ascending);
}
}
private void dataGridView1_CellDoubleClick(object sender, DataGridViewCellEventArgs e)
{
Form2 f = new Form2();
string Year;
if (comboBox1.Text == "Олимпийские игры 2006 (Турин)")
{
Year = "2006";
}
else
{
Year = "2010";
}
StreamReader sr = File.OpenText("Олимпиада " + Year + ".txt");
string s = "";
while (s != this.dataGridView1.CurrentRow.Cells[2].Value.ToString())
{
s = sr.ReadLine();
}
string[] row = { "Имя", s };
f.dataGridView1.Rows.Add(row);
row[0] = "Тип катания";
row[1] = comboBox2.Text;
f.dataGridView1.Rows.Add(row);
row[0] = "Страна";
row[1] = this.dataGridView1.CurrentRow.Cells[1].Value.ToString();
f.dataGridView1.Rows.Add(row);
row[0] = "Занятое место";
row[1] = this.dataGridView1.CurrentRow.Cells[0].Value.ToString();
f.dataGridView1.Rows.Add(row);
row[0] = "Занятое место в короткой программе";
row[1] = this.dataGridView1.CurrentRow.Cells[3].Value.ToString();
f.dataGridView1.Rows.Add(row);
row[0] = "Занятое место в произвольной программе";
row[1] = this.dataGridView1.CurrentRow.Cells[5].Value.ToString();
f.dataGridView1.Rows.Add(row);
row[0] = "Общие баллы";
row[1] = this.dataGridView1.CurrentRow.Cells[7].Value.ToString();
f.dataGridView1.Rows.Add(row);
row[0] = "Баллы короткой программы";
row[1] = this.dataGridView1.CurrentRow.Cells[4].Value.ToString();
f.dataGridView1.Rows.Add(row);
row[0] = "Баллы произвольной программы";
row[1] = this.dataGridView1.CurrentRow.Cells[6].Value.ToString();
f.dataGridView1.Rows.Add(row);
sr.ReadLine();
sr.ReadLine();
sr.ReadLine();
s = sr.ReadLine();
row[0] = "Короткая программа, технический результат";
row[1] = "";
f.dataGridView1.Rows.Add(row);
int i = 1;
while (s != "Оценка компонентов")
{
row[0] = "Средний балл элемента №"+i+"";
row[1] = s;
f.dataGridView1.Rows.Add(row);
s = sr.ReadLine();
i++;
}
row[0] = "Короткая программа, оценки компонентов";
row[1] = "";
f.dataGridView1.Rows.Add(row);
s = sr.ReadLine();
i = 1;
while (s != "Произвольная программа")
{
row[0] = "Средний балл элемента №" + i + "";
row[1] = s;
f.dataGridView1.Rows.Add(row);
s = sr.ReadLine();
i++;
}
s = sr.ReadLine();
s = sr.ReadLine();
row[0] = "Произвольная программа, технический результат";
row[1] = "";
f.dataGridView1.Rows.Add(row);
i = 1;
while (s != "Оценка компонентов")
{
row[0] = "Средний балл элемента №" + i + "";
row[1] = s;
f.dataGridView1.Rows.Add(row);
s = sr.ReadLine();
i++;
}
row[0] = "Произвольная программа, оценки компонентов";
row[1] = "";
f.dataGridView1.Rows.Add(row);
s = sr.ReadLine();
i = 1;
while ((s.IndexOf("***") == -1) && (s.IndexOf("///") == -1) &&
(s.IndexOf("|||") == -1) && (s.IndexOf("\\") == -1) && (s != "11"))
{
row[0] = "Средний балл элемента №" + i + "";
row[1] = s;
f.dataGridView1.Rows.Add(row);
i++;
s = sr.ReadLine();
if (s == null)
{
s = "11";
}
}
f.ShowDialog();
}
private void timer1_Tick(object sender, EventArgs e)
{
}
private void linkLabel1_LinkClicked(object sender, LinkLabelLinkClickedEventArgs e)
{
Form3 f = new Form3();
for (int i = 0; i < 8; i++)
{
f.chart1.Series["Общий результат"]. Points.AddXY(this.dataGridView1.Rows[i].Cells[2].Value.ToString(),
Convert.ToDouble(this.dataGridView1.Rows[i].Cells[7].Value.ToString()));
f.chart1.Series["Короткая программа"]. Points.AddXY(this.dataGridView1.Rows[i].Cells[2].Value.ToString(),
Convert.ToDouble(this.dataGridView1.Rows[i].Cells[4].Value.ToString()));
f.chart1.Series["Произвольная программа"]. Points.AddXY(this.dataGridView1.Rows[i].Cells[2].Value.ToString(),
Convert.ToDouble(this.dataGridView1.Rows[i].Cells[6].Value.ToString()));
}
f.ShowDialog();
}
}
class Calculation
{
public List<List<string>> ReadData(string YearOlympic, string Type)
{
StreamReader sr = File.OpenText("Олимпиада " + YearOlympic + ".txt");
string s1 = "";
List<List<string>> Data = new List<List<string>>();
Data.Add(new List<string>());
Data.Add(new List<string>());
Data.Add(new List<string>());
Data.Add(new List<string>());
Data.Add(new List<string>());
Data.Add(new List<string>());
Data.Add(new List<string>());
Data.Add(new List<string>());
while (s1 != null)
{
s1 = sr.ReadLine();
if (s1 != null)
{
if (s1 == Type)
{
s1 = sr.ReadLine();
Data[2].Add(s1);
s1 = sr.ReadLine();
Data[1].Add(s1);
s1 = sr.ReadLine();
s1 = sr.ReadLine();
s1 = sr.ReadLine();
double EstimatesComponents = 0, TechnicalResult = 0, ShortProgram, FreeSkating;
while (s1 != "Оценка компонентов")
{
TechnicalResult = CalculationData(TechnicalResult, Convert.ToDouble(s1));
s1 = sr.ReadLine();
}
TechnicalResult = Math.Round(TechnicalResult, 2);
s1 = sr.ReadLine();
while (s1 != "Произвольная программа")
{
EstimatesComponents = CalculationData(EstimatesComponents, Convert.ToDouble(s1));
s1 = sr.ReadLine();
}
EstimatesComponents = Math.Round(EstimatesComponents, 2);
ShortProgram = TechnicalResult + EstimatesComponents;
ShortProgram = Math.Round(ShortProgram, 2);
TechnicalResult = 0; EstimatesComponents = 0;
s1 = sr.ReadLine();
s1 = sr.ReadLine();
while (s1 != "Оценка компонентов")
{
TechnicalResult = CalculationData (TechnicalResult, Convert.ToDouble (s1));
s1 = sr.ReadLine();
}
TechnicalResult = Math.Round(TechnicalResult, 2);
s1 = sr.ReadLine();
while ((s1.IndexOf("***") == -1) && (s1.IndexOf("///") == -1) &&
(s1.IndexOf("|||") == -1) && (s1.IndexOf("\\") == -1) && (s1 != "11"))
{
EstimatesComponents = CalculationData(EstimatesComponents, Convert.ToDouble(s1));
s1 = sr.ReadLine();
if (s1 == null)
{
s1 = "11";
}
}
EstimatesComponents = Math.Round(EstimatesComponents, 2);
FreeSkating = TechnicalResult + EstimatesComponents;
FreeSkating = Math.Round(FreeSkating, 2);
Data[4].Add(ShortProgram.ToString());
Data[6].Add(FreeSkating.ToString());
double Total = ShortProgram + FreeSkating;
Data[7].Add(Total.ToString());
}
else
{
while ((s1.IndexOf("***") == -1) && (s1.IndexOf("///") == -1) &&
(s1.IndexOf("|||") == -1) && (s1.IndexOf("\\") == -1) && (s1 != "11"))
{
s1 = sr.ReadLine();
if (s1 == null)
{
s1 = "11";
}
}
}
}
}
sr.Close();
List<List<double>> point = Points(Data);
Data = Ranks(point, Data);
return Data;
}
private double CalculationData(double Summ, double Assessment)
{
return Summ + Assessment;
}
private List<List<double>> Points(List<List<string>> Data)
{
List<List<double>> point = new List<List<double>>();
point.Add(new List<double>());
point.Add(new List<double>());
point.Add(new List<double>());
for (int i = 0; i < Data[1].Count; i++)
{
point[0].Add(Convert.ToDouble(Data[4][i]));
point[1].Add(Convert.ToDouble(Data[6][i]));
point[2].Add(Convert.ToDouble(Data[7][i]));
}
return point;
}
private List<List<string>> Ranks(List<List<double>> point, List<List<string>> Data)
{
List<List<double>> rank = new List<List<double>>();
rank.Add(new List<double>());
rank.Add(new List<double>());
rank.Add(new List<double>());
rank.Add(new List<double>());
point[2].Sort();
point[2].Reverse();
for (int i = 0; i < Data[1].Count; i++)
{
Data[0].Add((Search(point[2], Convert.ToDouble(Data[7][i])) + 1).ToString());
}
point[0].Sort();
point[0].Reverse();
for (int i = 0; i < Data[1].Count; i++)
{
Data[3].Add((Search(point[0], Convert.ToDouble(Data[4][i])) + 1).ToString());
}
point[1].Sort();
point[1].Reverse();
for (int i = 0; i < Data[1].Count; i++)
{
Data[5].Add((Search(point[1], Convert.ToDouble(Data[6][i])) + 1). ToString());
}
return Data;
}
private int Search(List<double> mass, double element)
{
for (int i = 0; i < mass.Count; i++)
{
if (mass[i] == element)
{
return i;
}
}
return 0;
}
}
Размещено на Allbest.ru
Подобные документы
Анализ предметной области. Диаграмма классов. Проектирование программного продукта "Часы". Тестирование и отладка, руководство программиста. Описание работы приложения. Руководство оператора, модель жизненного цикла. Файл Times.cs, Arrow.cs, Form1.cs.
курсовая работа [1,7 M], добавлен 20.04.2015Блок-схема модулей программы. Главная цель бизнеса ООО "Регион". Протокол тестирования продукта. Руководство пользователя программы. Расчет цены предложения и минимального количества копий тиражирования. Образец отчета "Книга продаж", листинг программы.
дипломная работа [1,0 M], добавлен 18.09.2014Разработка веб-приложений на основе Servlet API. Основные способы передачи данных от пользователя. Краткая справка по необходимым программным компонентам. Составление программы интернет-чата на основе протокола HTTP. Диаграмма классов веб-приложения.
лабораторная работа [1,1 M], добавлен 01.05.2014Создание тестовой программы на определение доминирующего полушария мозга у человека с применением наиболее распространенного языка Visual Basic for Applications. Выбор технических и программных средств. Интерфейс программы, ее тестирование и листинг.
курсовая работа [222,5 K], добавлен 08.01.2015Структурная схема получения гороскопа по дате рождения. Листинг исходных кодов программы и руководство пользователя. Ввод данных с помощью объекта класса QDateEdit. Разработка пользовательского интерфейса. Выбор стратегии тестирования и отладка программы.
курсовая работа [1,0 M], добавлен 31.05.2015Диаграмма консольного приложения табулирования функции. Отличие консольного приложения и приложения и GUI. Диаграмма классов для JFrameи JPanel. Создание простейшего фрейма в Java. Компоновка элементов интерфейса внутри фрейма. Цикл обработки событий.
лекция [693,8 K], добавлен 01.05.2014Обнаружение аномальных данных в одномерных выборках. Метод D-статистики и Титьена-Мура, графический метод диаграмма "ящик с усами". Описание алгоритмов верификации данных. Руководство для программиста. Анализ данных на основе критерия D-статистики.
курсовая работа [938,4 K], добавлен 24.06.2013Словесное описание алгоритма программы. Открытие файла процедурой Rewrite, его проверка на наличие ошибок при открытии. Особенности построения диаграммы. Листинг программы, ее тестирование и отладка. Выполнение процедуры CloseFile при закрытии файла.
контрольная работа [17,3 K], добавлен 11.06.2010Клиент-серверная архитектура проектируемой программы по проверке знаний студентов, структура базы данных. Разработка ее программно-интерфейсной реализации в среде Delphi. Установка и запуск приложения, информация для пользователя, листинг программы.
дипломная работа [2,1 M], добавлен 20.06.2011Определение необходимых модулей программы, структуры файла базы данных. Описание разработки программы, отладка и тестирование. Разработка приложения Organizer.exe, меню и руководство пользователя. Алгоритм обработки событий главного меню (расписания).
курсовая работа [901,8 K], добавлен 11.02.2014