Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Пособие СS_Шульга.doc
Скачиваний:
48
Добавлен:
12.02.2015
Размер:
703.49 Кб
Скачать

Intyear_tr;

//******Конструктор по умолчанию************************

public CStudent()

{

name = "Unknown";

speciality = "Unknown";

gender = gender_type.unknown;

year_tr = 0;

n++;

}

//*****Конструктор, задающий фамилию студента***********

public CStudent(string n): this()

{

if (name != "") name = n;

else name = "Unknown";

}

//***Конструктор, заполняющий все поля класса заданными параметрами**

public CStudent(string name, string speciality, gender_type gender, int year_tr)

{

if (name!="") this.name = name;

else this.name="Unknown";

if (speciality!= "") this.speciality = speciality;

else this.speciality = "Unknown";

if (Enum.IsDefined(typeof(gender_type), gender)) this.gender = gender;

/*Используется метод IsDefined класса Enum, который возращает истину, если второй парамерт принадлежит перечислению, указанному в качестве первого параметра*/

else throw new Exception("При создании студента пол указан неверно");

if (year_tr >=1 && year_tr <=5) this.year_tr = year_tr;

else throw new Exception("При создании студента курс обучения указан неверно. Значение должно быть интевале [1,5]");

n++;

}

//**Метод класса CStudent вывода полей объекта на экран***

public void output()

{

Console.Write("Name= {0} speciality={1}", name.PadRight(10, ' '), speciality.PadRight(20, ' '));

if (gender == gender_type.male) Console.Write("gender= {0}", "муж ".PadRight(10, ' '));

else if (gender == gender_type.female) Console.Write("gender= {0}", "жен ".PadRight(10, ' '));

else Console.Write("gender= {0}", "не указан ".PadRight(10, ' '));

Console.WriteLine("year= {0,2}", year_tr);

}

}//class CStudent

Обратите внимание, что конструктор с четырьмя параметра генерирует исключения, если неправильно указан пол или год обучения.

Этап 2.

Очевидно, чтобы проверить работу конструкторов необходимо создать объекты класса.

Так как разработка программы подразумевает демонстрацию ее многочисленных функций, то имеет смысл сразу разработать меню и тестировать создание объектов в одном из его пунктов. Меню разрабатывается в функции Main. Меню заключено в бесконечный цикл while, выход из которого осуществляется только в том случае, если пользователь выберет пункт меню «Выход», т.е. введет 0. Данный прием позволяет за один сеанс работы с программной протестировать различные ее функции. Можно указать сразу все пункты меню, как это сделано ниже, либо дописывать их по мере разработки программы. Реализация меню осуществляется с помощью конструкции swith-case. Код операторов case может быть заменен так называемыми заглушками, например, выводом на экран соответствующего сообщения, как это сделано в операторе case 2. Данные заглушки будут удалены после разработки соответствующей методов.

В ветви case 1 происходит создание трех разных объектов класса с помощью трех различных конструкторов и вывод этих объектов на экран.

class Class1

{

static void Main()

{

bool q = true;

while (q) //меню программы

{

Console.WriteLine("\nВыберите действие:\n");

Console.WriteLine("1 - Тестовое создание объектов класса Студент");

Console.WriteLine("2 - Тестовое использование свойств класса Студент и метода ввода");

Console.WriteLine("3 - Формирование нового списка студентов");

Console.WriteLine("4 - Добавление данных о студенте");

Console.WriteLine("5 - Вывод списка студентов на экран");

Console.WriteLine("6 - Поиск студентов с заданной специальностью");

Console.WriteLine("7 - Поиск студента с заданной фамилией");

Console.WriteLine("8 - Операция ++ и операция преобразования типа (int)" );

Console.WriteLine("0 - Выход\n");

try

{

int d = int.Parse(Console.ReadLine());

switch (d)

{

case 0:

{

q = false;

Console.WriteLine("Программа завершила работу."); break;

}

case 1:

{

Console.WriteLine("Количество созданных объектов =" + CStudent.n);

Console.WriteLine("\Демонстрируется работа трех конструкторов");

CStudent s1 = new CStudent();

s1.output();

CStudent s2 = new CStudent("Иванова");

s2.output();

CStudent s3 = new CStudent("Петрова", "Информатика", gender_type.female, 1);

s3.output();

Console.WriteLine("\nКоличество созданных объектов =" + CStudent.n);

break;

}

case 2: Console.WriteLine("\Демонстрируются свойства класса и метод ввода"); break;

case 3: break;

case 4: break;

case 5: break;

case 6: break;

case 7: break;

case 8: break;

default: Console.WriteLine("Ошибка ввода\n"); break;

}// switch(n)

}//try

catch (Exception e) { Console.WriteLine(e.Message); }

Console.WriteLine("Для продолжения нажмите Enter");

Console.ReadKey();

}//while

}//Main

}//class Class1

Этап 3. После того как проверена работа конструкторов можно перейти к описанию свойств класса. Добавим в классCStudent4 свойства для работы с 4 полями соответственно. Обратите внимание, что в данном примере имена свойств и полей, для доступа к которым они служить отличаются регистром первой буквы.

// *****************Cвойство для доступа к полю name*******************************

public string Name

{

get { return name;}

set

{

if (name == "Unknown")

{

if (value == "") name = "Unknown";

else name = value;

}

else throw new Exception("Фамилия студента задана и не может быть изменена данным способом");

}

}

// ***************Cвойство для доступа к полю speciality****************************

public string Speciality

{

get { return speciality;}

set

{

if (speciality != value)

{

if (value == "") speciality = "Unknown";

else speciality = value;

}

}

}

// ***************Cвойство для доступа к полю year********************************

public int Year

{

get {return year_tr; }

set

{ // способ установки свойства

if (value >= 1 && value <= 5)

{

year_tr = value;

}

else throw new Exception("При изменении курса студента указано недопустимое значение. Значение должно быть интевале [1,5]");

}

}

// ****************Cвойство для доступа к полю gender****************************

public gender_type Gender

{

get {return gender; }

set

{