Вы находитесь на странице: 1из 11

1.

Постановка задачи
Часть 1.
1. Реализовать (в отдельном файле) определение нового класса (закрытые
атрибуты, свойства, конструкторы, инициализация и вывод атрибутов).
2. Для демонстрации работы с объектами написать главную функцию, в которой
создаются объекты класса и выводится информация, которая содержится в атрибутах.
3. Написать функцию, реализующую указанное в варианте действие.
Рассмотреть два варианта:
1) статическую функцию;
2) метод класса.
В основной функции продемонстрировать работу функции.
4. Используя статическую компоненту класса подсчитать количество созданных
в программе объектов.
Постановка для указанного варианта

Часть 2.
1. Добавить к реализованному классу указанные в варианте перегруженные
операции.
2. Написать демонстрационную программу, в которой создаются объекты
пользовательских классов и выполняются указанные операции.
Постановка для указанного варианта:

Часть 3
1. Реализовать класс (в отдельном файле), полем которого является одномерный
массив из элементов заданного в варианте типа. Например, для класса Fraction
нужно создать класс FractionArray следующим образом:
class FractionArray

Fraction[] arr;

int size;

. . . .

}
В классе реализовать
 конструктор без параметров,
 конструктор с параметрами, заполняющий элементы случайными значениями,
 конструктор с параметрами, позволяющий заполнить массив элементами,
заданными пользователем с клавиатуры,
 индексатор (для доступа к элементам массива),
 метод для просмотра элементов массива.
2. Написать демонстрационную программу, позволяющую создать массив разными
способами и распечатать элементы массива. Подсчитать количество созданных
объектов.
3. Выполнить указанное в варианте задание (если необходимо, перегрузить
нужные для выполнения задачи операции или функции).
Для указанного варианта:

2. Диаграмма классов

3. Код для реализации поставленной задачи


namespace _9_лаба
{
class Program
{
static void Main(string[] args)
{
int menu = 0;
Console.WriteLine("Выберите один из пунктов меню");
Console.WriteLine("1 - Работа с одним объектом Time");
Console.WriteLine("2 - Работа с массив объектов Time");
Console.WriteLine("0 - выход");
while (!(int.TryParse(Console.ReadLine(), out menu)&&(menu>=0)&&(menu<=2)))
{
Console.WriteLine("Введите корректный пункт меню");
Console.WriteLine("1 - Работа с одним объектом Time");
Console.WriteLine("2 - Работа с массивом объектов Time");
Console.WriteLine("0 - выход");
}
Console.Clear();
while (menu != 0)
{
Console.Clear();
switch (menu)
{
case 1: //один обьект
int podmenu = 0;
Time timeFirst = new Time ();
timeFirst.CorrectHours();
timeFirst.CorrectMinutes();
Console.WriteLine("Выберите один из пунктов меню");
Console.WriteLine("1 - 1) часть Главная функция");
Console.WriteLine("2 - 1) часть кол-во созданных объектов");
Console.WriteLine("3 - 1) часть Добавление минут к объекту через статическую
функцию");
Console.WriteLine("4 - 1) часть Добавление минут к объекту через метод
класса");
Console.WriteLine("5 - 2) часть Добавление 1 минуты");
Console.WriteLine("6 - 2) часть Убавление 1 минуты");
Console.WriteLine("7 - 2) часть Явное приведение к типу Int");
Console.WriteLine("8 - 2) часть Неявное приведение к типу Bool");
Console.WriteLine("9 - 2) часть Бинарная операция сложения лево-стороняя");
Console.WriteLine("10 - 2) часть Бинарная операция сложения право-
стороняя");
Console.WriteLine("11 - 2) часть Бинарная операция вычитания лево-
стороняя");
Console.WriteLine("12 - 2) часть Бинарная операция вычитания право-
стороняя");
Console.WriteLine("13 - вывод атрибутов объекта");
Console.WriteLine("0 - назад");
while (!(int.TryParse(Console.ReadLine(), out podmenu) && (podmenu >= 0) &&
(podmenu <= 13)))
{
Console.WriteLine("Введите корректный пункт меню");
Console.WriteLine("1 - 1) часть Главная функция");
Console.WriteLine("2 - 1) часть кол-во созданных объектов");
Console.WriteLine("3 - 1) часть Добавление минут к объекту через
статическую функцию");
Console.WriteLine("4 - 1) часть Добавление минут к объекту через метод
класса");
Console.WriteLine("5 - 2) часть Добавление 1 минуты");
Console.WriteLine("6 - 2) часть Убавление 1 минуты");
Console.WriteLine("7 - 2) часть Явное приведение к типу Int");
Console.WriteLine("8 - 2) часть Неявное приведение к типу Bool");
Console.WriteLine("9 - 2) часть Бинарная операция сложения лево-
стороняя");
Console.WriteLine("10 - 2) часть Бинарная операция сложения право-
стороняя");
Console.WriteLine("11 - 2) часть Бинарная операция вычитания лево-
стороняя");
Console.WriteLine("12 - 2) часть Бинарная операция вычитания право-
стороняя");
Console.WriteLine("13 - вывод атрибутов объекта");
Console.WriteLine("0 - назад");
}
Console.Clear();
while (podmenu!=0)
{
Console.Clear();
switch (podmenu)
{
case 1:
MainFunction();
break;
case 2:
Console.WriteLine($"Кол-во созданных объектов:
{Time.countOfObjects}");
break;
case 3:
timeFirst = GoUpMinutes(timeFirst);
break;
case 4:
Console.WriteLine("Введите кол-во минут, которые хотите
добавить");
int min;
while(!(int.TryParse(Console.ReadLine(), out min) && (min>0)))
{
Console.WriteLine("Введите корректное кол-во минут");
}
timeFirst = timeFirst.IncreaseMinutes(timeFirst, min);
break;
case 5:
timeFirst++;
break;
case 6:
timeFirst--;
break;
case 7:
Console.WriteLine($"Явное приведение к типу Int:
{(int)timeFirst}");
break;
case 8:
bool t = timeFirst;
Console.WriteLine($"Неявное приведение к типу Bool: {t}");
break;
case 9:
Console.WriteLine("Введите кол-во минут, которое хотите
добавить");
int amountOfMin;
while(!(int.TryParse(Console.ReadLine(), out
amountOfMin)&&(amountOfMin>0)))
{
Console.WriteLine("Введите корректное кол-во минут");
}
timeFirst += amountOfMin;
break;
case 10:
Console.WriteLine("Введите кол-во минут, которое хотите
добавить");
while (!(int.TryParse(Console.ReadLine(), out amountOfMin) &&
(amountOfMin > 0)))
{
Console.WriteLine("Введите корректное кол-во минут");
}
timeFirst = amountOfMin + timeFirst;
break;
case 11:
Console.WriteLine("Введите кол-во минут, которое хотите
вычесть");
while (!(int.TryParse(Console.ReadLine(), out amountOfMin) &&
(amountOfMin > 0)))
{
Console.WriteLine("Введите корректное кол-во минут");
}
timeFirst -= amountOfMin;
break;
case 12:
Console.WriteLine("Введите кол-во минут, из которого хотите
вычесть");
while (!(int.TryParse(Console.ReadLine(), out amountOfMin) &&
(amountOfMin > 0)))
{
Console.WriteLine("Введите корректное кол-во минут");
}
timeFirst = amountOfMin - timeFirst;
break;
case 13:
timeFirst.Show();
break;
default:
break;
}
Console.WriteLine("Выберите один из пунктов меню");
Console.WriteLine("1 - 1) часть Главная функция");
Console.WriteLine("2 - 1) часть кол-во созданных объектов");
Console.WriteLine("3 - 1) часть Добавление минут к объекту через
статическую функцию");
Console.WriteLine("4 - 1) часть Добавление минут к объекту через метод
класса");
Console.WriteLine("5 - 2) часть Добавление 1 минуты");
Console.WriteLine("6 - 2) часть Убавление 1 минуты");
Console.WriteLine("7 - 2) часть Явное приведение к типу Int");
Console.WriteLine("8 - 2) часть Неявное приведение к типу Bool");
Console.WriteLine("9 - 2) часть Бинарная операция сложения лево-
стороняя");
Console.WriteLine("10 - 2) часть Бинарная операция сложения право-
стороняя");
Console.WriteLine("11 - 2) часть Бинарная операция вычитания лево-
стороняя");
Console.WriteLine("12 - 2) часть Бинарная операция вычитания право-
стороняя");
Console.WriteLine("13 - вывод атрибутов объекта");
Console.WriteLine("0 - назад");
while (!(int.TryParse(Console.ReadLine(), out podmenu) && (podmenu >= 0)
&& (podmenu <= 13)))
{
Console.WriteLine("Введите корректный пункт меню");
Console.WriteLine("1 - 1) часть Главная функция");
Console.WriteLine("2 - 1) часть кол-во созданных объектов");
Console.WriteLine("3 - 1) часть Добавление минут к объекту через
статическую функцию");
Console.WriteLine("4 - 1) часть Добавление минут к объекту через
метод класса");
Console.WriteLine("5 - 2) часть Добавление 1 минуты");
Console.WriteLine("6 - 2) часть Убавление 1 минуты");
Console.WriteLine("7 - 2) часть Явное приведение к типу Int");
Console.WriteLine("8 - 2) часть Неявное приведение к типу Bool");
Console.WriteLine("9 - 2) часть Бинарная операция сложения лево-
стороняя");
Console.WriteLine("10 - 2) часть Бинарная операция сложения право-
стороняя");
Console.WriteLine("11 - 2) часть Бинарная операция вычитания лево-
стороняя");
Console.WriteLine("12 - 2) часть Бинарная операция вычитания право-
стороняя");
Console.WriteLine("13 - вывод атрибутов объекта");
Console.WriteLine("0 - назад");
}
Console.Clear();
}
break;
case 2: // массив обьектов
podmenu = 0;
Console.WriteLine("Выберите один из пунктов меню");
Console.WriteLine("1 - Создать массив объектов с помощью ДСЧ");
Console.WriteLine("2 - Создать массив объектов, заполняя его вручную");
Console.WriteLine("0 - назад");
while (!(int.TryParse(Console.ReadLine(), out podmenu) && (podmenu >= 0) &&
(podmenu <= 2)))
{
Console.WriteLine("Введите корректный пункт меню");
Console.WriteLine("1 - Создать массив объектов с помощью ДСЧ");
Console.WriteLine("2 - Создать массив объектов, заполняя его вручную");
Console.WriteLine("0 - назад");
}
Console.Clear();
while (podmenu!=0) // trim.Hours = f
{
Console.Clear();
switch (podmenu)
{
case 1: // ДСЧ массив
Random random = new Random(456);
TimeArray arr = new TimeArray(CorrectSizeOfArray(), random);
int podmenu1;
Console.WriteLine("Выберите один из пунктов меню");
Console.WriteLine("1 - Вывести массив");
Console.WriteLine("2 - Вывести среднее арифметическое");
Console.WriteLine("3 - Вывести кол-во объектов в массиве");
Console.WriteLine("0 - назад");
while (!(int.TryParse(Console.ReadLine(), out podmenu1) &&
(podmenu1 >= 0) && (podmenu1 <= 3)))
{
Console.WriteLine("Введите корректный пункт меню");
Console.WriteLine("1 - Вывести массив");
Console.WriteLine("2 - Вывести среднее арифметическое");
Console.WriteLine("3 - Вывести кол-во объектов в массиве");
Console.WriteLine("0 - назад");
}
Console.Clear();
while (podmenu1!=0)
{
Console.Clear();
switch (podmenu1)
{
case 1: // Вывод массива
arr.Show();
break;
case 2: // Вывод ср арифм
arr.ShowMiddleMathematic();
break;
case 3: // Вывод кол-ва созданных объектов в массиве
arr.ShowAmountOfArr();
break;
default:
break;
}
Console.WriteLine("Выберите один из пунктов меню");
Console.WriteLine("1 - Вывести массив");
Console.WriteLine("2 - Вывести среднее арифметическое");
Console.WriteLine("3 - Вывести кол-во объектов в массиве");
Console.WriteLine("0 - назад");
while (!(int.TryParse(Console.ReadLine(), out podmenu1) &&
(podmenu1 >= 0) && (podmenu1 <= 3)))
{
Console.WriteLine("Введите корректный пункт меню");
Console.WriteLine("1 - Вывести массив");
Console.WriteLine("2 - Вывести среднее арифметическое");
Console.WriteLine("3 - Вывести кол-во объектов в
массиве");
Console.WriteLine("0 - назад");
}
Console.Clear();
}
break;
case 2:// Ручной массив
arr = new TimeArray(CorrectSizeOfArray());
Console.WriteLine("Выберите один из пунктов меню");
Console.WriteLine("1 - Вывести массив");
Console.WriteLine("2 - Вывести среднее арифметическое");
Console.WriteLine("3 - Вывести кол-во объектов в массиве");
Console.WriteLine("0 - назад");
while (!(int.TryParse(Console.ReadLine(), out podmenu1) &&
(podmenu1 >= 0) && (podmenu1 <= 3)))
{
Console.WriteLine("Введите корректный пункт меню");
Console.WriteLine("1 - Вывести массив");
Console.WriteLine("2 - Вывести среднее арифметическое");
Console.WriteLine("3 - Вывести кол-во объектов в массиве");
Console.WriteLine("0 - назад");
}
Console.Clear();
while (podmenu1 != 0)
{
Console.Clear();
switch (podmenu1)
{
case 1: // Вывод массива
arr.Show();
break;
case 2: // Вывод ср арифм
arr.ShowMiddleMathematic();
break;
case 3: // Вывод кол-ва созданных объектов в массиве
arr.ShowAmountOfArr();
break;
default:
break;
}
Console.WriteLine("Выберите один из пунктов меню");
Console.WriteLine("1 - Вывести массив");
Console.WriteLine("2 - Вывести среднее арифметическое");
Console.WriteLine("3 - Вывести кол-во объектов в массиве");
Console.WriteLine("0 - назад");
while (!(int.TryParse(Console.ReadLine(), out podmenu1) &&
(podmenu1 >= 0) && (podmenu1 <= 3)))
{
Console.WriteLine("Введите корректный пункт меню");
Console.WriteLine("1 - Вывести массив");
Console.WriteLine("2 - Вывести среднее арифметическое");
Console.WriteLine("3 - Вывести кол-во объектов в
массиве");
Console.WriteLine("0 - назад");
}
Console.Clear();
}
break;
default:
break;
}
Console.WriteLine("Выберите один из пунктов меню");
Console.WriteLine("1 - Создать массив объектов с помощью ДСЧ");
Console.WriteLine("2 - Создать массив объектов, заполняя его вручную");
Console.WriteLine("0 - назад");
while (!(int.TryParse(Console.ReadLine(), out podmenu) && (podmenu >= 0)
&& (podmenu <= 2)))
{
Console.WriteLine("Введите корректный пункт меню");
Console.WriteLine("1 - Создать массив объектов с помощью ДСЧ");
Console.WriteLine("2 - Создать массив объектов, заполняя его
вручную");
Console.WriteLine("0 - назад");
}
Console.Clear();
}
break;
default:
break;
}
Console.WriteLine("Выберите один из пунктов меню");
Console.WriteLine("1 - Работа с одним объектом Time");
Console.WriteLine("2 - Работа с массив объектов Time");
Console.WriteLine("0 - выход");
while (!(int.TryParse(Console.ReadLine(), out menu) && (menu >= 0) && (menu <= 2)))
{
Console.WriteLine("Введите корректный пункт меню");
Console.WriteLine("1 - Работа с одним объектом Time");
Console.WriteLine("2 - Работа с массив объектов Time");
Console.WriteLine("0 - выход");
}
Console.Clear();
}
}

public static Time GoUpMinutes(Time time)


{
int minutes = 0;
Console.WriteLine("Введите кол-во минут");
while(!(int.TryParse(Console.ReadLine(), out minutes)))
{
Console.WriteLine("Введите корректное значение минут");
}
time.Minutes += minutes;
return time;

}
public static void MainFunction()
{
int minutes = 0;
int hours = 0;
int amountOfObjects = 0;
Console.WriteLine("Введите кол-во объектов, которые хотите создать");
while (!(int.TryParse(Console.ReadLine(), out amountOfObjects) && (amountOfObjects> 0)))
{
Console.WriteLine("Введите корректное кол-во объектов");
}
Time[] arr = new Time[amountOfObjects];
for (int i = 0; i < arr.Length; i++)
{
arr[i] = new Time();
arr[i].CorrectHours();
arr[i].CorrectMinutes();
}
for(int i =0;i<arr.Length;i++)
{
Console.WriteLine($" {i+1} элемент Hours: {arr[i].Hours} Minutes:
{arr[i].Minutes}");
}

}
public static int CorrectSizeOfArray()
{
Console.WriteLine("Введите размер массива");
int size;
while (!(int.TryParse(Console.ReadLine(), out size) && (size > 0)))
{
Console.WriteLine("Введите корректный размер массива");
}
return size;
}
}

4. Тесты для функции


namespace _9_лаба
{
[TestClass]
public class TimeTest
{
[TestMethod]
public void IncreaseMinutes_15plus10_25returned()
{
// arrange
int minutes = 10;
int expected = 25;
// act
Time t = new Time { Hours = 0, Minutes = 15 };
int actual = t.IncreaseMinutes(t, 10).Minutes;
// assert
Assert.AreEqual(expected, actual);
}
[TestMethod]
public void OperatorPlusPlus_59plus01_00returned()
{
// arrange
int expected = 0;
// act
Time t = new Time { Hours=5, Minutes = 59 };
t++;
// assert
Assert.AreEqual(t.Minutes, expected);
}
[TestMethod]
public void OperatorMinusMInus_00minus01_59returned()
{
// arrange
int expected = 59;
// act
Time t = new Time { Hours = 5, Minutes = 0 };
t--;
// assert
Assert.AreEqual(t.Minutes, expected);
}
[TestMethod]
public void ShowTime_1()
{
Time t = new Time(36, 34);
System.Diagnostics.Debug.WriteLine("Test Show_1");
t.Show();
}
[TestMethod]
public void ShowTime_2()
{
Time t = new Time(36, 5);
System.Diagnostics.Debug.WriteLine("Test Show_2");
t.Show();
}
[TestMethod]
public void ShowTime_3()
{
Time t = new Time(6, 34);
System.Diagnostics.Debug.WriteLine("Test Show_3");
t.Show();
}
[TestMethod]
public void ShowTime_4()
{
Time t = new Time(6, 4);
System.Diagnostics.Debug.WriteLine("Test Show_4");
t.Show();
}
[TestMethod]
public void OperatorPlus_10plus34_44returned_v1()
{
// arrange
int minutes = 34;
int expected = 44;
// act
Time t = new Time(0, 10);
t += minutes;
// assert
Assert.AreEqual(t.Minutes, expected);
}
[TestMethod]
public void OperatorPlus_10plus34_44returned_v2()
{
// arrange
int minutes = 34;
int expected = 44;
// act
Time t = new Time(0, 10);
t = minutes + t;
// assert
Assert.AreEqual(t.Minutes, expected);
}
[TestMethod]
public void OperatorMinus_44minus14_30returned_v1()
{
// arrange
int minutes = 14;
int expected = 30;
// act
Time t = new Time(0, 44);
t -= minutes;
// assert
Assert.AreEqual(t.Minutes, expected);
}
[TestMethod]
public void OperatorMinus_44minus14_30returned_v2()
{
// arrange
int minutes = 44;
int expected = 30;
// act
Time t = new Time(0, 14);
t = minutes - t;
// assert
Assert.AreEqual(t.Minutes, expected);
}
[TestMethod]
public void OperatorBool()
{
// arrange
bool b;
// act
Time t = new Time(4, 23);
b = t;
// assert
Assert.IsFalse(b);
}
[TestMethod]
public void OperatorInt()
{
// arrange
int hour = 4;
// act
Time t = new Time(4, 35);
// assert
Assert.AreEqual((int)t, hour);
}
}
}

Тестирование покрыло лишь 25% кода, в связи с тем, что большая часть кода это
меню из Main(), также протестировать вывод данных через юнит тесты нельзя.