Описание функций приложения и обработка данных
Переходя во 2 тур, берутся по 4 команды с каждой группы, имеющие наивысшие очки. Это реализовать легко, т.к. team3 и team4 имеют сортировку по очкам. Чтобы составить турнирную таблицу используются строки на форме, которым присваиваются победные команды. Используются методы doubletour (возвращает победителя) и prougr (возвращает проигравшего). Команды играю по правилам чемпионата мира по хоккею… Читать ещё >
Описание функций приложения и обработка данных (реферат, курсовая, диплом, контрольная)
В начале работы с программой требуется база статистики. Заполняется она вручную, но есть возможность сохранения и дальнейшего открытия её.
private void Form2_Load (object sender, EventArgs e).
{.
string str = ««;
string[] info = new string[31];
double[] info2 = new double[30];
double[] info3 = new double[10];
if (check == 1).
{.
StreamReader reader = new StreamReader (path);
while ((str = reader. ReadLine ())≠null).
{.
info = str. Split (';');
Table.Rows.Add (info[0], info[1], info[2], info[3], info[4], info[5], info[6], info[7], info[8], info[9], info[10]);
dataGridView1.Rows.Add (info[0], info[11], info[12], info[13], info[14], info[15], info[16], info[17], info[18], info[19], info[20]);
dataGridView2.Rows.Add (info[0], info[21], info[22], info[23], info[24], info[25], info[26], info[27], info[28], info[29], info[30]);
}.
reader.Close ();
check = 0;
}.
}.
Данный метод срабатывает при загрузке Form2 при нажатии кнопки. Считываются данные построчно с открытого файла с потокового чтения StreamReader и метода Split (данные принципы взяты с [8]), который разделяет строку на массив слов с «;» между элементами. Затем эти массивы выводятся в таблицу, которую видит пользователь и редактирует её, добавляя команды и изменяя коэффициенты. При нажатии кнопки данный метод не срабатывает, т.к. в Form2 с помощью конструктора дается значение check (0-метод не срабатывает, 1-срабатывает). Программа проверяет количество добавленных команд, и если количество меньше 16 то оповещает об этом.
double[] into0 = new double[10];
double[] into1 = new double[10];
double[] into2 = new double[10];
double[] into3 = new double[10];
team.Clear ();
for (int i = 0; i < Table.Rows.Count — 1; i++).
{.
string stroka = «» ;
for (int j = 0; j < 10; j++).
{.
into0[j] = Convert. ToDouble (Table.Rows[i]. Cells[j + 1]. Value);
into1[j] = Convert. ToDouble (dataGridView1.Rows[i]. Cells[j + 1]. Value);
into2[j] = Convert. ToDouble (dataGridView2.Rows[i]. Cells[j + 1]. Value);
into3[j] = (into0[j] + into1[j] + into2[j]);
}.
string Name = Table. Rows[i]. Cells[0].Value.ToString ();
team.Add (new Team (Name, into3[0], into3[1], into3[2], into3[3], into3[4], into3[5], into3[6], into3[7], into3[8], into3[9]));
В случае удовлетворения проверки количества команд больше 15 срабатывает данный алгоритм считывания данных с таблицы. Изначально с помощью циклов программа обрабатывает все строки и столбцы, которые добавляются в массивы. Находятся суммированные значения статистики и присваиваются полям объекта класса Team, проходя по всем строкам таблицы, создается список команд со своими коэффициентами. Именно с этим списком программа дальше будет работать.
StreamWriter writer = new StreamWriter (path);
for (int b = 0; b < 10; b++) stroka = stroka + «;» + into0[b];
for (int b = 0; b < 10; b++) stroka = stroka + «;» + into1[b];
for (int b = 0; b < 10; b++) stroka = stroka + «;» + into2[b];
writer.WriteLine (stroka);
} writer. Close ();
Данная часть метода отвечает за сохранение новых данных таблицы в изначально открытый или созданный файл. Так что возможно снова редактировать данные.
for (int i = 0; i < team2. Count; i++).
checkedListBox1.Items.Add (team2[i]. Name);
for (int i = 0; i < team2. Count; i++).
checkedListBox2.Items.Add (team2[i]. Name);
Затем пользователь может перейти к добавлению команд в группы ЮГ и СЕВЕР. В оба листа загружается список команд. Но нужен алгоритм, чтоб при установлении галки команда удалялась из 2 листа, а при отмене снова добавлялась (основан на принципах описанных в [6]).
private void checkedListBox1_SelectedIndexChanged (object sender, EventArgs e).
{.
int m = 0;
for (int i = 0; i < prov. Count; i++).
if ((int)prov[i] == checkedListBox1. SelectedIndex) m = 1;
if (m == 1).
{.
checkedListBox2.Items.Insert (checkedListBox1.SelectedIndex, checkedListBox1. Items[checkedListBox1.SelectedIndex]);
team3.Remove (team2[checkedListBox1.SelectedIndex]);
prov.Remove (checkedListBox1.SelectedIndex);
}.
else.
{.
checkedListBox2.Items.Remove (checkedListBox1.Items[checkedListBox1.SelectedIndex]);
team3.Add (team2[checkedListBox1.SelectedIndex]);
prov.Add (checkedListBox1.SelectedIndex);
}.
Данный алгоритм осуществляет проверку выбранной команды для таблицы ЮГ. Щелчок по команде, добавляет её в prov и удаляет из листа группы СЕВЕР. Если она уже существует в выбранном списке группы ЮГ — prov, то второй щелчок по ней означает, что галка снята, и надо удалить её из prov и снова добавить в лист группы СЕВЕР. Параметр m отвечает за эту проверку. Таким образом, выбрав 8 команд, они содержатся в prov и удалены из листа СЕВЕР. Список team3 так же имеет все выбранные команды. В дальнейшем программа уже работает с ним, что показывать результаты игр в группе ЮГ.
private void checkedListBox2_SelectedIndexChanged (object sender, EventArgs e).
{.
int m = 0;
for (int i = 0; i < prov. Count; i++).
if ((int)prov[i] == checkedListBox2. SelectedIndex) m = 1;
if (m == 1).
{.
for (int i = 0; i < team2. Count; i++).
if ((string)checkedListBox2.Items[checkedListBox2.SelectedIndex] == team2[i]. Name).
team4.Remove (team2[i]);
prov.Remove (checkedListBox2.SelectedIndex);
}.
else.
{.
for (int i = 0; i < team2. Count; i++).
if ((string)checkedListBox2.Items[checkedListBox2.SelectedIndex] == team2[i]. Name).
team4.Add (team2[i]);
prov.Add (checkedListBox2.SelectedIndex);
}.
Этот алгоритм основан на том же принципе, только используется для добавления команд в team4(команды группы СЕВЕР). Т.к. при удалении из списка команды индексы команд так же изменяются, то массивы команд не изменяются. Удаляются команды из листа. Т. е. мы проверяем индекс выбранной команды и добавляем её в team4, если совпал. Список prof так же служит для проверки состояния галки, что при двойном щелчке команда добавляется и удаляется.
Team team11, team22, team;
int n;
for (int i = 0; i < team3. Count; i++).
for (int j = i + 1; j < team3. Count; j++).
{.
n = 0;
team=Team.pobeda (team3[i], team3[j], out n, out team11, out team22);
team3[i] = team11;
team3[j] = team22;
if (n ≠ 1).
{.
listBox3.Items.Add (String.Format («{0,20} победа: {1} «, (team3[i]. Name + »: «+ team3[j]. Name), team.Name));
}.
else.
{.
listBox3.Items.Add (String.Format («{0,20} (ничья)победа в доп. вр:{1} «, (team3[i]. Name + »: «+ team3[j]. Name), team.Name));
}.
После выбора команд программа приступает к анализу чемпионата. По правилам 1 тура все команды должны друг с другом сыграть. Эта часть кода за это отвечает. Запуская метод pobeda с двумя командами по всему цикл, меняется статистика команд и выводится в текстовое окно результаты игр. Победитель — team, tea11 и team22 команды с уже измененными в результате игры статистиками (работа с циклами и классами [3])). В конце используя метод пузырьковой сортировки puzirk, список данных команд выводится на экран с уже набранными очками по 1 туру.
textBox7.Text = team3[0]. Name;
textBox8.Text = team4[3]. Name;
textBox9.Text = team4[1]. Name;
textBox10.Text = team3[2]. Name;
textBox11.Text = team4[0]. Name;
textBox12.Text = team3[3]. Name;
textBox13.Text = team3[1]. Name;
textBox14.Text = team4[2]. Name;
team3[0] = this. doubletour (team3[0], team4[3]);
team3[2] = this. doubletour (team4[1], team3[2]);
team3[3] = this. doubletour (team4[0], team3[3]);
team3[1] = this. doubletour (team3[1], team4[2]);
textBox6.Text = team3[0]. Name;
textBox5.Text = team3[2]. Name;
textBox4.Text = team3[3]. Name;
textBox3.Text = team3[1]. Name;
team4[0] = this. doubletour (team3[0], team3[2]);
team4[1] = this. doubletour (team3[3], team3[1]);
team4[2] = this. prougr (team3[0], team3[2]);
team4[3] = this. prougr (team3[3], team3[1]);
textBox15.Text = team4[0]. Name;
textBox16.Text = team4[1]. Name;
textBox1.Text = «1 место:» + this. doubletour (team4[0], team4[1]).Name;
listBox1.Items.Add (String.Format («1 место: «+ this. doubletour (team4[0], team4[1]).Name));
listBox1.Items.Add (String.Format («2 место: «+ this. prougr (team4[0], team4[1]).Name));
listBox1.Items.Add (String.Format («3 место: «+ this. doubletour (team4[2], team4[3]).Name));
Переходя во 2 тур, берутся по 4 команды с каждой группы, имеющие наивысшие очки. Это реализовать легко, т.к. team3 и team4 имеют сортировку по очкам. Чтобы составить турнирную таблицу используются строки на форме, которым присваиваются победные команды. Используются методы doubletour (возвращает победителя) и prougr (возвращает проигравшего). Команды играю по правилам чемпионата мира по хоккею. После этого выводятся первые три призовых места в текстовый лист.