Обработчик события выбора пункта меню Работа1
//Поиск студентов со стипендией
private: System::Void работа1ToolStripMenuItem_Clickо(System::Object^ ender
,System::EventArgs^ e)
{
FILE *f;
char *g;
stud s;
int i,j;
int size=sizeof(s);
String ^st1,^s1,^s2,^s3,^s4,^s5,^s6;
OpenFileDialog^ openFile1 = gcnew OpenFileDialog;
if (openFile1->ShowDialog()
== Sytem::Windows::Forms::DialogResult::OK
&& openFile1->FileName->Length > 0)
{
st1=openFile1->FileName->ToString();
g=(char*)(void*)Marshal::StringToHGlobalAnsi(st1);
if((f=fopen(g,"rb"))==NULL)
{
MessageBox::Show("Ошибка открытия файла");
Application::Exit();
}
fseek(f,0,SEEK_END);
dataGridView1->RowCount=2;
TabClear();
i=0;
dataGridView1[2,i]->Value="Студенты";
dataGridView1[3,i]->Value= "со стипендией";
rewind(f);
while(fread(&s,size,1,f)>0)
{
j=0;
while (s.oc[j]>3&&j<3)
j++;
if (j==3)
{
i++;
dataGridView1->RowCount++;
s6=gcnew String(s.nom.ToString());
s1=gcnew String(s.grup);
s2=gcnew String(s.fam);
s3=gcnew String(s.oc[0].ToString());
s4=gcnew String(s.oc[1].ToString()) ;
s5=gcnew String(s.oc[2].ToString());
dataGridView1[0,i]->Value=s6;
dataGridView1[1,i]->Value=s1;
dataGridView1[2,i]->Value=s2;
dataGridView1[3,i]->Value=s3;
dataGridView1[4,i]->Value=s4;
dataGridView1[5,i]->Value=s5;
}
}
if (i==0)
{
i++;
dataGridView1[2,i]->Value="Студентов";
dataGridView1[3,i]->Value= "со стипендией нет";
}
fclose(f);
}
}
В качестве примера выполнения пункта меню работа2 рассмотрим сортировку структур, хранящихся в файле, в алфавитном порядке фамилий студентов. В данном случае также сначала с помощью диалогового окна выбирается имя файла для сортировки, а затем производится его сортировка методом модифицированного пузырька [4].
Обработчик события выбора пункта меню Работа2
private: System::Void работа2ToolStripMenuItem_Click(System::Object^ sender
,System::EventArgs^ e)
{
FILE * f;
char *g;
stud s,z;
int i,nn,k;
int size=sizeof(s);
bool flag;
String ^st1;
OpenFileDialog^ openFile1 = gcnew OpenFileDialog;
if (openFile1->ShowDialog()
== System::Windows::Forms::DialogResult::OK
&& openFile1->FileName->Length > 0 )
{
st1= openFile1->FileName->ToString();
g=(char*)(void*)Marshal::StringToHGlobalAnsi(st1);
if((f=fopen(g,"rb+"))==NULL)
{
MessageBox::Show("Ошибка открытия файла");
Application::Exit();
}
fseek(f,0,SEEK_END);
nn=ftell(f)/size;
rewind(f);
k=0;
do
{
k++;
flag=true;
for (i=0;i<nn-k;i++)
{
fseek(f,i*size,SEEK_SET);
fread(&s,size,1,f);
fread(&z,size,1,f);
if (strcmp(s.fam,z.fam)>0)
{
flag=false;
fseek(f,-2*size,SEEK_CUR);
fwrite(&z,size,1,f);
fwrite(&s,size,1,f);
}
}
} while (!flag);
fclose(f);
}
}
Помимо рассмотренных обработчиков событий, связанных с выбором пунктов меню, целесообразно создать событие загрузка формы. Обработчик этого события должен задавать количество столбцов таблицы в соответствии с количеством полей рассматриваемых структур (в примере шесть столбцов) и начальное количество строк таблицы, ширину каждого столбца, а также озаглавливать столбцы таблицы:
Обработчик события Загрузка формы
private: System::Void Form1_Load(
System::Object^ sender, System::EventArgs^ e)
{
dataGridView1->ColumnCount=6;
dataGridView1->RowCount=2;
dataGridView1->Columns[0]->Width=100;
dataGridView1->Columns[1]->Width=100;
dataGridView1->Columns[2]->Width=100;
dataGridView1->Columns[3]->Width=60;
dataGridView1->Columns[4]->Width=60;
dataGridView1->Columns[5]->Width=60;
dataGridView1->Columns[0]->HeaderText="Номер";
dataGridView1->Columns[1]->HeaderText="Группа";
dataGridView1->Columns[2]->HeaderText="Фамилия";
dataGridView1->Columns[3]->HeaderText="Оценка 1";
dataGridView1->Columns[4]->HeaderText="Оценка 2";
dataGridView1->Columns[5]->HeaderText="Оценка 3";
TabClear();
}
Задания на обработку бинарных файлов
Общее указание для всех вариантов
1. Создать в визуальной среде программирования приложение для обработки бинарных файлов. Для ввода и отображения информации использовать таблицу. Для выбора файлов при загрузке содержимого файлов и сохранения информации в файле использовать диалоги. Приложение должно иметь меню, реализующее работу с файлами и имеющее следующие подпункты: Создать, Открыть, Сохранить как, Работа1, Работа 2, Очистить, Выход.
2. Исходный (создаваемый с использованием меню Файл) файл должен состоять из структур, имеющих следующие поля: номер студента, номер группы, фамилия, массив из трех оценок.
3. Исходный файл должен храниться в каталоге проекта программы и иметь данные не менее чем по трём группам, для каждой из которых должно быть число строк, достаточное для проверки работ по подпунктам меню Работа. Ширина таблицы должна быть меньше ширины поля для ее вывода и с вертикальной полосой прокрутки (в окне свойств свойству ScrollBars дать значение Vertical при создании макета формы).
4. Если в задании какие-либо данные отсутствуют или сказано, что они должны быть введены, то предполагается использование однострочного текстового редактора TextBox.
5. В некоторых заданиях предлагается отбирать строки файлов по маске. Маской является строка, содержащая символы замещения: * (звёздочка) – представляет любую, в том числе и пустую, последовательность символов; ? (знак вопроса) – представляет любой один, и только один символ. Например, маске *т? удовлетворяет любая последовательность символов, предпоследним символом которой является буква «т», после которого должен стоять ровно один любой символ. Такой маске будут, в частности, соответствовать слова та, эта, приметы, но не такт, этак, приметный. ёёё
Добавляемые подпункты меню Работа1 и Работа2 по вариантам
1. - Объединение групп– по данным из двух файлов текущего каталога, заданным пользователем в диалоге, создать третий бинарный файл с именем, являющимся склейкой через пробел имен файлов-источников.
- Удалить структуру– удалить из файла структуру с заданной фамилией и группой, используя текстовые поля для ввода необходимых данных.
2. - Средние баллы по группам– для файла вычислить средний балл для каждой группы и отобразить в таблице редактора имена групп и соответствующие средние баллы.
- Выбор по части фамилии– загрузить в таблицу редактора строки файла, представляющие студентов всех групп, имеющих фамилию, включающую строку, заданную пользователем в текстовом поле.
3. - Заменить имя группы– в файле заменить заданное имя группы на другое.
- Упорядочить по оценке– в файле упорядочить структуры по возрастанию заданной оценки (массив и таблицу не использовать).
4. - Отличники– для выбранного файла отобразить в основной таблице сведения о студентах заданной пользователем группы, имеющих все оценки 5.
- Должники– отобразить данные структур файла, представляющие студентов всех групп, в фамилии которых содержится заданная пользователем строка и имеющих оценки 2. Если заданная строка пустая (сделать так по умолчанию), то отобразить данные всех структур, в которых есть оценки 2.
5. - Средний балл группы– для выбранного файла отобразить для заданной пользователем группы средний балл по всем экзаменам.
- Хорошисты– отобразить данные структур файла, представляющие студентов всех групп, имеющих все оценки, большие 3.
6. - Неуды по экзаменам– для выбранных в диалоге файла, группы и экзамена (1, 2 или 3) отобразить количество оценок 2.
- Средние баллы – для выбранного файла отобразить средние баллы по каждому экзамену для студентов всех групп, изменив соответствующим образом структуру таблицы (два столбца – номер экзамена и средний балл).
7. - Список групп– по данным файла, содержащим сведения по студентам разных групп, создать новый бинарный файл с именами групп и количествами студентов в группах и отобразить его содержимое.
- Выбор по фамилии– загрузить в таблицу редактора данные структур файла, представляющие студентов всех групп, имеющих фамилию, заданную пользователем в диалоге.
8. - Разбить по группам– по данным файла, содержащим сведения по студентам разных групп, создать новые бинарные файлы с именами '<имя группы>.rec', включающими все данные записей файла-источника с соответствующими именами групп.
- Отстающие– отобразить данные структур файла, представляющие студентов всех групп, имеющих две и более оценки 2.
9. - Добавление строки– в файл, заданный пользователем в диалоге, добавить новую строку на заданное место в файле.
- Выбор по началу фамилии– загрузить в таблицу редактора данные структур файла, представляющие студентов всех групп, имеющих фамилию, начинающуюся со строки, заданной пользователем.
10. - Сортировка– упорядочить структуры файла по фамилиям методом пузырька (массив и таблицу не использовать).
- Выбор по маске– загрузить в таблицу редактора данные структур файла, представляющие студентов всех групп, имеющих фамилию, соответствующую маске с одним символом замещения *(звёздочка), заданной пользователем.
11. - Средние баллы по группам– для файла вычислить средний балл для каждой группы и отобразить в таблице редактора имена групп и соответствующие средние баллы.
- Удалить структуру– удалить из файла структуру с заданной фамилией и группой, используя текстовые поля для ввода необходимых данных.
12. - Сортировка– отсортировать структуры файла, заданного пользователем в диалоге, в алфавитном порядке номеров групп (массив и таблицу не использовать).
- Копирование с инверсией– структуры одного файла скопировать в другой, расположив их в обратном порядке.
13. - Сортировка– отсортировать структуры файла, заданного пользователем в диалоге, по возрастанию номера студента (массив и таблицу не использовать).
- Выбор по маске– загрузить в таблицу редактора данные структур файла, представляющие студентов всех групп, имеющих фамилию, соответствующую маске с одним символом замещения *(звёздочка), заданной пользователем.
14. - Обратить порядок– загрузить в таблицу редактора данные структур файла, очистить файл и затем выводить из редактора данные в файл в обратном порядке.
- Выбор по маске– загрузить в таблицу редактора данные записей файла, представляющие студентов всех групп, имеющих фамилию, соответствующую маске с любым числом символов замещения ? (вопросительный знак), заданной пользователем.
15. - Число отличников по группам– для файла вычислить для каждой группы количество отличников и отобразить в строках таблицы редактора.
- Добавить структуру– добавить в конец файла структуру с заданной фамилией, группой, оценками и номером, используя текстовые поля для ввода необходимых данных, но не таблицу редактора.
16. - Сортировка– данные структур файла, заданного в диалоге, отсортировать по фамилиям в порядке, обратном алфавитному (массив и таблицу не использовать).
- Выбор по маске– загрузить в таблицу редактора данные структур файла, представляющие студентов всех групп, имеющих фамилию, не соответствующую маске с одним символом замещения *(звёздочка), заданной пользователем.
17. - Удалить группу в новый файл– переместить из файла структуры с информацией о заданной группе в другой файл.
- Добавить в файл– скопировать структуры одного файла в конец другого файла.
18. - Сортировка– отсортировать структуры файла, заданного в диалоге, по убыванию номера студента (массив и таблицу не использовать).
- Выбор по маске– загрузить в таблицу редактора данные структур файла, представляющие студентов всех групп, имеющих фамилию, соответствующую маске с не более, чем одним символом замещения ? (знак вопроса), заданной пользователем.
19. - Упорядочить по оценке– отсортировать структуры файла, заданного в диалоге, по заданной в диалоге оценке (1, 2 или 3) (массив и таблицу не использовать).
- Изменить структуру– изменить в файле структуру с заданным номером, используя текстовые поля для ввода необходимых данных и редактирования строки, но не таблицу редактора.
20. - Скопировать часть файла– создать в каталоге проекта новый файл и скопировать в него структуры файла исходного файла с четными номерами.
- Отобразить часть файла– отобразить в таблице редактора данные первых трёх записей нового файла (см. предыдущий пункт задания). Выдать сообщение, если трех записей нет.
21. - Сортировка– отсортировать структуры файла, заданного в диалоге, по убыванию сумм баллов (массив и таблицу не использовать).
- Выбор по маске– загрузить в таблицу редактора данные структур файла, представляющие студентов всех групп, имеющих фамилию, соответствующую маске с более, чем одним символом замещения ? (знак вопроса), заданной пользователем в диалоге.
22. - Сортировка по группам– отсортировать данные структур файла, заданного в диалоге, по убыванию номеров групп (массив и таблицу не использовать).
- Выбор по маске– загрузить в таблицу редактора данные структур файла, представляющие студентов всех групп, имеющих фамилию, соответствующую маске с любым числом символов замещения ? (знак вопроса), заданной пользователем.
23. - Упорядочить по оценке– упорядочить в файле структуры по убыванию заданной (1, 2 или 3) пользователем оценки (массив и таблицу не использовать).
- Заменить структуру– в текстовых полях ввести данные для структуры и заменить ею структуру файла с такой же фамилией и группой при загрузке в редактор структур из файла; результат сохранить в том же файле.
24. - Три последних записи– отобразить в таблице редактора данные трёх последних структур файла, выбранного в диалоге. Если нет трех записей, то выдать сообщение.
- Выбор Nлучших– загрузить в таблицу редактора данные Nструктур файла, представляющих студентов всех групп, имеющих наибольшие суммы баллов.
25. - Добавить средние баллы– отобразить в таблице данные структур файла, добавив в конце каждой строки таблицы (в новой колонке) значения средних баллов.
- Упорядочить по СредБаллу– упорядочить в таблице редактора строки по убыванию среднего балла и вывести данные (без средних баллов) в тот же файл, не меняя тип файловой переменной.
26. - Добавить СредБаллы групп– по данным файла-источника создать бинарный файл ‘SbGr.rec’, поместив в него структуры, включающие имя группы и средний балл в группе по всем экзаменам.
- Выбор трёх худших– загрузить в таблицу редактора данные трёх структур файла, представляющие студентов заданной пользователем в диалоге группы, имеющих наименьшие суммы баллов.
Список литературы
1. Алексеев Ю.Е., Куров А.В. Практикум по программированию на языке C в среде VS C++. Часть 1. – М.: Изд. МГТУ им. Н.Э. Баумана, 2011. -100с.
2. Алексеев Ю.Е., Куров А.В. Практикум по программированию на языке C в среде VS C++. Часть 2. – М.: Изд. МГТУ им. Н.Э. Баумана, 2012. -117с.
3. Алексеев Ю.Е., Куров А.В. Практикум по программированию на языке C в среде VS C++. Часть 3. – М.: Изд. МГТУ им. Н.Э. Баумана, 2013. -95с.
4. Алексеев Ю.Е., Куров А.В. Практикум по программированию на языке C в среде VS C++. Часть 4. – М.: Изд. МГТУ им. Н.Э. Баумана, 2014. - с.
5. Керниган Б. И., Ритчи Д. М. Язык программирования С, 2-е издание,: Пер. с англ. – М.:Издат. дом «Вильямс» , 2006. – 304 с.: ил.
6. Пахомов Б.И. C/C++ и MS Visual C++ 2012 для начинающих. – СПб: БХВ-Петербург, 2015.- 512 с.: ил.
7. Русакова З.Н. Динамические структуры данных м вычислительные алгоритмы. Visual C++. –СПб.: Образовательные проекты, 2013.- 272 с.
Алфавитный указатель
визуальное программирование.............. 18
деструктор................................................ 10
Инкапсуляция.......................................... 11
Класс........................................................... 8
конструктор............................................. 10
методами.................................................... 8
Наследование........................................... 11
невизуальный компонент....................... 38
обработчик события................................ 22
объект класса............................................. 9
окно палитры компонентов................... 19
Полиморфизм.......................................... 14
поля класса................................................. 8
полями........................................................ 8
событийно-ориентированное программирование 28
создание меню......................................... 40
спецификатор доступа.............................. 8
экземпляр класса....................................... 9
Вопросы для самопроверки
Классы.
- Что представляет собой класс?
- Назовите основные спецификаторы доступа класса.
- Что такое поле и метод класса?
- Укажите назначение конструктора и деструктора?
- Что такое свойство класса? Приведите примеры обращения к полям класса.
- Перечислите основные принципы построения классов.
- Что такое инкапсуляция, наследование, полиморфизм?
- Назовите особенности работы в среде CLR.
Построение проекта в среде визуального программирования
1. Что такое событийно-ориентированное программирование? Чем оно отличается от процедурного программирования?
2. Какие действия выполняются при создании приложения в среде визуального программирования?
3. Сформулируйте назначение окон палитры компонентов и свойств.
4. Что такое обработчик события?
5. Как создаются события в среде визуального программирования?
6. Что такое визуальные и невизуальные компоненты?
7. Как создается меню с помощью компонента MenuStrip?
8. Какие компоненты предназначены для выбора файла при открытии и сохранении файла?
9. Какие средства можно использовать для сохранения содержимого многострочного текстового редактора в файле, загрузки содержимого файла в редактор?
10. Можно ли аналогичные средства использовать при работе с бинарными файлами?
11. Какие действия надо запрограммировать при конструировании таблицы DataGridView?
12. Как задать заголовки строк и столбцов таблицы, установить размеры ячеек?
Заключение
Данное учебное пособие написано в соответствии с программой курса Информатика и соответствует содержанию занятий, проводимых во втором семестре. Данное пособие предназначено для студентов тех специальностей, на которых изучается язык C/C++. Небольшое количество аудиторных занятий в семестре (1 час в неделю) не позволяет подробно изложить особенности создания приложений в среде визуального программирования, познакомить студентов со свойствами используемых элементов управления, также в настоящее время практически отсутствуют литературные источники, в которых рассматривается программирование в среде CLR. Все эти факторы и определяют, по мнению авторов, актуальность и полезность его издания.
Краткость изложения материала и наличие примеров написания программ могут позволить студенту за небольшое время изучить соответствующие разделы программирования и успешно справиться с выполнением приводимых заданий, выносимых на лабораторные работы, что, в конечном счете, приведет к достижению важной цели – своевременной сдаче контрольных мероприятий.