Заглавная страница Избранные статьи Случайная статья Познавательные статьи Новые добавления Обратная связь КАТЕГОРИИ: АрхеологияБиология Генетика География Информатика История Логика Маркетинг Математика Менеджмент Механика Педагогика Религия Социология Технологии Физика Философия Финансы Химия Экология ТОП 10 на сайте Приготовление дезинфицирующих растворов различной концентрацииТехника нижней прямой подачи мяча. Франко-прусская война (причины и последствия) Организация работы процедурного кабинета Смысловое и механическое запоминание, их место и роль в усвоении знаний Коммуникативные барьеры и пути их преодоления Обработка изделий медицинского назначения многократного применения Образцы текста публицистического стиля Четыре типа изменения баланса Задачи с ответами для Всероссийской олимпиады по праву Мы поможем в написании ваших работ! ЗНАЕТЕ ЛИ ВЫ?
Влияние общества на человека
Приготовление дезинфицирующих растворов различной концентрации Практические работы по географии для 6 класса Организация работы процедурного кабинета Изменения в неживой природе осенью Уборка процедурного кабинета Сольфеджио. Все правила по сольфеджио Балочные системы. Определение реакций опор и моментов защемления |
Приложени е 1. Компоненты блок схемы ⇐ ПредыдущаяСтр 4 из 4
Описание каждого компонента блок схемы:
Приложение 2 Код программы Код программы «Клавиатурный тренажер» unit Unit9;
interface
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.IOUtils, Unit10, Unit11, Math, Vcl.Menus; type TForm9 = class(TForm) GroupBox1: TGroupBox; ListBox1: TListBox; Button1: TButton; Label1: TLabel; CheckBox1: TCheckBox; Edit1: TEdit; Label2: TLabel; Button2: TButton; Button3: TButton; Button4: TButton; GroupBox2: TGroupBox; Label3: TLabel; Edit2: TEdit; Button5: TButton; MainMenu1: TMainMenu; N1: TMenuItem; procedure FormCreate(Sender: TObject); procedure RefreshData(); procedure Button3Click(Sender: TObject); procedure ListBox1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); procedure FormShow(Sender: TObject); procedure Button4Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure N1Click(Sender: TObject); private var findIndex: integer; var findItemName: String; { Private declarations } public { Public declarations } end; var Form9: TForm9;
Implementation
{$R *.dfm} procedure TForm9.RefreshData(); begin ListBox1.Clear(); //Очистка листа с группами слов var wordGroups:= TDirectory.GetFiles('Группы слов'); //Получение файлов из директории for var i:= 0 to Length(wordGroups) -1 do begin //Проход по каждому файлу ListBox1.Items.Add(wordGroups[i].Replace('Группы слов\', '')); //Убираем приставку 'Группы слов\' и добавляем в лист групп end; Button1.Enabled:= false; //Отключает кнопку редактирования группы Button3.Enabled:= false; //Отключает кнопку удаление выбранной группы end;
procedure TForm9.Button1Click(Sender: TObject); begin var groupName:= ListBox1.Items[ListBox1.ItemIndex]; //Получение выбранной группы Form9.Hide(); //Скрытие главной формы Form10.RichEdit1.Clear(); //Очистка данных группы в другой форме Form10.Edit1.Text:= groupName; //Изменеине поля с наименование группы в другой форме Form10.RichEdit1.Lines.LoadFromFile('Группы слов\' + groupName, TEncoding.UTF8); //Загружаем слова в поле другой формы Form10.groupName:= groupName; //Задаем переменную имени группы в другой форме Form10.Caption:= 'Изменение группы "' + groupName + '"'; //Задаем название другой форме Form10.Button1.Caption:= 'Подтвердить изменение группы'; //Изменяем заголовок кнопки Form10.Button2.Caption:= 'Отменить изменения группы'; //Изменяем заголовок кнопки Form10.mainForm:= Form9; //Передаем главную форму на другую форму Form10.Show(); //Показываем форму редактирования формы end;
procedure TForm9.Button2Click(Sender: TObject); begin if(ListBox1.ItemIndex > -1) or ((CheckBox1.Checked) and (ListBox1.Items.Count > 0)) then begin //Если выбрана группы или выбирается случайная группа и количество групп слов > 0
// Начало тестирования if(CheckBox1.Checked) then begin //Если выбирается случайно var randomedGroupIndex:= Math.RandomRange(0, ListBox1.Items.Count-1); //Получаем случайный индекс группы Form11.GroupName:= ListBox1.Items[randomedGroupIndex]; //Задаем группы end else Form11.groupName:= ListBox1.Items[ListBox1.ItemIndex]; //Задаем название группы для тестирования Form11.Show(); //Открываем форму тестирования Form11.mainForm:= Form9; //Передаем другой форме данную форму Form11.wordsCountToResolve:= integer.Parse(Edit1.Text); //Задаем количество слов к решению Form9.Hide(); //Скрываем текущую форму end else begin if(ListBox1.Items.Count = 0) then begin //Если нет групп слов MessageBox(0, 'У вас нет ни единой группы слов. Добавьте группу слов чтобы начать тестирование!', 'Ошибка',0); //Вывод ошибок exit; //Выход из кода end; MessageBox(0, 'Вы не выбрали группу слов для тестирования. Выберите группу слов или поставьте галочку для случайного выбора группы слов и попробуйте снова!', 'Ошибка', 0); //Вывод ошибки end; end; procedure TForm9.Button3Click(Sender: TObject); begin var groupName:= ListBox1.Items[ListBox1.ItemIndex]; //Получаем название группы var msg: String; //Создаем переменную в которой будет хранится сообщеине msg:= 'Вы действительно хотите удалить группу "' + groupName + '"'; //Задаем сообщение if(MessageBox(0, PWideChar(msg), 'Подтверждение удаления группы', mb_YesNo) = IDYES) then begin //Диалог. Если выбрано подтверждение TFile.Delete('Группы слов\' + ListBox1.Items[ListBox1.ItemIndex]); //Удаляет файл с выбранной группой слов RefreshData(); //Обновляет данные MessageBox(0, 'Группа успешно удалена!', '', 0); //Вывод сообщения end; end;
procedure TForm9.Button4Click(Sender: TObject); begin Form9.Hide(); //Скрывает текущую форму Form10.RichEdit1.Clear(); //Очищает данные в другой форме Form10.groupName:= ''; //Очищает данные названия группу в другой форме Form10.Edit1.Text:= ''; //Очищает поле с називанием группы в другой форме Form10.Caption:= 'Добавление новой группы'; //Изменяет заголовок другой формы Form10.Button1.Caption:= 'Подтвердить добавление группы'; //Изменяет заголовок кнопки в другой форме Form10.Button2.Caption:= 'Отменить добавление группы'; //Изменяет заголовок кнопки в другой форме Form10.mainForm:= Form9; //Передает другой форме данную форму Form10.Show(); //Показывает форму редактирования/добавления группы end;
procedure TForm9.Button5Click(Sender: TObject); begin if(Edit2.Text = '') then begin //Если наименование искомой группы слов пустое MessageBox(0, 'Поле с искомым наименованием группы не заполнено! Заполните часть наименования группы и попробуйте снова.', 'Ошибка!', 0); //вывод сообщения
end else begin //иначе if not (Edit2.Text = findItemName) then begin //Если искомая группа слов не совпадает с той которая в поле findIndex:= 0; //Переходим в начало findItemName:= Edit2.Text; //Изменяем наименование искомой группы слов end;
var itemFinded:= false; //Переменная с информацией о том, найдена ла группа for var i:= findIndex to ListBox1.Items.Count - 1 do begin //Проход по группам слов в списке if(ListBox1.Items[i].Contains(Edit2.Text)) then //Если есть совпадение begin ListBox1.ItemIndex:= i; //В списке выделяется группа findIndex:= i + 1; //Переходим на следующую группу itemFinded:= true; //Даем знать, что группа найдена break; //Прекращаем искать end; end; if(itemFinded = false) and (findIndex = 0) then //Если не найдено ни ОДНОГО совпадения MessageBox(0, 'К сожалению программа не смогла найти похожих по наименованию группу', 'Ошибка поиска', 0); //вывод ошибки if(itemFinded = false) and (findIndex > 0) then begin //Если было найдено хоть одно слово findIndex:= 0; //Переход в начало findItemName:= ''; //Задаем искомое имя пустым. MessageBox(0, 'Совпадений больше не найдено. При следующем поиске программа начнет поиск с начала.', 'Конец поиска', 0); //Вывод информации end;
end; end;
procedure TForm9.FormCreate(Sender: TObject); begin if not (TDirectory.Exists('Группы слов')) then begin //Если папки с группами слов не существует TDirectory.CreateDirectory('Группы слов'); //Создание папки end; RefreshData(); //Обновление данных end;
procedure TForm9.FormShow(Sender: TObject); begin RefreshData(); //Обновление данных end;
procedure TForm9.ListBox1Click(Sender: TObject); begin var anySelected:= ListBox1.ItemIndex >= 0; //Если любая группа слов выбрана Button1.Enabled:= anySelected; //Включает кнопку редактирования в зависимости от того, выбрана ли группа Button3.Enabled:= anySelected; //Включает кнопку удаления в зависимости от того, выбрана ли группа end;
procedure TForm9.N1Click(Sender: TObject); begin MessageBox(0, 'Эта программма позволяет обучиться быстрой печати текста на клавиатуре.', 'Информация', 0); //Вывод информации о программе в меню end; unit Unit10;
interface
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ComCtrls, System.IOUtils; type TForm10 = class(TForm) RichEdit1: TRichEdit; Label1: TLabel; Edit1: TEdit; Label2: TLabel; Button1: TButton; Button2: TButton; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure Button2Click(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public var mainForm: TForm; var groupName: String; { Public declarations } end;
var Form10: TForm10;
Implementation {$R *.dfm} procedure TForm10.Button1Click(Sender: TObject); begin if(RichEdit1.Text = '') then begin //Если поле со словами группы пустое MessageBox(0, 'В группе слов должно быть как минимум одно слово. Добавьте слова и попробуйте опять.', 'Ошибка!', 0); //Вывод ошибки exit; //Выход из кода end; if(Edit1.Text = '') then begin //Если поле с наименованием группы пустое MessageBox(0, 'Наименование группы не может быть пустым. Заполните наименование и попробуйте опять.', 'Ошибка!', 0); //Вывод ошибки exit; //Выход из кода end; if(Form10.Caption = 'Добавление новой группы') then begin //Если название формы 'Добавление новой группы' var wordGroups:= TDirectory.GetFiles('Группы слов'); //Получаем название файлов из папки 'Группы слов' for var i:= 0 to Length(wordGroups) -1 do begin //Проходимся по каждому файлу if(wordGroups[i].Replace('Группы слов\', '') = Edit1.Text) then begin //Убираем приставку 'Группы слов\' и проверяем соответствует ли это название какой либо найденной группе MessageBox(0, 'Группа слов с таким названием уже существует! Выберите другое название или измените существующую группу!', 'Ошибка', 0); //Вывод ошибки
exit; //Выйти из кода end; end;
TFile.WriteAllLines('Группы слов\' + Edit1.Text, RichEdit1.Lines.ToStringArray(), TEncoding.UTF8); //В группу слов вписываются данные из поля со словами end else begin //Если название формы другое (значит редактирование) if not (Edit1.Text = groupName) then //Если Наименование изменилось RenameFile('Группы слов\' + groupName, 'Группы слов\' + Edit1.Text); //Переименовываем файл группы слов TFile.WriteAllLines('Группы слов\' + Edit1.Text, RichEdit1.Lines.ToStringArray(), TEncoding.UTF8); //Вписываем данные в переименованный файл end;
Form10.Close(); end;
procedure TForm10.Button2Click(Sender: TObject); begin if(MessageBox(0, 'Вы действительно хотите вернуться на главную, не сохраняя данных?', 'Подтверждение', mb_YesNo) = IDYES) then //Диалог. При подветрждении закрывает форму Form10.Close(); //Закрытие формы end;
procedure TForm10.FormClose(Sender: TObject; var Action: TCloseAction); begin mainForm.Show(); //Показ главной формы end;
end.
unit Unit11;
interface
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.ExtCtrls, System.IOUtils, Unit12; type TForm11 = class(TForm) Label1: TLabel; Timer1: TTimer; Shape1: TShape; Label3: TLabel; Label2: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Label9: TLabel; procedure FormShow(Sender: TObject); procedure FormKeyPress(Sender: TObject; var Key: Char); procedure Timer1Timer(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private errorsCount: integer; wordsInGroup: TStrings; currentWordChars: String; currentWordCharIndex: integer; currentWord: String; msGone: integer; currentWordIndex: integer; wordsCountSolved: integer; charsCountSolved: integer; function GetNextWord(): String; procedure DoUpdate(); { Private declarations } public groupName: String; wordsCountToResolve: integer; mainForm: TForm; { Public declarations } end;
var Form11: TForm11; implementation {$R *.dfm} function GetWidthText(const Text:String; Font:TFont): Integer; var LBmp: TBitmap; begin LBmp:= TBitmap.Create; //Создает пустой экземпляр TBitmap try LBmp.Canvas.Font:= Font; //Задает шрифт Result:= LBmp.Canvas.TextWidth(Text); //Получает размер текста finally LBmp.Free; //Освобождение памяти end; end;
function TForm11.GetNextWord(): String; label retru; begin retru: if(wordsInGroup.Count > currentWordIndex+1) then begin //Если не достигнут конец слов if(GetWidthText(wordsInGroup[currentWordIndex+1], Label1.Font) > 525) then begin //Если размер слова превышает 525px currentWordIndex:= currentWordIndex + 1; //Переход к следующему слову goto retru; //повтор end; Result:= wordsInGroup[currentWordIndex+1]; //Получение следущего слова currentWordIndex:= currentWordIndex + 1; //Переход к следующиему слову exit; //Выход из кода end; Result:= ''; //Слова закончились, вернуть пустоту. end;
procedure TForm11.DoUpdate(); begin Label3.Visible:= charsCountSolved = 0; //Если тестирование начато, то скрывает подсказку Label1.Caption:= currentWord; //Отображает текущее слово Label6.Caption:= errorsCount.ToString(); //Отображает количество ошибок Label7.Caption:= wordsCountSolved.ToString() + ' из ' + wordsCountToResolve.ToString(); //Отображает количество решенных слов из общего количества
var charsPerMin:= Round(charsCountSolved / ((msGone + 1)/1000) * 60); //Рассчитывается скорость печати Label8.Caption:= charsPerMin.ToString() + ' симв./мин'; //Отображает скорость печати var enteredTextWidth:= GetWidthText(currentWordChars, Label1.Font); //Получает размер введенных букв var textWidth:= GetWidthText(currentWord, Label1.Font); //Получает размер текущего слова var startX:= Round(Label1.Width/2 - textWidth/2) + enteredTextWidth; //Получает X координату в которую будет поставлен выделяющий квадрат var currentCharWidth:= GetWidthText(currentWord.ToCharArray()[currentWordCharIndex], Label1.Font); //Получает размер текущего символа Shape1.Left:= startX - 1; //Перемещает квадрат Shape1.Width:= currentCharWidth + 2; //Меняет ширину квадрата end;
procedure TForm11.FormClose(Sender: TObject; var Action: TCloseAction); begin if(charsCountSolved > 0) then begin //Если количество решенных символов больше нуля Timer1.Enabled:= false; //Отключение таймера Form12.timeSecs:= Round((msGone+1)/1000); //Получение прошедших секунд Form12.errorsCount:= errorsCount; //Количество ошибок Form12.symbsPerMin:= Round(charsCountSolved / ((msGone + 1)/1000) * 60); //Символов в минуту Form12.symbolsCount:= charsCountSolved; //Количество символов Form12.mainForm:= mainForm; //Задает форме результатов переменную с данными главной формы Form12.Show(); //Открывает форму результатов end else begin mainForm.Show(); //Открывает главную форму end; end;
procedure TForm11.FormKeyPress(Sender: TObject; var Key: Char); begin
if(currentWord.ToCharArray()[currentWordCharIndex] = Key) then begin //Если введенная буква с клавиатуры совпадает с той, которую нужно ввести Shape1.Brush.Color:= clSilver; //Задает цвет кисти для квадрата if(charsCountSolved = 0) then //Если количество решенных символов больше нуля Timer1.Enabled:= true; //Включает таймер charsCountSolved:= charsCountSolved + 1; //Прибавить 1 к количеству решенных символов currentWordChars:= currentWordChars + currentWord.ToCharArray()[currentWordCharIndex]; //Введеные символы currentWordCharIndex:= currentWordCharIndex + 1; //Следующий индекс символа в слове if(currentWordCharIndex < currentWord.Length) then begin //Если текущий индекс символа меньше количества символов текущего слова DoUpdate(); //Обновление данных end else begin //иначе wordsCountSolved:= wordsCountSolved + 1; //Добавляем +1 к решенным словам currentWord:= GetNextWord(); //Получаем следующее слово if(currentWord = '') then begin //Если следующего слова нет if(wordsCountSolved < wordsCountToResolve) then begin //Если количество решенных слов меньше количества слов которые нужно решить currentWordIndex:= -1; //Начинаем сначала currentWordCharIndex:= 0; //задаем индекс символа 0 currentWordChars:= ''; //Начинаем сначала currentWord:= GetNextWord(); //Получаем следующее слово DoUpdate(); //Обновление данных exit; //Выход из кода end; Close(); //Закрытие формы exit; //Завершение тестирования end else begin if(wordsCountSolved < wordsCountToResolve) then begin //Если количество решенных слов меньше количества которое нужно решить currentWordCharIndex:= 0; //Начинаем сначала currentWordChars:= ''; //Начинаем сначала DoUpdate(); //Обновление данных end else begin Close(); //Закрытие формы exit; //Завершение тестирования end; end; end; end else begin //Ессли ввели неверную буквы if(charsCountSolved > 0) then begin //Если количество введенных символов > 0 (Чтобы при начале тестирование не получить ошибку) Shape1.Brush.Color:= clRed; //Кисть квадрата красным errorsCount:= errorsCount + 1; //Добавляем к ошибкам +1 DoUpdate(); //Обновляем данные //Неверный знак end;
end;
end;
procedure TForm11.FormShow(Sender: TObject);
begin Shape1.Brush.Color:= clSilver; //Кисть квадрата серая Timer1.Enabled:= false; //Выключение таймера msGone:= 0; //Времени прошло на 0 errorsCount:= 0; //Количество ошибок на 0 wordsCountSolved:= 0; //Количество решенных слов на 0 charsCountSolved:= 0; //Количество решенных символов на 0 currentWordIndex:= -1; //На начало currentWordCharIndex:= 0; //На начало currentWordChars:= ''; //На начало wordsInGroup:= TStringList.Create; //Создание экзмепляра массива слов в группе
wordsInGroup.LoadFromFile('Группы слов\' + groupName, TEncoding.UTF8); //Загрузка слов currentWord:= GetNextWord(); //Получение следующего слова DoUpdate(); //Обновление данных end;
procedure TForm11.Timer1Timer(Sender: TObject); begin msGone:= msGone + Timer1.Interval; //Обновляем пройденное время end;
end.
unit Unit12;
interface
uses Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
type TForm12 = class(TForm) Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; Label5: TLabel; Label6: TLabel; Label7: TLabel; Label8: TLabel; Button1: TButton; Label9: TLabel; Label10: TLabel; procedure FormShow(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public var timeSecs, symbsPerMin, symbolsCount, errorsCount: integer; mainForm: TForm; { Public declarations } end; var Form12: TForm12;
Implementation
{$R *.dfm}
uses Unit9 procedure TForm12.Button1Click(Sender: TObject); begin mainForm.Show(); //Показать главную форму Close(); //Закрыть текущую форму end;
procedure TForm12.FormShow(Sender: TObject); begin var errorsPercent:= errorsCount/symbolsCount*100; //Получение процент ошибок Label6.Caption:= errorsCount.ToString() + ' (' + errorsPercent.ToString() + '%)'; //Вывод процента количества ошибок if(errorsPercent < 5) then begin //Если процент ошибок меньше 5 Label8.Caption:= 'ОТЛИЧНО'; //Вывод результата Label8.Font.Color:= clLime; //Назначение цвета end else begin if(errorsPercent < 10) then begin //Если процент ошибок меньше 10 Label8.Caption:= 'ХОРОШО';//Вывод результата Label8.Font.Color:= clGreen;//Назначение цвета end else begin if(errorsPercent < 20) then begin //Если процент ошибок меньше 20 Label8.Caption:= 'УДОВЛЕТВОРИТЕЛЬНО'; //Вывод результата Label8.Font.Color:= clSkyBlue; //Назначение цвета end else begin //Если процент ошибок >= 20 Label8.Caption:= 'УДОВЛЕТВОРИТЕЛЬНО'; //Вывод результата Label8.Font.Color:= clRed; //Назначение цвета end; end; end; Label10.Caption:= timeSecs.ToString() + ' секунд'; //Вывод количество пройденных секунд тестирования Label4.Caption:= symbolsCount.ToString(); //Вывод количества решенных символов Label2.Caption:= symbsPerMin.ToString() + ' симв./мин'; //Вывод количества символов в минуту end;
|
|||||||||||||||
Последнее изменение этой страницы: 2022-09-03; просмотров: 20; Нарушение авторского права страницы; Мы поможем в написании вашей работы! infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.190.217.134 (0.212 с.) |