Разработка программного продукта "Проведение турниров по круговой системе"

 

Министерство сельского хозяйства и продовольствия Республики Беларусь

Главное управление образования, науки и кадров

УССО «Ошмянский государственный аграрно-экономический колледж»












КУРСОВОЙ ПРОЕКТ















Ошмяны 2013

Содержание


Введение

1. Постановка задачи

1.1 Описание предметной области

2. Разработка алгоритма

3. Создание программного продукта

4. Тестирование программы

Заключение

Список источников литературы

Приложения А - листинг кода

Приложения Б - справка


Введение


В разных сферах деятельности часто приходится работать с данными из разных источников, каждый из которых связан с определенным видом деятельности. Для координации всех этих данных необходимы определенные знания и организационные навыки.

Автоматизированная информационная система (АИС) - это совокупность различных программно-аппаратных средств, которые предназначены для автоматизации какой-либо деятельности, связанной с передачей, хранением и обработкой различной информации.

Пользователь автоматизированных систем - лицо, участвующее в функционировании автоматизированной системы или использующее результаты её функционирования.

В итоге информационного прогресса увеличился объем и структура сложности хранимых данных, расширился круг пользователей информационных систем, что выдвинуло новые требования по созданию удобных средств интеграции хранимых данных и управления ими.

Спортивная таблица - программа для ведения турниров, проводящихся по круговой системе. Проводить турниры можно по различным видам спорта: футбол, футзал (мини-футбол), хоккей, баскетбол, хоккей с мячом (бенди), гандбол, водное поло, волейбол, шахматы, теннис, американский футбол и бейсбол.

Программа имеет русский интерфейс. Спортивная таблица может быть полезна для различных пользователей, а так же для различных международных чемпионатов и турниров. В данной программе Вы можете быстро занести результат команд (игроков) в турнирную таблицу, а так же предоставляется возможность проведения турнира с помощью турнирной сетки.

1. Постановка задачи


Необходимо разработать программу для проведения турниров по круговой системе. Данная программа должна иметь возможность формировать турнирную таблицу исходя из указанного количество команд (игроков), составления графика игр, а так же просмотра результатов (счёт).


.1 Описание предметной области


В данной курсовом проекте требуется реализовать программу «Проведение турниров по круговой системе» в среде визуального программирования С++ Builder. Приложение должно обеспечивать выбор количества игроков (команд), ввод наименования каждого игрока (команды) и ведения счёта. Так же предусмотрено проведение турниров с помощью турнирной сетки. Для выполнения задачи поставленной в курсовой работе применяются знания и умения, полученные в процессе изучения дисциплины «Конструирование программ и языки программирования».

Таким образом, учитывая вышесказанное, разработчиком были приняты следующие решения, касающиеся будущей структуры приложения:

для визуального отображения данных в табличной форме использовался компонент StrinGrid. Компонент StringGrid представляет собой таблицу, содержащую строки. Данные таблицы могут быть только для чтения или редактирования. Таблица может иметь полосы прокрутки, причем заданное число первых строк и столбцов может быть фиксированным и не прокручиваться. Таким образом, можно задать заголовки столбцов и строк, постоянно присутствующие в окне компонента. Каждой ячейке таблицы может быть поставлен в соответствие некоторый объект.

Компонент StringGrid предназначен в первую очередь для отображения таблиц текстовой информации. Однако компонент может отображать и графическую информацию.

Свойства ColCount и RowCount определяют соответственно число столбцов и строк, свойства FixedCols и FixedRows - число фиксированных, не прокручиваемых столбцов и строк. Цвет фона фиксированных ячеек определяется свойством FixedColor. Свойства LeftCol и TopRow определяют соответственно индексы первого видимого на экране в данный момент прокручиваемого столбца и первой видимой прокручиваемой строки. Свойство ScrollBars определяет наличие в таблице полос прокрутки. Причем полосы прокрутки появляются и исчезают автоматически в зависимости от того, помещается таблица в соответствующий.размер.или.нет. Свойство Options является множеством, определяющим многие свойства таблицы: наличие разделительных вертикальных и горизонтальных линий в фиксированных (goFixedVertLine и goFixedHorzLine) и не фиксированных (goVertLine и goHorzLine) ячейках, возможность для пользователя изменять с помощью мыши размеры столбцов и строк (goCoISizing и goRowSizing), перемещать столбцы и строки (goColMoving и goRowMoving) и многое другое. Важным элементом в свойстве Options является goEditing - возможность редактировать содержимое таблицы.

В основном компонент StringGrid используется для выбора пользователем каких-то значений, отображенных.в.ячейках. Свойства Col и Row показывают индексы столбца и строки выделенной ячейки. Возможно также выделение пользователем множества ячеек, строк и столбцов. Среди множества событий компонента StringGrid следует отметить событие OnSelectCell, возникающее в момент выбора пользователем ячейки. В обработчик этого события передаются целые параметры ACol и ARow - столбец и строка выделенной ячейки, и булев параметр CanSelect - допустимость выбора.

Параметр CanSelect можно использовать для запрета выделения ячейки, задав его значение false. А параметры ACol и ARow могут использоваться для какой-то реакции программы на выделение пользователя.

для ввода количества команд (игроков) использовался компонент DBEdit1, позволяющий вводить только числовые значения.

для ввода названий команд (игроков) был выбран компонент Memo, который позволяет вводить данные в многострочном режиме. В компоненте Memo формат (шрифт, его атрибуты, выравнивание) одинаков для всего текста и определяется свойством Font. Если вы сохраните в файле текст, введенный или отредактированный пользователем, то будет создан текстовый файл, содержащий только символы, и не содержащий элементов форматирования. При последующем чтении этого файла в Memo формат будет определяться текущим состоянием свойства Font компонента Memo, а не тем, в каком формате ранее вводился текст.

для открытия форм с турнирами использовался компонент Button, а для подтверждения победы в турнирной сетке использован компонент DBButton который позволяет вставить графическое изображение.

для дублирования функций программы и создания дополнительного удобства работы с приложением применить компонент TMenu с соответствующими подменю и подписями кнопок. MainMenu, расположеный на странице Standard, это невизуальный компонент, т.е. место его размещения на форме в процессе проектирования не имеет никакого значения для пользователя - он все равно увидит не сам компонент, а только меню, сгенерированное им.

Обычно на форму помещается один компонент MainMenu. В этом случае его имя автоматически заносится в свойство формы Menu. Но можно поместить на форму и несколько компонентов MainMenu с разными наборами разделов, соответствующими различным режимам работы приложения. В этом случае во время проектирования свойству Menu формы присваивается ссылка на один из этих компонентов. А в процессе выполнения в нужные моменты это свойство можно изменять, меняя соответственно состав главного меню приложения.

Основное свойство компонента - Items. Его заполнение производится с помощью Конструктора Меню, вызываемого двойным щелчком на компоненте MainMenu или нажатием кнопки с многоточием рядом со свойством Items в окне Инспектора Объектов. В результате откроется окно. В этом окне вы можете спроектировать меню.

При работе в конструкторе меню новые разделы можно вводить, помещая курсор в рамку из точек, обозначающую место расположения нового раздела. Если при этом раздел ввелся не на нужном вам месте, вы можете отбуксировать его мышью туда, куда вам надо. Другой путь ввода нового раздела - использование контекстного меню, всплывающего при щелчке правой кнопкой мыши. Если вы предварительно выделите какой-то раздел меню и выберете из контекстного меню команду Insert, то рамка нового раздела вставится перед ранее выделенным. Из контекстного меню вы можете также выполнить команду Create Submenu, позволяющую ввести подменю в выделенный раздел. При выборе нового раздела вы увидите в Инспекторе Объектов множество свойств данного раздела. Дело в том, что каждый раздел меню, т.е. каждый элемент свойства Items, является объектом типа TMenuItem, обладающим своими свойствами, методами, событиями.

Свойство Caption обозначает надпись раздела. Заполнение этого свойства подчиняется тем же правилам, что и заполнение аналогичного свойства в кнопках, включая использование символа амперсанда для обозначения клавиш быстрого доступа. Если вы в качестве значения Caption очередного раздела введете символ минус "-", то вместо раздела в меню появится разделитель.

Свойство Name задает имя объекта, соответствующего разделу меню. Очень полезно давать этим объектам осмысленные имена, так как иначе вы скоро запутаетесь в ничего не говорящих именах типа N21. Куда понятнее имена типа MFile, MOpen, MSave и т.п.

Свойство Shortcut определяет клавиши быстрого доступа к разделу меню - «горячие» клавиши, с помощью которых пользователь, даже не заходя в меню, может в любой момент вызвать выполнение процедуры, связанной с данным разделом. Чтобы определить клавиши быстрого доступа, надо открыть выпадающий список свойства Shortcut в окне Инспектора Объектов и выбрать из него нужную комбинацию клавиш. Эта комбинация появится в строке раздела меню.

Свойство Default определяет, является ли данный раздел разделом по умолчанию своего подменю, т.е. разделом, выполняемым при двойном щелчке пользователя на родительском разделе. Подменю может содержать только один раздел по умолчанию, выделяемый жирным шрифтом. Свойство Break используется в длинных меню, чтобы разбить список разделов на несколько столбцов. Возможные значение Break: mbNone - отсутствие разбиения меню (это значение принято по умолчанию), mbBarBreak и mbBreak - в меню вводится новый столбец разделов, отделенный от предыдущего полосой (mbBarBreak) или пробелами (mbBreak).

Свойство Checked, установленное в true, указывает, что в разделе меню будет отображаться маркер флажка, показывающий, что данный раздел выбран. В C++Builder 6 для разделов меню введено новое свойство - AutoCheck. Если его установить в true, то при каждом выборе пользователем данного раздела маркер будет автоматически переключаться, указывая то на выбранное состояние, то на отсутствие выбора. В предшествующих версиях C++Builder маркер сам по себе не переключается и в обработчик события OnClick раздела надо вставлять оператор типа (в приведенном операторе подразумевается, что раздел меню назван MAutoSave):

>Checked = ! MAutoSave->Checkea;


Еще одним свойством, позволяющим вводить маркеры в разделы меню, является Radioltem. Это свойство, установленное в true, определяет, что данный раздел должен работать в режиме радиокнопки совместно с другими разделами, имеющими то же значение свойства Grouplndex. По умолчанию значение GroupIndex равно 0. Но можно задать его больше нуля и тогда, если имеется несколько разделов с одинаковым значением Grouplndex и с Radioltem = true, то в них могут появляться маркеры флажков, причем только в одном из них. Если вы зададите программно в одном из этих разделов Checked = true, то в остальных разделах Checked автоматически сбросится в false.

Для подобных групп разделов, работающих как радиокнопки, можно установить в true свойствоAutoCheck. Тогда при щелчке пользователя на невыбранном разделе все будет работать нормально: этот раздел включится, а ранее включенный выключится. Но если пользователь щелкнет на выбранном разделе, то он выключится и окажется, что все разделы данной группы выключены. Если по смыслу это допустимое состояние, то все хорошо. Но если в любом случае один из разделов должен быть включен, то надо отказаться от использования свойства AutoCheck (установить его в false) и переключать свойство Checked разделов программно. Например, в обработчики щелчков этих разделов можно ввести оператор.

Он переключает маркер только в случае, если сделан щелчок на невыбранном разделе меню. Оператор записан в общем виде и в качестве источника события может фигурировать любой раздел меню.

Описанные маркеры флажков в режиме радиокнопок и в обычном режиме используются для разделов меню, представляющих собой различные опции, взаимоисключающие или совместимые. Для каждого раздела могут быть установлены во время проектирования или программно во время выполнения свойства Enabled (доступен) и Visible (видимый). Если установить Enabled = false, то раздел будет изображаться серой надписью и не будет реагировать на щелчок пользователя. Если же задать Visible = false, то раздел вообще не будет виден, а остальные разделы сомкнутся, заняв место невидимого. Свойства Enabled и Visible используются для того, чтобы изменять состав доступных пользователю разделов в зависимости от режима работы приложения.

В C++Builder предусмотрена возможность ввода в разделы меню изображений. За это ответственны свойства разделов Bitmap и ImageIndex. Bitmap позволяет непосредственно ввести изображение в раздел, выбрав его из указанного вами файла. ImageIndex позволяет указать индекс изображения, хранящегося во внешнем компоненте ImageList. Указание на этот компонент вы можете задать в свойстве Images компонента MainMenu. Индексы начинаются с 0. Если вы укажете индекс -1 (значение по умолчанию), изображения не будет.

Основное событие раздела - OnClick, возникающее при щелчке пользователя на разделе или при нажатии «горячих» клавиш быстрого доступа. Еще одно очень важное свойство - Action. Сославшись на ранее описанное действие, вы избавляетесь от необходимости задавать большинство из указанных выше свойств, так как они наследуются от объекта действия. Вам не требуется также писать обработчик события OnClick, так как он оже наследуется от действия.

Рассмотрим теперь вопросы объединения главных меню вторичных форм с меню главной формы. Речь идет о приложениях с несколькими формами, в которых и главная, и вспомогательные формы имеют свои главные меню - компоненты MainMenu. Конечно, пользователю неудобно работать одновременно с несколькими окнами, каждое из которых имеет свое меню. Обычно надо, чтобы эти меню сливались в одно меню главной формы.

Приложения с несколькими формами могут быть двух видов: приложения с интерфейсом множества документов так называемые MDI приложения, и обычные приложения с главной и вспомогательными формами. Типичными примерами приложений MDI являются программы Word и Excel. В MDI приложениях меню дочерних форм всегда объединяются с меню родительской формы. А в приложениях с несколькими формами наличие или отсутствие объединение определяется свойством AutoMergeкомпонентов TMainMenu. Если требуется, чтобы меню вторичных форм объединялись с меню главной формы, то в каждой такой вторичной форме надо установить AutoMerge в true. При этом свойство AutoMerge главной формы должно оставаться в false.

Способ объединения меню определяется свойством разделов Grouplndex. По умолчанию все разделы меню имеют одинаковое значение Grouplndex, равное нулю. Если требуется объединение меню, то разделам надо задать неубывающие номера свойств Grouplndex. Тогда, если разделы встраиваемого меню имеют те же значения Grouplndex, что и какие-то разделы меню основной формы, то эти разделы заменяют соответствующие разделы основного меню. В противном случае разделы вспомогательного меню встраиваются между элементами основного меню в соответствии с номерами Grouplndex. Если встраиваемый раздел имеет GroupIndex меньший, чем любой из разделов основного меню, то разделы встраиваются в начало.

Если в меню имеются разделы, работающие как радиокнопки, то нельзя забывать, что их взаимодействие также определяется свойствами Grouplndex. Связанные с меню в приложениях MDI, пользователь может открывать столько окон документов, сколько ему требуется. Обычно в подобных приложениях имеется меню Окно, которое содержит такие разделы, как Упорядочить. В конце меню идет обычно список открытых окон документов, в который заносятся названия открытых пользователем окон. Выбирая в этом списке, пользователь может переключаться между окнами документов.

Для включения в меню раздела списка открытых окон, надо в свойстве WindowMenu главной формы приложения MDI указать имя меню, в конец которого должен помещаться список. Указывается именно имя меню, а не разделов выпадающего списка.

Один из требований является стандартизация меню и их разделов. Этому помогает команда Save As Template в контекстном меню, всплывающем при щелчке правой кнопкой мыши в окне Конструктора Меню. Эта команда вызывает диалог. В этом диалоге вы можете в верхнем окне указать описание (заголовок), под которым хотите сохранить ваше меню. Впоследствии в любом вашем новом приложении вы мажете загрузить этот шаблон в меню, выбирая из всплывающего меню в окне Конструктора Меию команду Insert From Template.


2. Разработка алгоритма


В процессе разработки программного проекта «Проведение турниров по круговой системе» был создан алгоритм программы:


Блок схема 1 - Алгоритм программы


Данная блок схема показывает ход работы программного проекта с содержанием всех меню и подменю.


3. Создание программного продукта


Проект программы был разработан с помощью программного ресурса C++Builder.

C++Builder 6.0. , в свою очередь, является универсальной системой программирования.

Перейдём к работе со средой C++Builder.

На главной форме Form1 (ПС для проведения турниров по круговой системе) представлено меню из двух выпадающих подменю: Справка, О программе. А так же на форме представлен выбор пользователя в турнире с определённым количеством команд.

Все возможности подменю реализованы при помощи компонента MainMenu1.

Выбор количества команд реализован при помощи компонента ComboBox.

Создание сетки турнира на выбывание, а так же турнира по круговой системе реализовано через компонент Button.

Рабочая форма ПС для проведения турниров по круговой системе представлена на рисунке 1:


Рисунок 1

На формах 2, 3, 4, 5 (турнир на выбывание) представлена турнирная сетка, реализованная с помощью следующих компонентов:

Меmo, с помощью которого пользователь вводит наименование первоначальных команд.

DBButton, который даёт возможность подтвердить победу команды.

В данной программе возможно создать турнирную сетку с максимальным количеством команд равным 16.

Рабочие формы представлены ниже:


Рисунок 2


Рисунок 3

Рисунок 4


Рисунок 5


На форме (турнир по круговой системе) представлена турнирная сетка, реализованная с помощью следующих компонентов:

Edit - с помощью которого задается количество команд участвующих в турнире.

StringGrid - с помощью которого выводится таблица турнира и количество команд участвующих в турнире.

Memo - компонент с помощью которого пользователь вводит наименование команд участвующих в турнире.

Рабочая форма представлена на рисунке 6


Рисунок 6


Форма «О программе» предоставляет информацию, для чего используется данная программа, информация о разработчике и контактные данные для связи по поводу вопросов и недочетов.

Рабочая форма представлена на рисунке 7:


Рисунок 7


Данная форма реализована с помощью компонента Image определяющим свойством которого является Picture.

Форма «Победа», всплывает при завершении турнирной сетки и выводит на экран победившую команду.

Рабочая форма представлена на рисунке 8:


Рисунок 8


Справка предоставлена в .doc формате. Её содержание находятся в приложении Б.

На каждой форме присутствует кнопка «Заново» для обнуления данных.


4. Тестирование программы


В данном проекте выполняется несколько задач:

) При нажатии кнопки «Начать», открывается форма для создания турниров по круговой системе. Действие кнопки работает исправно.

) При вводе числового значения в компонент Edit, выводятся строки и столбцы таблицы с указанным количеством команд так, что команда не имеет возможности играть сама с собой. Все значения выполняются верно и не имеют ошибок.

) При вводе числового, так и текстового значения в компонент Memo, данный текст выводится в таблицу. Значения успешно заносятся в таблицу.

) При выборе турнирной сетки с определённым количеством команд выводится соответствующая турнирная сетка с указанным количеством команд. Действие работает исправно.

) При составлении турнирной сетки на выбывание в следующий этап проходит победившая команда. Эта операция выполняется с помощью компонента BitButton, а проигравшая команда не имеет возможности пройти дальше. Все операции на данной форме выполняются без ошибок.

) На каждой форме имеется функция обнуления данных, которая работает исправно.


Заключение


В данной курсовой работе был разработан программный продукт «Проведение турниров по круговой системе». В данном проекте представлено физическое проектирование системы, созданы кнопки создания турниров по круговой системе и на выбывание. При создании программного проекта «Проведение турниров по круговой системе» использовалась программа C++Builder.

Главным результатом проведенной работы является создание функционирующего программного проекта, который выполняет требуемый круг задач по созданию турниров по круговой системе и на выбывание.

В заключении можно сказать, что созданный программный проект лёгок в использовании, понятен не только программисту но и обычному пользователю т.к. его интерфейс прост и не вызывает трудностей.

программа алгоритм турнир визуальный


Список источников литературы


1) Культин Н.И C++Builder в задачах и примерах БХВ-Петербург, год издания: 2006.-336с.:ил.

) Технологии C++Builder 2006. Новые возможности, автор: Сергей Бобровский, издательство: Питер, год издания: 2006.-274с.

) Фленов М.Е. Библия C++. - СПб.: БХВ-Петербург, 2004. - 880 с.

) С++Builder в задачах и примерах, автор: Никита Культин, издательство: БХВ-Петербург, год издания: 2003.-392с.:ил.

5) Книги для программистов


Приложение А


Код.

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit1.h"

#include "Unit2.h"

#include "Unit3.h"

#include "Unit4.h"

#include "Unit5.h"

#include "Unit6.h"

#include "Unit8.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"*Form1;

//---------------------------------------------------------------------------

__fastcall TForm1::TForm1(TComponent* Owner)

: TForm(Owner)

{->Items->Add("2 команды");->Items->Add("4 команды");->Items->Add("8 команд");->Items->Add("16 команд");

}

//---------------------------------------------------------------------------__fastcall TForm1::Button1Click(TObject *Sender)

{(ComboBox1->ItemIndex == 0) {->Show();

}(ComboBox1->ItemIndex == 1) {->Show();

}(ComboBox1->ItemIndex == 2) {->Show();

}(ComboBox1->ItemIndex == 3) {->Show();

}

}

//---------------------------------------------------------------------------__fastcall TForm1::N1Click(TObject *Sender)

{();

}

//---------------------------------------------------------------------------__fastcall TForm1::Button2Click(TObject *Sender)

{->Show();

}

//---------------------------------------------------------------------------__fastcall TForm1::FormActivate(TObject *Sender)

{(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_LAYERED);(int x = 0;x<255;x+=1)

{(Handle, 0, x, LWA_ALPHA);>ProcessMessages();(1);

}(Handle, 0, 255, LWA_ALPHA);

}

//---------------------------------------------------------------------------__fastcall TForm1::N3Click(TObject *Sender)

{->Show();

}

//---------------------------------------------------------------------------__fastcall TForm1::N2Click(TObject *Sender)

{("s.bat",SW_RESTORE);

}

//---------------------------------------------------------------------------.

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit5.h"

#include "Unit7.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"*Form5;

//---------------------------------------------------------------------------

__fastcall TForm5::TForm5(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn1Click(TObject *Sender)

{->Text=Memo1->Text;->BitBtn2->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn2Click(TObject *Sender)

{->Text=Memo2->Text;->BitBtn1->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn3Click(TObject *Sender)

{->Text=Memo3->Text;->BitBtn4->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn4Click(TObject *Sender)

{->Text=Memo4->Text;->BitBtn3->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn5Click(TObject *Sender)

{->Text=Memo5->Text;->BitBtn6->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn6Click(TObject *Sender)

{->Text=Memo6->Text;->BitBtn5->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn7Click(TObject *Sender)

{->Text=Memo7->Text;->BitBtn8->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn8Click(TObject *Sender)

{->Text=Memo8->Text;->BitBtn7->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn9Click(TObject *Sender)

{->Text=Memo9->Text;->BitBtn10->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn10Click(TObject *Sender)

{->Text=Memo10->Text;->BitBtn9->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn11Click(TObject *Sender)

{->Text=Memo11->Text;->BitBtn12->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn12Click(TObject *Sender)

{->Text=Memo12->Text;->BitBtn11->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn13Click(TObject *Sender)

{->Text=Memo13->Text;->BitBtn14->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn14Click(TObject *Sender)

{->Text=Memo14->Text;->BitBtn13->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn16Click(TObject *Sender)

{->Text=Memo16->Text;->BitBtn17->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn17Click(TObject *Sender)

{->Text=Memo17->Text;->BitBtn16->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn18Click(TObject *Sender)

{->Text=Memo18->Text;->BitBtn19->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn19Click(TObject *Sender)

{->Text=Memo19->Text;->BitBtn18->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn20Click(TObject *Sender)

{->Text=Memo20->Text;->BitBtn21->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn21Click(TObject *Sender)

{->Text=Memo21->Text;->BitBtn20->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn22Click(TObject *Sender)

{->Text=Memo22->Text;->BitBtn23->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn23Click(TObject *Sender)

{->Text=Memo23->Text;->BitBtn22->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn24Click(TObject *Sender)

{->Text=Memo24->Text;->BitBtn25->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn25Click(TObject *Sender)

{->Text=Memo25->Text;->BitBtn24->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn26Click(TObject *Sender)

{->Text=Memo26->Text;->BitBtn27->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn27Click(TObject *Sender)

{->Text=Memo27->Text;->BitBtn26->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn28Click(TObject *Sender)

{->Text=Memo28->Text;->BitBtn29->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn29Click(TObject *Sender)

{->Text=Memo29->Text;->BitBtn28->Visible=False;

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn15Click(TObject *Sender)

{->Text=Memo15->Text;->BitBtn30->Visible=False;->Memo1->Text=Form5->Memo31->Text;->Show();

}

//---------------------------------------------------------------------------__fastcall TForm5::BitBtn30Click(TObject *Sender)

{->Text=Memo30->Text;->BitBtn15->Visible=False;->Memo1->Text=Form5->Memo31->Text;->Show();

}

//---------------------------------------------------------------------------__fastcall TForm5::N2Click(TObject *Sender)

{->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->Clear();->BitBtn1->Visible=True;->BitBtn2->Visible=True;->BitBtn3->Visible=True;->BitBtn4->Visible=True;->BitBtn5->Visible=True;->BitBtn6->Visible=True;->BitBtn7->Visible=True;->BitBtn8->Visible=True;->BitBtn9->Visible=True;->BitBtn10->Visible=True;->BitBtn11->Visible=True;->BitBtn12->Visible=True;->BitBtn13->Visible=True;->BitBtn14->Visible=True;->BitBtn15->Visible=True;->BitBtn16->Visible=True;->BitBtn17->Visible=True;->BitBtn18->Visible=True;->BitBtn19->Visible=True;->BitBtn20->Visible=True;->BitBtn21->Visible=True;->BitBtn22->Visible=True;->BitBtn23->Visible=True;->BitBtn24->Visible=True;->BitBtn25->Visible=True;->BitBtn26->Visible=True;->BitBtn27->Visible=True;->BitBtn28->Visible=True;->BitBtn29->Visible=True;->BitBtn30->Visible=True;

}

//---------------------------------------------------------------------------__fastcall TForm5::N1Click(TObject *Sender)

{();

}

//---------------------------------------------------------------------------__fastcall TForm5::FormActivate(TObject *Sender)

{(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_LAYERED);(int x = 0;x<255;x+=1)

{(Handle, 0, x, LWA_ALPHA);>ProcessMessages();(1);

}(Handle, 0, 255, LWA_ALPHA);

}

//---------------------------------------------------------------------------.

//---------------------------------------------------------------------------

#include <vcl.h>

#pragma hdrstop

#include "Unit6.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"*Form6;

//---------------------------------------------------------------------------

__fastcall TForm6::TForm6(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------__fastcall TForm6::Button1Click(TObject *Sender)

{->Lines->Clear();->ColCount=StrToInt(Edit1->Text)+1;->RowCount=StrToInt(Edit1->Text)+1;->VisibleDockClientCount;n= StrToInt(Edit1->Text)+1;m= StrToInt(Edit1->Text)+1;(int i=10; i<m; i++)(int j=0; j<n; j++)->Cells[i][j] = " ";(int i=1; i<m; i++)->Lines->Add("ввод команды "+IntToStr(i));

}

//---------------------------------------------------------------------------__fastcall TForm6::N1Click(TObject *Sender)

{();

}

//---------------------------------------------------------------------------

//---------------------------------------------------------------------------__fastcall TForm6::StringGrid1DrawCell(TObject *Sender, int ACol,ARow, TRect &Rect, TGridDrawState State)

{

{*p=(TStringGrid*)Sender;(ACol == ARow) // <-- совместить оба условия в одном

{>Canvas->Brush->Color=ColorDialog1->Color;

}>Canvas->FillRect(Rect);->Canvas->TextOutA(Rect.Left, Rect.Top, StringGrid1->Cells[ACol][ARow]);

}

}

//---------------------------------------------------------------------------

__fastcall TForm6::N2Click(TObject *Sender)

{->Lines->Clear();->Clear();(int i = 0; i < StringGrid1->RowCount; i++)->Rows[i]->Clear();

}

//---------------------------------------------------------------------------__fastcall TForm6::Button2Click(TObject *Sender)

{(int i=1; i<StringGrid1->ColCount; i++)->Cells[i][0]=Memo1->Lines->Strings[i-1];


(int j=1; j<StringGrid1->RowCount; j++)

->Cells[0][j]=Memo1->Lines->Strings[j-1];

}

//---------------------------------------------------------------------------

//---------------------------------------------------------------------------__fastcall TForm6::Edit1KeyPress(TObject *Sender, char &Key)

{((Key >= '0') && (Key <= '9')) {} // цифрыif (Key == 8) {} // <-if ((Key == '.') || (Key == ',')) // запятая

{(((TEdit*)Sender)->Text.Pos(DecimalSeparator)!=0) // если запятая уже есть= 0;// если ещё нет= DecimalSeparator;

}Key = 0; // не цифра

}

//---------------------------------------------------------------------------__fastcall TForm6::FormActivate(TObject *Sender)

{(Handle, GWL_EXSTYLE, GetWindowLong(Handle, GWL_EXSTYLE) | WS_EX_LAYERED);(int x = 0;x<255;x+=1)

{(Handle, 0, x, LWA_ALPHA);>ProcessMessages();(1);

}(Handle, 0, 255, LWA_ALPHA);

}

//---------------------------------------------------------------------------


Приложение Б


Справка

Чтобы запустить программу нужно зайти в папку с программой D:\Курсовая и запустить файл Project.exe. После загрузки программы открывается главное окно.


Главное окно программы


Главное окно программы представлено визуальной формой с несколькими кнопками для перехода на турнир по круговой и турнирную сетку. Для доступа к турнирной сетке нужно выбрать количество команд и нажать на кнопку «Начать турнир». Для турнира по круговой достаточно просто выбрать необходимую кнопку. В верхней части программы расположена кнопка «О программе», «Выход» и «Справка».

кно «Турнир по круговой»

Данное окно представлено турнирной таблицей, для заполнения которой нужно указать количество игроков (команд), а так же наименование каждого игрока (команды). Кнопка «Назад» предоставляет пользователю вернуться на главную форму, а кнопка «Заново» повторно провести турнир по круговой.

Окно турнирной сетки с указанным количеством команд


Данное окно предоставлено определённым количеством полей для ввода первоначальных команд, и по нажатию кнопки ? указанная команда проходит дальше по турнирной сетке. Кнопка «Назад» предоставляет пользователю вернуться на главную форму, а кнопка «Заново» повторно провести турнир.



После завершения турнира плавно возникает окно с названием команды-победителя.

Окно «О программе»


В окне «О программе» представлена подробная информация для связи с разработчиком: ФИО, контактный телефон, адрес, адрес электронной почты. Также имеется кнопка «Х» для возврата в основное меню.



Министерство сельского хозяйства и продовольствия Республики Беларусь Главное управление образования, науки и кадров УССО «Ошмянский государственный

Больше работ по теме:

КОНТАКТНЫЙ EMAIL: [email protected]

Скачать реферат © 2017 | Пользовательское соглашение

Скачать      Реферат

ПРОФЕССИОНАЛЬНАЯ ПОМОЩЬ СТУДЕНТАМ