- •Лабораторные работы по курсу «Современные технологии и инструментарий программирования»
- •1.Программирование двусвязного списка на c#
- •1.1.Задание
- •1.2.Выбор каркаса приложения
- •1.3.Описание вариантов заданий
- •2.Приложение wForms с DataGridView на c#
- •2.1.Задание
- •2.2.Описание вариантов заданий
- •2.3.Сценарий разработки приложения
- •2.4.Как (бесплатно) получить путь к приложению
- •If(System.Io.File.Exists(Path)) /*есть*/; else /*нет*/;
- •3.Доступ к серверу Excel на c#
- •Сценарий выполнения работы
- •4.Класс матриц c#
- •4.1.Задание
- •5.Ассоциативные массивы на c#
- •5.1.Задание вкупе с ценными методическими указаниями
- •If(MyArr.Add("Охорона студента від викладача", "Тугодумко Петро", Mark)) /* Слава Україні!*/; else /* Вибачте, маячня!*/;
- •If(MyArr.Add("Хвілосохвія", "Розумниця Настя", new int [] {2,3,2})) /* Сало понад усе!*/; else /* Пробачте, нісенітниця!*/;
- •5.2.Варианты заданий для ритейла
- •6.Приложение «Тараканьи бега» (wpf с#)
- •6.1.Задание
- •6.2.Рисование простейших фигур на холсте
- •10, // Задержка перед вызовом функции обр. Вызова
- •200 // Интервал вызова функции обр. Вызова
- •7.Разработка простейшего приложения Windows Forms на c#
- •7.1.Задание
- •7.2.Бесценные методические предписания
- •Литература
- •7. Проект New_Syntax
- •8. Руководство_по_c#.Doc
2.4.Как (бесплатно) получить путь к приложению
Можно использовать приведенный ниже код в любом месте программы, а не только в функции Main(). Ваша программулина будет стоить на 50% дороже (это не относится к баллам за л.р.), если при вызове команд меню Файл она будет в стандартном диалоговом окне сразу показывать путь к тому каталогу, из которого она запущена, или к другому подходящему на вкус потенциального юзера.
static void Main()
{
/* получаем полное имя нашего приложения, включая путь, в Path*/
String Path=Application.ExecutablePath; // первый способ
Path=Application.ExecutablePath.ToString(); // второй способ
/* Например, мы можем получить такой результат
Path=="C:\Temp\Test.exe", а нам очень хочется получить
полное имя другого файла, например "C:\Temp\Test.log"*/
Path=Path.Replace("Test.exe","Test.log"); /* получили
Path=="C:\Temp\Test.log" */
/* Другой способ, более надежный, может заключаться в последовательном
применении функций LastIndexOf('\\'), Remove и Concat. Он более
надежен потому, что имя вашего приложения (Test.exe) шпион или вирус
мог изменить. После получения нового имени файла полезно было бы
проверить его реальное существование:*/
If(System.Io.File.Exists(Path)) /*есть*/; else /*нет*/;
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
3.Доступ к серверу Excel на c#
Число ошибок, которые нельзя обнаружить, бесконечно, в противовес числу ошибок, которые можно обнаружить, - оно конечно по определению
Закон Мерфи
Цель работы – освоение технологии использования сервера автоматизации из приложения, разработанного на языке C#, на примере обработки данных и построения диаграмм с помощью Microsoft Office Excel 2003 (4час.).
В качестве дополнительных методических материалов рекомендую использовать:
естественно, MSDN. Русифицированные материалы из MSDN и другие по ссылке http://msdn.microsoft.com/;
интернет-источники, например, статью «Use Visual Studio 2008 C++/CLI to Automate Excel», которую можно найти по ссылке http://www.codeproject.com/KB/office/automate_excel.aspx;
файл справки по программированию взаимодействия с Excel на VBA. Для Microsoft Office Excel 2003 этот файл называется VBAXL10.CHM и расположен в каталоге C:\Program Files\Microsoft Office\OFFICE11\1049. В этом файле имеется объектная модель сервера Excel;
наконец, часто помогает включение записи макроса в Excel, выполнение требуемых действий «вручную» и последующего анализа текста записанного макроса. Этот подход помогает не только в случае с использованием Excel, но и других серверов, поддерживающих макросы и VBA.
Задание. Рекомендуемая последовательность выполнения работы:
Разработать приложение в соответствии с приведенным сценарием и кодом.
Выполнить самостоятельное задание.
Сценарий выполнения работы
Для того чтобы приведенный ниже сценарий разработки клиентского приложения привел к успеху, на компьютере необходимо, предварительно, установить некоторые библиотеки (по терминологии .NET сборки). Эти сборки содержатся в файле o2003PIA.EXE (как можно догадаться из имени файла, речь идет о версии Microsoft Office 2003). Более полную информацию ищи в разделе «Примеры программного кода для .NET Framework в MSDN» конспекта лекций.
Шаг 1. Создание каркаса приложения MyExcel.
Как обычно, выполните команду меню FileNew Project и в появившемся окне (рис. 1) выберите Visual C#CLR на вкладке Project types и CLR Console Application – на вкладке Templates. Рекомендую не устанавливать переключатель Create directory for solutions. Здесь и далее предполагается, что проект окрещен именем MyExcel. Нажмите ОК для завершения работы мастера. Постройте проект, запустите приложение на выполнение чтобы убедиться в том, что дальнейшие ошибки – ваши.
|
Рис. 1. Создание каркаса приложения
Шаг 2. Добавление ссылок (references) в проект. В CLR подключение к серверу автоматизации выглядит совсем не так, как в неуправляемом С++. В частности, здесь имеет место быть взаимодействие (interoperation – вы это слово дальше будете видеть неоднократно в именах сборок и пространствах имен) нашего приложения, написанного на С#, с неуправляемым кодом – в данном примере приложением Excel.exe. Естественно, что в конечном итоге из Excel.exe надо извлечь библиотеку типов, но выполняется это путем добавления ссылок (references) на требуемые файлы из окна свойств проекта.
На вкладке Solution Explorer выберите ветвь References (рис. 2). Обратите внимание на перечень ссылок в списке References – его мы и будем пополнять.
|
Рис. 2. Окно свойств проекта
Итак, вызываем для ветви References команду Add New Reference контекстного меню и в появившемся окне (рис. 3) выбираем вкладку СОМ, отыскиваем в длиннющем списке Excel.exe и наступаем на кнопарь ОК.
|
Рис. 3. Добавление ссылок приложения
Например, для версии Microsoft Office 2003 он расположен в папке C:\Program Files\Microsoft Office\OFFICE11. Выбираем Excel.exe и щелкаем по ОК. Если вам удалось попасть по кнопке, то в списке References появятся новые ссылки Excel и Microsoft.Office.Core.
Замечание. Возможно, что вам понадобится предварительно установить сборки, находящиеся в файле O2003PIA.EXE (для версии Microsoft Office 2003)
Подобным образом добавляем ссылку на файл VBE6EXT.OLB, который может находиться в папке C:\Program Files\Common Files\Microsoft Shared\VBA\VBA6, в результате чего в списке списке References появится имя Microsoft.Vbe.Interop, и закрываем окно свойств проекта, чтобы не было сквозняка.
Шаг 3. Поверьте на слово, что дальше в файл Program.cs надо добавить директивы использования пространств имен, приведенные ниже. Их лучше разместить вслед за using System.Text:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using Microsoft.Office.Interop.Excel;
Приложение должно компилироваться без ошибок – убедитесь в этом, но пока оно ничего полезного делать не будет.
Шаг 4. Запуск Excel. Добавьте в функцию Main() следующий примитивный код для того, чтобы убедиться в том, что Excel запускается на выполнение.
|
Шаг 5. Строим диаграмму в Excel. Приведенная ниже программа строит графики функций sin(x) и cos(x) для заданного диапазона изменения аргумента x. Результат работы программы приведен на рис. 4.
|
Рис. 4. Результат работы программы
Вот текст программы (файл Program.cs), которая продуцирует такой лист Excel, как на рис.4.
|
|
|
|
|
|
|
|
|
Приведенный текст не только полезно, но и необходимо набрать для лучшего усвоения нового материала.
Замечание. В процессе отладки программы вы можете сталкиваться с ситуацией, когда выполнение вашей программы завершается аварийно и сервер Excel при этом не был закрыт программой. В этом случае, даже когда вы завершите работу Excel принудительно, процессы Excel останутся запущенными в системе и их необходимо завершить с помощью диспетчера задач. Можно этого и не делать, если вас не смущает снижение производительности компа
Шаг 5. Задание для самостоятельной работы. На этом шаге у вас есть возможность проверить гипотезу (конечно же, научную!) о наличии или отсутствии связей между некоторыми абсолютно объективными статистическими данными. В качестве исходных данных можно использовать файлы ..\LabPrakt\STIP\ISVP_2012_13.xls и Рейтинг.jpg, в которых собраны некоторые статистические данные известно о ком. Для внесения весомого вклада в науку Вам предстоит отразить в графической форме зависимости, отраженные в следующей таблице.
Вариант |
Зависимости |
||
|
y1(x) |
y2(x) |
x |
1,7,13,20 |
количество баллов на модулях (сумма столбцов Q и R) |
результирующий балл на экзамене (столбец AB) |
число пропущенных лекций |
2,8,14,21 |
количество баллов, набранных за выполнение л.р. (столбец P) и на модулях (сумма) |
результирующий балл на экзамене |
число пропущенных лекций плюс число пропущенных л.р. |
3,9,15,22 |
рейтинговый балл (из Рейтинг.jpg) |
результирующий балл на экзамене |
число пропущенных лекций плюс число пропущенных л.р. |
4,10,16,23 |
количество баллов, набранных за выполнение л.р. (столбец P) |
итоговая сумма баллов (столбец U) |
число пропущенных лекций плюс число пропущенных л.р. |
5,11,17,24 |
результирующий балл на экзамене (столбец AB) |
рейтинговый балл (из Рейтинг.jpg) |
рост студента в см |
6,12,18,25 |
рост студента в см |
число пропущенных лекций плюс число пропущенных л.р. |
вес студента в кг |
Примечание: номер вашего варианта – это ваш сквозной номер по списку (столбец А в ISVP_2012_13.xls)
Как-то само собой ожидается, из соображений здравого смысла, что некоторые из зависимостей должны быть убывающими: например, чем больше число пропущенных часов, тем меньшее число набранных баллов. Тем не менее, эту гипотезу следует проверить, для чего необходимо построить соответствующие графики. Опять-таки, как говорят ученые что «и коню понятно», данные, до построения графиков, должны быть отсортированы в порядке возрастания (числа часов пропущенных лекций или л.р.). Или не обязательно? Результат работы программы может иметь вид, близкий к показанному на рис. 5.
|
Рис. 5. Результат работы программы, решающей поставленную задачу
Имя файла, обрабатываемого программой, удобно запросить с помощью объекта класса OpenFileDialog. Для того чтобы он стал доступен в консольном приложении, необходимо:
добавить ссылку на компонент (сборку) System.Windows.Forms (см. шаг 2 в этом сценарии);
подключить пространство имен using System.Windows.Forms (в файле Program.cs).
Когда вы это проделаете, то получите конфликт имен System.Windows.Forms.Application и Microsoft.Office.Interop.Excel.Application, который вам придется как-то решить.
Пример использования OpenFileDialog имеется в л.р. «Приложение WForms с DataGridView на C#».
