- •Глава 1. Структура программы на языке с# 6
- •Глава 1. Структура программы на языке с#
- •Задание 1. Вывод строки на экран с использованием esp-последовательности
- •Глава 2. Переменные. Основные типы данных
- •Int.MinValue
- •Задание 2. Описание переменных и преобразование типов
- •Глава 3. Ввод – вывод значений переменных
- •Задание 3. Форматирование вывода
- •Глава 4. Обработка исключительных ситуаций
- •Задание 4. Обработка стандартных исключений
- •Задание 5. Генерация исключений
- •Глава 5. Массивы в c#
- •Initially,
- •Integer array: 1 2 3 4 5
- •Integer array: 1 2 3 4 5
- •Integerarray: 1 2 3 29 30
- •Задание 6. Одномерные массивы
- •Задание 7. Многомерные массивы и массивы массивов
- •Глава 6. Символы и строки
- •If (char.IsLetter(a)) Console.WriteLine("Буква");
- •Задание 8. Работа со строками
- •Глава 7. Описание классов
- •Int m, n;// числитель и знаменатель
- •Пример решения задачи
- •Intyear_tr;
- •If (Enum.IsDefined(typeof(gender_type),value))
- •Int year_tr;
- •If (Enum.IsDefined(typeof(gender_type),value))
- •Задание 9. Описание классов
- •Глава 8. Наследование
- •Задание 10. Наследование
- •Глава 9. Итерфейсы
- •Interface iOutput
- •Void outputName();
- •Interface iOutput
- •Void outputName();
- •If ( a is iOutput )
- •Interface iComparable
- •Int CompareTo( object obj )
- •Задание 11. Стандартные интерфейсы.
- •Глава 10. Файлы
- •Задание 12. Работа с файлами
- •Список использованных источников
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
{