Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 5 / 0
Регистрация: 16.10.2017
Сообщений: 170
1

Cоздание класса "день недели"

02.02.2018, 14:55. Показов 680. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
задача: реализовать перегруженные конструкторы и методы, инкапсуляцию(доступ к свойствам и методам класса)
Создать класс- день недели, свойство- значение(целое число), перегруженные конструкторы: 1.задание с помощью целого числа(1-7), 2. задание с помощью строки(понедельник-воскресенье). перегруженные методы: 1. прибавить день недели., 2.прибавить день недели(целое число). проверку диапазона вводимых значений реализовать с помощью get-set, а проверку ошибок с помощью - try-catch.
вот код:using System;

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
using System.Collections.Generic;
using System.Linq;
using System.Text;
class week
{ private int Day;
    public string day;
    public int dayint;
    public int Week
    {
        get { return dayint; }
        set { if (value < 1)
                dayint = 1;
            else if (value > 7) dayint = 7;
            else dayint = value;
        }
    }
 
    public week(int Dayint)
    {
        this.dayint = Dayint;
        
    }
    public week(string st_day)
    {
        this.day = st_day;
    }
    public void plus()
    {
        
        this.dayint = dayint + 1;
        Console.WriteLine("изменненный день недели: " + dayint);
        Console.ReadLine();
    }
    public void plus(int b)
    {
 
        
       this.day = day + b;
        Console.WriteLine("измененный день недели: " + this.day);
        Console.ReadLine();
    }
 
}
namespace ConsoleApp2
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                Console.WriteLine("введите день недели");
                week day = new week(Convert.ToInt32(Console.ReadLine()));
                Console.WriteLine("Введите 1:прибавить один день.\nВведите 2:прибавить произвольное количество дней.\n");
                int v;
                v = Convert.ToInt32(Console.ReadLine());
                int c = 1;
               
                switch (v)
                {
                    case 1:
                        {
                            day.plus();
                            
                        };
                        break;
                    case 2:
                        {
                            Console.WriteLine("введите на сколько дней Вы хотите изменить введенные данные");
 
                            day.plus(Convert.ToInt32(Console.ReadLine()));
                          
                        };
                        break;
                    
                }
 
               
 
            }
 
 
 
            catch
            {
                Console.WriteLine("ошибка ввода");
                Console.ReadLine();
            }
        }
    }
}
помогите, пожалуйста не работает второй метод, т.е. не изменяет введенный день недели. и подскажите, пожалуйста,как написать get-set, тоже не работает

Добавлено через 2 минуты
и ввод с помощью строки у меня тоже не работает, срабатывает try-catch и выводится ошибка, помогите исправить, пожалуйста
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.02.2018, 14:55
Ответы с готовыми решениями:

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

Найти все годы в течение столетия, когда день недели рождения совпадает с днем недели очередного дня рождения
Дана дата дня рождения в формате день:месяц:год. Найти все годы в течение столетия, когда день...

Cоздание объектов класса и их индексация (для чайника)
Вот есть такой примитивный класс к примеру. class person { private string Name; ...

Определить день недели
Задача с помощью оператора switch 1 марта 2006 года – это день недели среда. Вводится любая дата...

Какой сегодня день недели
напишите программу, в который пользователь вводит цифру от 1 до 31. то есть день месяца. учитывая...

12
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
02.02.2018, 15:32 2
Навскидку. могут быть ошибки
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
    public class DayOfWeek
    {
        static readonly Dictionary<string, int> s_daysDictionary = new Dictionary<string, int>
        {
            {"понедельник", 1},
            {"вторник", 2},
            {"среда", 3},
            {"четверг", 4},
            {"пятница", 5},
            {"суббота", 6},
            {"воскресенье", 7},
        };
 
        int _value;
 
        public int Value
        {
            get { return _value; }
            set
            {
                if (value < 1 || value > 7)
                    throw new InvalidOperationException("Значение должно быть в диапазоне от 1 до 7");
 
                _value = value;
            }
        }
 
        public DayOfWeek(int value)
        {
            Value = value;
        }
 
        public DayOfWeek(string dayName)
        {
            int value;
            if (s_daysDictionary.TryGetValue(dayName, out value))
            {
                Value = value;
            }
            else
            {
                throw new InvalidOperationException(string.Format("Строка '{0}' не является названием дня", dayName));
            }
        }
 
        public void AppendDay()
        {
            Value++;
        }
 
        public void AppendDays(int daysCount)
        {
            Value += daysCount;
        }
    }
0
1 / 5 / 0
Регистрация: 16.10.2017
Сообщений: 170
02.02.2018, 15:55  [ТС] 3
valera_21, а методы и конструктор?

Добавлено через 46 секунд
valera_21, все поняла, спасибо
0
62 / 63 / 28
Регистрация: 10.01.2018
Сообщений: 360
02.02.2018, 16:08 4
Цитата Сообщение от valera_21 Посмотреть сообщение
могут быть ошибки
Точно будут.
C#
1
DayOfWeek
Если не ошибаюсь неоднозначный идентификатор.
C#
1
2
3
4
public void AppendDays(int daysCount)
{
 Value += daysCount;
}
если день воскр. ++ сразу исключение ?
0
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
02.02.2018, 16:22 5
Цитата Сообщение от Sternman Посмотреть сообщение
Если не ошибаюсь неоднозначный идентификатор.
почему?

Цитата Сообщение от Sternman Посмотреть сообщение
если день воскр. ++ сразу исключение ?
по мне так вполне соответствует условиям ТС. а что должно быть?
0
62 / 63 / 28
Регистрация: 10.01.2018
Сообщений: 360
02.02.2018, 16:39 6
Цитата Сообщение от valera_21 Посмотреть сообщение
почему?
System.DayOfWeek
Цитата Сообщение от valera_21 Посмотреть сообщение
по мне так вполне соответствует условиям ТС
Не делать больше чем нужно по ТЗ? возможно вы правы.
Цитата Сообщение от valera_21 Посмотреть сообщение
а что должно быть?
Понедельник, логично же)
0
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
02.02.2018, 16:50 7
Цитата Сообщение от Sternman Посмотреть сообщение
Понедельник, логично же)
Цитата Сообщение от lukinyx99 Посмотреть сообщение
проверку диапазона вводимых значений реализовать с помощью get-set
не вяжутся вместе 2 предложения, имхо.

Цитата Сообщение от Sternman Посмотреть сообщение
System.DayOfWeek
то - enum
0
62 / 63 / 28
Регистрация: 10.01.2018
Сообщений: 360
02.02.2018, 16:55 8
Цитата Сообщение от valera_21 Посмотреть сообщение
проверку диапазона вводимых значений реализовать с помощью get-set не вяжутся вместе 2 предложения, имхо.
Не дать ввести "20" или "абракадабра" , но
Цитата Сообщение от lukinyx99 Посмотреть сообщение
Реализовать перегруженные методы: 1. прибавить день недели., 2.прибавить день недели(целое число)
Хотя
Цитата Сообщение от lukinyx99 Посмотреть сообщение
все поняла, спасибо
поэтому ,наверное, все в порядке. Хорошего дня.
0
valera_21
02.02.2018, 17:06
  #9

Не по теме:

Цитата Сообщение от Sternman Посмотреть сообщение
Хорошего дня.
и вам того же :)

0
97 / 98 / 58
Регистрация: 29.09.2016
Сообщений: 410
02.02.2018, 17:16 10
Свое перечисление создай и все.

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
public enum DaysOfWeek
    {
        Monday = 1,
        Tuesday,
        Wednesday,
        Thursday,
        Friday,
        Saturday,
        Sunday=7 
    }
 
class Week
    {
        private int numDay;
        private string nameDay;
        public int NumDay
        {
            get { return numDay; }
            set
            {
                if (value <= 1)
                {
                    numDay = 1;
                }
                else if (value >= 7)
                {
                    numDay = 7;
                }
                else
                {
                    numDay = value;                   
                }
            }
        }
 
        public string NameDay
        {
            get { return nameDay; }
            set
            {
                try
                {
                    if (Enum.IsDefined(typeof(DaysOfWeek), value))
                    {
                        DaysOfWeek day = (DaysOfWeek)Enum.Parse(typeof(DaysOfWeek), value);
                        NumDay = (int)day;
                        nameDay = value;
                    }
                    else
                    {
                        throw new Exception();
                    }
                }
                catch(Exception ob)
                {
                    Console.WriteLine("Нет такого дня");
                }
            }
        }
 
        public Week(int numDay)
        {
            this.NumDay = numDay;
            NameDay= Enum.GetName(typeof(DaysOfWeek), numDay).ToString();
 
        }
        public Week(string st_day)
        {
            NameDay = st_day;
        }
        public void plus()
        {
 
            NumDay++;
            plus(1);
            Console.WriteLine("изменненный день недели: " + NumDay);
        }
        public void plus(int b)
        {
            DaysOfWeek day = (DaysOfWeek)Enum.Parse(typeof(DaysOfWeek), NameDay);
            int num = (int)day;
            int a = num + b;
            if (a > 7) a = a % 7;
            NameDay = Enum.GetName(typeof(DaysOfWeek), a);
            Console.WriteLine("измененный день недели: " + NameDay);
 
        }
 
    }
0
151 / 148 / 103
Регистрация: 30.10.2016
Сообщений: 314
02.02.2018, 22:07 11
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
using System;
 
namespace MyWeek
{
    class WeekDay
    {
        int dayNumber;
        string dayString;
        int newDay;
        string[] daysArray = { "понедельник", "вторник", "среда", "четверг", "пятница", "суббота", "воскресенье" };
 
        // Свойство для целого числа
        public int Day
        {
            get { return dayNumber; }
            set
            {
                if (value > 0 && value < 8)
                {
                    dayNumber = value;
                }
                else
                {
                    Console.WriteLine("Вы не верно указали день недели.\n" +
                        "По умолчанию будет использован понедельник.");
                    dayNumber = 1;
                }
            }
        }
 
        // Конструктор, задание с помощью целого числа (1-7)
        public WeekDay(int dayOfWeek)
        {
            Day = dayOfWeek;
        }
 
        // Конструктор, задание с помощью строки (понедельник-воскресенье)
        public WeekDay(string dayOfWeek)
        {
            for (int i = 0; i < daysArray.Length; i++)
            {
                if (daysArray[i] == dayOfWeek)
                {
                    dayString = dayOfWeek;
                    Day = i + 1;
                    break;
                }
            }
 
            if (dayString != dayOfWeek)
                Console.WriteLine("Ошибка, введено не корректное название дня недели!");
        }
 
        // Метод, прибавить день недели (целое число)
        public void AddDay(int addDay)
        {
            newDay = dayNumber + addDay;
            if (newDay > 7)
                newDay = newDay % 7;
            Console.WriteLine($"\nНовый день: {daysArray[newDay - 1]} ({newDay}-й день недели).");
        }
 
        // Метод, прибавить день недели
        public void AddDay(string addDay)
        {
            for (int i = 0; i < daysArray.Length; i++)
            {
                if (daysArray[i] == addDay)
                    newDay = i + 1;
                if (daysArray[i] == dayString)
                {
                    newDay += i + 1;
                    if (newDay > 7)
                        newDay = newDay % 7;
                    Console.WriteLine($"\nНовый день: {daysArray[newDay - 1]} ({newDay}-й день недели).");
                    break;
                }
            }
        }
    }
 
    class Program
    {
        static void Main()
        {
            Console.Write("Введите исходный день недели: ");
            string dayStr = Console.ReadLine().ToLower();
            bool type = int.TryParse(dayStr, out int dayInt);
 
            WeekDay day;
            if (type == true)
                day = new WeekDay(dayInt);
            else
                day = new WeekDay(dayStr);
 
            Console.WriteLine("\nВведите 1: прибавить один день.\nВведите 2: прибавить произвольное количество дней.");
            Console.Write("Ваш выбор: ");
            int choice = int.Parse(Console.ReadLine());
 
            switch (choice)
            {
                case 1:
                    day.AddDay(1);
                    break;
                case 2:
                    try
                    {
                        Console.Write("Сколько дней прибавить к текущему дню недели: ");
                        day.AddDay(Convert.ToInt32(Console.ReadLine()));
                    }
                    catch
                    {
                        Console.WriteLine("\nОшибка, необходимо указать цифровое значение");
                        goto case 2;
                    }
                    break;
                default:
                    Console.WriteLine("Не верное значение!");
                    break;
            }
 
            Console.WriteLine("\nДо встречи!");
            Console.ReadKey();
        }
    }
}
0
gnomello
02.02.2018, 23:08
  #12

Не по теме:

смотрю я на ответы и понимаю, что большинству написать код проще, чем объяснить человеку в чём его ошибка и подсказать как сделать правильно. ИМХО конечно.

0
Diamante
03.02.2018, 01:00     Cоздание класса "день недели"
  #13

Не по теме:

gnomello, это технический склад ума с одной стороны, и понимание, что %target% не хочет ничего воспринимать, ибо пришёл он за готовым решением,с другой
ТСу не нужны его ошибки, не нужны отсылы к информации, ему нужен код и все!!!

0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
03.02.2018, 01:00

Вывести день недели по числу
Нужно срочно пожалуйста Вывести название дня недели в label1 по числу введенному в textbox1. То...

Узнать день недели по дате
пожалуйста помогите решать задачу. заранее спасибо Функция вычесляет день недели по дате. Даты...

Запуск программы в определенный день недели
Добрый день! Можно ли сделать запуск программы/службы в определенный день недели и время с помощью...

Как вычислить день недели по дате?
Функция вычесляет день недели по дате. Даты представлены структурой с тремя полями: год, месяц,...

Определить день недели по номеру дня года
Задача на C# console application задача звучит так: дни проминерованны таким образом пн, вт, ср,...

DateTime.ToString не выводит день недели на русском
string ENmonth = DateTime.Now.ToString(&quot;D&quot;, CultureInfo.GetCultureInfo(&quot;en-us&quot;)); ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru