Файл: Справочник для опытных и как пособие для начинающих программистов. Компактдиск содержит исходные коды примеров из книги.doc

ВУЗ: Не указан

Категория: Не указан

Дисциплина: Не указана

Добавлен: 11.01.2024

Просмотров: 945

Скачиваний: 1

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.
ГЛАВА 7 Ввод и вывод табличных данных. Решение системы уравнений

Пример 44. Формирование таблицы. Функция String.Format

При создании инженерных, экономических и других приложений часто задача сводится к вводу данных, расчету (обработке введенных данных), а затем — выво­ду результатов вычислений в таблицу. В этом разделе мы обсудим такую типичную задачу: как оптимально сформировать таблицу, а затем вывести ее на экран с воз­можностью печати на принтере.

Чтобы выразительно показать именно процесс формирования таблицы, абстра­гируемся от ввода данных и расчетов и сосредоточимся только на сути. Например, пусть мы имеем информацию о телефонах наших знакомых, и нам хотелось бы представить эту информацию в виде наглядной таблицы. Предположим, что ре­зультаты обработки записаны в два массива: массив имен знакомых imena и массив телефонов Tel. Наша программа формирует таблицу из этих двух массивов в тек­стовом поле TextBox. Кроме того, в программе участвует элемент управления MenuStrip для организации раскрывающегося меню, с помощью которого пользо­ватель выводит сформированную таблицу в Блокнот (notepad.exe) с целью после­дующей корректировки (редактирования) и вывода на печать.

Таким образом, новый проект будет содержать форму, текстовое поле TextBox со свойством Multiline = true и меню MenuStrip. Текст программы представлен в листинге 7.1.

Листинг 7.1. Формирование таблицы

// Программа формирует таблицу из двух строковых массивов в текстовом поле,

// используя функцию String.Format. Кроме того, в программе участвует

// элемент управления MenuStrip для организации выпадающего меню,

// с помощью которого пользователь выводит сформированную таблицу

//в Блокнот с целью последующего редактирования и вывода на печать

using System;

using System.Windows.Forms;

// Другие директивы using удалены, поскольку они не используются в данной программе

namespace ТаблТxt

{

public partial class Form1:Form

{

public Form1()

{

InitializeComponent();

this.textBox1.Multiline = true;

this.textBox1.Size = new System.Drawing.Size(320, 216);

this.Text = "Формирование таблицы";

String[] Imena = {"Андрей - раб", "Света-X", "ЖЭК", "Справка по тел", "Александр Степанович", "Мама - дом", "Карапузова Таня", "Погода сегодня", "Театр Браво"};


String[] Tel = {"274-88-17","+38(067)7030356", "22-345-72", "009", "223-67-67 доп 32-67", "570-38-76", "201-72-23-прямой моб", "001", "216-40-22"};

textBox1.ScrollBars = ScrollBars.Vertical;

textBox1.Font e new System.Drawing.Font("Courier New", 9.0F);

textBox1.Text = "ТАБЛИЦА ТЕЛЕФОНОВ\r\n\r\n";

for (int i = 0; i <= 8; i++)

textBox1.Text += String.Format(

"{0, -21} {1, -21}", Imena[i], Tel[i]) + "\r\n";

textBox1.Text += "\r\nПРИМЕЧАНИЕ:" + "\r\пдля корректного отображения таблицы" +

"\r\nв Блокноте укажите шрифт Courier New";

// Запись таблицы в текстовый файл C:\Table.txt.

// Создание экземпляра StreamWriter для записи в файл

var Писатель = new System.10.StreamWriter(@"С:\Table_CS.txt", false

System.Text.Encoding.GetEncoding(1251));

// - здесь заказ кодовой страницы Win1251 для русских букв

Писатель.Write(textBoxl.Text);

Писатель.Close();

}

private void показатьТаблицуВБлокнотеТооlStripMenuItem_Click(object sender, EventArgs e)

{

try

{

System.Diagnostics.Process.Start("Notepad", @"C:\Table.txt");

}

catch (Exception Ситуация)

{ // Отчет об ошибках

MessageBox.Show(Ситуация.Message, "Ошибка", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);

}

}

private void выходToolStripMenuItem_Click(object sender, EventArgs e)

{ // Выход из программы:

this.Close();

}

}

}

Чтобы в текстовом поле TextBox таблица отображалась корректно, мы заказали шрифт Courier New. Особенность этого шрифта заключается в том, что каждый символ (буква, точка, запятая и др.) этого шрифта имеет одну и ту же ширину, как это было на печатающей машинке. Поэтому, пользуясь шрифтом Courier New, удобно строить таблицы. Таким же замечательным свойством обладает, например, шрифт Consolas.

Далее в пошаговом цикле for мы использовали оператор +=, он означает: сце­пить текущее содержание текстовой переменной textBox1.Text с текстом, пред­ставленным справа. Функция String.Format возвращает строку, сформированную по формату. Формат заключен в кавычки. Ноль в первых фигурных скобках озна­чает: вставить вместо нуля переменную Imena[i], а единица во вторых фигурных скобках— вставить вместо единицы строку Tel[i]. Число 21 означает, что длина строки в любом случае будет состоять из 21 символа (недостающими символами будут пробелы), причем знак "минус" заставляет прижимать текст влево. Символы "\r\n" означают, что следует начать текст с новой строки. Внешний вид таблицы в текстовом поле формы показан на рис. 7.1.

После формирования всех строк textBox1.Text записываем их в текстовый файл C:\Table.txt через StreamWriter с кодовой таблицей Windows 1251. Подроб­ное обсуждение этого фрагмента программы читатель может посмотреть в примере 24 (см. главу 4).


При выборе пользователем пункта меню Показать таблицу в Блокноте сис­тема создает событие, которое обрабатывается в соответствующей процедуре. Здесь вызываем программу операционной системы Блокнот (notepad.exe) для от­крытия файла C:\Table.txt (см. рис. 7.2).

Убедиться в работоспособности программы можно, открыв решение ТаблТхt.sIn в папке ТаблТхt.



Рис. 7.1. Таблица из двух массивов в текстовом поле.



Рис. 7.2. Просмотр созданной таблицы в Блокноте

Пример 45. Форматирование Double-переменных в виде таблицы. Вывод таблицы на печать. Поток String/Reader

Данная программа решает похожую задачу, однако в результате вычислении не строковые переменные string, а два массива переменных с двойной точностью Double. Например, пусть в результате расчетов получены координаты точек на местности Xи Y. Эти координаты необходимо оформить в виде таблицы. Таблицу следует назвать "Каталог координат". Координаты в таблице должны быть округлены до 2-х знаков после запятой. Сформированную таблицу следует показать пользователю в тексховом поле TextBox. Далее надо организовать возможность распечатать таблицу на принтере. Заметьте, что в этой задаче мы решаем проблемы без использования Блокнота.

Для решения этой задачи, также как и в предыдущем разделе, в форме с помо­щью панели элементов управления Toolbox создадим текстовое поле TextBox, выберем элементы управления MenuStip и PrintDocument. На вкладке Design под­готовим пункты меню Печать и Выход так, как показано на рис. 7.3. Непосред­ственно текст программы представлен в листинге 7.2.

Листинг 7.2. Формирование таблицы и вывод ее на печать

// Программа формирует таблицу на основании двух массивов переменных

// сдвойной точностью. Данную таблицу программа демонстрирует пользователю

//в текстовом поле TextBox. Есть возможность распечатать таблицу на принтере

using System;

using System.Windows.Forms;

// Другие директивы using удалены, поскольку они не используются в данной программе

namespace TablTxtPrint

{

public partial class Form1:Form

{

System.IO.StringReader Читатель;

public Form1()

{

InitializeComponent();

this.Text = "Формирование таблицы";

Double[] X = {5342736.17653, 2345.3333, 234683.853749, 2438454.825368, 3425.72564, 5243.25, 537407.6236, 6354328.9876, 5342.243};


Double[] Y = {27488.17, 3806703.356, 22345.72, 54285.34, 2236767.3267, 57038.76, 201722.3, 26434.001, 2164.022};

textBox1.Multiline = true;

textBox1.ScrollBars = ScrollBars.Vertical;

textBox1.Font = new System.Drawing.Font("Courier New", 9.0F);

textBox1.Text = "КАТАЛОГ КООРДИНАТ\r\n";

textBox1. Text += " \r\n";

textBox1.Text += "|Пункт| X | У |\r\n";
textBox1. Text += " - \r\n";

for (int i = 0; i <= 8; i++)

textBox1.Text += String.Format(

"I {0,3:D} I {1,10:F2} | {2,10:F2} |", i, X[i], Y[i]) + "\r\n".
textBox1. Text += " \r\n";

}

private void печатьToolStripMenuItem_Click(object sender, EventArgs e)

{ // Пункт меню "Печать"

try

{ // Создание потока Читатель для чтения из строки:

Читатель = new System. IO.StringReader(textBox1.Text) ;

try

{ printDocumentl.Print(); }

finally

{ Читатель.Close(); }

}

catch (Exception ex)

{ MessageBox.Show(ex.Message); }

}

private void выходToolStripMenuItem_Click(object sender, EventArgs e)

{ // Выход из программы this.Close();

}

}

}

Как видно, формирование таблицы также происходит в цикле for с помощью функции String.Format. В фигурных скобках числа 0, 1 и 2 означают, что вместо фигурных скобок следует вставлять переменные i, x[i], y[i]. Выражение "3:D означает, что переменную i следует размещать в трех символах по формату целых переменных "D". Выражение "10:F2" означает, что переменную x(i) следует раз­мещать в десяти символах по фиксированному формату с двумя знаками после за­пятой.

При обработке события "щелчок на пункте меню" Печать (см. рис. 7.3) в бло­ках try.. .finaiy.. .catch создаем поток читатель, однако не для чтения из фай­ла, а для чтения из текстовой переменной textBox1.Text. В этом случае мы обра­щаемся с потоком Читатель так же, как при операциях с файлами, но совершенно не обращаясь к внешней памяти (диску). Поэтому организация многостраничной печати остается абсолютно такой же, как в примере 29 (см. главу 4).

Как видно из приведенной программы, для того чтобы просмотреть, откоррек­тировать и распечатать на принтере таблицу (инженерных или экономических вы­числений), совершенно необязательно записывать эту таблицу в текстовый файл И читать его Блокнотом.



Рис. 7.3. Вывод таблицы в текстовое поле

Убедиться в работоспособности программы можно, открыв соответствующее решение в папке ТаблТхtPrint.

Пример 46. Вывод таблицы в Internet Explorer

Приведем несколько необычный подход к выводу таблицы для целей ее про­смотра и распечатывания на принтере. Запишем таблицу в текстовый файл в фор­мате
HTML, затем прочитаем ее с помощью обозревателя (браузера) Web-страниц Internet Explorer. HTML (HyperText Markup Language, язык гипертекстовой размет­ки)— специальные инструкции браузеру, с помощью которых создаются Web-страницы. То есть Web-страницы — это документы в формате HTML, содержащие текст и специальные теги (дескрипторы) HTML. По большому счету теги HTML необходимы для форматирования текста (т. е. придания ему нужного вида), кото­рый "понимает" браузер. Документы HTML хранятся в виде файлов с расширением htm или html. Теги HTML сообщают браузеру информацию о структуре и особен­ностях форматирования Web-страницы. Каждый тег содержит определенную инст­рукцию и заключается в угловые скобки (<>).

Приведем пример простейшей таблицы, записанный на языке HTML (лис­тинг 7.3).

Листинг 7.3. Представление таблицы на языке HTML





Таблица телефоновсарtiоn>

Aндрей - pa6 274-88-17

Cвета - X +38 (067) 7030356

ЖЭК 22-345-72

Cпpaвкa no Teл 009



Вообще говоря, если строго придерживаться правил языка HTML, то сначала следует написать теги <html>, <head>, <title> и т.д. Однако современные браузеры понимают и такую разметку, которая приведена в листинге 7.3. В нашем примере даже не указан ни один закрывающий тег для <tr> (тег, задающий строку в таблице) и для <td> (тег, задающий ячейку в таблице). Очень полезно будет читатели набрать приведенный нами пример в Блокноте, как-нибудь назвать этот файл с расширением htm и открыть его в каком-либо браузере Internet Explorer, MoziU Firefox или другом обозревателе. Также поучительно открыть этот файл в редакторе HTML Microsoft Office FrontPage и проследить, как меняется HTML форматирование при тех или иных изменениях, сделанных в таблице.

Наша программа имеет данные, уже знакомые читателю из примера 44. Эти данные находятся в двух массивах: Imena и Tel. На основании этих двух массивов программа формирует таблицу в формате HTML, т. е. создает текстовый файл (в нашей программе он называется C:\Tab1_tel.htm), а затем открывает этот файл браузером Internet Explorer. Текст программы приведен в листинге 7.4.

Листинг 7.4. Вывод таблицы в Internet Explorer

// Вывод таблицы в Internet Explorer. Здесь реализован несколько необычный