Файл: Справочник для опытных и как пособие для начинающих программистов. Компактдиск содержит исходные коды примеров из книги.doc
ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 11.01.2024
Просмотров: 955
Скачиваний: 1
ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
MATLAB
// Программа, подготовив команды для решения системы уравнений в среде
// MATLAB, вызывает его на выполнение этих команд. В результате получаем
// решение, которое выводим на экран с помощью MessageBox
using System;
using System.Reflection;
using System.Windows.Forms;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace MatlabСЛАУ
{
public partial class Form1:Form
{ ^
public Form1()
{
InitializeComponent();
Button1.Text = "Решить СЛАУ";
}
private void button1_Click(object sender, EventArgs e)
{
//Матричное уравнение АХ = L решаем через
// обратную матрицу: X = A(-1)L.
// Здесь (-1) - "знак" обратной матрицы.
// Решаем систему
// XI + Х2 + Х3 = 6
// XI + Х2 =3
// Х2 + ХЗ = 5
// Для решения этой системы в MATLAB следует подать такие команды:
// А = [1 1 1; 1 1 0; 0 1 1]; L = [6; 3; 5];
// % здесь задание прямой матрицы А и вектора свободных членов L
// X = inv(A)*L % умножение обратной матрицы на L" };
//%- это признак комментария в MATLAB
// Получить тип приложения MATLAB:
Туре ТипМатЛаб = Type.GetTypeFromProgID("Matlab.Application");
// Создать экземпляр объекта типа MATLAB:
object МатЛаб = Activator.Createlnstance(ТипМатЛаб);
// Подготавливаем команды для MATLAB:
object[] Команды = new Object[]
{ "А = [1 1 1; 1 1 0; 0 1 1]; L = [6; 3; 5]; " + "X = inv(A)*L % обратная матрица inv" };
// Вызываем MATLAB, подавая ему на вход подготовленные команды:
object Результат = ТипМатЛаб.InvokeMember("Execute", BindingFlags.InvokeMethod, null, МатЛаб, Команды);
// Таким образом мы могли бы вывести решение на экран:
// MessageBox.Show(Результат.ToStringf));
// Однако этот результат будет внутри строки, а хотелось бы
// получить ответ в массив double для дальнейшей обработки.
// Этот массив можно получить методом GetFullMatrix из среды
// MATLAB, как показано ниже
var p = new ParameterModifier(4);
p[0] = false; p[1] = false; p[2] = true; p[3] = true; ParameterModifier[] mods = { p };
double[,] X = new double[3, 1];
object[] Аргументы = new object[] { "X", "base", X, new double[0] };
// Здесь "X" - это название матрицы, которую мы хотим получить.
// "base" является названием рабочей среды MATLAB, где следует
// искать матрицу "X".
Результат = ТипМатЛаб.InvokeMember("GetFullMatrix", BindingFlags. InvokeMethod, null, МатЛаб, Аргументы, mods, null, null);
// Решение системы получаем в матрицу X:
X = (double[,](Аргументы[2];
string Строка = string.Format("X1 = {0}; Х2 = {1}; Х3 = {2};", Х[0, 0] , Х[1, 0], Х[2, 0]);
MessageBox.Show(Cтрока);
}
}
}
Как видно из программного кода, подход к решению задачи аналогичен предущему примеру. Мы реализовали обращение к MATLAB, используя метод Execute, решение системы получили в переменную Результат. И, как показано в комментарии, можем вывести результат вычислений на экран с помощ
MessageBox. Однако для дальнейшей работы с полученным вектором неизвестных желательно иметь его в виде массива Double, а не в виде строки. Конечно, можно выделить из строки решения каждое значение неизвестного с помощью операций со строками, используя функцию Split, которая возвращает строковый массив, содержащий подстроки данного экземпляра.
Однако существует более красивое решение. Оно заключается в иcпoльзoвaнии метода GetFullMatrix. Технологию этого использования мы привели в данной программе. Здесь наиболее важным параметром является объектная переменная Аргументы. Ее первым компонентом является компонент "X", содержащий название матрицы, которую мы хотим получить из среды MATLAB, второй компонент "base" является названием рабочей среды (workspace) MATLAB, где следует искать матрицу "X". Согласно документации, в среде MATLAB мы имеем две основные рабочие среды: "base" и "global". Третьим компонентом является массив х, куда получаем результат решения из среды MATLAB, а четвертым компонентом массив мнимой части решения, которой в нашей задаче нет, но для общности технологии требуется ее формальное присутствие.
О других способах подключения к MATLAB можно узнать на сайте компании The Math Works, производителя MATLAB, www.mathworks.com. Убедиться в ботоспособности обсуждаемой программы можно, открыв решение MatlabCлay.sln в папке MatlabCлay.
ГЛАВА 10 Обработка баз данных с использованием технологии ADO.NET
Пример 63. Создание базы данных SQL Server
Покажем, как можно создать базу данных SQL Server в среде Visual Studio 2010. В этой простейшей базе данных будет всего одна таблица, содержащая сведения о телефонах ваших знакомых, т. е. в этой таблице будем иметь всего три колонки: Имя, Фамилия и Номер телефона.
Запустим Visual Studio 2010, закажем новый проект шаблона Windows Forms Аpplication С#, зададим имя — BД_SQL_Server. Далее непосредственно создадим новую базу данных SQL Server. Для этого в пункте меню Project выберем команду Аdd New Item (т. е. добавить новый элемент) и в появившемся одноименном окне укажем шаблон Local Database (локальная база данных), введем имя файла (в поле Name) Vic.sdf и последовательно щелкнем на кнопках Add, Next, Finish.
Теперь добавим таблицу в базу данных, для этого в пункте меню View выберем команду Server Explorer (Обозреватель баз данных). В обозревателе баз данных развернем узел (щелчком мыши) Vic.sdf и выберем Tables (Таблицы). Щелкнем правой кнопкой мыши на пункте Tables, а затем выберем пункт Create Table (Создать таблицу). Откроется окно New Table. Назовем новую таблицу (поле Name) БД телефонов. Заполним структуру таблицы, как показано на рис. 10.1. Нажмем кнопку ОК, чтобы создать таблицу и закрыть окно New Table. Чтобы исключить повторяющиеся записи (т. е. строки в таблице), следует научить первичные ключи (или ключевые столбцы). Ключевым столбцом назначачают столбец в таблице, который всегда содержит уникальные (неповторяющиеся в данной таблице) значения. Однако в нашей таблице могут быть люди с одинаковый именами или одинаковыми фамилиями, т. е. в нашей таблице в качестве перечных ключей следует использовать одновременно два столбца: столбец Имя и столбец Фамилия. Представьте себе, что у нас уже есть сотни записей в таблице, и при попытке ввести вторую строку, содержащую то же самое значение, появляется сообщение об ошибке. Это очень технологично, удобно!
Рис. 10.1. Формирование структуры новой таблицы
Чтобы добавить первичные ключи в таблицу, в
Server Explorer развернем yзел Tables. Далее щелкнем правой кнопкой мыши на нашей только что созданной таблице и выберем пункт Edit Table Schema, затем для полей Имя и Фамилия укажем для параметра Allow Nulls значение No, т. е. обяжем нашего пользователя всегда заполнять эти поля (ячейки таблицы). Далее для параметра Unique (Являются ли эти поля уникальными?) ответим No, поскольку и имена, и фамилии повторяются. И, наконец, назначим колонки Имя и Фамилия первичными ключами (Primari Key — Yes). Нажмем кнопку OK для сохранения этих настроек и закрытия okhа Edit Table - БД телефонов.
Теперь добавим данные в таблицу. Для этого в окне Server Explorer щелкнем правой кнопкой мыши на пункте БД телефонов и выберем команду Show Tabl Data. Откроется но данных таблицы, как показано на рис. 10.2, но только пока пустое.
Рис. 10.2. Заполнение ячеек таблицы
Далее заполним данную таблицу. Для нашей демонстрационной цели введем пять строчек в эту таблицу. После ввода в меню File выберите команду Save All длясохранения проекта и базы данных. Теперь убедитесь, что в папке проекта повился файл Vic.sdf. Его можно открыть вне проекта с помощью Microsoft Visual Studio 2010 для редактирования базы данных.
Пример базы данных можно найти в папке БД_SQL_Server.
Пример 64. Отображение таблицы базы данных SQL Server в экранной форме
Имея базу данных, например базу данных SQL Server, в виде файла Vic.sdf, созданного в предыдущем разделе, покажем, как очень легко можно вывести таблицу из этой базы в экранную форму.
Для этой цели запустим Visual Studio 2010, закажем новый проект шаблона Windows Application С# и укажем имя проекта — БД_SQL_Server2. Далее в меню View выберем команду Server Explorer. Щелкнув правой кнопкой мыши на значке Data Connections, добавим соединение — Add Connection, а в качестве источника данных Data source укажем Microsoft SQL Server Compact 3.5 и щелкнем на кнопке ОК. Далее, нажмем кнопку Browse, найдем созданный в прошлом проекте файл базы данных Vic.sdf и нажмем кнопку ОК. Теперь в окне Server Explorer мы видим значок базы данных Vic.sdf.
Далее в меню Data выберем команду Add New Data Source, тем самым мы запустим мастер
Data Source Configuration Wizard. Здесь последовательно нажимаем кнопки Next, Dataset, Next. На запрос мастера копировать ли файл Vic.sdf в наш текущий проект нажмем кнопку Да.
В результате в окне Solution Explorer появится значок базы данных Vic.sdf и значок объекта vicDataSet.xsd, но база данных в текущем проекте будет пустой. Для заполнения базы данных в меню Data укажем Show Data Source и в появившемся окне Data Source, щелкнув правой кнопкой мыши на значке vicDataSet, выберем пункт Configure Data Source With Wizard — Finish. Теперь из окна Server Explorer перетащим узел БД телефонов на появившуюся вкладку vicDataSet.xsd. Затем из окна Data Source перетащим узел БД телефонов на вкладку конструктора формы Form1.cs[Design]. Как видно из рис. 10.3, автоматически появилось несколько программных объектов, необходимых для отображения данных из таблицы базы данных.
Заметьте, мы пока не написали ни одной строчки программного кода. Теперь запускаем отладку программы — нажимаем клавишу <F5>.
Как видим (рис. 10.4), в форме благодаря элементам управления DataGridView и BindingNavigator появилось отображение таблицы из базы данных. Мы имеем возможность модифицировать существующие записи (строки), добавлять новые записи (New), удалять записи из таблицы (Delete), сохранять данные (Save Data) с помощью соответствующих кнопок. То есть имеем полный набор основных четырех функций по редактированию таблицы базы данных.
Рис. 10.3. Проект формы с объектами для отображения таблицы базы данных
Рис. 10.4. Фрагмент работы программы
Убедиться в работоспособности данной программы можно, открыв файл решения БД_SQL_Server2.sln в папке БД_SQL_Server2. Обратите внимание на то, что копия исходной базы данных Vic.sdf находится в папке проекта bin\Debug, именно этот файл претерпевает изменения при редактировании таблицы в данном проекте
Создание базы данных в среде MS Access
Вначале создадим базу данных (БД) vic.
// Программа, подготовив команды для решения системы уравнений в среде
// MATLAB, вызывает его на выполнение этих команд. В результате получаем
// решение, которое выводим на экран с помощью MessageBox
using System;
using System.Reflection;
using System.Windows.Forms;
// Другие директивы using удалены, поскольку они не используются в данной программе
namespace MatlabСЛАУ
{
public partial class Form1:Form
{ ^
public Form1()
{
InitializeComponent();
Button1.Text = "Решить СЛАУ";
}
private void button1_Click(object sender, EventArgs e)
{
//Матричное уравнение АХ = L решаем через
// обратную матрицу: X = A(-1)L.
// Здесь (-1) - "знак" обратной матрицы.
// Решаем систему
// XI + Х2 + Х3 = 6
// XI + Х2 =3
// Х2 + ХЗ = 5
// Для решения этой системы в MATLAB следует подать такие команды:
// А = [1 1 1; 1 1 0; 0 1 1]; L = [6; 3; 5];
// % здесь задание прямой матрицы А и вектора свободных членов L
// X = inv(A)*L % умножение обратной матрицы на L" };
//%- это признак комментария в MATLAB
// Получить тип приложения MATLAB:
Туре ТипМатЛаб = Type.GetTypeFromProgID("Matlab.Application");
// Создать экземпляр объекта типа MATLAB:
object МатЛаб = Activator.Createlnstance(ТипМатЛаб);
// Подготавливаем команды для MATLAB:
object[] Команды = new Object[]
{ "А = [1 1 1; 1 1 0; 0 1 1]; L = [6; 3; 5]; " + "X = inv(A)*L % обратная матрица inv" };
// Вызываем MATLAB, подавая ему на вход подготовленные команды:
object Результат = ТипМатЛаб.InvokeMember("Execute", BindingFlags.InvokeMethod, null, МатЛаб, Команды);
// Таким образом мы могли бы вывести решение на экран:
// MessageBox.Show(Результат.ToStringf));
// Однако этот результат будет внутри строки, а хотелось бы
// получить ответ в массив double для дальнейшей обработки.
// Этот массив можно получить методом GetFullMatrix из среды
// MATLAB, как показано ниже
var p = new ParameterModifier(4);
p[0] = false; p[1] = false; p[2] = true; p[3] = true; ParameterModifier[] mods = { p };
double[,] X = new double[3, 1];
object[] Аргументы = new object[] { "X", "base", X, new double[0] };
// Здесь "X" - это название матрицы, которую мы хотим получить.
// "base" является названием рабочей среды MATLAB, где следует
// искать матрицу "X".
Результат = ТипМатЛаб.InvokeMember("GetFullMatrix", BindingFlags. InvokeMethod, null, МатЛаб, Аргументы, mods, null, null);
// Решение системы получаем в матрицу X:
X = (double[,](Аргументы[2];
string Строка = string.Format("X1 = {0}; Х2 = {1}; Х3 = {2};", Х[0, 0] , Х[1, 0], Х[2, 0]);
MessageBox.Show(Cтрока);
}
}
}
Как видно из программного кода, подход к решению задачи аналогичен предущему примеру. Мы реализовали обращение к MATLAB, используя метод Execute, решение системы получили в переменную Результат. И, как показано в комментарии, можем вывести результат вычислений на экран с помощ
MessageBox. Однако для дальнейшей работы с полученным вектором неизвестных желательно иметь его в виде массива Double, а не в виде строки. Конечно, можно выделить из строки решения каждое значение неизвестного с помощью операций со строками, используя функцию Split, которая возвращает строковый массив, содержащий подстроки данного экземпляра.
Однако существует более красивое решение. Оно заключается в иcпoльзoвaнии метода GetFullMatrix. Технологию этого использования мы привели в данной программе. Здесь наиболее важным параметром является объектная переменная Аргументы. Ее первым компонентом является компонент "X", содержащий название матрицы, которую мы хотим получить из среды MATLAB, второй компонент "base" является названием рабочей среды (workspace) MATLAB, где следует искать матрицу "X". Согласно документации, в среде MATLAB мы имеем две основные рабочие среды: "base" и "global". Третьим компонентом является массив х, куда получаем результат решения из среды MATLAB, а четвертым компонентом массив мнимой части решения, которой в нашей задаче нет, но для общности технологии требуется ее формальное присутствие.
О других способах подключения к MATLAB можно узнать на сайте компании The Math Works, производителя MATLAB, www.mathworks.com. Убедиться в ботоспособности обсуждаемой программы можно, открыв решение MatlabCлay.sln в папке MatlabCлay.
ГЛАВА 10 Обработка баз данных с использованием технологии ADO.NET
Пример 63. Создание базы данных SQL Server
Покажем, как можно создать базу данных SQL Server в среде Visual Studio 2010. В этой простейшей базе данных будет всего одна таблица, содержащая сведения о телефонах ваших знакомых, т. е. в этой таблице будем иметь всего три колонки: Имя, Фамилия и Номер телефона.
Запустим Visual Studio 2010, закажем новый проект шаблона Windows Forms Аpplication С#, зададим имя — BД_SQL_Server. Далее непосредственно создадим новую базу данных SQL Server. Для этого в пункте меню Project выберем команду Аdd New Item (т. е. добавить новый элемент) и в появившемся одноименном окне укажем шаблон Local Database (локальная база данных), введем имя файла (в поле Name) Vic.sdf и последовательно щелкнем на кнопках Add, Next, Finish.
Теперь добавим таблицу в базу данных, для этого в пункте меню View выберем команду Server Explorer (Обозреватель баз данных). В обозревателе баз данных развернем узел (щелчком мыши) Vic.sdf и выберем Tables (Таблицы). Щелкнем правой кнопкой мыши на пункте Tables, а затем выберем пункт Create Table (Создать таблицу). Откроется окно New Table. Назовем новую таблицу (поле Name) БД телефонов. Заполним структуру таблицы, как показано на рис. 10.1. Нажмем кнопку ОК, чтобы создать таблицу и закрыть окно New Table. Чтобы исключить повторяющиеся записи (т. е. строки в таблице), следует научить первичные ключи (или ключевые столбцы). Ключевым столбцом назначачают столбец в таблице, который всегда содержит уникальные (неповторяющиеся в данной таблице) значения. Однако в нашей таблице могут быть люди с одинаковый именами или одинаковыми фамилиями, т. е. в нашей таблице в качестве перечных ключей следует использовать одновременно два столбца: столбец Имя и столбец Фамилия. Представьте себе, что у нас уже есть сотни записей в таблице, и при попытке ввести вторую строку, содержащую то же самое значение, появляется сообщение об ошибке. Это очень технологично, удобно!
Рис. 10.1. Формирование структуры новой таблицы
Чтобы добавить первичные ключи в таблицу, в
Server Explorer развернем yзел Tables. Далее щелкнем правой кнопкой мыши на нашей только что созданной таблице и выберем пункт Edit Table Schema, затем для полей Имя и Фамилия укажем для параметра Allow Nulls значение No, т. е. обяжем нашего пользователя всегда заполнять эти поля (ячейки таблицы). Далее для параметра Unique (Являются ли эти поля уникальными?) ответим No, поскольку и имена, и фамилии повторяются. И, наконец, назначим колонки Имя и Фамилия первичными ключами (Primari Key — Yes). Нажмем кнопку OK для сохранения этих настроек и закрытия okhа Edit Table - БД телефонов.
Теперь добавим данные в таблицу. Для этого в окне Server Explorer щелкнем правой кнопкой мыши на пункте БД телефонов и выберем команду Show Tabl Data. Откроется но данных таблицы, как показано на рис. 10.2, но только пока пустое.
Рис. 10.2. Заполнение ячеек таблицы
Далее заполним данную таблицу. Для нашей демонстрационной цели введем пять строчек в эту таблицу. После ввода в меню File выберите команду Save All длясохранения проекта и базы данных. Теперь убедитесь, что в папке проекта повился файл Vic.sdf. Его можно открыть вне проекта с помощью Microsoft Visual Studio 2010 для редактирования базы данных.
Пример базы данных можно найти в папке БД_SQL_Server.
Пример 64. Отображение таблицы базы данных SQL Server в экранной форме
Имея базу данных, например базу данных SQL Server, в виде файла Vic.sdf, созданного в предыдущем разделе, покажем, как очень легко можно вывести таблицу из этой базы в экранную форму.
Для этой цели запустим Visual Studio 2010, закажем новый проект шаблона Windows Application С# и укажем имя проекта — БД_SQL_Server2. Далее в меню View выберем команду Server Explorer. Щелкнув правой кнопкой мыши на значке Data Connections, добавим соединение — Add Connection, а в качестве источника данных Data source укажем Microsoft SQL Server Compact 3.5 и щелкнем на кнопке ОК. Далее, нажмем кнопку Browse, найдем созданный в прошлом проекте файл базы данных Vic.sdf и нажмем кнопку ОК. Теперь в окне Server Explorer мы видим значок базы данных Vic.sdf.
Далее в меню Data выберем команду Add New Data Source, тем самым мы запустим мастер
Data Source Configuration Wizard. Здесь последовательно нажимаем кнопки Next, Dataset, Next. На запрос мастера копировать ли файл Vic.sdf в наш текущий проект нажмем кнопку Да.
В результате в окне Solution Explorer появится значок базы данных Vic.sdf и значок объекта vicDataSet.xsd, но база данных в текущем проекте будет пустой. Для заполнения базы данных в меню Data укажем Show Data Source и в появившемся окне Data Source, щелкнув правой кнопкой мыши на значке vicDataSet, выберем пункт Configure Data Source With Wizard — Finish. Теперь из окна Server Explorer перетащим узел БД телефонов на появившуюся вкладку vicDataSet.xsd. Затем из окна Data Source перетащим узел БД телефонов на вкладку конструктора формы Form1.cs[Design]. Как видно из рис. 10.3, автоматически появилось несколько программных объектов, необходимых для отображения данных из таблицы базы данных.
Заметьте, мы пока не написали ни одной строчки программного кода. Теперь запускаем отладку программы — нажимаем клавишу <F5>.
Как видим (рис. 10.4), в форме благодаря элементам управления DataGridView и BindingNavigator появилось отображение таблицы из базы данных. Мы имеем возможность модифицировать существующие записи (строки), добавлять новые записи (New), удалять записи из таблицы (Delete), сохранять данные (Save Data) с помощью соответствующих кнопок. То есть имеем полный набор основных четырех функций по редактированию таблицы базы данных.
Рис. 10.3. Проект формы с объектами для отображения таблицы базы данных
Рис. 10.4. Фрагмент работы программы
Убедиться в работоспособности данной программы можно, открыв файл решения БД_SQL_Server2.sln в папке БД_SQL_Server2. Обратите внимание на то, что копия исходной базы данных Vic.sdf находится в папке проекта bin\Debug, именно этот файл претерпевает изменения при редактировании таблицы в данном проекте
Создание базы данных в среде MS Access
Вначале создадим базу данных (БД) vic.