4. Порядок выполнения работы. 5. Содержание отчета. Лабораторная работа № 4. Использование классов для работы с массивами данных
4. Порядок выполнения работы В главном меню системы программирования выберите команду File New Project или щелкните на соответствующей инструментальной кнопке. В окне New Project выберите пункт Console Application и щелкните на кнопке OK. В открывшемся окне в соответствии с вариантом задания напишите программу, использующую принципы наследования классов.
5. Содержание отчета 5. 1 Тема и цель работы. 5. 2 Текст программы. 5. 3 Результаты выполнения программы. Лабораторная работа № 4 Использование классов для работы с массивами данных
1. Цель работы. Получение навыков в разработке программ с использованием классов для создания, хранения и работы с массивами данных.
2. Общие сведения Массивы представляют собой упорядоченные структуры, содержащие множество данных одного и того же типа. Упорядоченность массива позволяет обращаться к отдельному его элементу с помощью индекса — целочисленного выражения, определяющего положение элемента в массиве. Как и в других С-подобных языках, в С# самый первый элемент массива имеет индекс 0. Массивы относятся к ссылочным типам, поэтому должны иницилизироваться при помощи оператора new. Для описания массива нужно указать квадратные скобки за именем типа данных. При этом тип данных определяет тип хранящихся в массиве данных:
int[] arrInt; //Целочисленный массив
Объявление массива еще не создает объект, который можно использовать в программе. Для иницилизации массива следует указать количество его элементов:
arrInt = new int[25]; //Массив содержит 25 целых чисел
При иницилизации массива ему выделяется нужная память, а элементы массива получают значение 0, которое трактуется в зависимости от типа элементов. После иницилизации массив готов к работе.
Разумеется, можно объявлять массив и одновременно иницилизировать его:
int[] arrInt = new int[25]; Более того, можно одновременно с созданием массива наполнить его нужными значениями:
int[] arrInt = new int[3] {1, 2, 3};
Если какой-то член класса оформлен в виде массива, с помощью средств языка можно создать для этого члена индексатор, позволяющий обращаться к отдельным элементам члена, как к элементам массива — с помощью квадратных скобок. Создание индексатора не составляет большого труда: для этого в классе следует создать специальное свойство с помощью конструкции this[]. В примере программы создаются 2 класса: класс-контейнер queues, предназначенный для хранения множества элементов, и класс queue, содержащий параметры одного элемента. Свойство queues. queue является индексатором.
using System; namespace Project4 { class queue { string str; int integer; public queue(string str, int integer) { this. str=str; this. integer=integer; } class queues { queue[] Queues = new queue[10]; public queue this [int pos] { get {if (pos > =0 || pos< 10) return Queues[pos]; else throw new IndexOutOfRangeException(" Вне диапазона! " ); } set {Queues[pos] = value; } } } static void Main() { queues A = new queues(); A[0] = new queue(" Номер в очереди: ", 1); A[1] = new queue(" Номер в очереди: ", 2); for (int i = 0; i < 2; i++) {Console. Write(A[i]. str); Console. WriteLine(A[i]. integer); } Console. ReadLine(); } } }
3. Постановка задачи Создать объекты класса < имя класса> (класс и его поля задаются в соответствии с выбранным вариантом в лабораторной работе 1), причем объекты класса должны хранить массивы данных о предметной области, связанные со свойствами предмета задания по варианту. Причем количество элементов массива должно задаваться программно пользователем в интерактивном режиме.
4. Порядок выполнения работы В главном меню системы программирования выберите команду File New Project или щелкните на соответствующей инструментальной кнопке. В окне New Project выберите пункт Console Application и щелкните на кнопке OK. В открывшемся окне в соответствии с вариантом задания напишите программу, использующую созданные вами объекты.
5. Содержание отчета 5. 1 Тема и цель работы. 5. 2 Текст программы. 5. 3 Результаты выполнения программы. Лабораторная работа № 5 Сохранение текущего состояния объектов в файлах
1. Цель работы. Получение навыков в разработке программ с использованием файлов, сохранения информации в них и работы с ними.
2. Общие сведения При разработке приложений часто возникают две в общем случае схожие задачи: сохранить (прочитать) содержимое данных (файла) и сохранить (прочитать) текущее состояние объекта в файле или таблице базы данных. Несмотря на несомненную схожесть указанных задач, для решения каждой из них предусмотрены свои классы. Техника работы с файлами зависит от типа файла (текстовый или двоичный). При работе с текстовыми файлами сначала создается поток класса FileStream. Данные записываются в файл с помощью вспомогательного объекта класса StreamWriter, а читаются объектом класса StreamReader. При создании объекта FileStream ему передаются имя файла и два параметра: FileMode, определяющий способ создания потока, и FileAccess, регулирующий доступ потока к данным. Таблица1. Значение параметра FileMode
Таблица2.
Значение параметра FileAccess
Для потока существует понятие текущей записи — в эту запись помещаются данные и из нее они считываются. Положением текущей записи можно управлять с помощью метода Seek(), имеющего такую сигнатуру:
public virtual long Seek (int Offset, SeekOrigin Origin);
Здесь Offset — смещение относительно позиции, указанной параметром Origin. Таблица3. Значение параметра SeekOrigin
Физическая запись данных в файл реализуется в момент закрытия потока методом Close() или выталкиванием записей из промежуточного буфера методом Flush(). Во втором случае поток не закрывается и готов к продолжению операций. Обработка двоичных файлов во многом подобна обработке текстовых: сначала создается поток, затем — объекты BinaryWriter или BinaryReader в зависимости от направления передачи данных (в файл или из файла). C# поддерживает интересную технологию сохранения текущего состояния объекта на некотором носителе информации. Эта технология называется сериализацией объекта. Сериализованный объект может быть, например, передан по сети на другой компьютер и там восстановлен в первоначальном состоянии — этот процесс называется десериализацией. Особенностью сериализации является то, что ее можно применять к классам, поддерживающим эту процедуру. Для этого класс должен объявляться с атрибутом [Serializable] или в его объявлении должно быть явное указание на то, что он исполняет интерфейс ISerializable. Лишь относительно небольшое количество (менее 40) стандартных классов реализуют данный интерфейс. Это, в основном, классы, используемые как хранилища данных.
Следующий пример иллюстрирует данную технологию.
using System; using System. IO; using System. Runtime. Serialization. Formatters. Binary;
namespace Project5 { [Serializable] class queue { private int q=50; private char[] arrchar= new char[4] {'a', 'b', 'c', 'd'}; public int p; public char ch; } [Serializable] class queue1: queue { private int r = 50; public new int q=50; public new char[] arrchar= new char[4] {'e', 'f', 'g', 'h'}; public queue1() {} public queue1(int q, int i) { p = q*r; ch = arrchar[i]; } }
class Executer { [STAThread] static void Main() { queue1 a = new queue1(); queue1 b = new queue1(50, 2); queue1 c = new queue1(500, 1);
FileStream fs; fs = new FileStream (" File_queue. bin", FileMode. Create, FileAccess. Write); BinaryFormatter sw = new BinaryFormatter(); sw. Serialize(fs, b); sw. Serialize(fs, c); fs. Close();
fs = new FileStream (" File_queue. bin", FileMode. Open, FileAccess. Read); long i=0, j = fs. Length/231; //231 — количество байт занимаемых одним объектом класса queue1
while (i < j) { a = (queue1) sw. Deserialize(fs); Console. WriteLine(a. p); Console. WriteLine(a. ch); i++; } fs. Close(); Console. ReadLine(); } } }
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|