- •Глава 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. Работа с файлами
- •Список использованных источников
If (Enum.IsDefined(typeof(gender_type),value))
{
gender = value;
}
else gender = gender_type.unknown;
}
}
Все свойства для получения значения (get) поля используют одинаковый код - оператор return имя_поля. Установка значений полей (set) в каждом из свойств реализуется по-разному. Например, фамилию студента разрешается устанавливать только если она равна «Unknown». Если поля фамилия и специальность сделана попытка присвоить пустую строка, то они заполняются строкой «Unknown». Полю year_trможно присвоить только значение от 1 до 5,.а полюgenderтолько значения типаgender_type.
После того как описаны свойства можно их использовать для определения метод ввода полей объекта с клавиатуры.
//***Метод класса CStudent ввода полей объекта на экран***
public void input()
{
Console.WriteLine("Введите ФИО студента");
Name = Console.ReadLine();
Console.WriteLine("Введите специальность");
Speciality = Console.ReadLine();
Console.WriteLine("Введите пол (1-муж, 2 - жен)");
int g = int.Parse(Console.ReadLine());
switch (g)
{
case 1: Gender = gender_type.male; break;
case 2: Gender = gender_type.female; break;
default: Gender = gender_type.unknown; break;
}
Console.WriteLine("Введите номер курса ");
Year = int.Parse(Console.ReadLine());
}
Теперь можно заменить заглушку в ветви case2, например, следующим кодом.
case 2:
{
Console.WriteLine("Для демонстрации свойств класса и метода вывода создайте студента");
CStudent s = new CStudent();
s.input();
Console.WriteLine("Создан студент:");
Console.WriteLine("{0}, {1}, {2}, {3}", s.Name, s.Speciality, s.Gender, s.Year);
s.Name = "Иванов";
s.Speciality = "Математика";
s.Year++;
s.Gender = gender_type.male;
Console.WriteLine("\nДанные студента изменены: ");
Console.WriteLine("{0}, {1}, {2}, {3}", s.Name, s.Speciality, s.Gender, s.Year);
break;
}
Вводя различные данные в качестве полей студента можно протестировать различные ветви свойств.
Этап 4.Перейдем непосредственно к разработке основных функций демонстрационной программы, а именно следующих функций.
начальное формирование массива из N20 объектов класса (ввод с клавиатуры или из заданного массива);
добавления объекта в массив;
вывод элементов массива на экран.
Прежде всего в функции Mainнеобходимо создать массив объектов.
const int N = 20; //максимально возможное количество студентов
static int k = 0; // количество студентов в массиве
static CStudent[] students = new CStudent[N];// массив из N студентов
Для заполнения массива целесообразно сначала написать метод добавления его в массив, протестировать его, а затем использовать его в цикле для начального формирования массива.
Опишем метод add(); в том же классе, что и методMain
//***********Метод добавления студента в массив на k-ое место********************
static void add()
{
if (k < N)
{
students[k] = new CStudent();
(students[k]).input();
k++;
}
else Console.WriteLine("\nНевозможно добавить студента. Массив заполнен");
}
Соответственно вызов данного метода осуществим в ветви case 4.
case 4: { add(); break; }
Ддя тестирования данного метода опишем метод вывода элементов массива на экран.
//**********Функция вывода массива на экран**************
static void output()
{
if (k == 0) Console.WriteLine("Нет студентов в списке");
else
for (int i=0; i<k; i++)
students[i].output();
}
Соответственно вызов данного метода осуществим в ветви case 5.
case 5: { output(); break; }
После того, как Вы убедились, что данный метод работает корректно, можно перейти к описанию метода начального формирования массива, у которого две ветви - введение элементов с клавиатуры и формирование массива на основе заданного.
//*****************Метод формирования массива студентов************************
static void new_array()
{
Console.WriteLine("Будуте вводить данные с клавиатуры(y/n)? ");
char s = (char)Console.Read(); Console.ReadLine();
if (s == 'y' || s == 'Y')
{
Console.WriteLine("Введите количество студентов <" + N);
int n = int.Parse(Console.ReadLine());
for (int i = 1; i <= n; i++) add();
Console.WriteLine("\nФормирование списка завершено");
}
else
{
CStudent[] ar = {
new CStudent ("Петров", "Информатика", gender_type.male, 1),
new CStudent ("Сидоров", "Экономика", gender_type.male, 2),
new CStudent ("Уткин", "Математика", gender_type.male, 1),
new CStudent("Иванова", "Информатика", gender_type.female, 3),
new CStudent ("Антонова", "Информатика", gender_type.female, 1),
new CStudent ("Макаров", "Информатика", gender_type.male, 1)
};
k = ar.Length; // количество элементов в массиве
for (int i = 0; i < k; i++) students[i] = ar[i];
Console.WriteLine("\nСписок студентов сфорирован из заданного массива");
}
}
Соответственно вызов данного метода осуществим в ветви case 3.
case 3:
{
if (k == 0) new_array();
else Console.WriteLine("Список уже сформирован, Вы можете только добавить студента");
break;
}
Этап 5.После формировании массива можно написать статический метод класса, поиск студента с заданной фамилией в массиве студентов, а также функцию демонстрационной программы: вывод всех студентов с заданной специальностью
Сначала определим метод демонстрационной программы
static void find(string s)
{
if (k == 0) Console.WriteLine("Поиск невозможен, т.к. в списке нет студентов");
else
{
bool f=false;
for (int i=0; i<k; i++)
if (students[i].Speciality == s) { students[i].output(); f=true;}
if (f==false) Console.WriteLine("\nВ списке нет студентов со специальностью "+s);
}
}
Протестируем его в ветви case 6.
case 6:
{
Console.WriteLine("\nВведите название специальности: ");
string s = Console.ReadLine();
find(s);
break;
}
Затем опишем метод класса CStudent
// ***********Статический метод класса, возвращающий студента с заданной фамилий n, найденного в массиве ar из k элементов********
public static CStudent find (CStudent [] ar, int k, string n)
{
if (k== 0) throw new Exception("\nВ списке нет студентов");
for (int i=0; i<k; i++)
if (ar[i].Name == n) return ar[i];
throw new Exception ("\nВ списке нет студентов со специальностью "+n);
}
Тестирование данного метода осуществим в ветви case 7.
case 7:
{
Console.WriteLine("\nВведите фамилию студента, данные о котом Вы хотите найти ");
string s = Console.ReadLine();
CStudent.find(students,k, s).output();
break;
}
Этап 6. Опишем все остальные методы классаCStudent, а именно операцию ++ и операцию предобразования типа.
// *********Переопределенная операция явного приведения типа CStudent к типу int*****
public static explicit operator int (CStudent s)
{
return s.year_tr;
}
// ******Переопределенная операция ++ - перевод студента на следующий курс**********
public static CStudent operator ++ (CStudent s)
{
s.Year++;
return s;
}
Протестируем данные операции в ветви case 8.
case 8:
{
Console.WriteLine("Для демонстрации свойств класса и метода вывода создайте студента");
CStudent s = new CStudent();
s.input();
Console.WriteLine("\nСоздан студент:");
s.output();
Console.WriteLine("\nCтудент переведен на следующий курс:");
s++;
s.output();
Console.WriteLine("\nКурс студента:"+(int)s);
break;
}
Приведем полный текст программы
using System;
namespace ConsoleApplication1
{
enum gender_type { male, female, unknown };
class CStudent
{
//*********************Поля класса CStudent***************************************
static public int n = 0;
string name;
string speciality;
gender_type gender;