ЗАПИСИ+ТИПИЗИР.ФАЙЛЫ + StringGrid+Menu (ЗАПИСИ+ТИПИЗИР.ФАЙЛЫ + StringGrid+Menu)

Посмотреть архив целиком

7



УПР 3. ЗАПИСИ+ТИПИЗИР.ФАЙЛЫ + StringGrid+Menu + 25 ЗАДАНИЙ

Создание редактора для работ с типизированными файлами

  1. Создание макета формы.

    1. Разместите на форме

  2. Создание структуры меню.

Создайте точно такое же меню, как в предыдущем задании

  1. Создание заглушек обработчиков событий.

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

    1. Переменная S:string должна представлять спецификацию файла, обрабатываемого в текущий момент. Её пустое значение будет обозначать, что данные таблицы StringGrid1 еще не сохранены в файле.

    2. П

      procedure TForm1.FormCreate(Sender: TObject);

      begin

      //Обработчик события СОЗДАНИЯ ФОРМЫ

      //При создании формы считать,

      //что таблица не модифицирована,

      TabModified:=false;

      //разрешить редактировать текст в ячейках

      Form1.StringGrid1.Options:=Form1.StringGrid1.Options

      +[goEditing];

      //УСТАНОВКА ШИРИНЫ СТОЛБЦОВ, ВЫВОД ЗАГОЛОВКОВ СТОЛБЦОВ и

      //ШИРИНЫ ОКНА ПОД ТАБЛИЦУ ДЛЯ ДАННЫХ ИЗ ФАЙЛА (см. тип tz, ftz)

      TabForFile;//своей процедурой

      //Пока S='', редактируемый текст не сохранен в файле

      S:='';//а в дальнейшем S может представлять

      //спецификацию файла.

      end;//procedure TForm1.FormCreate(Sender: TObject)

      Рис. 2. Обработчик события создания формы

      еременная TabModified: Boolean будет использоваться как признак, получающий значение true при всяком изменении содержимого таблицы, и значение false для пустой таблицы, при сохранении таблицы или при загрузке в таблицу данных из файла.

  3. Объявление типов данных

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

tz=record No:byte; Gr:string[8]; FIO:string[12];

o1,o2,o3:2..5 end;

Соответственно типизированные файлы

tfz=file of tz;

Разместите объявление этих типов в части реализации.


procedure TabForFile;

var i:integer;

begin

//УСТАНОВКА ПАРАМЕТРОВ ОСНОВНОЙ ТАБЛИЦЫ ДЛЯ

//ДАННЫХ ИЗ ФАЙЛА ГРУПП (см. тип tz, ftz)

//УСТАНОВКА ЧИСЛА СТРОК И СТОЛБЦОВ

Form1.StringGrid1.ColCount:=6;

//число строк задать по максимально

//возможному числу студентов в группах

Form1.StringGrid1.RowCount:=75;

//УСТАНОВКА ШИРИНЫ СТОЛБЦОВ

Form1.StringGrid1.ColWidths[0]:=20;

Form1.StringGrid1.ColWidths[1]:=60;

Form1.StringGrid1.ColWidths[2]:=120;

Form1.StringGrid1.ColWidths[3]:=60;

Form1.StringGrid1.ColWidths[4]:=60;

Form1.StringGrid1.ColWidths[5]:=60;

//ВЫВОД ЗАГОЛОВКОВ СТОЛБЦОВ

Form1.StringGrid1.Cells[0,0]:=' №';

Form1.StringGrid1.Cells[1,0]:=' ГРУППА';

Form1.StringGrid1.Cells[2,0]:=' ФАМИЛИЯ';

Form1.StringGrid1.Cells[3,0]:='о1';

Form1.StringGrid1.Cells[4,0]:='о2';

Form1.StringGrid1.Cells[5,0]:='о3';

//ЗАДАНИЕ ШИРИНЫ ОКНА ТАБЛИЦЫ

Form1.StringGrid1.Width:=0;

for i:=0 to 5 do

Form1.StringGrid1.Width:=Form1.StringGrid1.Width

+Form1.StringGrid1.ColWidths[i];

end;//procedure TabForFile;

Рис. 3. Процедура установки параметров таблицы


  1. Создание обработчиков событий.

    1. Добавьте в метод procedure TForm1.FormCreate(Sender: TObject) обработки события FormCreate операторы и комментарии, как на рис.2.

Из этого обработчика вызывается процедура TabForFile, составленная для программной установки параметров основной таблицы, в которий будут создаваться исходные, предназначенные для обработки данные (одной строке таблицы соответствует одна запись типа tz), сохраняться в типизированном файле типа tfz, загружаться из файла и редактироваться. Это – количества строк (в дальнейшем не может изменяться), количество столбцов, ширина каждого столбца, тексты заголовков стобцов, ширина окна для отображения таблицы (см. рис. 3).

В процессе выполнения заданий может возникнуть необходимость изменить параметры таблицы для отображения результатов выполняемых работ и тогда, чтобы восстановить параметры основной таблицы достаточно будет вызвать процедуру TabForFile. Если при переходе от одной структуры таблицы к другой некоторые параметры остаются неизменными и представлены соответствующими свойствами в Инспекторе объектов, то их установку можно выполнить на этапе разработки макета формы. В данном примере так сделано для установки полос прокрутки заданием свойству ScrollBars значения ssBoth (см. рис. 4) и фиксации (объявление как заголовочной) первой строки таблицы заданием свойству FixedRows значения 1, а свойству FixedCols значения 0, так как фиксированных столбцов не должно быть (см. рис 1, где первая строка выделена цветом).

    1. Создайте обработчик procedure TForm1.N6Click(Sender: TObject) события щелчка на пункте меню Файл\Сохранить как…, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии, как на рис. 5. В этом обработчике опреатором вызывается процедура SaveToFileOfTz, предназначенная для сохранения содержимого основной таблицы в файле типа tfz. Её текст представлен на рисю 6.

Д
ля проверки работы.
Запустите программу, наберите в строках таблицы StringGrid1 строки как показано на рис.7 и сохраните данные в файле fz.rec в текущем каталоге. Затем откройте этот файл на новой вкладке с именем fz.rec окна редактора текстов Delphi следующим образом: введите команду Файл.Открыть…, в появившемся окне диалога Open выберите в раскрывающемся списке Тип файлов: строку Any file(*.*), в списке файлов выберите fz.rec и щелкните на кнопке Открыть. Данные из файла fz.rec будут прочитаны как из текстового файла, поэтому правильно отобразятся только строковые данные (названия групп и фамилии), но не числовые, так как в типизированных файлах данные хранятся в форме внуреннего представления.


    1. Создайте в начале раздела реализации процедуру LoadFromFileOfTz, загружающую в основную таблицу данные из файла со спецификацией S и устанавливающую признак, что данные в таблице после загрузки ещё не изменены (см. рис. 8).

    2. С

      procedure TabClear;

      var iStroki,iStolbca:integer;

      begin

      //очистка ячеек таблицы

      for iStolbca:=0 to Form1.StringGrid1.ColCount-1 do

      for iStroki:=1 to Form1.StringGrid1.RowCount-1 do

      Form1.StringGrid1.Cells[iStolbca,iStroki]:='';

      end;//procedure TabClear

      Рис. 10. процедура очистки основной таблицы

      оздайте обработчик procedure TForm1.StringGrid1SetEditText(Sender: TObject; ACol, ARow: Integer; var Value: String) события изменения данных в таблице, поместив в него всего один оператор TabModified:=true. Для создания шаблона этого обработчика щелкните на таблице в макете формы и в Инспекторе объектов на вкладке Events сделайте двойной щелчок в строке OnSetEditText.

    3. Создайте обработчик procedure TForm1.N3Click(Self) события щелчка на пункте меню Файл\Открыть…, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии (см. текст обработчика рис. 9), имея в виду следующее.

      1. Если данные таблицы не были изменены (TabModified ложно), то сразу перейти к диалогу открытия файла (см. рис. 9), иначе следует предложить пользователю разрабатываемой программы выбрать в диалоге (см. справку по функции MessageDlg) вариант продолжения работы с измененными данными:

    • I) или сохранить их в файле по выбору, вызвав N6Click(Self) и затем открыть новый файл;

    • II) или не сохранять данные и открыть новый файл;

    • III) или отменить выполнение команды, выйдя из метода и продолжить редактирование данных, как если бы команда открытия файла вообще не вводилась.

      1. Возможно, структура таблицы была изменена, поэтому следует восстановить структуру осонвной таблицы, вызвав процедуру TabForFile и очистить её, вызвав процедуру TabClear (см. рис. 10).

      2. Диалог для выбора открываемого файла запускается командой OpenDialog1.Execute (см справку по классу TOpenDialog). Если открываемый файл не был выбран (в окне диалога Открыть была нажата кнопка Отмена) или пользователь ввёл имя несуществующего файла, то следует просто выйти из обработчика (вернуться к редактированию прежних данных), иначе следует загрузить выбранный файл на редактирование, переменной S присвоить спецификацию этого файла и отобразить её в заголовке окна форма, а также свойству TabModified присвоить значение false – признак того, что загруженные на редактирование данные пока не изменены.

    1. Создайте самостоятельно обработчик procedure TForm1.N7Click(Sender: TObject) события щелчка на пункте меню Файл.Выход, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии, имея в виду следующее. Если редактируемые данные не были измены (TabModified ложно), то сразу завершите работу программы оператором close, иначе следует предложить пользователю разрабатываемой программы выбрать в диалоге (см. справку по функции MessageDlg) вариант продолжения работы с измененными данными:

    • I) или сохранить его в файле (пользователь нажал кнопку Yes) по выбору, вызвав N6Click(Self) , если S=’’, иначе – методом SaveToFileOfTz, и затем завершитm работу программы;

    • II) или не сохранять текст (пользователь нажал кнопку No) и завершить работу программы;

    • III) или отменить выполнение команды (пользователь нажал кнопку Cancel), выйдя из обработчика по exit, и продолжить редактирование данных, как если бы команда завершить работу программы вообще не вводилась.

    1. Создайте самостоятельно обработчик procedure TForm1.N2Click(Sender: TObject) события щелчка на пункте меню Файл.Создать, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии, имея в виду что:

    • нужно без всяких условий перейти к структуре основной таблицы вызовом TabForFile и очистить её,

    • строка S должна стать пустой, то есть не должна представлять имя файла,

    • установить в ложь признак TabModified, - в заголовке формы оставить только её название, то есть слово Form1.

    1. Создайте самостоятельно обработчик procedure TForm1.N5Click(Sender: TObject) события щелчка на пункте меню Файл\Сохранить, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии, имея в виду следующее. Если строка S пустая, то есть не представляет имя файла, то следует передать управление обработчику команды Файл/Сохранить как…, выполнив оператор N6Click(Self), иначе – сохранить данные таблицы в файле, вызвав процедуру SaveToFileOfTz. Затем установить оператором TabModified:=false признак, что данные в таблице не модифицированы.

    2. Создайте самостоятельно обработчик procedure TForm1.N4Click(Sender: TObject) события щелчка на пункте меню Файл.Закрыть, для чего сделайте двойной щелчок на соответствующей строке дерева объектов и в появившейся заглушке добавьте операторы и комментарии, имея в виду, что если текст был изменен, то нужно в диалоге (см. справку по функции MessageDlg) выяснить, что желает пользователь. Если он нажмёт кнопук Cancel, то есть хочет вернуться к редактированию данных, то следует просо выйти из обработчика. Если он нажмёт кнопку No, то нужно очистить таблицу, вывести в заголовок окна название формы слово Form1, установить признак, что таблица не модифицирована (TabModified:=false) и присвоить S пустое значение. Если пользователь нажмёт кнопку Yes, то нужно выполнить те же действия, что и при нажатии кноки No, но предварительно сохранить данные таблицы в файле, вызвав процедуру SaveToFileOfTz, если S≠’’, или сохранить данные таблицы в файле по выбору, вызвав N6Click(Self), если S=’’.

  1. Задания для самостоятельного выполнения

Общее для всех заданий

  1. Подпункты меню Файл: Файл.Открыть, Файл.Сохранить как, Файл\Выход и соответствующие им диалоги, а также пункт мню Работа, но с двумя индивидуальными для каждого задания подпунктами.

  2. Исходный (создаваемый с использованием меню Файл) файл должен иметь тип tfz=file of tz, где tz=record No:byte; Gr:string[8]; Fm:string[12]; o1,o2,o3:2..5 end, No – порядковый номер, Gr – название группы, Fm – фамилия студента, o1,o2,o3 – оценки по предметам, а основная таблица, в которой эти данные хранятся и редактируются, должна иметь вид

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

  4. Если в задании какие-либо данные отсутствуют или сказано, что они должны быть введены/выбраны в диалогах, то предполагается использование OpenDialog, SaveDialog, MessageDlg или InputQuery.

  5. Отображать результаты ваполнения задания по подмунктам меню Работа следует в таблице StringGrid1, изменяя, при необходимости, её структуру и заголовки.

В некоторых заданиях будет предложено отбирать строки файлов по маске. Маской является строка, содержащая символы замещения: * (звёздочка) – представляет любую, в том числе и пустую, последовательность символов; ? (знак вопроса) – представляет любой один, и только один символ. Например, маске *т? удовлетворяет любая последовательность символов, предпоследним символом которой является буква «т», после которого должен стоять ровно один любой символ. Такой маске будут, в частности, соответствовать слова та, эта, приметы, но не такт, этак, приметный.

Добавляемые подпункты меню Работа по вариантам
1. - Отличники
– для выбранного файла отобразить в основной таблице сведения о студентах заданной в диалоге группы, имеющих все оценки 5.

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

2. - Средний балл группы – для выбранного файла отобразить для заданной в диалоге группы средний балл по всем экзаменам.

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

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

- Хорошисты – отобразить данные записей файла, представляющие студентов всех групп, имеющих оценки, большие 3.

4. - Разбить по группам – по данным файла, содержащим сведения по студентам разных групп, создать новые типиззированные файлы с именами '<имя группы>.rec', включающими все данные записей файла-источника с соответствующими именами групп.

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

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

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

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

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

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

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

8. - Сортировка – упорядочить записи файла в редакторе по фамилиям методом пузырька и сохранить в том же файле.

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

9. - Сортировка при чтении – при чтении записей файла, заданного пользователем в диалоге, добавлять их в таблицу редактора так, чтобы сохранялась упорядоченночть строк по фамилиям, а затем сохранить упорядоченный таким образом данные из строк таблицы в том же файле.

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

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

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

11. - Сортировка – данные записей файла загрузить на редактирование, упорядочить по фамилиям методом поиска минимального элемента и сохранить в том же файле.

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

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

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

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

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

14. - Обратить порядок – загрузить в таблицу редактора данные записей файла, очистить файл и затем выводить из редактора данные в файл в обратном порядке.

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

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

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

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

- Удалить запись – удалить из файла запись с заданной фамилией и группой, используя диалоги для ввода необходимых данных.

17. - Число отличников по группам – для файла вычислить для каждой группы количество отличников и отобразить в строках таблицы редактора.

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

18. - Упорядочить по оценке – упорядочить в файле записи по убыванию заданной (1, 2 или 3) в диалоге оценки.

- Заменить запись – в диалоге ввести данные для записи и заменить ею запись файла с такой же фамилией и группой при загрузке в редактор строк из файла; результат сохранить в том же файле.

19. - Упорядочить по оценке – при чтении данных записей файла добавлять их в таблицу редактора так, чтобы сохранялась упорядоченночть строк таблицы по возрастанию заданной (1, 2 или 3) в диалоге оценки, а затем сохранить упорядоченные таким образом данные в том же файле.

- Изменить запись – изменить в файле запись с заданным номером, используя диалог InputQuery или InputBox для ввода необходимых данных и редактирования строки, но не таблицу редактора.

20. - Удалить группу в новый файл – переместить из файла записи заданной группы в другой файл.

- Добавить в файл – скопировать записи одного файла в конец другого файла.

21. - Скопировать часть файла – создать в каталоге проекта подкаталог и скопировать в него в новый файл записи файла с четными номерами.

- Отобразить часть файла – отобразить в таблице редактора данные первых трёх записей нового файла (см. предыдущий пункт задания).

22. - Копирование с инверсией – записи одного файла скопировать в другой, расположив их в обратном порядке.

- Три последних записи – отобразить в таблице редактора данные трёх поседних записей файла, выбранного в диалоге.

23. - Добавить средние баллы – отобразить в таблице данные записей файла, добавив в конце каждой строки таблицы (в новой колонке) значения средних баллов.

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

24. - Добавить СредБаллы групп – по данным файла-источника создать типизированный файл ‘SbGr.rec’, поместив в него записи, включающие имя группы и средний балл в группе по всем экзаменам.

- Упорядочить группы по СредБаллу –упроядочить записи в файле-источнике по убыванию среднего балла группы.

25. - Заменить оценки – в файле заменить заданное имя группы на другое.

- Упорядочить по оценке – в файле упорядочить записи по возрастанию заданной оценки.


Случайные файлы

Файл
130802.rtf
116124.rtf
15354-1.rtf
105752.rtf
164964.doc