- •230100.1 «Вычислительные машины, комплексы, системы и сети»
- •230100.3 «Автоматизированные системы обработки информации и управления»
- •230105.4 «Программное обеспечение вычислительной техники
- •Содержание пояснительной записки
- •Проверка правильности данных на уровне ячейки таблицы
- •Проверка правильности данных на уровне строки таблицы
- •Использование xml-сериализации для сохранения и загрузки наборов данных
- •Дополнительные средства навигации и редактирования для таблицы с набором данных
- •Автоматизация действий при добавлении нового элемента данных
- •Сортировка данных
- •Поиск по шаблону
Сортировка данных
Используя конструктор меню, создайте в компоненте menuStrip1 новый пункт меню первого уровня с текстом &Data и с помощью окна Properties измените имя этого пункта (т.е. свойство Name) наdate1. В выпадающем меню, связанном с пунктом Data, создайте пункт с текстом &Sortby…и измените имя этого пункта на sortby1. Затем перейдите в заготовку меню третьего уровня, связанную с пунктом Sortby…, добавьте в нее три пункта меню с текстом &Id, &Surname, &Course+Group и измените имена этих пунктов на id2, surname2, course2 соответственно.
В конструктор класса Form1 добавьте новые операторы:
id2.Tag = 0;
surname2.Tag = 1;
course2.Tag = 2;
В описание класса Form1 добавьте три вспомогательных метода: CompareById, CompareBySurname, CompareByCourse:
private int CompareById(student a, student b)
{
return a.Id - b.Id;
}
private int CompareBySurname(student a, student b)
{
return a.Surname.CompareTo(b.Surname);
}
private int CompareByCourse(student a, student b)
{
int res = a.Course - b.Course;
if (res == 0)
res = a.Group - b.Group;
if (res == 0)
res = a.Surname.CompareTo(b.Surname);
return res;
}
Определите обработчик события Click для пункта меню id2:
private void id2_Click(object sender, EventArgs e)
{
if (dataGridView1.RowCount == 1)
return;
dataGridView1.CurrentCell = dataGridView1[0, 0];
Comparison<student> comp = CompareById;
switch ((int)(sender asToolStripMenuItem).Tag)
{
case 1:
comp = CompareBySurname;
break;
case 2:
comp = CompareByCourse;
break;
}
(bindingSource1.DataSource asList<student>).Sort(comp);
bindingSource1.ResetBindings(false);
}
Свяжите созданный обработчик с событием Click пунктов меню surname2, course2.
Поиск по шаблону
Поиск организуется с помощью одного из перегруженных вариантов метода FindIndex обобщенного класса List<T>, а именно – варианта с двумя параметрами: номера элемента, с которого начинается поиск, и тестовой функции. Тестовая функция должна иметь один параметр типа T и возвращать логическое значение true, если ее параметр удовлетворяет критерию поиска, и false в противном случае. Параметр метода FindIndex, соответствующий тестовой функции, описывается в виде делегата-обобщения Predicate<T>.
Для организации поиска подключите к проекту библиотеку Microsoft.VisualBasic. Для этого щелкните правой кнопкой мыши на строке References в окне SolutionExplorer, выберите в появившемся контекстом меню команду AddReference. Выделите пункт Microsoft.VisualBasic, после чего нажмите кнопку OK.
В начало файла Form1.cs добавьте оператор
using Microsoft.VisualBasic;
В описание класса Form1 добавьте новое поле:
private string surnameToFind = "";
Дополните выпадающее меню, связанное с пунктом Data, добавив в него пункт с текстом &Find…, и измените имя добавленного пункта меню на find1.
Измените первый оператор метода dataGridView1_RowEnter (приведен полный вариант дополненного метода с выделенными дополнениями)
private void dataGridView1_RowEnter(object sender,
DataGridViewCellEventArgs e)
{
Find.Enabled = bindingNavigatorDeleteItem.Enabled =
!dataGridView1.Rows[e.RowIndex].IsNewRow;
}
Аналогичным образом измените первый оператор метода dataGridView1_CurrentCellDirtyStateChanged (добавьте Find.Enabled)
Определите обработчик события Click для пункта меню find1
private void find1_Click(object sender, EventArgs e)
{
surnameToFind =
Interaction.InputBox("Введите начальную часть фамилии для поиска:",
"Поиск по фамилии", surnameToFind, -1, -1).Trim();
if (surnameToFind == "")
return;
int ind = (bindingSource1.DataSource as
List<student>).FindIndex(dataGridView1.CurrentRow.Index,
delegate(student a)
{
return a.Surname.StartsWith(surnameToFind,
StringComparison.OrdinalIgnoreCase);
});
if (ind != -1)
dataGridView1.CurrentCell = dataGridView1[1, ind];
else
MessageBox.Show("Фамилия не найдена", "Поиск по фамилии");
}
В результате добавленная в меню команда Find позволяет организовать поиск студента по начальной части его фамилии. Для ввода требуемой начальной фамилии используется стандартное диалоговое окно. При отображении этого окна в нем выводится предыдущий текст для поиска. В случае, если введенный текст является пустым или содержит только пробелы, а также если диалоговое окно закрывается нажатием кнопки Cancel или клавиши <Esc>, действие команды Find отменяется, а текст для поиска полагается равным пустой строке.
Поиск начинается с текущего элемента набора данных. Если требуемая фамилия найдена, то ячейка таблицы с найденной фамилией делается текущей; если фамилия не найдена, то об этом выводится сообщение. Поиск выполняется без учета регистра символов; кроме того, в тексте для поиска удаляются начальные и конечные пробелы.
Если текущей является последняя строка таблицы (NewRow), то команда Find недоступна.
Приложение 1. Оформление титульного листа
ПЕРВОЕ ВЫСШЕЕ ТЕХНИЧЕСКОЕ УЧЕБНОЕ ЗАВЕДЕНИЕ РОССИИ
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«НАЦИОНАЛЬНЫЙ МИНЕРАЛЬНО-СЫРЬЕВОЙ УНИВЕРСИТЕТ «ГОРНЫЙ»
Кафедра информационных систем и вычислительной техники
КУРСОВОЙ ПРОЕКТ
по дисциплине
«Программирование»
Выполнил студент_________________________
Курс__________________
Группа______________
Шифр_________________
Санкт-Петербург
2013
Приложение2. Оформление Технического задания
МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ РОССИЙСКОЙ ФЕДЕРАЦИИ
федеральное государственное бюджетное образовательное учреждение высшего профессионального образования
«НАЦИОНАЛЬНЫЙ МИНЕРАЛЬНО-СЫРЬЕВОЙ УНИВЕРСИТЕТ «ГОРНЫЙ»
Кафедра информационных систем и вычислительной техники
ЗАДАНИЕ
на курсовой проект по дисциплине
«Программирование»
Студенту группы ________ ____________________________
ф.и.о.
Тема: “Обработка наборов данных на C#”
Исходные данные:(указывается Ваша конкретная предметная область)
Проект должен содержать:
- создание класса с описанием структуры данных (с различными типами полей);
- связывание с помощью компонента BindingSource созданной структуры с таблицей DataGridView;
- проверку правильности вводимых данных на уровне отдельной ячейки и строки в целом;
- использование средств XML-сериализации наборов данных для обеспечения чтения и записи данных в файл;
- использование средств навигации BindingNavigator, предоставляющий дополнительные средства навигации и редактирования данных;
- выполнение сортировки данных;
- выполнение поиска данных по указанному полю.
Срок сдачи законченного проекта ____________________________
Руководитель проекта ______________________ст.преп. Е.О.Шумова
Дата выдачи задания 25.03.2013 г.
