Главная страница

Методические рекомендации по выполнению практических работ по междисциплинарному курсу


Скачать 2.6 Mb.
НазваниеМетодические рекомендации по выполнению практических работ по междисциплинарному курсу
Дата05.09.2022
Размер2.6 Mb.
Формат файлаpdf
Имя файлаMU_PR_MDK_01_01.pdf
ТипМетодические рекомендации
#663423
страница12 из 13
1   ...   5   6   7   8   9   10   11   12   13
Навигация o
NewCustomer o
FillOrCancel
3.
Для каждой формы добавьте текстовые поля, кнопки и другие элементы управления, которые отображаются на рисунках ниже. Для каждого элемента управления задайте свойства, указанные в таблицах.
Примечание
Элементы управления "группа" и "надпись" обеспечивают большую ясность, но не используются в коде.
Форма навигации
С О З Д А Н И Е Ф О Р М И Д О Б А В Л Е Н И Е Э Л Е М Е Н Т О В У П Р А В Л Е Н И Я
Элементы управления формы навигации
Свойства
Кнопка
Name = btnGoToAdd
Кнопка
Name = btnGoToFillOrCancel
Кнопка
Name = btnExit
Форма NewCustomer

С О З Д А Н И Е Ф О Р М И Д О Б А В Л Е Н И Е Э Л Е М Е Н Т О В
У П Р А В Л Е Н И Я
Элементы управления формы
NewCustomer
Свойства
TextBox
Name = txtCustomerName
TextBox
Name
= txtCustomerID
Readonly = True
Кнопка
Name = btnCreateAccount
NumericUpDown
DecimalPlaces
=
0
Maximum
=
5000
Name = numOrderAmount
DateTimePicker
Format
=
Short
Name = dtpOrderDate
Кнопка
Name = btnPlaceOrder
Кнопка
Name = btnAddAnotherAccount
Кнопка
Name = btnAddFinish
Форма FillOrCancel

Т А Б Л И Ц А 3
Элементы
управления
формы
FillOrCancel
Свойства
TextBox
Name = txtOrderID
Кнопка
Name = btnFindByOrderID
DateTimePicker
Format
=
Short
Name = dtpFillDate
DataGridView
Name
= dgvCustomerOrders
Readonly
=
True
RowHeadersVisible = False
Кнопка
Name = btnCancelOrder
Кнопка
Name = btnFillOrder
Кнопка
Name = btnFinishUpdates
Сохранение строки подключения
Когда приложение пытается открыть подключение к базе данных, оно должно иметь доступ к строке подключения. Чтобы не вводить строку вручную в каждой форме, сохраните строку в файле App.config в проекте и создайте метод, возвращающий строку при вызове метода из любой формы в приложении.
Строку подключения можно найти, щелкнув правой кнопкой мыши подключение данных о продажах в Обозреватель
сервера и выбрав Свойства. Найдите свойство ConnectionString , а затем с помощью клавиш CTRL + A, CTRL + C выберите и скопируйте строку в буфер обмена.
1.
Если вы используете C#, в Обозреватель решений разверните узел свойства в проекте, а затем откройте файл Settings. Settings . Если вы используете Visual Basic, в Обозреватель решений выберите пункт Показывать все файлы, разверните узел Мой
проект , а затем откройте файл Settings. Settings .
2.
В столбце имя введите connString .
3.
В списке тип выберите (строка подключения).

4.
В списке область выберите приложение.
5.
В столбце значение введите строку подключения (без кавычек), а затем сохраните изменения.
Примечание
В реальных приложениях строку подключения следует хранить безопасно, как описано в разделе строки подключения и файлы конфигурации.
Написание кода для форм
Этот раздел содержит краткие обзоры того, что делает каждая форма. Он также предоставляет код, определяющий базовую логику при нажатии кнопки на форме.
Форма навигации
Форма навигации открывается при запуске приложения. Кнопка Добавить учетную
запись открывает форму
NewCustomer. Кнопка Выполнение
или
отмена
заказов открывает форму FillOrCancel. Кнопка Выход закрывает приложение.
Преобразование формы навигации в начальную форму
При использовании C# в обозревателе решений откройте файл Program.cs и измените строку Application.Run на следующую: Application.Run(new Navigation());
Если вы используете Visual Basic, в Обозреватель решений откройте окно свойства , перейдите на вкладку приложение и выберите симпледатаапп.
Navigation в списке начальных форм .
Создание автоматически создаваемых обработчиков событий
Дважды щелкните три кнопки в форме навигации, чтобы создать пустые методы обработчика событий. При двойном щелчке кнопки также добавляется автоматически созданный код в файл кода конструктора, который позволяет нажать кнопку для вызова события.
Добавление кода для логики формы навигации
На странице кода для формы навигации заполните основные тексты методов для трех обработчиков событий нажатия кнопки, как показано в следующем коде.
C#Копировать
///
/// Opens the NewCustomer form as a dialog box,
/// which returns focus to the calling form when it is closed.
///
private void btnGoToAdd_Click(object sender, EventArgs e)
{
Form frm = new NewCustomer(); frm.Show();
}
///
/// Opens the FillorCancel form as a dialog box.
///
private void btnGoToFillOrCancel_Click(object sender, EventArgs e)
{
Form frm = new FillOrCancel(); frm.ShowDialog();
}
///
/// Closes the application (not just the Navigation form).
///
private void btnExit_Click(object sender, EventArgs e)
{
this.Close();
}
Форма NewCustomer
Если ввести имя клиента, а затем нажать кнопку создать учетную запись , форма newCustomer создает учетную запись клиента, а SQL Server ВОЗВРАЩАЕТ значение идентификатора в качестве нового идентификатора клиента. Затем можно разместить заказ для новой учетной записи, указав сумму и дату заказа и нажав кнопку поместить
порядок .
Создание автоматически создаваемых обработчиков событий
Создайте пустой обработчик событий щелчка для каждой кнопки в форме NewCustomer, дважды щелкнув каждую из четырех кнопок. При двойном щелчке кнопки также добавляется автоматически созданный код в файл кода конструктора, который позволяет нажать кнопку для вызова события.
Добавление кода для логики формы NewCustomer
Чтобы завершить логику формы NewCustomer, выполните следующие действия.
1.
Перенесите System.Data.SqlClient пространство имен в область, чтобы не указывать полные имена его членов.
C#Копировать using System.Data.SqlClient;
2.
Добавьте в класс некоторые переменные и вспомогательные методы, как показано в следующем коде.
C#Копировать
// Storage for IDENTITY values returned from database. private int parsedCustomerID; private int orderID;
///
/// Verifies that the customer name text box is not empty.
///
private bool IsCustomerNameValid()
{ if (txtCustomerName.Text == "")
{
MessageBox.Show("Please enter a name."); return false;
} else
{ return true;
}
}
///
/// Verifies that a customer ID and order amount have been provided.
///
private bool IsOrderDataValid()
{
// Verify that CustomerID is present. if (txtCustomerID.Text == "")
{
MessageBox.Show("Please create customer account before placing order."); return false;

}
// Verify that Amount isn't 0. else if ((numOrderAmount.Value < 1))
{
MessageBox.Show("Please specify an order amount."); return false;
} else
{
// Order can be submitted. return true;
}
}
///
/// Clears the form data.
///
private void ClearForm()
{ txtCustomerName.Clear(); txtCustomerID.Clear(); dtpOrderDate.Value = DateTime.Now; numOrderAmount.Value = 0; this.parsedCustomerID = 0;
}
3.
Заполните основные тексты методов для четырех обработчиков событий нажатия кнопки, как показано в следующем коде.
C#Копировать
///
/// Creates a new customer by calling the Sales.uspNewCustomer stored procedure.
///
private void btnCreateAccount_Click(object sender, EventArgs e)
{ if (IsCustomerNameValid())
{
// Create the connection. using
(SqlConnection connection
= new
SqlConnection(Properties.Settings.Default.connString))
{
// Create a SqlCommand, and identify it as a stored procedure. using (SqlCommand sqlCommand = new SqlCommand("Sales.uspNewCustomer", connection))
{ sqlCommand.CommandType = CommandType.StoredProcedure;
// Add input parameter for the stored procedure and specify what to use as its value. sqlCommand.Parameters.Add(new
SqlParameter("@CustomerName",
SqlDbType.NVarChar, 40)); sqlCommand.Parameters["@CustomerName"].Value = txtCustomerName.Text;
// Add the output parameter. sqlCommand.Parameters.Add(new SqlParameter("@CustomerID", SqlDbType.Int));
sqlCommand.Parameters["@CustomerID"].Direction = ParameterDirection.Output; try
{ connection.Open();
// Run the stored procedure. sqlCommand.ExecuteNonQuery();
// Customer ID is an IDENTITY value from the database. this.parsedCustomerID = (int)sqlCommand.Parameters["@CustomerID"].Value;
// Put the Customer ID value into the read-only text box. this.txtCustomerID.Text = Convert.ToString(parsedCustomerID);
} catch
{
MessageBox.Show("Customer ID was not returned. Account could not be created.");
} finally
{ connection.Close();
}
}
}
}
}
///
/// Calls the Sales.uspPlaceNewOrder stored procedure to place an order.
///
private void btnPlaceOrder_Click(object sender, EventArgs e)
{
// Ensure the required input is present. if (IsOrderDataValid())
{
// Create the connection. using
(SqlConnection connection
= new
SqlConnection(Properties.Settings.Default.connString))
{
// Create SqlCommand and identify it as a stored procedure. using (SqlCommand sqlCommand = new SqlCommand("Sales.uspPlaceNewOrder", connection))
{ sqlCommand.CommandType = CommandType.StoredProcedure;
// Add the @CustomerID input parameter, which was obtained from uspNewCustomer. sqlCommand.Parameters.Add(new SqlParameter("@CustomerID", SqlDbType.Int)); sqlCommand.Parameters["@CustomerID"].Value = this.parsedCustomerID;
// Add the @OrderDate input parameter.
sqlCommand.Parameters.Add(new
SqlParameter("@OrderDate",
SqlDbType.DateTime, 8)); sqlCommand.Parameters["@OrderDate"].Value = dtpOrderDate.Value;
// Add the @Amount order amount input parameter. sqlCommand.Parameters.Add(new SqlParameter("@Amount", SqlDbType.Int)); sqlCommand.Parameters["@Amount"].Value = numOrderAmount.Value;
// Add the @Status order status input parameter.
// For a new order, the status is always O (open). sqlCommand.Parameters.Add(new SqlParameter("@Status", SqlDbType.Char, 1)); sqlCommand.Parameters["@Status"].Value = "O";
// Add the return value for the stored procedure, which is the order ID. sqlCommand.Parameters.Add(new SqlParameter("@RC", SqlDbType.Int)); sqlCommand.Parameters["@RC"].Direction = ParameterDirection.ReturnValue; try
{
//Open connection. connection.Open();
// Run the stored procedure. sqlCommand.ExecuteNonQuery();
// Display the order number. this.orderID = (int)sqlCommand.Parameters["@RC"].Value;
MessageBox.Show("Order number " + this.orderID + " has been submitted.");
} catch
{
MessageBox.Show("Order could not be placed.");
} finally
{ connection.Close();
}
}
}
}
}
///
/// Clears the form data so another new account can be created.
///
private void btnAddAnotherAccount_Click(object sender, EventArgs e)
{ this.ClearForm();
}
///
/// Closes the form/dialog box.

/// private void btnAddFinish_Click(object sender, EventArgs e)
{ this.Close();
}
Форма FillOrCancel
Форма Филлорканцел запускает запрос для возврата заказа при вводе идентификатора заказа и нажатия кнопки найти заказ . Возвращенная строка отображается в сетке данных только для чтения. Можно пометить заказ как отмененный (X), если нажать кнопку отменить заказ или пометить заказ как заполненный (F), если нажать кнопку заполнить заказ . Если нажать кнопку найти порядок еще раз, появится обновленная строка.
Создание автоматически создаваемых обработчиков событий
Создайте пустые обработчики событий щелчка для четырех кнопок в форме
Филлорканцел, дважды щелкнув кнопки. При двойном щелчке кнопки также добавляется автоматически созданный код в файл кода конструктора, который позволяет нажать кнопку для вызова события.
Добавление кода для логики формы Филлорканцел
Чтобы завершить логику формы Филлорканцел, выполните следующие действия.
1.
Перенесите следующие два пространства имен в область, чтобы не указывать полные имена их членов.
C#Копировать using System.Data.SqlClient; using System.Text.RegularExpressions;
2.
Добавьте в класс переменную и вспомогательный метод, как показано в следующем коде.
C#Копировать
// Storage for the order ID value. private int parsedOrderID;
///
/// Verifies that an order ID is present and contains valid characters.
///
private bool IsOrderIDValid()
{
// Check for input in the Order ID text box. if (txtOrderID.Text == "")
{
MessageBox.Show("Please specify the Order ID."); return false;
}
// Check for characters other than integers. else if (Regex.IsMatch(txtOrderID.Text, @"^\D*$"))
{
// Show message and clear input.
MessageBox.Show("Customer ID must contain only numbers."); txtOrderID.Clear(); return false;
} else
{

// Convert the text in the text box to an integer to send to the database. parsedOrderID = Int32.Parse(txtOrderID.Text); return true;
}
}
3.
Заполните основные тексты методов для четырех обработчиков событий нажатия кнопки, как показано в следующем коде.
C#Копировать
///
/// Executes a t-SQL SELECT statement to obtain order data for a specified
/// order ID, then displays it in the DataGridView on the form.
///
private void btnFindByOrderID_Click(object sender, EventArgs e)
{ if (IsOrderIDValid())
{ using
(SqlConnection connection
= new
SqlConnection(Properties.Settings.Default.connString))
{
// Define a t-SQL query string that has a parameter for orderID. const string sql = "SELECT * FROM Sales.Orders WHERE orderID = @orderID";
// Create a SqlCommand object. using (SqlCommand sqlCommand = new SqlCommand(sql, connection))
{
// Define the @orderID parameter and set its value. sqlCommand.Parameters.Add(new SqlParameter("@orderID", SqlDbType.Int)); sqlCommand.Parameters["@orderID"].Value = parsedOrderID; try
{ connection.Open();
// Run the query by calling ExecuteReader(). using (SqlDataReader dataReader = sqlCommand.ExecuteReader())
{
// Create a data table to hold the retrieved data.
DataTable dataTable = new DataTable();
// Load the data from SqlDataReader into the data table. dataTable.Load(dataReader);
// Display the data from the data table in the data grid view. this.dgvCustomerOrders.DataSource = dataTable;
// Close the SqlDataReader. dataReader.Close();
}
} catch
{
MessageBox.Show("The requested order could not be loaded into the form.");

} finally
{
// Close the connection. connection.Close();
}
}
}
}
}
///
/// Cancels an order by calling the Sales.uspCancelOrder
/// stored procedure on the database.
///
private void btnCancelOrder_Click(object sender, EventArgs e)
{ if (IsOrderIDValid())
{
// Create the connection. using
(SqlConnection connection
= new
SqlConnection(Properties.Settings.Default.connString))
{
// Create the SqlCommand object and identify it as a stored procedure. using (SqlCommand sqlCommand = new SqlCommand("Sales.uspCancelOrder", connection))
{ sqlCommand.CommandType = CommandType.StoredProcedure;
// Add the order ID input parameter for the stored procedure. sqlCommand.Parameters.Add(new SqlParameter("@orderID", SqlDbType.Int)); sqlCommand.Parameters["@orderID"].Value = parsedOrderID; try
{
// Open the connection. connection.Open();
// Run the command to execute the stored procedure. sqlCommand.ExecuteNonQuery();
} catch
{
MessageBox.Show("The cancel operation was not completed.");
} finally
{
// Close connection. connection.Close();
}
}
}

}
}
///
/// Fills an order by calling the Sales.uspFillOrder stored
/// procedure on the database.
///
private void btnFillOrder_Click(object sender, EventArgs e)
{ if (IsOrderIDValid())
{
// Create the connection. using
(SqlConnection connection
= new
SqlConnection(Properties.Settings.Default.connString))
{
// Create command and identify it as a stored procedure. using
(SqlCommand sqlCommand
= new
SqlCommand("Sales.uspFillOrder", connection))
{ sqlCommand.CommandType = CommandType.StoredProcedure;
// Add the order ID input parameter for the stored procedure. sqlCommand.Parameters.Add(new SqlParameter("@orderID", SqlDbType.Int)); sqlCommand.Parameters["@orderID"].Value = parsedOrderID;
// Add the filled date input parameter for the stored procedure. sqlCommand.Parameters.Add(new
SqlParameter("@FilledDate",
SqlDbType.DateTime, 8)); sqlCommand.Parameters["@FilledDate"].Value = dtpFillDate.Value; try
{ connection.Open();
// Execute the stored procedure. sqlCommand.ExecuteNonQuery();
} catch
{
MessageBox.Show("The fill operation was not completed.");
} finally
{
// Close the connection. connection.Close();
}
}
}
}
}
///

/// Closes the form.
/// private void btnFinishUpdates_Click(object sender, EventArgs e)
{ this.Close();
}

1   ...   5   6   7   8   9   10   11   12   13


написать администратору сайта