Ограничения при использовании структур 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Ограничения при использовании структур



­ Поля структур не могут инициализироваться при объявлении.

­ Для структур запрещено объявление конструктора по умолчанию (его предоставляет среда). При этом поля структуры инициализируются значениями по умолчанию.

­ Для структур могут быть заданы параметризированные конструкторы, при этом в теле такого конструктора должны быть проинициализированы все поля структуры, иначе компилятор вернет ошибку.

­ Объекты структур можно создавать без использования оператора new, хотя при попытке его немедленного использования компилятор сообщит об ошибке.

­ Структура не может иметь деструктор.

struct firstStructure

{

public int field1 = 10; // Ошибка

public double field2;

public string field3;

 

public firstStructure() // Ошибка

{

field1 = 0;

field2 = 2.5;

field3 = “Это моя первая структура”

}

 

public firstStructure(double x) // Ошибка

{

field2 = x;

}

 

}

 

static void Main()

{

firstStructure S1;

Console.Write(S1.field1); // Ошибка, поле не проинициализировано

S1.field1 = 10

Console.Write(S1.field1); // 10

firstStructure S2 = new firstStructure();// Вызов системного конструктора

                                             по умолчанию

Console.Write(S1.field1); // 0

}

 

Практический пример

 

Рассмотрим пример структуры, содержащей сведения о сотрудниках предприятия: табельный номер, фамилия, имя, отчество, возраст, пол, домашний адрес.

 

public struct PData

{

public long TabNom;

public string Surname;

public string Firstname;

public string Lastname;

public byte Age;

public string Pol;

public string Adress;

}

 

static PData InputData()

{

PData s;

Console.WriteLine("Введите поля новой записи:");

Console.Write("Табельный номер:");

s.TabNom = Convert.ToUInt32(Console.ReadLine());

Console.Write("Фамилия:\t");

s.Surname = Console.ReadLine();

Console.Write("Имя:\t\t");

s.Firstname = Console.ReadLine();

Console.Write("Отчество:\t");

s.Lastname = Console.ReadLine();

Console.Write("Возраст (лет):\t");

s.Age = Convert.ToByte(Console.ReadLine());

Console.Write("Пол (М/Ж):\t");

do

s.Pol = Console.ReadLine();

while ((s.Pol!=”М”)&&(s.Pol!=”Ж”))

Console.Write("Адрес:\t\t");

s.Adress = Console.ReadLine();

Console.WriteLine();

return s;

}

 

void Main()

{

int n = 35;

PData [] d = new PData[n];

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

d[i] = InputData();

}

 

Рассмотрим пример организации цикла, в теле которого осуществляется ввод новой записи и сохранение ее в файл. Признаком прекращения дальнейшего ввода служит нажатие клавиши «минус». Блок-схема метода Main() показана на рис. 5.

 

 

Рисунок 5. Блок-схема метода обработки структуры данных

 

Команда для чтения юникода нажатой клавиши и его явное преобразование в ASCII-код (аргумент true метода ReadKey подавляет вывод на консоль символа нажатой клавиши, возвращаемого свойством KeyChar этого метода):

 

byte n = Convert.ToByte(Console.ReadKey(true).KeyChar);

 

ASCII-коды некоторых функциональных клавиш:

TAB           9

ENTER      13

ESC        27

SPASE      32

 

Задание

 

1. Составить программу на языке C# для обработки данных с помощью статических структур. В программе предусмотреть:

­ создание структурного типа PData для хранения заданного набора данных (см. табл. 11) и объявление структурной переменной типа PData;

­ создание файла данных с расширением. txt; имя которого следует предварительно запросить с клавиатуры;

­ создание пользовательской функции static PData InputData() для инициализации структурной переменной данными, введенными с клавиатуры (перед вводом очищать консоль);

­ создание пользовательской функции static void SaveData(PData s, StreamWriter fs) для добавления записи s в файл, представленный потоком fs;

NB: Запись должна выводиться в одну строку в виде значений полей (без подписей), разделенных пробелами или символами табуляции.

­ организацию цикла для выполнения заданного запроса действий пользователя (см. табл. 11), а также ввода новой записи (вызов функции InputData) и сохранения ее в файл (вызов функции SaveData);

­ вывод сообщения о полном имени файла с данными и о количестве сохраненных в него записей.

2. Разработать модульный тест для ручного тестирования функции SaveData с сохранением результатов проверки корректности работы функции в файл test.log. Код теста оформить в виде пользовательской функции UnitTest(string s, string source_file_name).

3. Разработать блок-схемы алгоритмов метода Main, функций InputData и SaveData.

4. В отчете представить: листинг программы, листинг метода тестирования, блок-схемы алгоритмов, распечатку полученного файла данных, выводы по работе.

 

Таблица 11. Варианты индивидуальных заданий

№ вар. Набор данных Запрос действий пользователя
1 Каждая запись по штатному расписанию предприятия содержит следующие данные: номер цеха, фамилию и инициалы, профессию, разряд, стаж работы. Для ввода следующей записи нажмите +
2 Сводки о выполнении плана содержат шифр продукции, наименование продукции, единицы измерения, план, фактическое выполнение. Чтобы завершить ввод сводок, нажмите Escape
3 Экзаменационная сводная ведомость содержит номер зачетной книжки, фамилию и инициалы, оценку по четырем дисциплинам. Для ввода следующей ведомости нажмите пробел
4 Записи о работающих с почасовой формой оплаты: номер цеха, табельный номер, фамилию и инициалы, размер ставки за час, количество отработанных часов. Для добавления следующей записи нажмите Enter
5 Сведения о пациентах: фамилия, имя, отчество, год рождения, пол, дата поступления, диагноз, номер палаты, дата выписки. Чтобы прекратить ввод, нажмите пробел, иначе – любая клавиша
6 Сведения о сотрудниках вуза: фамилия, имя, отчество, факультет, кафедра, ученая степень, ученое звание, занимаемая должность, год рождения, пол, домашний адрес. Чтобы добавить данные о новом сотруднике, введите 1
7 Сведения о квартиросъемщиках: фамилия, имя, отчество, полный адрес, площадь квартиры (полная и полезная), количество комнат, количество проживающих в квартире человек. Для завершения ввода данных о квартиросъем­щиках введите 0
8 Сведения об автомобилях включают следующие данные: страна изготовитель, марка, мощность, год выпуска, первоначальная цена.   Если хотите добавить сведения об автомобиле, то нажмите Enter
9 Сведения о книгах: наименование книги, автор, год издания, количество страниц, издательство, цена. Чтобы ввести данные об очередной книге, нажмите пробел
10 Сведения о товарах, поступивших на склад, включающие: шифр, наименование товара, наименование поставщика, единицы измерения, стоимость одной единицы без НДС, количество. Чтобы завершить приходование товаров, нажмите Escape

 

Лабораторная работа №8

 

Тема: Использование классов.

 

Цель: изучение понятия класса, конструктора, деструктора и метода, а также особенностей организации программы с использованием классов.

 

Теоретические положения

Уровни доступа

В языке C# доступ для членов класса регулируется несколькими способами:

public Общий (неограниченный) доступ
protected Доступ ограничен в пределах данного класса и классов, производных от данного
internal Доступ ограничен сборкой, в которой находится данный класс
protected internal Доступ ограничен в пределах данного класса и классов, производных от данного, или доступ ограничен сборкой, в которой находится данный класс
private Доступ ограничен в пределах данного класса

 

Доступом по умолчанию является private.

 

Доступ для классов верхнего уровня (классов, не вложенных в другие классы) ограничивается модификаторами internal и public (по умолчанию: internal).

Модификатор доступа, должен появляться перед каждым отдельным полем или методом (иначе данный элемент будет иметь уровень доступа private).

 

Поля класса могут иметь модификатор readonly, который означает, что значение данной переменной класса может либо быть задано сразу, либо в конструкторе (см. ниже), и в дальнейшем ее значение изменяться не может.

 



Поделиться:


Последнее изменение этой страницы: 2021-09-26; просмотров: 96; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.149.251.154 (0.009 с.)