Помощь в написании студенческих работ
Антистрессовый сервис

Описание функций приложения и обработка данных

РефератПомощь в написанииУзнать стоимостьмоей работы

Переходя во 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 (возвращает проигравшего). Команды играю по правилам чемпионата мира по хоккею. После этого выводятся первые три призовых места в текстовый лист.

Показать весь текст
Заполнить форму текущей работой