36 0 177KB
1. Постановка задачи Часть 1. Реализовать (в отдельном файле) определение нового класса (закрытые атрибуты, свойства, конструкторы, инициализация и вывод атрибутов). 2. Для демонстрации работы с объектами написать главную функцию, в которой создаются объекты класса и выводится информация, которая содержится в атрибутах. 3. Написать функцию, реализующую указанное в варианте действие. Рассмотреть два варианта: 1) статическую функцию; 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= 0) && (podmenu 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 Console.WriteLine("6 Console.WriteLine("7 Console.WriteLine("8 Console.WriteLine("9
-
2) 2) 2) 2) 2)
часть часть часть часть часть
Добавление 1 минуты"); Убавление 1 минуты"); Явное приведение к типу Int"); Неявное приведение к типу Bool"); Бинарная операция сложения лево-
стороняя"); 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 = 0) && (podmenu = 0) && (podmenu1 = 0) && (podmenu1 = 0) && (podmenu1 = 0) && (podmenu1 = 0) && (podmenu = 0) && (menu 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 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(), также протестировать вывод данных через юнит тесты нельзя.