Разработка программных систем на основе объектного подхода. Учебно-методическое пособие к выполнению практических работ
.pdf
основных свойств. Подготовить сообщение.
4.Меню и панели инструментов. Краткое описание элементов и основных свойств. Подготовить сообщение.
5.Данные. Краткое описание элементов и основных свойств. Подготовить сообщение.
6.Компоненты. Краткое описание элементов и основных свойств. Подготовить сообщение.
7.Абстрактные классы и интерфейсы в С#. Описание и области применения. Подготовить сообщение.
Требования к содержимому отчету:
1.Титульный лист
2.Оформление ГОСТ
3.Содержание:
3.1Создание учетных записей Microsoft Live ID (Скриншот)
3.2Установка Visual Studio Community (Скриншот)
3.3Пройти тест по тематике C#/Visual Studio в любой бесплатной среде обучения (Скриншот)
3.4Заполненная анкета (слайд 6)
3 . 2 . З а д а н и я д л я п р а к т и ч ес к о й р а б от ы № 2
Требуется создать программу, реализующую: 1) обработку данных, введенных пользователем; 2) передачу данных между объектами:
1)сложение двух чисел;
2)вычитание двух чисел;
3)возведение числа в степень;
4)сравнение двух чисел;
5)отображение счетчика выполненных действий.
Требования к программе:
1)начальная форма приложения должна содержать 2 поля для ввода данных,
-21 -
поле для вывода текущего значения счетчика и отдельную кнопку для реализации каждого действия из указанных в задании;
2)заголовок начальной формы включает: ФИО студента, номер группы, заголовок формы с выводом результата действий – по названию действия («Результат сложения», «Результат вычитания» и т.д.);
3)результат выполнения каждого из действий выводится на новой форме, имеющей поле для вывода результата и кнопку ОК, реализующей закрытие формы и увеличение значения счетчика, расположенного на начальной форме на 1;
4)передача данных между формами должна осуществляться как минимум тремя разными способами;
5)предусмотреть проверку введенных пользователем данных с генерацией сообщения об ошибке в случае необходимости;
6)программа не должна содержать более 2-х форм.
Примечание.
Полезные ссылки и функции:
http://www.cyberforum.ru/windows-forms/thread110436.html#a_Q2 – некоторые способы передачи данных между объектами;
Try / catch – удобно использовать для проверки данных;
{ MessageBox.Show("Неверный формат введенных данных"); } – для генерации сообщения о неверном формате введенных пользователем данных
Math.Pow(основание_степени, показатель_степени) Закрытие текущей формы: this.Close();
Создание новой формы: Form2 b = new Form2()
Открытие новой формы в диалоговом режиме: b.ShowDialog();
Способы передачи данных между формами возможны:
1 способ. Изменение модификатора доступа
В Form2 установить модификатор доступа для контроля/поля public в любом месте Form1:
Form2 f = new Form2(); f.ShowDialog();
- 22 -
this.textBox1.Text = f.textBox1.Text;
Преимущества: Самый быстрый в реализации и удобный способ. Недостатки: 1) Противоречит всем основам ООП; 2) возможно только из
более поздней формы в более раннюю; 3) форма f показывается только с использованием ShowDialog(), т.е. в первую форму управление вернется только по закрытию второй (избежать этого можно, сохранив ссылку на вторую форму в поле первой формы).
2 способ. Использование открытого свойства/метода
Вклассе Form2 определяем свойство (или метод):
Public string Data
{
get
{
return textBox1.Text
}
}
Влюбом месте Form1:
Form2 f = new Form2(); f.ShowDialog(); this.textBox1.Text = f.Data;
Преимущества: противоречит НЕ всем основам ООП.
Недостатки: 1) возможна передача только из более поздней формы в более раннюю; 2) форма f показывается только с использованием ShowDialog(), т.е. в первую форму управление вернется только по закрытию второй (избежать этого можно, сохранив ссылку на вторую форму в поле первой формы).
3 способ. Передача данных в конструктор Form2
Изменяем конструктор Form2: public Form2(string data)
{
InitializeComponent();
//Обрабатываем данные
- 23 -
//Или записываем их в поле this.data = data;
}
string data;
Создаем форму в любом месте Form1 так:
Form2 f = new Form2(this.textBox1.Text); f.ShowDialog();
//Или f.Show();
Преимущества: 1) простой в реализации способ; 2) не нарушает ООП Недостатки: возможна передача только из более ранней формы в более
позднюю.
4 способ. Передача ссылки в конструктор
Изменяем конструктор Form2: public Form2(Form1 f1)
{
InitializeComponent(); //Обрабатываем данные
//Или записываем их в поле string s = f1.textBox1.Text;
}
Создаем форму в любом месте Form1 так, т.е. передаем ей ссылку на первую форму:
Form2 f = new Form2(this); f.ShowDialog();
//Или f.Show();
Преимущества: 1) доступ ко всем открытым полям/функциям первой формы; 2) п
Недостатки: 1) передача данных возможна в обе стороны; 2) нарушает
ООП.
5 способ. Используем свойство 'родитель'
При создании второй формы устанавливаем владельца:
- 24 -
Form2 f = new Form2(); f.Owner = this; f.ShowDialog();
Во второй форме определяем владельца:
Form1 main = this.Owner as Form1; if(main != null)
{
string s = main.textBox1.Text; main.textBox1.Text = "OK";
}
Преимущества: 1) доступ ко всем открытым полям/функциям первой формы; 2) передача данных возможна в обе стороны; 3) не нарушает ООП.
6 способ. Используем отдельный класс
Создаем отдельный класс, лучше статический, в основном namespace, т.е. например, в файле Program.cs:
static class Data
{
public static string Value { get; set; }
}
Его открытые свойства/методы доступны из любой формы:
Data.Value = "111";
Преимущества: самый удобный способ, когда данные активно используются несколькими формами.
7 способ. Использование функций обратного вызова. Передача метода в конструктор
Создаем в основном namespace делегат: public delegate void MyDelegate(string data);
В Form1 создаем метод, который будет обрабатывать принятые данные: void func(string param)
{
// обработка
- 25 -
}
Создаем вторую форму так:
Form2 f = new Form2(new MyDelegate(GetData)); f.ShowDialog();
При этом изменяем конструктор второй формы, чтобы он принимал делегат:
MyDelegate d;
public Form2(MyDelegate sender)
{
InitializeComponent(); d= sender;
}
И в любой момент отправляем данные: d(textBox1.Text);
Пример формы Form1.cs button1 (сложение величин): private void button1_Click(object sender, EventArgs e)
{
try
{
Form2 f = new Form2();
f.label1.Text = Convert.ToString(Convert.ToInt64(textBox1.Text) + Convert.ToInt64(textBox2.Text));
f.Text = "Результат сложения"; f.ShowDialog();
//this.textBox1.Text = f.textBox1.Text;
//label3.Text = Convert.ToString(Convert.ToInt64(textBox1.Text) + Convert.ToInt64(textBox2.Text));
}
catch
{
MessageBox.Show ("Недопустимый тип данных");
}
}
- 26 -
Пример формы Form2.cs button1 (кнопка ОК)
private void button1_Click(object sender, EventArgs e)
{
this.Close();
}
Требования к содержимому отчету:
1)Оформление по ГОСТ
2)Содержание:
2.1) формулировка задания; 2.2) использованные способы передачи данных между объектами (с кратким
описанием); 2.3) блок схема программы (укрупненная)
2.4) скриншоты работы программы (начальная форма + результат каждого действия + сообщение об ошибке)
2.5) листинг программы (форма1 + форма2)
3 . 3 . З а д а н и я д л я п р а к т и ч ес к о й р а б от ы № 3
Требуется создать программу реализующую обработку данных введенных пользователем по следующим алгоритмам:
1)запись набора введенных пользователем данных в массив;
2)отбор данных(вводятся пользователем) с последующей сортировкой по указанным признакам(по вариантам);
3)вывод всех элементов массива в алфавитном порядке.
Требования к программе:
1)начальная форма приложения должна содержать 9 полей для ввода данных, поле для вывода текущего значения количества записей, кнопку по которой создается новый элемент массива из введенных пользователем данных
иотдельную кнопку для реализации каждого действия из указанных в задании;
2)заголовок начальной формы – ФИО студента и номер группы, заголовок
-27 -
формы с выводом результата действий – по названию действия («Результат обработки», «Список группы» и т.д.);
3)результат выполнения каждого из действий выводится на новой форме, имеющей табличное поле для вывода результата и кнопку ОК, реализующей закрытие формы (предусмотреть блокирование начальной формы до закрытия форм с выводом результатов; на форме, демонстрирующей все текущие элементы массива создать возможность редактирования и удаления записей (дополнительно));
4)для передачи данных между объектами-формами использовать отдельный класс;
5)для ввода полей с ограниченным набором значений (пол, основа обучения) использовать элемент comboBox, для даты рождения – dateTimePicker;
6)предусмотреть проверку введенных пользователем данных с генерацией сообщения об ошибке в случае необходимости (обязательно добавить проверку на уникальность № студенческого билета);
7)обеспечить базовое наполнение массива 10 записями.
При выполнении работы использовать поля записей и критерии проверки, представленные в табл. 3.4:
|
|
Таблица 3.4 |
|
|
|
|
|
Поле |
Тип |
Возможные значения и |
|
|
|
критерии проверки |
|
|
|
|
|
Фамилия |
строка |
Не пустое |
|
|
|
|
|
Имя |
строка |
Не пустое |
|
|
|
|
|
Отчество |
строка |
Не пустое |
|
|
|
|
|
Дата рождения |
datetime |
Не позднее текущей даты |
|
|
|
|
|
Пол |
строка |
Мужской или женский |
|
|
|
|
|
№ студ. билета |
Целое число |
Целое число, уникальность |
|
|
|
|
|
Основа обучения |
строка |
Бюджетная или платная |
|
|
|
|
|
Кол-во задолженностей |
Целое число |
Пустое или целое число |
|
|
|
|
|
Примечание |
строка |
|
|
|
|
|
|
- 28 -
Пример основной формы представлен на рис. 3.4:
Рис. 3.4. Пример основной формы.
Пример формы с результатами обработки представлен на рис. 3.5:
Рис. 3.5. Пример формы с результатами обработки.
- 29 -
Пример формы, отображающей список группы, представлен на рис. 3.6:
Рис. 3.6. Пример формы со списком группы.
Пример конструкции пользовательского класса:
public class Student |
|
{ |
|
public string Surname ; |
// Фамилия |
public string Name; |
// Имя |
public string SName; |
// Отчество |
public int BDateD; |
// Число ДР |
public int BDateM; |
// Месяц ДР |
public int BDateY; |
// Год ДР |
public string Gender; |
// Пол |
public int S_number; |
// № студенческого билета |
public string L_base; |
// основа обучения |
public int Debts; |
// количество задолженностей |
public string Note; |
// примечание |
} |
|
- 30 -
